СОВА: ограничение свойств на основе значений: возможно ли это вообще? - PullRequest
2 голосов
/ 22 февраля 2012

Я ищу явно OWL-решение для определения свойства, которое является ограничением другого свойства, аналогичного эквивалентному классу.Ограничение основано на свойствах данных домена или диапазона.Ограниченное свойство, безусловно, является субпредложением и должно быть выведено.

"kid", "mother", "Father" - это Person s Father.gender = "male" Свойство данных mother.gender = "female"

(мужской подклассOf = эквивалентный класс "гендерное значение" мужской ")

папка parentOf child 'объектная связь mother parentOf child' объектная связь

Как определить свойство FatherOfна основе parentOf и пола отца? Очевидно, что это подвойство parentOf.

Однако эквивалентный редактор свойств объекта в Protégé не позволяет устанавливать запрос свойства, даже если я не вижу, действительно ли это можно решитьс цепочкой свойств.

Определение FatherOf в качестве дочернего свойства и (вручную) установка отцаOf вместо parentOf не вариант, так как этот пример семейства является упрощенной ситуацией более сложного сценария.

<Declaration>
    <Class IRI="#Person"/>
</Declaration>
<Declaration>
    <ObjectProperty IRI="#fatherOf"/>
</Declaration>
<Declaration>
    <ObjectProperty IRI="#parentOf"/>
</Declaration>
<Declaration>
    <DataProperty IRI="#gender"/>
</Declaration>
<Declaration>
    <NamedIndividual IRI="#father"/>
</Declaration>
<Declaration>
    <NamedIndividual IRI="#kid"/>
</Declaration>
<Declaration>
    <NamedIndividual IRI="#mother"/>
</Declaration>
<ClassAssertion>
    <Class IRI="#Person"/>
    <NamedIndividual IRI="#father"/>
</ClassAssertion>
<ClassAssertion>
    <Class IRI="#Person"/>
    <NamedIndividual IRI="#kid"/>
</ClassAssertion>
<ClassAssertion>
    <Class IRI="#Person"/>
    <NamedIndividual IRI="#mother"/>
</ClassAssertion>
<ObjectPropertyAssertion>
    <ObjectProperty IRI="#parentOf"/>
    <NamedIndividual IRI="#father"/>
    <NamedIndividual IRI="#kid"/>
</ObjectPropertyAssertion>
<ObjectPropertyAssertion>
    <ObjectProperty IRI="#parentOf"/>
    <NamedIndividual IRI="#mother"/>
    <NamedIndividual IRI="#kid"/>
</ObjectPropertyAssertion>
<DataPropertyAssertion>
    <DataProperty IRI="#gender"/>
    <NamedIndividual IRI="#father"/>
    <Literal datatypeIRI="&rdf;PlainLiteral">male</Literal>
</DataPropertyAssertion>
<DataPropertyAssertion>
    <DataProperty IRI="#gender"/>
    <NamedIndividual IRI="#mother"/>
    <Literal datatypeIRI="&rdf;PlainLiteral">female</Literal>
</DataPropertyAssertion>
<SubObjectPropertyOf>
    <ObjectProperty IRI="#fatherOf"/>
    <ObjectProperty IRI="#parentOf"/>
</SubObjectPropertyOf>
<DataPropertyDomain>
    <DataProperty IRI="#gender"/>
    <Class IRI="#Person"/>
</DataPropertyDomain>
<DataPropertyRange>
    <DataProperty IRI="#gender"/>
    <Datatype abbreviatedIRI="xsd:string"/>
</DataPropertyRange>

1 Ответ

5 голосов
/ 11 марта 2012

Итак, в ваших данных есть что-то вроде следующего:

:x  :parentOf  :y .
:x  :gender  "male" .

, и вы хотели бы сделать вывод, что:

:x  :fatherOf  :y .

Боюсь, вы не можете сделать это вСОВА.В таких случаях вы можете использовать язык правил, такой как SWRL, SPIN и т. Д. Однако для конкретного случая отца, матери и т. Д. Вы можете сделать следующее:

  • определить :hasParent как обратное :parentOf;
  • ограничить количество элементов от :hasParent до 2;
  • определить :hasFather как обратное к :fatherOf;
  • make :hasFather a owl:FunctionalProperty;
  • определить :hasMother как инверсию :motherOf;
  • make :hasMother a owl:FunctionalProperty;
  • определить класс :Man людей мужского пола;
  • определить класс :Woman людей женского пола;
  • сделать :Man дизъюнктив * :Woman;
  • установить диапазонот :hasFather до :Man;
  • установите диапазон от :hasMother до :Woman.

Таким образом, онтология выглядит так (в Turtle, потому что я незнакомы с OWL / XML):

:Person  a  owl:Class;
  rdfs:subClassOf  [
    a  owl:Restriction;
    owl:onProperty  :hasParent;
    owl:cardinality  2
  ] .
:Man  a  owl:Class;
  owl:equivalentclass  [
    a  owl:Class;
    owl:intersectionOf (
      :Person
      [
         a  owl:Restriction;
         owl:onProperty  :gender;
         owl:hasValue  "male";
      ]
    )
  ] .
:Woman  a  owl:Class;
  owl:equivalentclass  [
    a  owl:Class;
    owl:intersectionOf (
      :Person
      [
         a  owl:Restriction;
         owl:onProperty  :gender;
         owl:hasValue  "female";
      ]
    )
  ] .
:gender  a  owl:DatatypeProperty, owl:FunctionalProperty .
:hasParent  a  owl:ObjectProperty;
  owl:inverseOf  :parentOf;
  rdfs:domain  :Person;
  rdfs:range  :Person .
:hasFather  a  owl:ObjectProperty, owl:FunctionalProperty;
  rdfs:subPropertyOf  :hasParent;
  rdfs:range  :Man .
:hasMother  a  owl:ObjectProperty, owl:FunctionalProperty;
  rdfs:subPropertyOf  :hasParent;
  rdfs:range  :Woman .

Это должно сработать, но это очень сложная онтология и рассуждения с ней могут быть очень медленными.

Редактировать: Я добавил, что :gender должен быть функциональным, другойМудро может быть мать, которая в то же время является отцом, и это не сработает!

...