我一直在测试Sesame 2.7.2 ,当面对DESCRIBE查询不包括空白节点关闭这一事实时,我感到非常惊讶
如果我正确理解,SPARQL 规范对此非常宽松,并说返回的内容实际上取决于提供者,但我仍然对选择感到惊讶,因为不能使用 bnodes(在 describe 查询的结果中)在随后的 SPARQL 查询中。
所以问题是:我怎样才能在<uri1>
不这样做的情况下获得对资源的封闭描述:
- 询问
DESCRIBE <uri1>
- 遍历结果以确定哪些对象是空白节点
- 然后
DESCRIBE ?b WHERE { <uri1> pred_relating_to_bnode_ ?b }
- 只要找到 bnode,就递归执行并链接
如果我没记错的话,深度 2 bnodes 必须用
DESCRIBE ?b2 WHERE {<uri1> <p1&> ?b . ?b <p2> ?b2 }
除非有更简单的方法可以做到这一点?
最后,让DESCRIBE
返回一个资源的封闭描述不是更好更简单,您仍然可以获得当前返回的结果,如下所示?
CONSTRUCT {<uri1> ?p ?o} WHERE {<uri1> ?p ?o}
编辑:这是一个我想从芝麻回来的封闭结果的例子
<urn:sites#1> a my:WebSite .
<urn:sites#1> my:domainName _:autos1 .
<urn:sites#1> my:online "true"^^xsd:boolean .
_:autos1 a rdf:Alt .
_:autos1 rdf:_1 _:autos2
_:autos2 my:url "192.168.2.111:15001"@fr
_:autos2 my:url "192.168.2.111:15002"@en
目前:DESCRIBE <urn:sites#1>
返回与查询相同的结果CONSTRUCT WHERE {<urn:sites#1> ?p ?o}
,所以我只得到那个
<urn:sites#1> a my:WebSite .
<urn:sites#1> my:domainName _:autos1 .
<urn:sites#1> my:online "true"^^xsd:boolean .