我一直在测试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 }
  • 递归执行并链接,直到找到bnodes为止

  • 如果我没记错的话,深度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/

    10-11 20:27