использование арифметических функций в настраиваемом наборе правил GraphDB - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу добавить пользовательское правило в набор правил OWL-2-RL ( builtin_owl2-rl.pie ), которое устанавливает свойство объекта isOppositeDirectionOf между векторами, которые находятся в противоположном направлении друг к другу. Я думаю, это должно выглядеть примерно так:

Id: oppositeDirectionVector_rule
     v1 <rdf:type> <cad:Vector>
     v1 <cad:x> v1x            // example data property for v1x: "1.0"^^xsd:double
     v1 <cad:y> v1y
     v1 <cad:z> v1z
     v2 <rdf:type> <cad:Vector>
     v2 <cad:x> -v1x
     v2 <cad:y> -v1y
     v2 <cad:z> -v1z
    -------------------------------
    v1 <cad:isOppositeDirectionOf> v2

Без минусов это правило работает для создания isSameVectorAs свойств объекта. Есть ли способ использовать основные арифметические функции для свойств данных в правилах?

1 Ответ

0 голосов
/ 13 ноября 2018

Вы не можете использовать основные арифметические функции в правилах.Из-за соображений производительности механизм правил GraphDB работает с внутренними идентификаторами базы данных, но не с фактическими значениями RDF, т.е. с внутренним идентификатором 10001 вместо "1"^^xsd:double.Таким образом, единственные поддерживаемые операции сравнения переменных - это если два внутренних идентификатора равны или не равны.

Редактировать, следуя комментарию ниже : API плагинов GraphDB является единственныммеханизм интеграции вашего кода с базой данных.Плагин может материализоваться для каждого оператора с ?s <cad:x> ?o предикатом нового оператора ?s <cad:oppositeX> -?o.К сожалению, он должен обрабатывать и удаления.

...