SW-*_*SAP 2 semantic-web owl ontology protege description-logic
我正在使用Protégé4.3创建一个简单的本体,并尝试创建一个模型,以使C类的每个实例对于给定的属性p都具有特定的值v,它是V类的实例。我可以使用公理来得到这个推论
C subClassOf(p 值 v)
但我想我希望能够按照
C subClassOf(p 一些 V)
因为我实际上希望C的每个实例都与V的每个实例相关。
我的示例是汽车和动作-我想为汽车创建一组动作。当我创建汽车的新实例时,我希望每个实例都有一套动作。如果我添加了新的动作实例,我希望所有汽车实例都能反映出它们所有相关的动作。
为了进一步说明,我定义了Auto类和两个子类:Car和Truck。我还定义了一个Action类和一个子类TruckAction。我定义了具有域自动和范围动作的hasAction属性,以关联自动和动作。我进一步创建了几个不同类型的人:
当我将Car 设为(hasAction值Accelerate)的子类时,我可以看到ChevyMalibu具有推断的对象属性hasAction Accelerate,但这似乎类似于对对象属性断言进行硬编码。我想为ChevyMalibu推断所有的汽车动作,以及为F150推断所有的 TruckActions 。我不太确定为什么做类似使Car成为(hasAction和Action的子类)之类的事情不会使我到那里。
您正确地注意到,如果单个x是p值y的实例,则将推断断言p(x,y)。但是,简单地说x是p的一个实例,有些Y不会(没有更多信息)不会让您推断出任何特定y i的 p(x,y i),即使y i是唯一的特定您声明的Y的实例。这是因为OWL做出了开放世界假设; 仅仅因为您还没有说某件事是正确的(或错误的),并不表示它不可能是正确的(或错误的)。(当然,您可能已经说过其他话,可以让您确定是真还是假。)这在另一个问题中进行了详细说明,为什么这个DL查询不返回任何个人?
如果我对它的理解正确,那么您想要做的就是说:
- 每个车辆都通过hasAction与每个Action相关联
- 每个汽车都通过hasAction与每个CarAction相关联
- 每个卡车都由hasAction关联到每个TruckAction
您可以通过两种方法来执行此操作。最简单的方法是简单地使用一些SWRL规则,另一个称为rolification。
您可以编写与上述规则相对应的SWRL规则,它们非常容易编写:
Vehicle(?v)∧Action(?a)→hasAction(?v,?a)
Car(?v)∧CarAction(?a)→hasAction(?v,?a)
Truck(?v)∧TruckAction(?a )→hasAction(?v,?a)
如果使用所有这些规则,则会发现每辆车的动作要多于您想要的动作,因为根据第一个规则,每辆车都与每个动作相关。例如,由于每个TruckAction也是Action,并且由于每辆Car都是Vehicle,因此第一个规则会将每个TruckAction与每辆Car关联起来,而您并不是真正想要的。即使这样,在这里使用一些规则也可能是最简单的选择。
如果您不想使用SWRL规则,那么另一个选择是rolification。我已经在回答几个问题时描述了旋转,以及如何进行旋转,因此您应该看一下:
这些将为您提供有关细化的更多详细信息。但是,要点是,我们获得了具有特殊行为的新属性,例如R Car:它们仅将特定类的实例与该相同实例相关联。例如,R Car将Car的每个实例与其 自身相关联,并且不执行其他任何操作。它实际上是特定类上的等价关系。
汽化在这里有什么用?这意味着我们可以使用子属性链公理来推断某些hasAction属性。例如,
hasAction⊑R Car •topObjectProperty•R CarAction
从本质上讲,这等效于SWRL规则(topObjectProperty是OWL的内置属性,将所有内容与所有内容相关联):
R Car(?c,?c)∧topObjectProperty(?c,?a)∧R CarAction(?a,?a)→hasAction(?c,?a)
但是,有两个优点:
但是,您仍然会遇到与SWRL规则的特殊性相同的问题;如果您通过hasAction表示每个Vehicle与每个Action相关,那么该子属性链也将应用于vehicle的子类和action的子类。
但是,有一个明显的缺点:对于要在这些“规则”之一中使用的每个类,您都需要一个新属性和一个等效的类公理,这变得有些乏味。
由于SWRL规则方法和带有rolification方法的子属性链都存在以下问题:将每个车辆与每个动作相关联的通用规则将捕获Action子类中的所有动作,以及Vehicles子类中的车辆,因此您可能需要重组其中一个您的层次结构有点。我建议不要
Action
CarAction
TruckAction
Run Code Online (Sandbox Code Playgroud)
你用的
Action
VehicleAction
CarAction
TruckAction
Run Code Online (Sandbox Code Playgroud)
而不是反映“车辆”下的层次结构。这样,您可以编写以下形式的规则:
每个车辆是关系到每一个GenericAction由hasAction
每车是关系到每一个CarAction由hasAction
每卡车是关系到每一个TruckAction由hasAction
如果使用SWRL规则执行此操作,则它看起来像这样:

