簡體   English   中英

如何使用SPARQL從三元組中提取rdf:about或rdf:ID屬性?

[英]How can one extract rdf:about or rdf:ID properties from triples using SPARQL?

在開始時這似乎是一件小事,但到目前為止,我還沒有使用SPARQL來獲取給定資源的唯一標識符。 給出了我的意思,例如, rdf:Description rdf:about="http://..." ,然后是一些標識此資源的屬性,我想做的就是首先找到該資源,然后檢索所有三元組給一些URI。

我通過在WHERE子句中編寫語句嘗試了朴素的方法,例如:

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

我希望我很精確。

您正在犯一個典型的錯誤:將RDF(這是SPARQL查詢的內容)與其序列化之一(即RDF / XML)混淆。 rdf:about (和rdf:IDrdf:Descriptionrdf: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>

將其插入驗證器 ,您將獲得:

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 )三重匹配。 我們還可以詢問以下謂詞,哪些謂詞鏈接http://www.example.org/"Example for..."

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

這種模式匹配是SPARQL的核心。

RDF / XML是一個棘手的野獸,您可能會發現使用N-Triples (它很冗長但清晰)或turtle (它像N-Triples一樣,具有大量速記和縮寫)更容易使用。 rdf社區通常首選Turtle。

PS rdfs:about在任何地方都不存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM