首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SWRL规则中的分离

SWRL规则中的分离
EN

Stack Overflow用户
提问于 2014-03-20 13:43:25
回答 1查看 947关注 0票数 0

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

代码语言:javascript
复制
Person(?x), Age(?x,?age), (?age < 10 or ?age > 30) -> blabla(?x)

意思是所有年龄< 10 > 30的人

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-20 14:16:06

不幸的是,您不能以您想要的方式直接表示规则体中的分离,但是有一些解决办法。最直接的解决方案是编写两条规则:

人(X),年龄(X,?),?年龄< 10 -> (?X) 人(X),年龄(X,?),?年龄> 30 -> (?x)

SWRL确实支持类表达式的使用(请参阅Martin的http://dior.ics.muni.cz/~makub/owl/中的更多内容),因此您可以这样做:

人(?X),((某些年龄xsd:integer< 10)或(某些年龄xsd:integer> 30))(?x) -> blah(?x)

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

人(?X),((某个年龄(xsd:integer< 10或xsd:integer> 30))(?x) -> blah(?x)

甚至父亲也这么做:

(人和年龄(xsd:integer< 10或xsd:integer> 30))(?X) -> blah(?x)

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

Person (age some (xsd:integer< 10 xsd:integer> 30) subClassOf not TenToThirtyYearOldPerson )

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22534868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档