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