OWL: ограничение собственности на основе ценностей: возможно ли это вообще?

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

"kid", "mother", "Father" - это свойство данных человека Father.gender = "male" mother.gender = "female"

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

отец parentOf дочернее объектное отношение мать parentOf дочернее объектное отношение

Как определить свойство 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>

person Torx    schedule 22.02.2012    source источник


Ответы (1)


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

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

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

:x  :fatherOf  :y .

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

  • определите :hasParent как инверсию :parentOf;
  • ограничить мощность :hasParent до 2;
  • определите :hasFather как инверсию :fatherOf;
  • сделать :hasFather a owl:FunctionalProperty;
  • определите :hasMother как инверсию :motherOf;
  • сделать :hasMother a owl:FunctionalProperty;
  • определить класс :Man мужчин;
  • определить класс :Woman женщин;
  • сделать :Man disjointWith :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 должен быть работоспособным, иначе может быть мать, которая одновременно является отцом, и это не сработает!

person Antoine Zimmermann    schedule 10.03.2012
comment
спасибо, Антуан, уловка заключалась в том, чтобы сделать дочерние свойства parentOf и motherOf для parentOf и ограничить их диапазон! остальное остается на усмотрение рассуждающего - хотя время не имеет значения для набора из 60 000 узлов ... - person Torx; 27.04.2012