2011-06-30 50 views
2

我正在寫關於天氣如何影響人們健康(氣象)的文憑論文。本體在此連結的圖所示:http://dl.dropbox.com/u/5322973/WeatherHealthcast1%20-%20Properties.PNGSWRL規則不適用於我的本體論

所以,一個寫了一個簡單SWRL規則:

Weather(?w) ∧ temperature(?w, ?t) ∧ swrlb:greaterThan(?t, 25.0) → Disease(Migraine1) 

這意味着如果天氣溫度大於25℃下有較強的機會患者會從偏頭痛是痛苦(Migraine1是「疾病」類的個體) 我輸入了一些個人在本體論,並試圖運行SQWRL查詢規則

Weather(?w) ∧ temperature(?w, ?t) ∧ swrlb:greaterThan(?t, 25.0) → sqwrl:select(Migraine1) 

,它工作正常。 但是,當我嘗試運行SPARQL查詢:

prefix WeatherHealthcast: <http://www.semanticweb.org/ontologies/2011/2/WeatherHealthcast.owl#> 
SELECT ?disease ?tm ?w 
WHERE 
{ 
?temperature rdf:type WeatherHealthcast:Weather. 
?temperature WeatherHealthcast:temperature ?tm. 
FILTER (?tm = 30.0). 
?disease rdf:type WeatherHealthcast:Disease. 
?w rdf:type WeatherHealthcast:Weather. 
?w WeatherHealthcast:affects ?disease. 
} 

好像規則不適用(此SPARQL查詢我要得到所有可能的疾病,如果天氣溫度爲30°C)。 有誰知道如何使這項工作,如何將SWRL規則包含在SPARQL查詢中?

回答

2

如果您想將SPARQL應用於某些東西,那麼必須先將這些東西轉換爲RDF。然後問題變成:

  • 你的SWRL規則(規則1)在RDF中是如何表示的?
  • 您的SQWRL規則(規則2)如何在RDF中表示?

第一條規則很奇怪:它指出如果存在一定溫度的天氣,那麼Migrane就是一種疾病。這真的是你打算說的嗎?一般來說,SWRL規則的IF部分和THEN部分共享變量通常是有意義的,例如,

weather(?w) ∧ temperature(?w, ?t) ∧ swrlb:greaterThan(?t, 25.0) 
      ∧ patient(?p) ∧ exposed-to(?p, ?w) → 
            suffers-from(?p, Migraine) 

SQWRL是OWL的查詢語言,即它在同一個空間作爲SPARQL操作。所以我不明白你爲什麼要使用SPARQL,或者你爲什麼要結合使用SQWRL和SPARQL。

+0

嗨!謝謝你的回答。我改變了一點SWRL規則,所以現在看起來像你的: 人(?p)∧天氣(?w)∧有(?p,偏頭痛)∧溫度(?w,?t)∧swrlb: GREATERTHAN(?噸,25.0)→suffersFrom(p,偏頭痛?) ,當我做了SQWRL查詢: suffersFrom(?p,d)→sqwrl:選擇(?p,d) 它的工作原理很好,它只選擇「偏頭痛」。但現在有一些其他問題。似乎Pellet推理器不適用我的SWRL規則。你知道那是爲什麼嗎? – Viktor