Обоснование цепочки свойств через rdf:тип
-
21-09-2019 - |
Вопрос
Я пытаюсь заставить Pellet распространять свойства от классов вплоть до отдельных лиц, принадлежащих к этим классам.Например, если у меня есть класс A со свойством X и Индивидуум B с rdf:type=Class A, я хочу, чтобы Индивидуум B имел свойство X после запуска средства аргументации.Я использую технику включения цепочки свойств, на которую ссылается OWL 2 Новые функции Страница.Этот метод отлично работает, если я использую свои собственные пользовательские свойства в цепочке свойств, но он не сработает, если я попытаюсь использовать сам rdf: type.Вот несколько соответствующих фрагментов моего RDF / XML.
Онтологический класс (сгенерированный Jena;обратите внимание на свойство "spread", поскольку это то, что я пытаюсь распространить на индивидуумов класса Person):
<rdf:Description rdf:about="http://family/person">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
<owl:sameAs rdf:resource="http://family/person"/>
<rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
<owl:equivalentClass rdf:resource="http://family/person"/>
<owl:disjointWith rdf:resource="http://www.w3.org/2002/07/owl#Nothing"/>
<j.1:spread rdf:resource="http://spread/specificSpread"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
</rdf:Description>
Само свойство "Spread" (написано мной вручную, не сгенерировано с помощью Jena, поскольку API Jena не поддерживает цепочки свойств объектов):
<rdf:Description rdf:about="http://spread/generalSpread">
<owl:propertyChainAxiom rdf:parseType="Collection">
<owl:ObjectProperty rdf:about="http://www.w3.org/1999/02/22-rdf-syntax-ns#type"/>
<owl:ObjectProperty rdf:about="http://spread/generalSpread"/>
</owl:propertyChainAxiom>
</rdf:Description>
Прежде чем рассуждать, личность Эдипа выглядит следующим образом:
<rdf:Description rdf:about="http://family/Oedipus">
<rdf:type rdf:resource="http://family/person"/>
</rdf:Description>
Идея состоит в том, что после рассуждений это выглядело бы примерно так:
<rdf:Description rdf:about="http://family/Oedipus">
<rdf:type rdf:resource="http://family/person"/>
<j.1:spread rdf:resource="http://spread/specificSpread"/>
</rdf:Description>
У меня такое чувство, что ссылка на rdf: type как на rdf: resource, вероятно, приводит к тому, что все становится не так, поскольку я почти уверен, что это не ресурс.Но я не уверен, как это исправить.Я также запустил его через программу lint командной строки Pellet, и, похоже, с ней не возникло проблем, за исключением того, что она создала явную запись для rdf: type, которая выглядела следующим образом:
<owl:ObjectProperty rdf:about="&rdf;type"/>
Выглядит немного странно для меня и также может быть намеком на то, что он не понимает мою ссылку на rdf: type.
Кто-нибудь может пролить какой-нибудь свет на то, что может происходить?Я был бы действительно признателен за любую помощь, которую кто-либо мог бы оказать.
Решение
Очень важная Правка
На самом деле оказывается, что распространение свойств возможно в пределах области OWL DL.Например, если вы хотите распространить свойство spread
со значением simpleSpread
(предполагая, что оба уже определены в вашем RDF), вы могли бы сделать что-то вроде этого (в RDF / XML):
<rdf:Description rdf:about="http://family/person">
<rdfs:subClassOf>
<owl:hasValue rdf:resource="http://spread/simpleSpread"/>
<owl:onProperty rdf:resource="http://spread/hasSpread"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Restriction"/>
</rdfs:subClassOf>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
</rdf:Description>
Теперь это уже не так важно
Хорошо, итак, для полноты информации я опубликую соответствующую информацию об ответе здесь.Этот материал получен в результате общения с людьми из списка рассылки pellet-users.Поток заархивирован и начинается с моего начальное сообщение.Следите за темой, чтобы узнать, что произошло в деталях.
По существу, СОВА ДЛ не допускает "отражения" встроенных свойств и типов данных.Разрешение этого может нарушить разрешимость за полиномиальное время, гарантируемую OWL DL.Для того чтобы достичь этого, вы должны использовать Профиль OWL RL OWL Full, который одинаково обрабатывает все вещи в OWL, тем самым позволяя использовать вывод над rdf:type
.
Основная проблема с этим заключается в поиске аргументатора (или комбинации аргументов), которые поддерживают как DL, так и RL, поскольку RL намного легче и менее выразителен, чем DL (не говоря уже о том, что не гарантируется разрешимость за полиномиальное время).