我正在使用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提供的语法。
知道这里有什么问题吗?非常感谢你!
答案 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
,而是原子。