2010-05-03 34 views
2

在開始時它似乎是一件小事,但到目前爲止我還沒有設法使用SPARQL獲得給定資源的唯一標識符。我的意思是給出,例如rdf:Description rdf:about="http://...",然後標識這個資源的一些屬性,我想要做的是首先找到這個非常資源,然後檢索給定一些URI的所有三元組。如何使用SPARQL從三元組中提取rdf:about或rdf:ID屬性?

我已經寫在WHERE條款語句,如試過天真的方法:

?x rdf:about ?y and ?x rdfs:about ?y 

我希望我是準確的。

+0

這是SPARQL,而不是SPARKQL。這可能會幫助你當谷歌搜索... – 2010-05-03 22:05:48

回答

7

您正在犯一個經典錯誤:將RDF(這是SPARQL查詢的內容)與其序列化(其中之一)(即RDF/XML)混淆。 rdf:about(和rdf:ID,rdf:Description,rdf:resource)是RDF/XML的一部分,RDF被寫下來。您可以使用RDF Validator來查看RDF/XML所產生的RDF三元組。

在你的情況讓我們開始:

<?xml version="1.0"?> 
<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:dc="http://purl.org/dc/terms/"> 
    <rdf:Description rdf:about="http://www.example.org/"> 
    <dc:title>Example for Donal Fellows</dc:title> 
    </rdf:Description> 
</rdf:RDF> 

把它插入到the validator,你會得到:

Number  Subject      Predicate      Object 
1   http://www.example.org/  http://purl.org/dc/terms/title "Example for Donal Fellows" 

(你也可以要求一個圖形表示)

注意rdf:about不存在:它的價值提供三倍的主題。

如何查詢以查找與http://www.example.org相關的屬性?就像這樣:

select * { 
    <http://www.example.org/> ?predicate ?object 
} 

您將獲得:

?predicate      ?object 
<http://purl.org/dc/terms/title> "Example for Donal Fellows" 

你會發現,查詢是一個三重匹配在我們要找到價值的地方變量(?v)。我們還可以問什麼樣的斷言與"Example for..."鏈接http://www.example.org/問:

select * { 
    <http://www.example.org/> ?predicate "Example for Donal Fellows" 
} 

這種模式匹配SPARQL的心臟。

RDF/XML是一個棘手的野獸,你可能會發現它更容易與N-Triples,這是非常詳細,但明確,或turtle,這就像N-Triples與大量的簡稱和縮寫。烏龜通常是rdf社區的首選。

P.S. rdfs:about不存在任何地方。

+1

所有的真實,但你也可以在http://www.semanticoverflow.com/嘗試語義網絡問題,在那裏更多的專家人物掛出。 – dajobe 2010-05-04 01:36:25

相關問題