[英]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.