SWRL 规则不适用于我的本体



我正在写一篇关于天气如何影响人们健康(流星病(的文凭论文。此链接中的图片显示了本体: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结合起来。

相关内容

  • 没有找到相关文章

最新更新