SWRL规则不适用于我的本体

时间:2011-06-30 09:00:29

标签: sparql ontology owl swrl

我正在写一篇关于天气如何影响人们健康(气象病)的毕业论文。本链接中的图片显示了本体:http://dl.dropbox.com/u/5322973/WeatherHealthcast1%20-%20Properties.PNG

所以,写了一个简单的SWRL规则:

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

这意味着如果天气温度高于25°C,患者很可能患有偏头痛(偏头痛1是“疾病”类的个体) 我在本体中输入了一些个人,并尝试运行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查询中?

1 个答案:

答案 0 :(得分:3)

如果要将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结合起来。