Рассуждение цепочки собственности по rdf: тип - PullRequest
4 голосов
/ 18 января 2010

Я пытаюсь заставить Пеллета распространять свойства от классов до лиц, принадлежащих к этим классам. Например, если у меня есть класс A со свойством X и индивидуальный B с rdf: type = Class A, я хочу, чтобы у индивидуального B было свойство X после запуска рассуждения. Я использую технику включения цепочки свойств, указанную на странице OWL 2 Новые функции . Этот метод отлично работает, если я использую свои собственные пользовательские свойства в цепочке свойств, но не работает, если я пытаюсь использовать сам rdf: type. Вот некоторые соответствующие фрагменты моего RDF / XML.

Онтологический класс (сгенерированный Дженой; обратите внимание на свойство «распространения», так как это то, что я пытаюсь распространить на людей класса 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>

Само свойство "Распространение" (написанное мной вручную, не сгенерированное с 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.

Может ли кто-нибудь пролить свет на то, что может происходить? Буду очень признателен за любую помощь.

1 Ответ

2 голосов
/ 19 января 2010

Очень важно Редактировать

На самом деле оказывается, что распространение свойства возможно в области 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> 

Уже не так важно

Хорошо, для полноты информации я выложу соответствующую информацию об ответе здесь. Это происходит от общения с людьми из списка рассылки пользователей гранул. Нить заархивирована и начинается с моего исходного сообщения . Следите за темой, чтобы узнать, что произошло в деталях.

По сути, OWL DL не позволяет "отражать" встроенные свойства и типы данных. Допущение этого может привести к нарушению разрешимости за полиномиальное время, гарантируемой OWL DL. Для этого вам необходимо использовать профиль OWL RL в OWL Full, который одинаково обрабатывает все вещи в OWL, что позволяет использовать логический вывод над rdf:type.

Основной проблемой при этом является поиск аргумента (или комбинации аргументов), который поддерживает как DL, так и RL, поскольку RL намного легче и менее выразителен, чем DL (не говоря уже о том, что он не может быть разрешен в полиномиальное время) .

...