【发布时间】:2014-06-29 17:05:44
【问题描述】:
我最近在许多 SPARQL 查询中使用了 VALUES,结果发现在其中一个查询中我没有得到预期的结果。
这是一个简单的案例:
@prefix ns: <http://some/ns> .
<http://some/uri> a ns:Document ;
ns:A5000 "00003381" ;
ns:A5080 "sredniowiecze" .
我正在使用 VALUES 将 nsA5080 文字“翻译”为 URI。简单查询:
PREFIX ns: <http://some/ns>
SELECT ?document ?u ?p ?lp
WHERE
{
?document ns:A5080 ?p .
VALUES (?p ?u) {
( "sredniowiecze" ns:MiddleAges )
( "other" ns:Other )
}
}
按预期工作:
Document U P LP
<http://some/uri> <http://some/nsMiddleAges> "sredniowiecze"
但如果我将其更改为:
SELECT ?document ?u ?p ?lp
WHERE
{
?document ns:A5080 ?p .
BIND ( LCASE(?p) AS ?lp )
VALUES (?lp ?u) {
( "sredniowiecze" ns:MiddleAges )
( "other" ns:Other )
}
}
我得到:
Document U P Lp
<http://some/uri> <http://some/nsMiddleAges> "sredniowiecze" "sredniowiecze"
<http://some/uri> <http://some/nsOther> "sredniowiecze" "sredniowiecze"
这对我没有任何意义。额外的元组从何而来?在真正的查询中,我有 ca。 VALUES 中有 30 多个元组,它们都落在结果中。 还有什么更有趣的查询,看起来几乎像那个查询 - 在其他任何地方都可以正常工作。
想法?
【问题讨论】:
-
我仍然有兴趣解决这个难题,但同时我想报告在我的原始查询中添加和删除 BIND 和变量周围的一些空格 - 修复了它。但是在上面的查询中执行非常相同的格式 - 不起作用。 :(
-
如果这是一个错误,它可能是特定于某些特定实现的。您使用的是什么 SPARQL 引擎?耶拿?大师?别的东西?为什么这个标签是switch-statement?据我所知,它与 switch 没有任何关系。
-
第二个查询不是你正在运行的。您显示的输出有一个 Document 变量,但您的第二个查询有 DocumentA。我不确定这是否会有所不同,但这使得重现这一点变得更加困难……
-
我无法重现这个。请参阅pastebin.com/JK3AG3DN 了解我的尝试。 (我将第二个查询“固定”为 ?document 而不是 ?documentA,我认为它应该是。)
-
我对 Sesame 和 Python 的 rdflib 有这个问题。两者产生相同的结果。我将它标记为 switch 语句,因为实际上我使用 VALUES 作为 switch/case。正如我上面所说 - 在我的原始查询中,我添加并删除了一些空格,它开始按预期工作。在这个例子中做同样的事情没有帮助。我也修复了问题中的第二个查询。感谢您指出这一点。
标签: switch-statement rdf sparql sesame rdflib