(Protégé的默认布局可能未包括编辑SWRL规则的位置。有关获取一个Protégé-OWL/ SWRL的说明,请参阅我对Ontology属性定义的回答。有关该操作的说明,请稍作调整;您无需下载或安装任何东西。)这将产生如下结果:

您可以复制并粘贴此本体:
@prefix : </sf/ask/1505893581/#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix swrl: <http://www.w3.org/2003/11/swrl#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix swrlb: <http://www.w3.org/2003/11/swrlb#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
:Action a owl:Class .
<urn:swrl#a> a swrl:Variable .
:DodgeRam a owl:NamedIndividual , :Truck .
:Truck a owl:Class ;
rdfs:subClassOf :Vehicle .
:Car a owl:Class ;
rdfs:subClassOf :Vehicle .
<urn:swrl#v> a swrl:Variable .
:LoadCargo a owl:NamedIndividual , :TruckAction .
[ a swrl:Imp ;
swrl:body [ a swrl:AtomList ;
rdf:first [ a swrl:ClassAtom ;
swrl:argument1 <urn:swrl#a> ;
swrl:classPredicate :GenericAction
] ;
rdf:rest [ a swrl:AtomList ;
rdf:first [ a swrl:ClassAtom ;
swrl:argument1 <urn:swrl#v> ;
swrl:classPredicate :Vehicle
] ;
rdf:rest ()
]
] ;
swrl:head [ a swrl:AtomList ;
rdf:first [ a swrl:IndividualPropertyAtom ;
swrl:argument1 <urn:swrl#v> ;
swrl:argument2 <urn:swrl#a> ;
swrl:propertyPredicate :hasAction
] ;
rdf:rest ()
]
] .
:Accelerate a owl:NamedIndividual , :GenericAction .
:F150 a owl:NamedIndividual , :Truck .
:FordFocusZX5 a owl:NamedIndividual , :Car .
[ a swrl:Imp ;
swrl:body [ a swrl:AtomList ;
rdf:first [ a swrl:ClassAtom ;
swrl:argument1 <urn:swrl#c> ;
swrl:classPredicate :Car
] ;
rdf:rest [ a swrl:AtomList ;
rdf:first [ a swrl:ClassAtom ;
swrl:argument1 <urn:swrl#a> ;
swrl:classPredicate :CarAction
] ;
rdf:rest ()
]
] ;
swrl:head [ a swrl:AtomList ;
rdf:first [ a swrl:IndividualPropertyAtom ;
swrl:argument1 <urn:swrl#c> ;
swrl:argument2 <urn:swrl#a> ;
swrl:propertyPredicate :hasAction
] ;
rdf:rest ()
]
] .
:Brake a owl:NamedIndividual , :GenericAction .
:hasAction a owl:ObjectProperty .
:GenericAction a owl:Class ;
rdfs:subClassOf :Action .
</sf/ask/1505893581/>
a owl:Ontology .
:Vehicle a owl:Class .
<urn:swrl#c> a swrl:Variable .
:ChevyMalibu a owl:NamedIndividual , :Car .
<urn:swrl#t> a swrl:Variable .
:CarAction a owl:Class ;
rdfs:subClassOf :Action .
[ a swrl:Imp ;
swrl:body [ a swrl:AtomList ;
rdf:first [ a swrl:ClassAtom ;
swrl:argument1 <urn:swrl#t> ;
swrl:classPredicate :Truck
] ;
rdf:rest [ a swrl:AtomList ;
rdf:first [ a swrl:ClassAtom ;
swrl:argument1 <urn:swrl#a> ;
swrl:classPredicate :TruckAction
] ;
rdf:rest ()
]
] ;
swrl:head [ a swrl:AtomList ;
rdf:first [ a swrl:IndividualPropertyAtom ;
swrl:argument1 <urn:swrl#t> ;
swrl:argument2 <urn:swrl#a> ;
swrl:propertyPredicate :hasAction
] ;
rdf:rest ()
]
] .
:TruckAction a owl:Class ;
rdfs:subClassOf :Action .
Run Code Online (Sandbox Code Playgroud)
如果您使用rolification进行此操作,则如下所示:

