1

我正在使用 Protege 3.4.8。假设我有一些带有 datatype propertycolors和 object property的实例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 '('.

我遵循此处提供的语法。

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

4

1 回答 1

0

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将列表d-objects作为参数。的产生d-object是:

d-object ::= d-variable | dataLiteral

原子booleanNot( true, contains( ?string, "red" ))是畸形的,因为contains( ?string, "red" )不是 a d-object,而是一个原子。

于 2013-05-26T01:41:11.303 回答