Упорядочение сущностей в онтологии
У меня есть система, которая моделирует некоторые доменные данные в онтологии, обычном виде тройного хранилища.
Я искал способ выразить множественность и упорядоченность, но ничего не нашел через 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?,