您会得到预期的结果:

您可以复制并粘贴此本体:
@prefix : </sf/ask/1505893581/#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
:GenericAction a owl:Class ;
rdfs:subClassOf :Action ;
owl:equivalentClass [ a owl:Restriction ;
owl:hasSelf true ;
owl:onProperty :R_GenericAction
] .
:Car a owl:Class ;
rdfs:subClassOf :Vehicle ;
owl:equivalentClass [ a owl:Restriction ;
owl:hasSelf true ;
owl:onProperty :R_Car
] .
:CarAction a owl:Class ;
rdfs:subClassOf :Action ;
owl:equivalentClass [ a owl:Restriction ;
owl:hasSelf true ;
owl:onProperty :R_CarAction
] .
:R_TruckAction a owl:ObjectProperty .
:R_Car a owl:ObjectProperty .
:Truck a owl:Class ;
rdfs:subClassOf :Vehicle ;
owl:equivalentClass [ a owl:Restriction ;
owl:hasSelf true ;
owl:onProperty :R_Truck
] .
:Brake a owl:NamedIndividual , :GenericAction .
:hasAction a owl:ObjectProperty ;
owl:propertyChainAxiom ( :R_Vehicle owl:topObjectProperty :R_GenericAction ) ;
owl:propertyChainAxiom ( :R_Car owl:topObjectProperty :R_CarAction ) ;
owl:propertyChainAxiom ( :R_Truck owl:topObjectProperty :R_TruckAction ) .
:R_CarAction a owl:ObjectProperty .
:R_Truck a owl:ObjectProperty .
:F150 a owl:NamedIndividual , :Truck .
:Accelerate a owl:NamedIndividual , :GenericAction .
:Action a owl:Class .
:ChevyMalibu a owl:NamedIndividual , :Car .
:R_Vehicle a owl:ObjectProperty .
:FordFocusZX5 a owl:NamedIndividual , :Car .
:R_GenericAction a owl:ObjectProperty .
:TruckAction a owl:Class ;
rdfs:subClassOf :Action ;
owl:equivalentClass [ a owl:Restriction ;
owl:hasSelf true ;
owl:onProperty :R_TruckAction
] .
:DodgeRam a owl:NamedIndividual , :Truck .
</sf/ask/1505893581/>
a owl:Ontology .
:LoadCargo a owl:NamedIndividual , :TruckAction .
:Vehicle a owl:Class ;
owl:equivalentClass [ a owl:Restriction ;
owl:hasSelf true ;
owl:onProperty :R_Vehicle
] .
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1146 次 |
| 最近记录: |