我想建模一个本体,我可以这样说来表示实体的缺失。例如,我想要有 Rain 和 No_Rain,我会将它们定义为不相交的类。在此之后,我有了对象属性 has_rain。我想以某种方式能够推断出不可能同时为同一个人 has_rain(Rain) 和 has_rain(No_Rain) 我搜索了很多但找不到我的问题的答案。也许我在某个地方错过了它。对不起,如果我没有很好地解释一切,这是我的第一个问题。我希望你理解一切,并提前致谢!编辑:
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Object Properties
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.semanticweb.org/qala/ontologies/2021/1/untitled-ontology-28#has_rain -->
<owl:ObjectProperty rdf:about="http://www.semanticweb.org/qala/ontologies/2021/1/untitled-ontology-28#has_rain">
<rdfs:subPropertyOf rdf:resource="http://www.w3.org/2002/07/owl#topObjectProperty"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
</owl:ObjectProperty>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Classes
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.semanticweb.org/qala/ontologies/2021/1/untitled-ontology-28#No_Rain -->
<owl:Class rdf:about="http://www.semanticweb.org/qala/ontologies/2021/1/untitled-ontology-28#No_Rain"/>
<!-- http://www.semanticweb.org/qala/ontologies/2021/1/untitled-ontology-28#Rain -->
<owl:Class rdf:about="http://www.semanticweb.org/qala/ontologies/2021/1/untitled-ontology-28#Rain"/>
<!-- http://www.semanticweb.org/qala/ontologies/2021/1/untitled-ontology-28#Scene -->
<owl:Class rdf:about="http://www.semanticweb.org/qala/ontologies/2021/1/untitled-ontology-28#Scene"/>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Individuals
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.semanticweb.org/qala/ontologies/2021/1/untitled-ontology-28#no_rain -->
<owl:NamedIndividual rdf:about="http://www.semanticweb.org/qala/ontologies/2021/1/untitled-ontology-28#no_rain"/>
<!-- http://www.semanticweb.org/qala/ontologies/2021/1/untitled-ontology-28#rain -->
<owl:NamedIndividual rdf:about="http://www.semanticweb.org/qala/ontologies/2021/1/untitled-ontology-28#rain"/>
<!-- http://www.semanticweb.org/qala/ontologies/2021/1/untitled-ontology-28#scene -->
<owl:NamedIndividual rdf:about="http://www.semanticweb.org/qala/ontologies/2021/1/untitled-ontology-28#scene">
<has_rain rdf:resource="http://www.semanticweb.org/qala/ontologies/2021/1/untitled-ontology-28#rain"/>
</owl:NamedIndividual>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// General axioms
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<rdf:Description>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#AllDifferent"/>
<owl:distinctMembers rdf:parseType="Collection">
<rdf:Description rdf:about="http://www.semanticweb.org/qala/ontologies/2021/1/untitled-ontology-28#no_rain"/>
<rdf:Description rdf:about="http://www.semanticweb.org/qala/ontologies/2021/1/untitled-ontology-28#rain"/>
</owl:distinctMembers>
</rdf:Description>
</rdf:RDF>
我也开始使用 owlready,但我还是新手,但如果我必须在代码中对此进行建模,它将是:
with ontology:
class Rain(Thing):
pass
class No_Rain(Thing):
pass
class Scene(Thing):
pass
class has_rain(ObjectProperty):
domain = [Scene]
range = [Rain or No_Rain]
rain = Rain("rain")
no_rain = No_Rain("no_rain")
AllDisjoint(Rain, No_Rain)
我希望这能让它更清楚。
你似乎想定义可以有不同天气的场景。理想情况下,场景不应该同时有雪和干燥。
因为这是一个场景,我会定义不同类型的SceneWeather
,即DryScene
,SnowyScene
和RainyScene
,它们彼此不相交 - 不能同时下雪和下雨。然后我hasRain
用RainyScene
as定义对象属性,同样用hasSnow
和isDry
。
我已经SceneWeather
作为父类引入,假设你可能想要捕获各种与场景相关的信息。在下面的示例中,我包含SceneTimeOfDay
了Morning
作为子类和作为域的isMorning
对象属性Morning
。
基于以上内容,你可以snowyMorningScene
通过断言,因为snowyMorningScene
我们有hasSnow
和来定义 a isMorning
。使用推理器,它将推断出snowyMorningScene
类型为SnowyScene
和Morning
。如果你现在声明snowyMorningScene
isDry
,则会导致不一致。
以下是执行此操作的完整本体。
<rdf:RDF xmlns="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#"
xml:base="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291"
xmlns:owl="http://www.w3.org/2002/07/owl#"
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#"
xmlns:untitled-ontology-291="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#">
<owl:Ontology rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291"/>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Object Properties
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#isDry -->
<owl:ObjectProperty rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#isDry">
<rdfs:subPropertyOf rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#sceneWeather"/>
<rdfs:domain rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#DryScene"/>
</owl:ObjectProperty>
<!-- http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#isMorning -->
<owl:ObjectProperty rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#isMorning">
<rdfs:subPropertyOf rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#sceneTimeOfDay"/>
<rdfs:domain rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#Morning"/>
</owl:ObjectProperty>
<!-- http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#isRainy -->
<owl:ObjectProperty rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#isRainy">
<rdfs:subPropertyOf rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#sceneWeather"/>
<rdfs:domain rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#RainyScene"/>
</owl:ObjectProperty>
<!-- http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#isSnowy -->
<owl:ObjectProperty rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#isSnowy">
<rdfs:subPropertyOf rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#sceneWeather"/>
<rdfs:domain rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#SnowyScene"/>
</owl:ObjectProperty>
<!-- http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#sceneTimeOfDay -->
<owl:ObjectProperty rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#sceneTimeOfDay"/>
<!-- http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#sceneWeather -->
<owl:ObjectProperty rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#sceneWeather"/>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Classes
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#DryScene -->
<owl:Class rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#DryScene">
<rdfs:subClassOf rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#SceneWeather"/>
</owl:Class>
<!-- http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#MidDay -->
<owl:Class rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#MidDay">
<rdfs:subClassOf rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#SceneTimeOfDay"/>
<owl:disjointWith rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#Morning"/>
</owl:Class>
<!-- http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#Morning -->
<owl:Class rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#Morning">
<rdfs:subClassOf rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#SceneTimeOfDay"/>
</owl:Class>
<!-- http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#RainyScene -->
<owl:Class rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#RainyScene">
<rdfs:subClassOf rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#SceneWeather"/>
</owl:Class>
<!-- http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#Scene -->
<owl:Class rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#Scene"/>
<!-- http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#SceneTimeOfDay -->
<owl:Class rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#SceneTimeOfDay">
<rdfs:subClassOf rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#Scene"/>
</owl:Class>
<!-- http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#SceneWeather -->
<owl:Class rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#SceneWeather">
<rdfs:subClassOf rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#Scene"/>
</owl:Class>
<!-- http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#SnowyScene -->
<owl:Class rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#SnowyScene">
<rdfs:subClassOf rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#SceneWeather"/>
</owl:Class>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Individuals
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<!-- http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#dry -->
<owl:NamedIndividual rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#dry"/>
<!-- http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#morning -->
<owl:NamedIndividual rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#morning"/>
<!-- http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#snow -->
<owl:NamedIndividual rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#snow"/>
<!-- http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#snowyMorningScene -->
<owl:NamedIndividual rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#snowyMorningScene">
<isDry rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#dry"/>
<isMorning rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#morning"/>
<isSnowy rdf:resource="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#snow"/>
</owl:NamedIndividual>
<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// General axioms
//
///////////////////////////////////////////////////////////////////////////////////////
-->
<rdf:Description>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#AllDisjointClasses"/>
<owl:members rdf:parseType="Collection">
<rdf:Description rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#DryScene"/>
<rdf:Description rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#RainyScene"/>
<rdf:Description rdf:about="http://www.semanticweb.org/henriette/ontologies/2021/1/untitled-ontology-291#SnowyScene"/>
</owl:members>
</rdf:Description>
</rdf:RDF>
<!-- Generated by the OWL API (version 4.5.9.2019-02-01T07:24:44Z) https://github.com/owlcs/owlapi -->
嘿!谢谢你的建议。对不起,我想我还没有说清楚我到底需要什么。我希望能够表示实体的缺失。下雨场景在那里(场景 has_rain(Rain)),但我也希望能够表示场景没有任何下雨。我有这个问题,因为它的开放世界假设和与 has_rain 的缺失连接不足以知道场景没有雨。问题是 Reasoner 不知道实例何时是无实例,所以仅仅创建 no_rain 或类似类型的东西是不够的。
这就是为什么我试图让它们不相交的原因,但是类的不相交性不允许一个实例同时属于两个类。对于进一步的信息,我想不仅在下雨时使用“否”实例,而且还对例如没有鞋子、没有 T 恤等使用“否”实例。所以我的问题很普遍,如何表示那些“否”实例。提前致谢!
我也想在个人定义(匿名定义)的类表达式中使用它们,例如:has_rain 正好是 0 Rain。但我不确定这是否也是表示它的正确方式,因为它没有直接连接到具有对象属性的个体
我在这里写了关于开放世界假设以及如何处理它的文章。见也。
您也可以考虑使用 SWRL。在这里看到我的答案。