2012-04-16 31 views
2

我剛剛開始使用名爲MyExperiment的服務的SparQL端點。 我對語義網完全陌生。在rdf中爲SparQL尋找關係

服務端點URL是這樣的:http://rdf.myexperiment.org/sparql

基本上,我已經找到了如何做基本的查詢。就像通過以下查詢列出一些對象工作流程一樣:

BASE <http://www.myexperiment.org/> 
PREFIX myexp: <http://www.myexperiment.org/> 
PREFIX mecontrib: <http://rdf.myexperiment.org/ontologies/contributions/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT ?workflow WHERE { ?workflow rdf:type mecontrib:Workflow} 

我有兩個問題。

  1. 我需要找到RDF中不同概念之間的關係。就像我知道RDF中有一個叫做「工作流」的概念,另一個RDF中有一個叫做「用戶」的概念,我怎麼能找到這兩者之間的關係?

  2. 如何創建混合兩個或更多概念的查詢。就像我想查看用戶名創建的工作流列表或找到用戶創建的工作流?

回答

4

Sparql查詢的WHERE子句是由一個或幾個三元組通過變量或空白節點(如果值不使用/不重要)連接組成的圖形模式。此圖與三元組存儲進行檢查,試圖綁定使用的變量並返回結果集。

將WHERE子句看作需要爲特定實例出現在結果集中而需要滿足的三元主語謂詞對象語句集合。

關於你的第一個問題。這是查找圖中路徑的任務。如果這兩個概念屬於單個或相關(如簡稱)形成良好的本體,一些提示可以通過類似這樣的查詢玩弄給予(把你提供的示例爲基礎):

SELECT DISTINCT ?prop, ?range WHERE { ?workflow a mecontrib:Workflow . 
             ?workflow ?prop ?value . 
             ?prop rdfs:range ?range } 

在這裏面我們要求列出工作流概念及其範圍內的所有可用的不同謂詞(可能被視爲屬性)。範圍定義屬性值的類型(請參閱OWL spec)。通過將範圍與需要的類型進行比較,可以找到將兩個概念相互關聯的屬性。然而,這個公理並不總是被定義的,但是它在最簡單的情況下可以用來檢查某個概念是否具有將它與另一個概念聯繫起來的屬性。 此外,property pathes可用於跟蹤任意長度的路徑,但這仍在進行中並且可能不受所有rdf存儲的支持(請參閱link)。

因此,最簡單的方法似乎分析你正在尋找的特定情況下的答案本體,而不是嘗試找到一般的解決方案。

關於第二個問題。在WHERE子句中使用幾個三元組模式。考慮下面的例子:

SELECT ?book, ?authorName FROM <http://myrdfgraph> 
WHERE { ?book a Book . 
     ?book hasAuthor ?author 
     ?author hasName ?authorName } 

我們正在問基於圖書館本體的假想圖,其中包含概念書與屬性hasName。 hasAuthor的範圍是作者概念的實例。作者的概念有屬性hasName表示小說家的名字。這樣的查詢將返回具有作者姓名的所有書籍的列表。希望這會幫助你在你的案例中應用示例。

另外,考慮從SPARQL specs學習。

1

SPARQL查詢來獲取所有關係到RDF圖爲:

SELECT ?domain ?property ?range 
WHERE{ 
     ?property rdf:type owl:ObjectProperty . 
     ?property rdfs:range ?range . 
     ?property rdfs:domain ?domain 
    }