Упорядочение сущностей в онтологии

У меня есть система, которая моделирует некоторые доменные данные в онтологии, обычном виде тройного хранилища.

Я искал способ выразить множественность и упорядоченность, но ничего не нашел через Google. Мой основной вариант использования - это что-то вроде одного объекта в домене, который может быть списком задач (получить продукты, готовить еду, есть еду, что-то в этом роде), но в целом я чувствую, что способность "взвешивать" ваши края может быть полезно по всем направлениям.

Есть ли приемлемый способ сделать это? Просто пойти в квадро-магазин? Промежуточные элементы (list -> listitem) с ребрами ординальности и доменной сущностью? Предикаты от предикатов до весов?

Вот пример. Пример макета

1 ответ

Решение

Чтобы представить что-то вроде того, что вы показали на своей фигуре, вы обычно рассматриваете это как n-арное отношение. Вы должны взглянуть на рабочую заметку W3C " Определение N-арных отношений в семантической сети", но короткая версия состоит в том, что у вас есть 3-арные отношения, и вы выражаете

hasTask(list,1,socks)
hasTask(list,2,shoes)
hasTask(list,3,leash)

Для каждого из них у вас будет ресурс, обычно пустой узел, но это может быть также URI и свойства, связывающие его с различными компонентами и, возможно, тип:

_:rel1 rdf:type :taskItem ;
       :hasList :list ;
       :hasord  1;
       :hasTask :socks .
_:rel2 rdf:type :taskItem ;
       :hasList :list ;
       :hasord  2;
       :hasTask :shoes .
_:rel3 rdf:type :taskItem ;
       :hasList :list ;
       :hasord  3;
       :hasTask :leash .

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

:list :hasTaskItem [ rdf:type :taskItem ;
                     :hasord  1;
                     :hasTask :socks ] ,
                   [ rdf:type :taskItem ;
                     :hasord  2;
                     :hasTask :shoes ] ,
                   [ rdf:type :taskItem ;
                     :hasord  3;
                     :hasTask :leash ] .

Основная идея та же самая, хотя. В качестве альтернативы вы можете использовать список. В чистом RDF вы можете использовать списки RDF и оставлять числа неявными, например:

:list :hasTasks ( :socks :shoes :leash ) .

Это просто сокращение для

:list :hasTasks [ rdf:first :socks ;
                  rdf:rest [ rdf:first :shoes ;
                             rdf:rest [ rdf:first :leash ;
                                        rdf:rest rdf:nil ]]].

В OWL вы не можете использовать rdf:first и rdf:rest, но вы можете определить свои собственные аналогичные свойства и реализовать те же структуры. В моем ответе приведен пример указания класса списка. Могу ли я указать диапазон для rdf: членов списка? (где кто-то хотел список всех элементов, которые должны быть определенного типа). Если вы выберете этот маршрут и хотите восстановить позицию каждого элемента в списке, вы можете сделать это, используя SPARQL-запрос к RDF, как я описал в ответе на вопрос: возможно ли получить позицию? элемента в RDF-коллекции в SPARQL?,

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