Как классифицировать людей в классе в соответствии с его количеством
Я создал эту онтологию, которая содержит два класса Car, Person и свойство объекта hasCar, которое имеет Person в качестве домена и Car в качестве диапазона.
Я хочу классифицировать людей (Persons) в multiCarOwner и OnlyCar person, вот онтология, которая представляет это:
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
<!ENTITY owl "http://www.w3.org/2002/07/owl#" >
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
]>
<rdf:RDF xmlns="http://www.owl-ontologies.com/Car.owl#"
xml:base="http://www.owl-ontologies.com/Car.owl"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<owl:Ontology rdf:about="http://www.owl-ontologies.com/Car.owl"/>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Object Properties
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.owl-ontologies.com/Car.owl#hasCar -->
<owl:ObjectProperty rdf:about="http://www.owl- ontologies.com/Car.owl#hasCar">
<rdfs:range rdf:resource="http://www.owl-ontologies.com/Car.owl#Car"/>
<rdfs:domain rdf:resource="http://www.owl-ontologies.com/Car.owl#Person"/>
</owl:ObjectProperty>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Classes
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.owl-ontologies.com/Car.owl#Car -->
<owl:Class rdf:about="http://www.owl-ontologies.com/Car.owl#Car"/>
<!-- http://www.owl-ontologies.com/Car.owl#CarOwner -->
<owl:Class rdf:about="http://www.owl-ontologies.com/Car.owl#CarOwner">
<owl:equivalentClass>
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<rdf:Description rdf:about="http://www.owl-ontologies.com/Car.owl#Person"/>
<owl:Restriction>
<owl:onProperty rdf:resource="http://www.owl-ontologies.com/Car.owl#hasCar"/>
<owl:allValuesFrom rdf:resource="http://www.owl-ontologies.com/Car.owl#Car"/>
</owl:Restriction>
<owl:Restriction>
<owl:onProperty rdf:resource="http://www.owl-ontologies.com/Car.owl#hasCar"/>
<owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality>
</owl:Restriction>
</owl:intersectionOf>
</owl:Class>
</owl:equivalentClass>
</owl:Class>
<!-- http://www.owl-ontologies.com/Car.owl#MultiCarOwner -->
<owl:Class rdf:about="http://www.owl-ontologies.com/Car.owl#MultiCarOwner">
<owl:equivalentClass>
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<rdf:Description rdf:about="http://www.owl-ontologies.com/Car.owl#CarOwner"/>
<owl:Restriction>
<owl:onProperty rdf:resource="http://www.owl-ontologies.com/Car.owl#hasCar"/>
<owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">2</owl:minCardinality>
</owl:Restriction>
</owl:intersectionOf>
</owl:Class>
</owl:equivalentClass>
</owl:Class>
<!-- http://www.owl-ontologies.com/Car.owl#OnlyCar -->
<owl:Class rdf:about="http://www.owl-ontologies.com/Car.owl#OnlyCar">
<owl:equivalentClass>
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<rdf:Description rdf:about="http://www.owl-ontologies.com/Car.owl#CarOwner"/>
<owl:Restriction>
<owl:onProperty rdf:resource="http://www.owl-ontologies.com/Car.owl#hasCar"/>
<owl:onClass rdf:resource="http://www.owl-ontologies.com/Car.owl#Car"/>
<owl:qualifiedCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:qualifiedCardinality>
</owl:Restriction>
</owl:intersectionOf>
</owl:Class>
</owl:equivalentClass>
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="http://www.owl-ontologies.com/Car.owl#hasCar"/>
<owl:onClass rdf:resource="http://www.owl-ontologies.com/Car.owl#Car"/>
<owl:qualifiedCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:qualifiedCardinality>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
<!-- http://www.owl-ontologies.com/Car.owl#Person -->
<owl:Class rdf:about="http://www.owl-ontologies.com/Car.owl#Person"/>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Individuals
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.owl-ontologies.com/Car.owl#Alice -->
<owl:NamedIndividual rdf:about="http://www.owl-ontologies.com/Car.owl#Alice">
<rdf:type rdf:resource="http://www.owl-ontologies.com/Car.owl#Person"/>
<hasCar rdf:resource="http://www.owl-ontologies.com/Car.owl#Car_2"/>
<hasCar rdf:resource="http://www.owl-ontologies.com/Car.owl#Car_7"/>
</owl:NamedIndividual>
<!-- http://www.owl-ontologies.com/Car.owl#Bob -->
<owl:NamedIndividual rdf:about="http://www.owl-ontologies.com/Car.owl#Bob">
<rdf:type rdf:resource="http://www.owl-ontologies.com/Car.owl#Person"/>
<hasCar rdf:resource="http://www.owl-ontologies.com/Car.owl#Car_2"/>
</owl:NamedIndividual>
<!-- http://www.owl-ontologies.com/Car.owl#Car_2 -->
<owl:NamedIndividual rdf:about="http://www.owl-ontologies.com/Car.owl#Car_2">
<rdf:type rdf:resource="http://www.owl-ontologies.com/Car.owl#Car"/>
</owl:NamedIndividual>
<!-- http://www.owl-ontologies.com/Car.owl#Car_7 -->
<owl:NamedIndividual rdf:about="http://www.owl-ontologies.com/Car.owl#Car_7">
<rdf:type rdf:resource="http://www.owl-ontologies.com/Car.owl#Car"/>
</owl:NamedIndividual>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// General axioms
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<rdf:Description>
<rdf:type rdf:resource="&owl;AllDifferent"/>
<owl:distinctMembers rdf:parseType="Collection">
<rdf:Description rdf:about="http://www.owl-ontologies.com/Car.owl#Car_2"/>
<rdf:Description rdf:about="http://www.owl-ontologies.com/Car.owl#Car_7"/>
</owl:distinctMembers>
</rdf:Description>
Тем не менее, рассуждатель не дает мне того результата, который мне нужен, когда я создаю личность, я хочу, чтобы класс "OnlyCar" имел в качестве членов: "людей с ровно 1 машиной".
Результат рассуждения является частичным, потому что вкладка лиц в протеже показывает следующее:
Изображения выше показывают личность "Боб" в качестве члена CarOwner, но я хочу, чтобы этот "Боб" был членом класса "onlyCar".
-Я сталкиваюсь с проблемой OWA? Есть способ добиться того, чего я хочу?
1 ответ
Изображения выше показывают личность "Боб" в качестве члена CarOwner, но я хочу, чтобы этот "Боб" был членом класса "onlyCar". -Я сталкиваюсь с проблемой OWA? Есть способ добиться того, чего я хочу?
Вы сказали, что Бобу принадлежит машина, но вы не сказали, что Бобу не принадлежит ни одна другая машина. Не сказав этого, вы не можете быть уверены, что он владеет только одной машиной. Вам нужно добавить еще одно утверждение типа в bob, а именно:
hasCar only {Car_2}
Затем, поскольку вы знаете, что он владеет Car_2, и знаете, что он владеет только Car_2, вы сможете сделать вывод, что Боб является элементом
hasCar ровно 1 автомобиль