Можно ли сравнить два свойства типа данных, используя <= в операторе OWL?

Я новичок в онтологиях и OWL, поэтому мне нужна помощь.

У меня есть два свойства типа данных (или переменные): VARmin и VARmax. Оба должны быть>=0 и <=1. Это ограничение мне удалось создать и все нормально. Я сделал это:

(VARmin некоторый float[<= 1, >= 0]) и (VARmax некоторый float[<= 1, >= 0])

Проблема в том, что мне нужно сравнить эти переменные, как в следующей форме: VARmin <= VARmax. Я попробовал это:

VARmin некоторый float[<=" 'VARmax' "^^float]

но я получил эту ошибку: "UnsupportedOperationException: значение NULL недопустимо для фасета 32"

Я исследовал возможное решение этой ошибки и получил объяснение о конкретных типах данных, таких как "Годы" и форму для сравнения целых чисел здесь: https://mailman.stanford.edu/pipermail/p4-feedback/2007-October/000414.html Но это не мой случай.

Я снова исследовал, но решения не совпадают с моей проблемой. Может ли кто-нибудь помочь мне, пожалуйста!

PS: я использую Protégé версии 4.0 и Pellet

1 ответ

Решение

Чтобы решить этот вопрос, используя SWRL, я создал следующее правило:

SomeClass ("someclass"), VARmin("someclass", "varmin"), moreThanOrEqual("varmin", 0.0), lessThanOrEqual("varmin, 1.0), VARmax(" someclass, "varmax"),? varmax, 1.0), lessThanOrEqual(? varmin,? varmax) -> ComparisonOK (? someclass)

В зависимости, я нашел этот ответ [1], который мне очень помог создать разногласия, чтобы отрицать каждый случай, указанный в приведенном выше правиле, например:

SomeClass (? Someclass), VARmin(? Someclass,? Varmin), lessThan (? Varmin, 0.0) -> ComparisonNotOK (? Someclass)

[1] дизъюнкция внутри правила SWRL

Другие вопросы по тегам