Rdf 我如何从OWL中的两个不同属性中通过传递推断出一些东西?
我正试图用Protege和猫头鹰制作我最喜欢的幻想世界的本体,但我被卡住了。我有两个问题我自己都搞不懂。但首先是设置: 在我的幻想世界里有许多种族,每个种族被划分成许多子行为——每个人都有不同的国王,崇拜不同的上帝,等等 Q1:我想做的是,知道一个角色a来自B阵营,B是C种族的一个阵营,那么我们应该能够推断a来自C种族 每个派系可能包含一些命名角色。我已经用以下三个类表达了这一点:Rdf 我如何从OWL中的两个不同属性中通过传递推断出一些东西?,rdf,owl,protege,Rdf,Owl,Protege,我正试图用Protege和猫头鹰制作我最喜欢的幻想世界的本体,但我被卡住了。我有两个问题我自己都搞不懂。但首先是设置: 在我的幻想世界里有许多种族,每个种族被划分成许多子行为——每个人都有不同的国王,崇拜不同的上帝,等等 Q1:我想做的是,知道一个角色a来自B阵营,B是C种族的一个阵营,那么我们应该能够推断a来自C种族 每个派系可能包含一些命名角色。我已经用以下三个类表达了这一点: 比赛 派系 性格 以及以下特性: ex:SomeFaction rdfs:subClassOf ex:Some
- 比赛
- 派系
- 性格
ex:SomeFaction rdfs:subClassOf ex:SomeRace .
ex:SomePerson a ex:SomeFaction .
- isOfRace-功能性,与containsFaction相反,域=派系,范围=种族
- containsFaction-与isOfRace相反,域=Race
- isofaction-功能,与containsCharacter相反,域=字符,范围=派系
- containsCharacter-异类的倒数,域=异类,范围=角色
谢谢 在我们深入研究OWL之前,您甚至可以使用RDF来实现这类功能,但不需要自定义属性:
ex:SomeFaction rdfs:subClassOf ex:SomeRace .
ex:SomePerson a ex:SomeFaction .
然而,我不喜欢这种方法,因为我认为类描述了实体不变的本质和结构,而至少派系肯定不这样。它还可能导致OWL中的冲突,因为如果您想将类用于其他用途,则某些概要文件不允许将类视为单独的
您的问题类似于试图用OWL描述
foaf:membershipClass
,这通常很难做到(没有黑客可能是不可能的)。可以根据具体情况进行描述,但是:
[
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 .
第二个问题需要类似的推理。我将尝试使用OWL2,因为我怀疑它在OWL1中是否可以表达
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
我不确定是否有更好的方法,但如果我找到了,我会更新这个答案。在我们深入研究OWL之前,您甚至可以使用RDF来实现这类功能,但不需要自定义属性:
ex:SomeFaction rdfs:subClassOf ex:SomeRace .
ex:SomePerson a ex:SomeFaction .
然而,我不喜欢这种方法,因为我认为类描述了实体不变的本质和结构,而至少派系肯定不这样。它还可能导致OWL中的冲突,因为如果您想将类用于其他用途,则某些概要文件不允许将类视为单独的
您的问题类似于试图用OWL描述
foaf:membershipClass
,这通常很难做到(没有黑客可能是不可能的)。可以根据具体情况进行描述,但是:
[
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 .
第二个问题需要类似的推理。我将尝试使用OWL2,因为我怀疑它在OWL1中是否可以表达
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
我不确定是否有更好的方法,但如果我找到了,我会更新此答案。这不是一个正确的答案,但我已尝试创建一个新的答案。你可以从中获得灵感(或者使用它,如果你愿意的话)。这不是一个正确的答案,但我已经尝试过创造一个新的答案。你可以从中获得灵感(如果你愿意,也可以使用它)。