我一直在测试Sesame 2.7.2,当面对DESCRIBE查询不包含空白节点闭包的事实时,我感到非常惊讶[编辑:正确的术语是CBD for concise bounded description ]
如果我正确理解的话,SPARQL规范对此相当宽松,并说返回的内容实际上取决于提供者,但是我仍然对该选择感到惊讶,因为无法使用bnodes(在describe查询的结果中)在随后的SPARQL查询中。
所以问题是:如何不执行以下操作就可以获取资源<uri1>
的封闭描述:
DESCRIBE <uri1>
DESCRIBE ?b WHERE { <uri1> pred_relating_to_bnode_ ?b }
如果我没记错的话,深度2节点必须用
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 .
最佳答案
使用SPARQL的部分解决方案
根据您的评论,这还不是确切的解决方案,但是请注意,您可以在给定的describe
查询中描述多个内容。例如,给定数据:
@prefix : <http://example.org/> .
:Alice :named "Alice" ;
:likes :Bill, [ :named "Carl" ;
:likes [ :named "Daphne" ]].
:Bill :likes :Elaine ;
:named "Bill" .
您可以运行查询:
PREFIX : <http://example.org/>
describe :Alice ?object where {
:Alice :likes* ?object .
FILTER( isBlank( ?object ) )
}
并得到结果:
@prefix : <http://example.org/> .
:Alice
:likes :Bill ;
:likes [ :likes [ :named "Daphne"
] ;
:named "Carl"
] ;
:named "Alice" .
当然,这并不是一个完整的描述,因为它只是从
:likes
后面跟随了:Alice
,而不是任意谓词。但是它确实获得了名为"Carl"
和"Daphne"
的空白节点,这是一个开始。芝麻的大问题
看来您将不得不执行上述操作,并且可能需要进行多次搜索,或者您必须修改芝麻。编写一些有创意的SPARQL的替代方法是更改Sesame实现描述查询的方式。一些端点使此操作相对容易,但Sesame似乎不是其中之一。 2011年有一个邮件列表线程Custom SPARQL DESCRIBE Implementation,似乎也解决了这个问题。
罗伯托·加西亚(RobertoGarcía)问:
Jeen Broekstra回复:
关于sparql - 如何使用芝麻获得对资源的简明有界说明?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17363199/