如何解决如何从 OWL 中的两个不同属性中可传递地推断出某些内容?
我正在尝试使用 Protege 和 OWL 制作我最喜欢的幻想世界的本体,但我被卡住了。我有两个问题,我自己也搞不清楚。但首先这里是设置:
在我的幻想世界中,有很多种族,每个种族又分为许多子派系——每个派系都有不同的国王,崇拜不同的神,等等。
Q1:我想要能够做的是,知道角色 A 来自 B 派系,B 是种族 C 派系,那么我们应该能够推断出 A 是来自 C 种族。
每个派系可能包含一些已命名的角色。我已经用以下三个类表达了这一点:
- 比赛
- 派系
- 人物
以及以下属性:
- isOfRace - 函数式,containsFaction 的逆,domain=Faction,range=Race
- containsFaction - isOfRace 的倒数,domain=Race
- isOfFaction - 函数式,consoleCharacter 的反函数,domain=Character,range=Faction
- containsCharacter - isOfFaction 的倒数,domain=Faction,range=Character
并且我已将属性添加到相应的类中。我知道一般来说,一个派系可以有多个“isOfRace”类型的属性,所以如果是这种情况,推理引擎将不知道其中哪些是角色的“真正”种族,但我又一次创建了这些属性“ isOfRace”和“isOfFaction”功能正常,所以我认为应该没有问题。
Q2:只有当我在 Q1 中提出的问题可行时,Q2 才是相关的。无论如何,让我们再次布置设置:
每个派系可以有多个城市(每个城市归一个派系所有),每个城市都位于一个大陆上。每个派系也被对立的双方分类为“秩序”或“混乱”。 OWL 是否支持表示以下内容的构造:
一个派系与另一个派系发生冲突(传递):
- 他们都在同一大陆上至少有一个城市
- 它们具有不同的对齐方式 - 例如一个是“秩序”,一个是“混沌”
或者换句话说,是否可以推断属性,如果是,我应该如何实施上述限制?
谢谢!
解决方法
在我们深入研究 OWL 之前,您甚至可以将 RDFS 用于此类事情,但无需自定义属性:
ex:SomeFaction rdfs:subClassOf ex:SomeRace .
ex:SomePerson a ex:SomeFaction .
然而,我不喜欢这种方法,因为我将类视为描述实体的不可变本质和结构的东西,至少派系肯定不会。这也可能导致 OWL 中的冲突,因为某些配置文件不允许将类视为个人,如果您想将其用于其他用途。
您的问题类似于尝试用 OWL 来描述 foaf:membershipClass
,这通常很难做到(如果没有 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
。
我不确定是否有更好的方法,但如果找到我会更新此答案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。