SWRL:如何使用内置swrlb:booleanNot?

时间:2013-05-25 03:30:08

标签: protege swrl

我正在使用Protege 3.4.8。假设我有一些数据类型属性colors和对象属性hasMeaning的实例。 colors的值由字符串表示,例如red blue yellow

我想创建一个这样的规则:如果一个颜色包含red但不包含blue,那么它的含义为Happy。我目前的规则如下:

colors(?x, ?y)
∧ swrlb:contains(?y, "red")
∧ swrlb:booleanNot(true, swrlb:contains(?y,"blue"))
→ hasMeaning(?x, Happy)

但我得到Error: Expecting ',' or ')', got '('.

我遵循了here提供的语法。

知道这里有什么问题吗?非常感谢你!

1 个答案:

答案 0 :(得分:0)

abstract syntax for SWRL有原子语法:

atom ::= description '(' i-object ')'
     | dataRange '(' d-object ')'
     | individualvaluedPropertyID '(' i-object i-object ')'
     | datavaluedPropertyID '(' i-object d-object ')' 
     | sameAs '(' i-object i-object ')' 
     | differentFrom '(' i-object i-object ')'
     | builtIn '(' builtinID { d-object } ')'
builtinID ::= URIreference

builtIn atom的语法将d-objects列表作为参数。 d-object的制作是:

d-object ::= d-variable | dataLiteral

原子booleanNot( true, contains( ?string, "red" ))格式不正确,因为contains( ?string, "red" )不是d-object,而是原子。