我正在使用Protege 4.3来制定一些SWRL规则。 是否可以编写包含析取的规则 例如:
Person(?x), Age(?x,?age), (?age < 10 or ?age > 30) -> blabla(?x)
意味着所有人的年龄
答案 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