RDF - Как мне сделать переходное свойство сдвигом, основываясь на rdf: type? - PullRequest
3 голосов
/ 27 ноября 2011

Я пытаюсь найти способ вывести / распространить свойство на основе типов для предотвращения конфликта имен:

:AOrder :Store :AStore ;
        a :OrderType ;
        :user :AUser .

:AStore :name "Store Name";
        a :StoreType

:AUser :name "Some User";
       a :UserType

Исходя из приведенных выше троек, я хотел бы сделать вывод о нескольких других тройках:

:AOrder :storeName "Store Name" .
:AOrder :userName "Some User" .

Как я могу это сделать? К вашему сведению, я сейчас использую Bigdata и Sesame.

Один из способов - использовать SPIN, но, похоже, у Bigdata + Sesame нет; похоже, что Джена - единственная вещь, с чем-то похожая.

1 Ответ

1 голос
/ 28 ноября 2011

Вы можете выразить это с помощью операции обновления SPARQL:

INSERT { 
  ?x :storeName ?store_name ; 
     :userName ?user_name . 
 }
 WHERE { 
  ?x a :OrderType;
     :Store [ :name ?store_name ] ;
     :user [ :name ?user_name ] .
 }

Выполнять эту операцию всякий раз, когда обновляется ваш магазин (если вы работаете локально, вы можете использовать RepositoryListener для перехватаизменить события), и нужные вам тройки будут вставлены.

Кроме того, обратите внимание на некоторые из пользовательских инструментов рассуждения, доступных для Сезама.Я не уверен, что Bigdata поддерживает пользовательские рассуждения, но вы могли бы взглянуть на это расширение для настраиваемых основанных на правилах рассуждений (хотя оно немного устарело).Или взгляните на OWLIM , который является бэкэндом Sesame с возможностями рассуждения OWL, который также поддерживает пользовательские правила.

...