SWRL规则内部的分离

时间:2014-03-20 13:43:25

标签: protege reasoning swrl

我正在使用Protege 4.3来制定一些SWRL规则。 是否可以编写包含析取的规则 例如:

Person(?x), Age(?x,?age), (?age < 10 or ?age > 30) -> blabla(?x)

意味着所有人的年龄 OR &gt; 30

1 个答案:

答案 0 :(得分:2)

不幸的是,你不能以你喜欢的方式在规则体中直接表达脱节,但有一些解决方法。最直接的解决方案是编写两条规则:

  

人(?x),年龄(?x,?年龄),?年龄&lt; 10 - &gt;胡说(?x)的
  人(?x),年龄(?x,?年龄),?年龄&gt; 30 - &gt;嗒嗒(?x)的

SWRL支持使用类表达式(请参阅Martin Kuba OWL 2 and SWRL Tutorial中的更多信息),因此您可以这样做:

  

人(?x),((某些年龄xsd:整数[&lt; 10])或(某些年龄xsd:整数[&gt; 30]))(?x) - &gt;等等(?x)

但是你无法在Protege中输入该规则,即使你在其他本体编辑器中编写它,或者手工编写它,Protege也可以显示它正确。你可以更简单地做到这一点:

  

人(?x),((某些年龄(xsd:整数[&lt; 10]或xsd:整数[&gt; 30]))(?x) - &gt; blah(?x)

甚至是父亲并且这样做:

  

(人和(某些年龄(xsd:整数[&lt; 10]或xsd:整数[&gt; 30])))(?x) - &gt;嗒嗒(?x)的

当然,在这一点上,取决于 blah(?x)是什么,你可能只能使用Protege将接受的一般类公理。例如,如果 blah 实际上是一个类, Not10To30YearOldPerson ,你可以使用如下公理:

  

(年龄某些(xsd:整数[&lt; 10] xsd:整数[&gt; 30]))    subClassOf不 TenToThirtyYearOldPerson

axiom instead of rule