簡體   English   中英

來自主題的 sparql 完整樹

[英]sparql complete tree from subject

例如,當我有一個人圖時,例如約翰和約翰有一個工作地址家庭地址電話號碼關系等。

是否有可能在不知道它是什么的情況下檢索與 john 和 john 的子類相關的所有內容?

這樣我就可以檢索例如以下內容

John < address < house_number
     < mobile_number
     < company < address
               < function < office number < etc...

And retrieve this via:
     "John" rdfs:everything ?everything ... as deep as the tree goes.

還是我需要知道圖表?

你的術語有點不對勁,因為地址、手機號碼等不是 John 的子類。 RDF 是關於三元組(標記為有向邊),而 John 的地址是具有John hasAddress AddressOfJohn形式的三元組的對象。 用基於圖的術語來說,聽起來您是在問是否可以檢索從 John 開始的某個有向路徑可到達的所有事物。 使用具體數據更容易,所以讓我們假設您有這些數據:

@prefix : <http://stackoverflow.com/q/20878795/1281433/> .

:john :hasAddress :addressOfJohn ;
      :hasMobileNumber :mobileNumber ;
      :hasCompany :company .

:addressOfJohn :hasHouseNumber :houseNumber .

:company :hasAddress :addressOfCompany ;
         :hasFunction :function .

SPARQL 1.1 添加了對Property Paths 的支持,它有點像用於屬性序列的正則表達式語言,包括像* (任意數量的重復)和+ (一個或多個)這樣的典型運算符。 不幸的是,你不能在屬性路徑中使用變量,所以你不能只做

:john ?p+ ?object

但是,如 answers.semanticweb.com SPARQL: property paths without specified predicates上的一個類似問題所述,您可以構造一個將匹配每個屬性的析取。 例如,因為:是一個定義的前綴,因此是一個 IRI,模式:|!:將匹配任何屬性(因為一切要么是:要么不是)。 這說明(:|!:)+是真正的通配符路徑。 因此,我們可以編寫如下查詢並獲得相應的結果:

prefix : <http://stackoverflow.com/q/20878795/1281433/>

select ?object where { 
  :john (:|!:)+ ?object 
}
---------------------
| object            |
=====================
| :company          |
| :function         |
| :addressOfCompany |
| :mobileNumber     |
| :addressOfJohn    |
| :houseNumber      |
---------------------

這是 Joshua Taylor 的一個很好的解決方案,它似乎在 Apache Jena 上查詢有點不同。

SELECT ?o WHERE {
  :john (<>|!<>)+ ?o
}

否則它會拋出錯誤“未解析的前綴:”

暫無
暫無

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

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