【发布时间】:2014-02-03 14:56:42
【问题描述】:
(尤其是@JeenBroekstra)
使用以下图表,我得到了目前在 Sesame 存储库上运行的 SPARQL 查询:
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT *
FROM <http://spinrdf.org/sp>
FROM <http://spinrdf.org/spl>
FROM <http://spinrdf.org/spin>
FROM <http://topbraid.org/examples/kennedysSPIN>
FROM <http://topbraid.org/examples/kennedys>
FROM NAMED <http://topbraid.org/examples/kennedys>
WHERE {
GRAPH <http://topbraid.org/examples/kennedys> {
?s ?p ?o .
} .
OPTIONAL {
FILTER (sameTerm(rdf:type, ?p)) .
?o rdfs:subClassOf+ ?supC .
} .
OPTIONAL {
FILTER (sameTerm(rdf:type, ?p) && NOT EXISTS { ?s a ?newSupC . }) .
?o rdfs:subClassOf+ ?newSupC .
} .
FILTER (bound(?newSupC)) .
}
由于最后两个可选模式共享一些过滤器,我想我可以合并它们,我得到了这个查询:
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT *
FROM <http://spinrdf.org/sp>
FROM <http://spinrdf.org/spl>
FROM <http://spinrdf.org/spin>
FROM <http://topbraid.org/examples/kennedysSPIN>
FROM <http://topbraid.org/examples/kennedys>
FROM NAMED <http://topbraid.org/examples/kennedys>
WHERE {
GRAPH <http://topbraid.org/examples/kennedys> {
?s ?p ?o .
} .
OPTIONAL {
FILTER (sameTerm(rdf:type, ?p)) .
?o rdfs:subClassOf+ ?supC .
OPTIONAL {
FILTER ( NOT EXISTS { ?s a ?supC . } ) .
BIND (?supC as ?newSupC)
} .
} .
FILTER (bound(?newSupC)) .
}
但是在执行它时,我得到一个空的结果集。
在提交错误请求之前想在这里问一下:您能告诉我查询错误的地方还是芝麻中的错误?
提前致谢, 最大。
编辑:我当然放了 FILTER (bound(?newSupC)) 只是为了暴露失败的模式。在全球范围内,即使变量 ?newSupC 未绑定,我仍然需要所有结果。
编辑:以下是有关我使用的配置的更多详细信息: 除了命名图http://topbraid.org/examples/kennedys,我用RDFS 蕴涵更新了这些图。 Sesame 存储库是一个简单的 Native 存储,没有推理支持。
【问题讨论】:
-
我还没有确定这是一个错误还是预期的(虽然乍一看它看起来像一个错误),但是在你记录错误报告之前,如果你仍然看到这个问题,你可以试试使用最新的 Sesame 版本 (2.7.10)?自 2.7.2 以来,在 SPARQL 引擎中修复了许多错误,其中至少有一些与处理 OPTIONAL 相关。
-
这是一个完全不同的查询 - OPTIONAL 中的 OPTIONAL 不像 OPTIONAL 之后的 OPTIONAL。 BIND (?supC as ?newSupC) 发生在内部 OPTIONAL 内部,其中 ?subC 未绑定(范围),因此 ?newSupC 永远不会绑定,并且 FILTER (bound(?newSupC)) 始终为假。
-
@AndyS 再看一眼我认为你是对的。也许您应该将您的评论作为答案发布。
-
Jeen:将 Sesame 更新到 2.7.10,结果是一样的 Andy:经过一些测试,我终于明白你的意思并误用了 BIND 模式。
-
@AndyS 只是为了澄清一些让我很困惑的点: ?subC 变量实际上(并且正如预期的那样)非常绑定在内部 OPTIONAL