2014-05-02 26 views
0

我所有的圖形三同的印刷主題,我看到在我的數據科目的形式爲GraphURI/#SubjectID.總是URI的我能得到這些屬性和值一個主題中包含的查詢:獲取與同RDF/XML元素名稱的所有資源,而無需使用ID

SELECT ?predicate ?object 
WHERE { 
    <GraphURI/#SubjectID> ?predicate ?object 
} 

我想對於那些通過在RDF/XML序列化cim:ACLineSegment元素所代表的所有資源做到這一點,雖然。這是系列化的樣子:

<cim:ACLineSegment rdf:ID="_05b8"> 
    <!-- some code... --> 
</cim:ACLineSegment> 
    <!-- other blocks --> 
<cim:ACLineSegment rdf:ID="_05b9"> 
    <!-- some code... --> 
</cim:ACLineSegment> 

我想要類似以下內容。這可能嗎?

SELECT ?predicate ?object 
WHERE { 
    cim:ACLineSegment ?predicate ?object 
} 

回答

2

我的問題是,我想找回含 CIM所有主題:ACLineSegment,無論ID他們可能有。

<cim:ACLineSegment rdf:ID="_05b8"> 
    <!-- some code... --> 
</cim:ACLineSegment> 

你的科目不「包含」 cim:ACLineSegment。在RDF中,主題不包含任何東西。資源(包括三元組的主題)由URI標識。 RDF是基於三元組的形式{主語,謂語,賓語}的。您展示的片段是RDF/XML,它是三元組的特定序列化。在你顯示的片段中,有一些形式爲{<.../_05b8>, rdf:type, cim:ACLineSegment}的三元組。也就是說,你的主題有作爲rdf:type屬性的值的值cim:ACLineSegment

爲了解釋多一點,假設你有以下數據。 (順便說一下,在未來,這將是,如果你提供最低限度的更有益的,但完整,樣本數據。你所提供的數據不完整,我們不能對它運行的查詢,我們可以「T是確保它是在上下文中)。

<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:ex="http://stackoverflow.com/q/23432445/1281433/ex#" 
    xml:base="http://stackoverflow.com/q/23432445/1281433/ex#"> 
    <ex:Person rdf:ID="Mary"> 
    <ex:hasName>Mary</ex:hasName> 
    </ex:Person> 
    <ex:Person rdf:ID="Jim"> 
    <ex:hasName>James</ex:hasName> 
    <ex:hasAge rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">34</ex:hasAge> 
    </ex:Person> 
    <ex:Person rdf:ID="John"> 
    <ex:hasName>John</ex:hasName> 
    </ex:Person> 
</rdf:RDF> 

如果你看看在N三元序列化這個數據(其中只有一個三重每行),你會看到這些三元:

<http://stackoverflow.com/q/23432445/1281433/ex#Mary> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://stackoverflow.com/q/23432445/1281433/ex#Person> . 
<http://stackoverflow.com/q/23432445/1281433/ex#Mary> <http://stackoverflow.com/q/23432445/1281433/ex#hasName> "Mary" . 
<http://stackoverflow.com/q/23432445/1281433/ex#John> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://stackoverflow.com/q/23432445/1281433/ex#Person> . 
<http://stackoverflow.com/q/23432445/1281433/ex#John> <http://stackoverflow.com/q/23432445/1281433/ex#hasName> "John" . 
<http://stackoverflow.com/q/23432445/1281433/ex#Jim> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://stackoverflow.com/q/23432445/1281433/ex#Person> . 
<http://stackoverflow.com/q/23432445/1281433/ex#Jim> <http://stackoverflow.com/q/23432445/1281433/ex#hasName> "James" . 
<http://stackoverflow.com/q/23432445/1281433/ex#Jim> <http://stackoverflow.com/q/23432445/1281433/ex#hasAge> "34"^^<http://www.w3.org/2001/XMLSchema#integer> . 

注意所有那些rdf:type三倍?這是因爲在RDF/XML語法(§2.13 Typed Node Elements),對應於資源元素,具有元素名稱作爲rdf:type值。因此,RDF/XML以上其實是這個數據簡寫:

<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:ex="http://stackoverflow.com/q/23432445/1281433/ex#" > 
    <rdf:Description rdf:about="http://stackoverflow.com/q/23432445/1281433/ex#Mary"> 
    <rdf:type rdf:resource="http://stackoverflow.com/q/23432445/1281433/ex#Person"/> 
    <ex:hasName>Mary</ex:hasName> 
    </rdf:Description> 
    <rdf:Description rdf:about="http://stackoverflow.com/q/23432445/1281433/ex#Jim"> 
    <rdf:type rdf:resource="http://stackoverflow.com/q/23432445/1281433/ex#Person"/> 
    <ex:hasName>James</ex:hasName> 
    <ex:hasAge rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">34</ex:hasAge> 
    </rdf:Description> 
    <rdf:Description rdf:about="http://stackoverflow.com/q/23432445/1281433/ex#John"> 
    <rdf:type rdf:resource="http://stackoverflow.com/q/23432445/1281433/ex#Person"/> 
    <ex:hasName>John</ex:hasName> 
    </rdf:Description> 
</rdf:RDF> 

這也有利於查看N3或龜語法的數據,因爲它更接近SPARQL查詢語法:

​​

所有這一切意味着你只是想要問一個指定類型的東西。您的查詢將會是:

select ?predicate ?object where { 
    ?subject rdf:type cim:ACLineSegment ;  # You can use `a` instead of rdf:type. 
      ?predicate ?object 
} 
+0

作爲一般性建議(在答案中提到),請始終以人類可讀的語法(如N3/Turtle)來查看您的數據。您將更好地瞭解數據的內容,並且,如果您使用N3或Turtle,則實際上會獲得SPARQL查詢的模板。RDF/XML很常見,但其他格式通常更適合使用RDF。 –

相關問題