首页 文章

SPARQL查询用于构造具有选择路径的子图(路径具有不同的长度)

提问于
浏览
3

是否有可能 CONSTRUCT 包含来自下图的节点A,B,C,E,F(但没有D,G,H)的RDF子图(在符号subject-predicate-object中总共7个语句)使用单个SPARQL查询:

A-p-B
A-q-C
A-r-D
A-s-E E-t-F
A-u-G G-v-H

我知道如何制定一个返回{A-p-B,A-q-C}的SPARQL查询(即每个由1个语句组成的两个路径)和一个返回的路径(即一个包含2个语句的路径) . 但它可以将两者都折叠成单个SPARQL CONSTRUCT 查询,如果是这样,那么它看起来如何?

1 回答

  • 5

    如果您在合法的RDF序列化中提供数据,则使用数据会更容易,这样我们就可以轻松地对其进行查询 . 以下是我们可以实际查询的表单中的数据:

    @prefix : <http://stackoverflow.com/q/20840883/1281433/> .
    
    :A :p :B .
    :A :q :C .
    :A :r :D .
    :A :s :E . :E :t :F .
    :A :u :G . :G :v :H .
    

    如果您只想要节点A,B,C,E和F引起的子图,您可以简单地询问所有三元组,其中主题和对象都是从该集合中获取的 . 例如 . :

    prefix : <http://stackoverflow.com/q/20840883/1281433/>
    
    construct {
      ?s ?p ?o
    } 
    where { 
        values ?s { :A :B :C :E :F }
        values ?o { :A :B :C :E :F }
        ?s ?p ?o 
    }
    

    这会产生以下结果(在您的符号中,在N3中和在RDF / XML中):

    A-p-B
    A-q-C
    A-s-E E-t-F
    
    @prefix :      <http://stackoverflow.com/q/20840883/1281433/> .
    
    :E      :t      :F .
    
    :A      :p      :B ;
            :q      :C ;
            :s      :E .
    
    <rdf:RDF
        xmlns="http://stackoverflow.com/q/20840883/1281433/"
        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about="http://stackoverflow.com/q/20840883/1281433/A">
        <s>
          <rdf:Description rdf:about="http://stackoverflow.com/q/20840883/1281433/E">
            <t rdf:resource="http://stackoverflow.com/q/20840883/1281433/F"/>
          </rdf:Description>
        </s>
        <q rdf:resource="http://stackoverflow.com/q/20840883/1281433/C"/>
        <p rdf:resource="http://stackoverflow.com/q/20840883/1281433/B"/>
      </rdf:Description>
    </rdf:RDF>
    

相关问题