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

时间:2013-12-30 13:50:32

标签: rdf sparql

是否可以从下图中CONSTRUCT包含节点A,B,C,E,F(但没有D,G,H)的RDF子图(在符号主题 - 谓词 - 对象中)总共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个语句组成的两个路径)和一个返回{A-s-E E-t-F}的路径(即一个路径由2个语句组成)。但它可以将两者都折叠成单个SPARQL CONSTRUCT查询,如果是这样,那么它看起来会怎样?

1 个答案:

答案 0 :(得分: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引起的子图,您可以简单地询问所有三元组,其中主题和对象都是从该集合中获取的。 E.g:

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>