(尤其是@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(绑定(?newSupC))只是为了暴露失败的模式。在全局视图中,我仍然需要所有结果,即使变量?newSupC 未绑定。
**编辑:**以下是我使用的配置的更多细节:除了命名图http://topbraid.org/examples/kennedys,我用 RDFS 蕴涵更新了图表。 Sesame 存储库是一个简单的 Native 存储,没有推理支持。
1 回答
经过深思熟虑后,我试图合并两个可选模式,其中解决方案更加直接:
无论如何,谢谢你的时间和建议,伙计们。最大。