我正在嘗試自定義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 .
}
你能查看我更新的問題嗎?謝謝。 – tstorms 2015-03-20 10:23:25