У меня есть следующий случай, для которого я пытаюсь написать правило RDF / OWL. Цель состоит в том, чтобы улучшить проверку согласованности в результирующей базе данных.
У меня есть класс "Expression" и класс "Manifestation", их можно связать с помощью "hasManifestation".
Достаточно просто ограничить домен и диапазон соответственно, так что доменом hasManifestation является «Выражение», а диапазоном - «Проявление».
Но я хочу go сделать еще один шаг.
У выражений и манифестаций есть свойство, называемое структурным уровнем, уровень 1, 2, 3, 4
Так что выражение на уровне 1 всегда должно быть связано через hasManifestation с манифестом. на уровне 1, никогда на уровне 2, 3 и т. д. c.
Аналогично, Выражение на уровне 2 всегда должно быть связано с Проявлением на уровне 2, а не на уровне 1 или 3, et c.
Итак, я хочу написать правило для домена и диапазона «hasManifestation», которое выглядит примерно так:
Диапазон: Y должен быть проявлением, и если значение домена является уровнем Z, тогда Y должен быть уровнем Z
Домен: X должен быть выражением, а если значение Range является уровнем Z, то X является уровнем X.
Я думаю, что могу написать это в логике предикатов c следующим образом: E = выражение, M = проявление, L = уровень, R = диапазон, D = домен
диапазон: y(My and (xz)(Dx and Lxz) -> (Lyz))
домен: x(Ex and (yz)(Ry and Lyz) -> (Lxz))
Возможно, я что-то напутал, но, надеюсь, вы поймете, что я хотел бы сделать. Но как я мог написать это как заявление OWL в TTL.
Любой совет очень ценится.