属性公理
我们能够根据属性与类与其他属性如何关联来指定属性的额外特性。
- 定义域和值域 OWL2处理属性的定义域和值域的方式和RDFs一样。一个常见的误解是将定义域和值域用作约束,约束了可能通过该属性关联的个体类型。事实上,定义域和值域只能用于确定这些个体的类成员关系。比如任意两个个体p和a满足p:rents a,则p被分类为:Person成员,a被分类为:Apartment成员。
- 逆属性 OWL2允许定义属性的逆。一个常见的例子是:rents和:isRentedBy属性对,即:
:isRentedBy rdf:type owl:ObjectProperty ;
owl:inverseOf :rents .
这意味着一个推理机将确定两个个体p和m,它们除了拥有p:rents m,还拥有m:isRentedBy p,定义域和值域也从逆属性继承下来,:isRentedBy有:Person作为值域,而:Apartment作为定义域。在OWL2 DL中,仅对象属性才能有逆属性。 - 等价属性 每两个通过某属性关联的个体总是通过它的等价属性关联,反之亦然。等价性是一种方便地将不同本体中的元素相互映射的机制。如:isPartOf和:PartOf等价。
- 不相交属性 当两个个体通过一个属性相关联,则不可能通过另一个:拥有属性的个体对的集合是不相交的。例如:rent和:own属性,显然,你不能租某些拥有的东西。故而,在OWL2 DL中,owl:ObjectProperty和owl:DatatypeProperty是不相交的。
- 属性链 有时,指定关联各种个体的属性的图的捷径是有用的。例如,已知:Paul :rents :BaronWayApartment,:BaronWayApartment :isPartOf :BaronWayBuilding,它的dbpedia:location 是dbpedia:Amsterdam,则我们知道必然含有一个:livesIn关系到:Amsterdam。在OWL2中,我们可以通过属性链公理来指定这种关系。
:livesIn rdf:type owl:ObjectProperty ;
owl:propertyChainAxiom (:rents :isPartOf :location) .
注意,属性链公理不能使命名属性(这里的:livesIn)等价于属性链,它更像是属性链的一个子属性。在OWL2 DL中,属性链只允许涉及对象属性。属性链需要服从一些约束:(1)和传递属性类似,属性链的超属性是复合的;(2)属性链不能使递归的:链的超属性、它的逆或它的一个子属性(或子属性的逆)不能出现在属性链公理中。
类公理
类通过断言某个资源是owl:Class来定义。存在两个预定义的类:owl:Thing和owl:Nothing,它们在推理中起重要作用。前者是最一般的类:每个可能的OWL2个体都是这个类的成员;后者是空类,没有成员。
- 子类关系 子类关系定义和RDFs类似。
- 类等价 类的等价意味着类的每个成员必须是等价类的成员,反之亦然。换句话说,两个类涵盖了完全一样的个体集合。类等价可以通过owl:equivalentClasss属性定义。
- 小插曲:双关语 例如,当URL dbpedia:Apartment出现在类公理中,它被当做类,而当它出现在个体断言中,它就被当做个体。双关语允许用在以下情况:类的名字、个体的名字和属性的名字可以自由交换,但是对象的属性名和数据类型属性名不可以混用。
- 枚举 定义类的最直接方式,显示枚举它包含的所有个体。
- 不相交类 类的不相交意味着一个类的成员不可能是另一个类的成员。可以使用owl:disjointWith来描述。
- 补 类A的补C是所有不属于A的事物的类。换句话说,A和C的并集等价于owl:Thing。注意,这意味着补总是A的不相交类的超集。
- 并集和不相交集 在许多情况下,并集的成员类是互不相交的。
- 交集 我们可以声明一个类是两个或者多个类的交集。
属性上的类公理
- 全称限制 在一个类C和属性p上的全称限制声明对于C的每个成员,p的所有值都属于某各个类。
- 存在限制 在一个类C和属性p上的存在限制声明对于C 的每个成员,至少存在p的某个值属于某各特定类。
- 必要和充分条件 例如owl:subClassOf限制了必要条件,而owl:equivalentClass限制了充分必要条件。
值限制 当我们想基于与已知个体的关系或与特定数据类型属性取值的关系来定义类时,值限制就有了作用。例如,我们可以定义Amsterdam的所有公寓的类:
:AmsterdamApartment
rdf:type owl:Class;
owl:equivalentClass [rdf:type owl:Restriction;
owl:onProperty dbpedia-owl:location;
owl:hasValue dbpedia:Asterdam
].基数限制 一个基数限制约束了对于一个类而言某个属性可以拥有的值的数目。如果我们额外指定这些值必须属于的类,那么这个约束被称为是限定的(qualified)。例如:
:StudioApartment
rdf:type owl:Class;
owl:subClassOf [rdf:type owl:Restriction;
owl:onProperty :hasRoom ;
owl:cardinality “1”^^xsd:integer
].
这指定了一个单间公寓只能有一个:hasRoom属性的值。我们可以将其改为限定的基数限制,通过声明这个基数只对:LivingRoom、:Kitchen和:Bedroom类的成员成立:
:StudioApartment
rdf:type owl:Class;
owl:subClassOf [rdf:type owl:Restriction;
owl:onProperty :isPlayedBy ;
owl:qualifiedCardinality “1”^^xsd:integer;
owl:onClass[owl:unionOf(:LivingRoom :Kitchen :Bedroom)]
].
下表给出了OWL2中的基数限制
限制的类型 | 受限的 | 不受限的 |
---|---|---|
Exact cardinality | owl:qualifiedCardinality | owl:cardinality |
Minimum cardinality | owl:qualifiedMinCardinality | owl:minCardinality |
Maximum cardinality | owl:qualifiedMaxCardinality | owl:maxCardinality |
- 数据值域限制和数据类型 针对数据类型属性的全称和存在限制允许一个类的成员指定数据类型中的任何值作为属性的值。
- 自限制 如果一个好的公寓拥有好的位置,好的风景,并且拥有合适的大小,则不需要大力宣传就可以卖得很好。在OWL2中,可以使用自限制来表达。例如:
ex:GoodApartment
rdf:type owl:Class ;
rdfs:subClassOf [rdf:type owl:Restriction;
owl:onProperty ex:sells;
owl:hasSelf “true”^^xsd:boolean;
]. - 键 数据库经常使用键来标识表中的记录。OWL2允许我们生命,对于某个类(看做表),一个特定的数据类型属性(或者属性组合)的值应该被作为一个唯一标识符。例如,邮编、街道和门派号码的组合为城市的所有住所提供了一个唯一的标识符。这种键的机制允许我们局部作用于某个类的反函数性数据类型属性。
个体事实
在许多情况下,我们已经拥有了许多关于这些实体的知识,并且只需要类公理来推导额外信息,关于个体的声明通常称为断言。
- 类和属性断言 OWL2中类成员关系和属性断言和RDFs的声明方式一样。如:
:Apartmentrdf :type owl:Class
:BaronWayApartment rdf:type :Apartment ;
:hasNumberOfRooms “4”^^xsd:integer ;
:isRentedBy :Paul . - 同一性(Identity)断言 OWL2采用开放世界假设,我们永远不能假设拥有不同URL的两个个体是不同的实体。我们可能是处理一个拥有多个名字的单一个体。
- 负断言 有时我们知道某些事物不成立。在开放的世界中,将这些知识显示化很有价值:排除可能性常允许我们推导出新的知识。