gpt4 book ai didi

java - 耶拿 ARQ 中子选择的绑定(bind)值存在问题

转载 作者:行者123 更新时间:2023-11-30 05:32:10 26 4
gpt4 key购买 nike

我想运行以下简单的测试查询:

PREFIX  rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#>

SELECT ?givenName ?name_count ?temp
WHERE
{ BIND(if(( ?name_count = 2 ), "just two", "definitely not 2") AS ?temp)
{ SELECT DISTINCT ?givenName (COUNT(?givenName) AS ?name_count)
WHERE
{ ?y vcard:Family ?givenName }
GROUP BY ?givenName
}
}

我正在查询的图表来自教程 https://jena.apache.org/tutorials/sparql_data.html :

@prefix vCard:   <http://www.w3.org/2001/vcard-rdf/3.0#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

<http://somewhere/MattJones/> vCard:FN "Matt Jones" .
<http://somewhere/MattJones/> vCard:N _:b0 .
_:b0 vCard:Family "Jones" .
_:b0 vCard:Given "Matthew" .


<http://somewhere/RebeccaSmith/> vCard:FN "Becky Smith" .
<http://somewhere/RebeccaSmith/> vCard:N _:b1 .
_:b1 vCard:Family "Smith" .
_:b1 vCard:Given "Rebecca" .

<http://somewhere/JohnSmith/> vCard:FN "John Smith" .
<http://somewhere/JohnSmith/> vCard:N _:b2 .
_:b2 vCard:Family "Smith" .
_:b2 vCard:Given "John" .

<http://somewhere/SarahJones/> vCard:FN "Sarah Jones" .
<http://somewhere/SarahJones/> vCard:N _:b3 .
_:b3 vCard:Family "Jones" .
_:b3 vCard:Given "Sarah" .

现在的问题是用 Jena 运行它:

Query query = QueryFactory.create(theAboveQueryAsString);
QueryExecution qexec = QueryExecutionFactory.create(query, theAboveGraphmodel);
ResultSet execSel = qexec.execSelect();
ResultSetRewindable results = ResultSetFactory.copyResults(execSel);;
ResultSetFormatter.out(System.out, results, query);

在控制台中给出这个结果:

----------------------------------
| givenName | name_count | temp |
==================================
| "Smith" | 2 | |
| "Jones" | 2 | |
----------------------------------

将临时值设置为 null。

另一方面,在 Ontotext GraphDb 环境中的同一个图表上运行相同的查询,我得到了正确的结果(保存为 CSV):

givenName  |  name_count  |  temp
------------------------------------
Jones | 2 | just two
Smith | 2 | just two

ARQ 引擎中是否存在错误,或者我是否遗漏了某些内容?提前致谢。

我正在使用 jena-arq 3.12.0Java(TM) SE 运行时环境(版本 1.8.0_181-b13)Eclipse版本版本:2019-06(4.12.0)

最佳答案

BIND 和子选择之间有一个连接。连接步骤的参数是在连接完成之前计算的。因此,对 BIND 进行求值,对子选择进行单独求值,然后将结果连接起来。 BIND 分配中未设置 ?name_count。如果将其移到子选择之后,它将应用于子选择的结果。

BIND 将绑定(bind)添加到之前模式的结果。

(base <http://example/base/>
(prefix ((rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>)
(vcard: <http://www.w3.org/2001/vcard-rdf/3.0#>))
(project (?givenName ?name_count ?temp)
(join
(extend ((?temp (if (= ?name_count 2) "just two" "definitely not 2")))
(table unit))
(distinct
(project (?givenName ?name_count)
(extend ((?name_count ?.0))
(group (?givenName) ((?.0 (count ?givenName)))
(bgp (triple ?y vcard:Family ?givenName))))))))))

这里,(extend...)(join...) 的两个参数之一。 (表单元) 是 BIND 之前的“无”。

如果放在后面,代数为:

(base <http://example/base/>
(prefix ((rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>)
(vcard: <http://www.w3.org/2001/vcard-rdf/3.0#>))
(project (?givenName ?name_count ?temp)
(extend ((?temp (if (= ?name_count 2) "just two" "definitely not 2")))
(distinct
(project (?givenName ?name_count)
(extend ((?name_count ?.0))
(group (?givenName) ((?.0 (count ?givenName)))
(bgp (triple ?y vcard:Family ?givenName))))))))))

并且extend(来自语法BIND)正在处理子查询的(distinct ...

关于java - 耶拿 ARQ 中子选择的绑定(bind)值存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57304715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com