2015-03-19 22 views
2

我正在嘗試自定義Stardog規則。自定義規則基本上看起來像下面這樣:觸發Stardog規則的SPARQL查詢

@prefix rule: <tag:stardog:api:rule:> . 
[] a rule:SPARQLRule ; 
    rule:content """ 
PREFIX : <http://url/draft#> 
IF { 
     ?x a :Person; :has_yob ?yob. 
     BIND (2014 - ?yob AS ?age) 
    } 
THEN { 
     ?x :has_age ?age 
} 
""" . 

我上傳這個文件的TTL用Java代碼:

final Connection conn = ConnectionConfiguration.to("db_name").server("snarl").connect(); 
conn.begin(); 
conn.add().io().context(new URIImpl("http://url/rules")).file(ttlFile); 
conn.commit(); 

,因爲我想保持規則在一個單獨的圖形,我已經在http://url/rules圖中加載了規則三元組。 Stardog中表示爲tag:stardog:api:context:default的默認圖包含本體公理。當我使用以下SPARQL查詢時,Stardog規則按預期工作:

PREFIX : <http://url/draft#> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 

SELECT ?s ?age 
FROM <tag:stardog:api:context:default> 
FROM <http://url/rules> 
FROM NAMED <http://url/datasource> 
WHERE { 
    ?s rdf:type :Person . 
    ?s :has_age ?age . 
} 

您可能想知道現在出了什麼問題。我想我對FROM和FROM NAMED子句有一個錯誤的理解。當我將FROM <http://url/rules>排除在查詢之外時,我希望查詢沒有結果。然而,我仍然像原始查詢那樣得到結果。這怎麼可能?這是我認爲這些條款:

  • FROM <tag:stardog:api:context:default>:使用本體公理從 默認圖形
  • FROM <http://url/rules>:使用規則在此 特定查詢
  • FROM NAMED <http://url/datasource>:實際數據 需要被查詢

所以我重複我的問題,爲什麼我得到正確的結果,當我離開第二個FROM子句出SPA RQL查詢?僅供參考,我總是使用推理類型SL。

編輯後@ user1538695回答

當我在架構(TBOX)堅持規則,我還是要在我的查詢添加FROM <tag:stardog:api:context:default>。我只想查詢一個命名圖並使用模式進行推理。如果不必明確地提到默認圖形(模式),這不應該是可能的嗎?這是我目前的查詢的樣子:

PREFIX : <http://url/draft#> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 

SELECT ?s ?age 
FROM <tag:stardog:api:context:default> 
FROM <http://url/datasource> 
WHERE { 
    ?s rdf:type :Person . 
    ?s :has_age ?age . 
} 

回答

2

首先,對FROM NAMED子句存在誤解。 FROM NAMED子句指定將用於匹配GRAPH子句中圖形模式的命名圖形。如果您的查詢沒有GRAPH子句,那麼FROM NAMED將不起作用。

其次,Stardog認爲規則是模式的一部分,數據庫的模式通過reasoning.schema.graphs數據庫選項得到修復。無論您的查詢使用的是FROM或FROM NAMED子句,所使用的模式公理和規則都是相同的。 FROM或FROM NAMED子句只會確定實例將與哪些命名圖匹配的查詢。

最後,Stardog 2.x中reasoning.schema.graphs的默認值是默認圖形(在Stardog 3.0中默認值正在改變爲所有圖形),因此除非您更改,否則將忽略命名圖形中的所有公理或規則這個選項。但也有query.all.graphs配置選項,它指示Stardog使用所有圖的聯合作爲默認圖。因此,具有reasoning.schema.graphs=default但更改query.all.graphs也會間接更改模式圖。

根據這些信息,如果它仍然看起來像你沒有得到預期的答案,你應該把一個最小的例子,並將其發送到Stardog郵件列表。

+0

你能查看我更新的問題嗎?謝謝。 – tstorms 2015-03-20 10:23:25