私は最近、実践するために小さなオントロジーを作成しました。私のオントロジーには、1 つの SWRL ルールによって定義された、EmployedPerson というクラスが存在します: Person(?x), (worksin min 1 Place)(?x) -> EmployedPerson(?x)。
また、クラス式で定義された UnEmployedPerson という別のクラスがあります。(Person and (not (EmployedPerson))) と同等です。これは、UnEmployedPerson が EmployedPerson の補数であることを意味します。
上記の両方のクラス (EmployedPerson と UnEmployedPerson) は Person のサブクラスであり、person は「EmployedPerson または UnEmployedPerson」として設定されます。Person クラスには、Ivan、Lenka、Martin の 3 人の個人がいます。すべての個人は異なる個人です。
別のクラス Place には、個別の「WorksApplication」があります。オブジェクト プロパティ 'worksin' は、クラス 'Person' とクラス 'Place' をリンクします。
私のオントロジーには、次の 2 つの公理があります。 Lenka は Worksapplication で機能します Martin は Worksapplication で機能します Pellet と HermiT による推論の後、Lenka と Martin は SWRL ルールに基づいて EmployedPerson のメンバーであると推論できます。
Ivan は EmployedPerson に属しておらず、UnEmployedPerson は EmployedPerson の補数であるため、Evan はクラス UnEmployedPerson のメンバーとして推論される必要があります。
しかし実際には、Pellet と Hermit による推論の後、Ivan はクラス UnEmployedPerson で推論できません。結果は私の期待に応えませんでした。ONTOLOGY に何か問題がありますか、それとも OWA の効果を無視していますか? その問題に対処するのを手伝ってください。クラス UnEmployedPerson で Ivan が推論されるのを見たいです!!
この動作を示すオントロジーは次のとおりです。
<Declaration>
<Class IRI="#Adult"/>
</Declaration>
<Declaration>
<Class IRI="#EmployedPerson"/>
</Declaration>
<Declaration>
<Class IRI="#Parent"/>
</Declaration>
<Declaration>
<Class IRI="#Person"/>
</Declaration>
<Declaration>
<Class IRI="#Place"/>
</Declaration>
<Declaration>
<Class IRI="#UnemployedPerson"/>
</Declaration>
<Declaration>
<ObjectProperty IRI="#wokrsin"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#Ivan"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#Lenka"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#Martin"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#TreatHighBloodSugar"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#worksapplication"/>
</Declaration>
<EquivalentClasses>
<Class IRI="#Person"/>
<ObjectUnionOf>
<Class IRI="#EmployedPerson"/>
<Class IRI="#UnemployedPerson"/>
</ObjectUnionOf>
</EquivalentClasses>
<EquivalentClasses>
<Class IRI="#UnemployedPerson"/>
<ObjectIntersectionOf>
<Class IRI="#Person"/>
<ObjectComplementOf>
<Class IRI="#EmployedPerson"/>
</ObjectComplementOf>
</ObjectIntersectionOf>
</EquivalentClasses>
<SubClassOf>
<Class IRI="#Adult"/>
<Class IRI="#Person"/>
</SubClassOf>
<SubClassOf>
<Class IRI="#EmployedPerson"/>
<Class IRI="#Person"/>
</SubClassOf>
<SubClassOf>
<Class IRI="#Parent"/>
<Class IRI="#Person"/>
</SubClassOf>
<SubClassOf>
<Class IRI="#UnemployedPerson"/>
<Class IRI="#Person"/>
</SubClassOf>
<DisjointClasses>
<Class IRI="#Person"/>
<Class IRI="#Place"/>
</DisjointClasses>
<ClassAssertion>
<Class IRI="#Person"/>
<NamedIndividual IRI="#Ivan"/>
</ClassAssertion>
<ClassAssertion>
<Class IRI="#Person"/>
<NamedIndividual IRI="#Lenka"/>
</ClassAssertion>
<ClassAssertion>
<Class IRI="#Person"/>
<NamedIndividual IRI="#Martin"/>
</ClassAssertion>
<ClassAssertion>
<Class IRI="#Place"/>
<NamedIndividual IRI="#worksapplication"/>
</ClassAssertion>
<DifferentIndividuals>
<NamedIndividual IRI="#Ivan"/>
<NamedIndividual IRI="#Lenka"/>
</DifferentIndividuals>
<DifferentIndividuals>
<NamedIndividual IRI="#Ivan"/>
<NamedIndividual IRI="#Martin"/>
</DifferentIndividuals>
<DifferentIndividuals>
<NamedIndividual IRI="#Ivan"/>
<NamedIndividual IRI="#worksapplication"/>
</DifferentIndividuals>
<DifferentIndividuals>
<NamedIndividual IRI="#Lenka"/>
<NamedIndividual IRI="#Martin"/>
</DifferentIndividuals>
<DifferentIndividuals>
<NamedIndividual IRI="#Lenka"/>
<NamedIndividual IRI="#worksapplication"/>
</DifferentIndividuals>
<DifferentIndividuals>
<NamedIndividual IRI="#Martin"/>
<NamedIndividual IRI="#worksapplication"/>
</DifferentIndividuals>
<ObjectPropertyAssertion>
<ObjectProperty IRI="#wokrsin"/>
<NamedIndividual IRI="#Lenka"/>
<NamedIndividual IRI="#worksapplication"/>
</ObjectPropertyAssertion>
<ObjectPropertyAssertion>
<ObjectProperty IRI="#wokrsin"/>
<NamedIndividual IRI="#Martin"/>
<NamedIndividual IRI="#worksapplication"/>
</ObjectPropertyAssertion>
<DLSafeRule>
<Body>
<ClassAtom>
<Class IRI="#Person"/>
<Variable abbreviatedIRI="var:x"/>
</ClassAtom>
<ClassAtom>
<ObjectMinCardinality cardinality="1">
<ObjectProperty IRI="#wokrsin"/>
<Class IRI="#Place"/>
</ObjectMinCardinality>
<Variable abbreviatedIRI="var:x"/>
</ClassAtom>
</Body>
<Head>
<ClassAtom>
<Class IRI="#EmployedPerson"/>
<Variable abbreviatedIRI="var:x"/>
</ClassAtom>
</Head>
</DLSafeRule>