2012-02-22 3 views
2

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

"ребенок", "мать", "отец" являются персоны сек father.gender = "мужчина" свойство данных mother.gender = "женщина"

(а мужчина subclassOf Person = эквивалентный класс «пол значение «мужской»)

отец parentOf ребенка объектные отношения мать parentOf ребенка объектные отношения

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

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

Определение отцаOf как подзадачи и (вручную) настройка fatherOf вместо 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> 

ответ

5

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

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

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

:x :fatherOf :y . 

Я боюсь, что вы не можете сделать это в СОВА. В случаях, как этот, вы можете полагаться на языке правил, как 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.

Так онтология выглядит следующим образом (в черепахе, потому что я не знаком с 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 должен быть функциональным, иначе может быть мать, которая в то же время является отцом, и это не сработает!

+0

спасибо, Антуан, трюк состоял в том, чтобы сделать depo от отца и motherOf от parentOf и ограничивать их диапазон! остальное остается для рассудителя - хотя время не имеет значения в наборе из 60 000 узлов ... – Torx

Смежные вопросы