我正在写一篇关于天气如何影响人们健康(气象病)的毕业论文。本链接中的图片显示了本体: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查询中?
答案 0 :(得分:3)
如果要将SPARQL应用于某些内容,则必须首先将此内容转换为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结合起来。