Правила и Онтология в гибридной КБ - PullRequest
0 голосов
/ 29 апреля 2020

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