Я создал очень простую онтологию в протеже, а также создал некоторую аксиому онтологии в правилах для понимания гибридной базы знаний. Я использую NoHR в Protege, что дает возможность писать немонотонные c правила вместе с онтологией и запрашивать как онтологию, так и правила вместе. У меня сложилось впечатление, что если я напишу правило, подобное isSubClassOf (? C,? D), оно также пройдет по части онтологии и вернет мне подклассы, которые существуют в онтологии. но когда я запрашиваю isSubClassOf (? C,? D), он ничего мне не возвращает. С другой стороны, если я упоминаю все классы и подклассы в части правил, он возвращает мне подклассы. То же самое относится к классу дизъюнкт и т. д. c, а также, если 2 класса не являются дизъюнктными в онтологии, но правило дизъюнкта говорит, что они дизъюнктны и истинны. Я не знаю, либо мое понимание неверно относительно гибридной базы знаний, либо мои правила неверны.
<?xml version="1.0"?>
<Ontology xmlns="http://www.w3.org/2002/07/owl#"
xml:base="http://www.semanticweb.org/user/ontologies/2020/1/untitled-ontology-61"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
ontologyIRI="http://www.semanticweb.org/user/ontologies/2020/1/untitled-ontology-61">
<Prefix name="" IRI="http://www.semanticweb.org/user/ontologies/2020/1/untitled-ontology-61"/>
<Prefix name="owl" IRI="http://www.w3.org/2002/07/owl#"/>
<Prefix name="rdf" IRI="http://www.w3.org/1999/02/22-rdf-syntax-ns#"/>
<Prefix name="xml" IRI="http://www.w3.org/XML/1998/namespace"/>
<Prefix name="xsd" IRI="http://www.w3.org/2001/XMLSchema#"/>
<Prefix name="rdfs" IRI="http://www.w3.org/2000/01/rdf-schema#"/>
<Declaration>
<Class IRI="#BateleurEagle"/>
</Declaration>
<Declaration>
<Class IRI="#Bird"/>
</Declaration>
<Declaration>
<Class IRI="#Eagle"/>
</Declaration>
<Declaration>
<Class IRI="#GoldenEagle"/>
</Declaration>
<Declaration>
<Class IRI="#RedListSpecies"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#Harry"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#Tim"/>
</Declaration>
<SubClassOf>
<Class IRI="#BateleurEagle"/>
<Class IRI="#Eagle"/>
</SubClassOf>
<SubClassOf>
<Class IRI="#Eagle"/>
<Class IRI="#Bird"/>
</SubClassOf>
<SubClassOf>
<Class IRI="#GoldenEagle"/>
<Class IRI="#Eagle"/>
</SubClassOf>
<DisjointClasses>
<Class IRI="#BateleurEagle"/>
<Class IRI="#GoldenEagle"/>
</DisjointClasses>
<ClassAssertion>
<Class IRI="#GoldenEagle"/>
<NamedIndividual IRI="#Harry"/>
</ClassAssertion>
<ClassAssertion>
<Class IRI="#BateleurEagle"/>
<NamedIndividual IRI="#Tim"/>
</ClassAssertion>
</Ontology>
и правила:
isSubClassOf(?C,?E) :- isSubClassOf(?C,?D), isSubClassOf(?D,?E)
isSuperClassOf(?C,?E) :- isSubClassOf(?C,?E)
isDisjointClass(?C,?D) :- classAssertion(?X,?C), not classAssertion(?X,?D)