我正在尝试使用 Protege 和 OWL 制作我最喜欢的幻想世界的本体,但我被卡住了。我有两个问题,我自己也搞不清楚。但首先这里是设置:
在我的幻想世界中,有很多种族,每个种族又分为许多子派系——每个派系都有不同的国王,崇拜不同的神,等等。
Q1 : 我想要能够做的是,知道一个角色 A 来自 B 阵营,B 是 C 种族阵营,那么我们应该能够推断出 A 来自 C 种族。
每个派系可能包含一些命名角色。我已经用以下三个类表达了这一点:
以及以下属性:
我已将属性添加到相应的类中。我知道一般来说,一个派系可以有多个“isOfRace”类型的属性,所以如果是这种情况,推理引擎将不知道其中哪些是角色的“真正”种族,但我又一次创建了这些属性“ isOfRace" 和 "isOfFaction" 功能正常,所以我认为应该不成问题。
Q2:只有当我在 Q1 中提出的问题可行时,Q2 才是相关的。无论如何,让我们再次布置设置:
每个派系可以有多个城市(每个城市由一个派系拥有),每个城市都位于一个大陆上。每个派系也被对立的双方分类为“秩序”或“混乱”。OWL 是否支持表示以下内容的构造:
一个派系与另一个派系发生冲突(传递) iff:
或者换句话说,可以推断出一个属性,如果是,我应该如何实施上述限制?
谢谢!
在我们深入研究 OWL 之前,你甚至可以将 RDFS 用于此类事情,但无需自定义属性:
ex:SomeFaction rdfs:subClassOf ex:SomeRace .
ex:SomePerson a ex:SomeFaction .
然而,我不喜欢这种方法,因为我将类视为描述实体的不可变本质和结构的东西,至少派系肯定不会。这也可能导致 OWL 中的冲突,因为某些配置文件不允许将类视为个人,如果你想将其用于其他用途。
你的问题类似于尝试foaf:membershipClass
用 OWL来描述,这通常很难做到(如果没有 hack 可能是不可能的)。但是,可以在每个案例的基础上对其进行描述:
[
a owl:Restriction ;
owl:onProperty ex:isOfFaction ;
owl:hasValue ex:SomeFaction
] rdfs:subClassOf [
a owl:Restriction ;
owl:onProperty ex:hasRace ;
owl:hasValue ex:SomeRace
]
这基本上是在暗示任何具有特定派系的人都有特定的种族。
但是,我认为你可以在这里利用传递性来发挥自己的优势:
ex:isOfGroup a owl:TransitiveProperty .
ex:isOfRace rdfs:subPropertyOf ex:isOfGroup .
ex:isOfFaction rdfs:subPropertyOf ex:isOfGroup .
ex:SomeFaction ex:isOfRace ex:SomeRace .
ex:SomePerson ex:isOfFaction ex:SomeFaction .
我们可以推断出ex:SomePerson ex:isOfGroup ex:SomeRace
。
在 OWL 2 中,它被简化为属性链:
[
owl:propertyChainAxiom ( ex:isOfFaction ex:isOfRace )
] rdfs:subPropertyOf ex:hasRace .
第二个问题需要类似的推理。我将尝试使用 OWL 2,因为我怀疑它是否可以在 OWL 1 中表达。
ex:occupiesContinent owl:propertyChainAxiom ( ex:controlsCity ex:onContinent ) .
ex:occupiedByFaction owl:inverseOf ex:occupiesContinent .
ex:sharesContinentWith owl:propertyChainAxiom ( ex:occupiesContinent ex:occupiedByFaction ) .
ex:alignmentOf owl:inverseOf owl:hasAlignment .
ex:hasSameAlignment owl:propertyChainAxiom ( ex:hasAlignment ex:alignmentOf ) .
问题在于我们无法对属性的连接和否定进行建模。但是,我们可以使用上面的示例来模拟特定派系的敌人:
[
owl:intersectionOf (
[
a owl:Restriction ;
owl:onProperty ex:sharesContinentWith ;
owl:hasValue ex:SomeFaction
] [
owl:complementOf [
a owl:Restriction ;
owl:onProperty ex:hasSameAlignment ;
owl:hasValue ex:SomeFaction
]
]
)
] owl:equivalentClass [
a owl:Restriction ;
owl:onProperty ex:isInConflict ;
owl:hasValue ex:SomeFaction
] .
这表示任何与一个特定派系共享同一大陆且不具有相同阵营的派系必须与该派系相关ex:isInConflict
。
我不确定是否有更好的方法,但如果我找到了,我会更新这个答案。