SWRL: Как использовать встроенный swrlb:booleanNot?
Я использую 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 '('.
Я следовал грамматике, приведенной здесь.
Есть идеи, что здесь не так? Большое спасибо!
1 ответ
Абстрактный синтаксис для 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" )
это не d-object
, но атом.