Как определить домен свойства в OWL?

Я хочу построить онтологию для работы с людьми, зараженными или не зараженными болезнями:

<?xml version="1.0"?>
</rdf:RDF>
    <owl:Class rdf:about="&person;Disease"/>

    <owl:Class rdf:about="&person;HealthyPerson">
        <rdfs:subClassOf rdf:resource="&person;Person"/>
        <owl:disjointWith rdf:resource="&person;SickPerson"/>
    </owl:Class>

    <owl:Class rdf:about="&person;Person"/>

    <owl:Class rdf:about="&person;SickPerson">
        <rdfs:subClassOf rdf:resource="&person;Person"/>
    </owl:Class>
</rdf:RDF>

Графически:

иерархия классов в виде дерева

Как я могу определить свойство has_disease(Person, Disease) таким образом, чтобы человек типа Person, связанный с некоторым Disease посредством has_disease, тоже имел тип SickPerson?


person Fopa Léon Constantin    schedule 05.03.2012    source источник


Ответы (2)


Как насчет этого?

<owl:ObjectProperty rdf:ID="hasDisease">
  <rdfs:domain rdf:resource="#SickPerson"/>
  <rdfs:range rdf:resource="#Disease"/>
</owl:ObjectProperty>
person Lukasz    schedule 05.03.2012
comment
Я проверял это, но рассудитель, похоже, не может сделать правильный вывод. Я использовал RacePro в качестве резона на Protege 4. - person Fopa Léon Constantin; 13.03.2012
comment
Это запрещает использование hasDisease для всего, что не является человеком. Кошка, собака, дерево могут болеть. - person Antoine Zimmermann; 13.09.2013
comment
@AntoineZimmermann, вы абсолютно правы, но в вопросе ОП упоминался только Человек. - person Lukasz; 13.09.2013

Для этого можно использовать экзистенциальное ограничение. В приведенном ниже примере человек joe будет считаться SickPerson

<owl:ObjectProperty rdf:about="has_disease"/>
<owl:Class rdf:about="Disease"/>
<owl:Class rdf:about="Person"/>
<owl:Class rdf:about="SickPerson">
    <owl:equivalentClass>
        <owl:Restriction>
            <owl:onProperty rdf:resource="has_disease"/>
            <owl:someValuesFrom rdf:resource="Disease"/>
        </owl:Restriction>
    </owl:equivalentClass>
    <rdfs:subClassOf rdf:resource="Person"/>
</owl:Class>

<owl:NamedIndividual rdf:about="flu">
    <rdf:type rdf:resource="Disease"/>
</owl:NamedIndividual>
<owl:NamedIndividual rdf:about="joe">
    <rdf:type rdf:resource="Person"/>
    <has_disease rdf:resource="flu"/>
</owl:NamedIndividual>
person loopasam    schedule 04.09.2013