2013-02-26 69 views
6

我想從Mulgara RDF存儲創建一個RDF圖形,使用Sparql查詢返回結果。我開始習慣於簡單的查詢,並且有效地詢問「哪些對象是特定集合的成員?」SPARQL中的遞歸查詢瀏覽集合

我的問題是,我非常感謝任何建議,我是否可以從這個簡單的查詢中獲取結果並將它們重新路由爲查詢的對象?

例如,我有這樣的SPARQL查詢:

SELECT ?x WHERE {?x <fedora-rels-ext:isMemberOfCollection> <info:fedora/collection:ramsey>} 

有了這些結果:

"x" 
info:fedora/ramsey:ThelifeandadventuresofRobinsonCrusoe 
info:fedora/ramsey:Jackanapes 
info:fedora/ramsey:SundayJournalvol01no0219951126 
info:fedora/ramsey:Ideologyandchange 
info:fedora/ramsey:theshepherdofthepyrenees 
info:fedora/ramsey:ScenesinAmerica 
... 

我的目標,是再利用這些獨特的標識符和更換對象,<info:fedora/collection:ramsey>,從原始查詢並再次運行查詢。

我想象這樣一個場景,我將在初始查詢標識根元素,都將結果返回所有成員對象,然後返回所有那些對象的成員對象,循環往復......

這可能與Sparql查詢?具體來說,我相信我在查詢Mulgara RDF數據庫。任何想法,即使它'不可行,非常感謝。

+0

@ghkill我編輯了標題以更好地總結這是什麼。 – 2013-02-27 18:22:47

回答

8

假設您必須堅持使用SPARQL 1.0。如果有的話,我相信mulgara對SPARQL 1.1的支持有限。

隨着SPARQL 1.0,如果你大概知道要多少級查詢,你可以做這樣的事情:

SELECT ?y WHERE { 
     ?x <fedora-rels-ext:isMemberOfCollection> <info:fedora/collection:ramsey> 
     ?y <fedora-rels-ext:isMemberOfCollection> ?x 
} 

這裏?y將與從根第二級元素的約束。使用UNION,您可以使用一個查詢查詢多個級別。在一個查詢從根部一個到兩個層面的一個例子:

SELECT ?x WHERE { 
    { 
     ?x <fedora-rels-ext:isMemberOfCollection> <info:fedora/collection:ramsey> . 
    } UNION { 
     ?zz <fedora-rels-ext:isMemberOfCollection> <info:fedora/collection:ramsey> 
     ?x <fedora-rels-ext:isMemberOfCollection> ?zz . 
    } 
} 

這裏的問題是,你真的不知道是什麼樣的約束水平?x。因此,您無法使用此類查詢繪製樹。在SPARQL 1.1本獲取與BIND AS

SELECT ?x ?level WHERE { 
    { 
     ?x <fedora-rels-ext:isMemberOfCollection> <info:fedora/collection:ramsey> . 
     BIND (1 AS ?level) 
    } UNION { 
     ?zz <fedora-rels-ext:isMemberOfCollection> <info:fedora/collection:ramsey> 
     ?x <fedora-rels-ext:isMemberOfCollection> ?zz . 
     BIND (2 AS ?level) 
    } 
} 

這第二個查詢解決將勢必什麼?x水平迴歸。您可以想象一些編程式生成的查詢,其中有很多工會試圖達到樹的最大深度。如果您想嘗試使用Jena/ARQ,則需要完全支持SPARQL 1.1。在耶拿你也可以使用Property paths並且用類似如下:

SELECT ?x WHERE { 
    ?x <fedora-rels-ext:isMemberOfCollection>+ <info:fedora/collection:ramsey> . 
} 

你會在?x所有可達來自<info:fedora/collection:ramsey>節點通過謂語<fedora-rels-ext:isMemberOfCollection>綁定。

+1

你先生,是一位學者和紳士,非常感謝你。這正是我希望學習的東西,並且給了我很多前進的信息。 – ghukill 2013-02-26 14:14:31