我正在写一篇关于天气如何影响人们健康(流星病(的文凭论文。此链接中的图片显示了本体:http://dl.dropbox.com/u/5322973/WeatherHealthcast1%20-%20属性.PNG
因此,a编写了一个简单的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查询中?
如果您想将SPARQL应用于某个东西,那么必须首先将该东西转换为RDF。问题变成了:
- 您的SWRL规则(规则1(是如何用RDF表示的
- 您的SQWRL规则(规则2(是如何用RDF表示的
第一条规则很奇怪:它说,如果存在一定温度的天气,那么米格兰就是一种疾病。这真的是你想说的吗?一般来说,如果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结合起来。