【问题标题】:Disjunction inside SWRL ruleSWRL 规则内的析取
【发布时间】:2014-03-20 13:43:25
【问题描述】:

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

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

表示所有年龄 或 > 30

的人

【问题讨论】:

  • 每个规则都隐含地是一个连词:所有身体原子必须匹配才能使头部为真。你问的是(X 或 Y),这是一个析取。我已经适当地编辑了这个问题。

标签: protege reasoning swrl


【解决方案1】:

很遗憾,您无法在规则正文中以您希望的方式直接表达析取,但有一些解决方法。最直接的解决办法就是写两条规则:

Person(?x), Age(?x,?age), ?age blah(?x)
Person(?x), Age(?x,?age), ?age > 30 -> blah(?x)

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

Person(?x), ((some Age xsd:integer[ 30]))(?x) -> blah(?x)

但是你将无法在 Protege 中输入该规则,即使你在其他本体编辑器中编写或手写,Protege 也可以显示 em> 正确。您可以更简单地执行以下操作:

Person(?x), ((some Age (xsd:integer[ 30]))(?x) -> blah(?x)

甚至父亲也这样做:

(Person and (some Age (xsd:integer[ 30])))(?x) -> blah(?x)

当然,此时,根据 blah(?x) 是什么,您也许可以只使用 Protege 接受的通用类公理。例如,如果 blah 实际上是一个类,Not10To30YearOldPerson,您可以使用如下公理:

人和(年龄some (xsd:integer[or xsd:integer[> 30])) subClassOf not TenToThirtyYearOldPerson

【讨论】:

  • 非常感谢 Joshua 的回答
  • @riad 如果它解决了你的问题,你应该accept it。它让其他人(可能看不到评论)对您有用,并减少了 Stack Overflow 上没有接受答案的问题的数量)。它也给你和我一些声望点。如果它不适合您,还有什么我可以添加的帮助吗?
  • 我知道,我会尽快接受答案
  • 抱歉 Joshua,另一个愚蠢的问题,我不习惯与 protégé 一起工作,但我在“通用类公理”图片上没有这个选项卡,我错过了什么吗?
  • 对我来说,它位于“Active Ontology”选项卡的底部窗格中,但这可能不是标准的。您可以转到“Window > Views > Class Views > General Class Axioms”将其添加到您的界面中。
猜你喜欢
  • 2015-11-23
  • 2015-05-24
  • 2019-01-28
  • 2021-11-12
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
相关资源
最近更新 更多