学习笔记:G. Antoniou, Paul Groth et al. A Semantic Primer,Third Edition.
引言
如前所述,RDF被限定为二元闭谓词,而RDFs被限定为子类层次和属性层次,以及属性的定义域和值域定义。在一些情况下,这两种语言用来描述事物缺乏相当的灵活性,由此便产生了能提供除语言特征外更多特征的本体语言——OWL2。
RDF及RDFs允许我们描述存在于某个领域中的类,并允许我们在万维网上共享这些描述。我们将一个领域中概念的显示的形式化的规约称为本体(ontology),表达本体的语言称之为本体语言,其应该具有以下特征:一个良好定义的语法,一个形式语义,足够强的表达能力、方便地表达方式和高效的推理支持。
本体语言的需求
良好定义的语法
一个良好定义的语法应该是清晰的,并且能被编程语言领域所熟知,这个是机器处理信息的必要条件。当使用这种语法能够以一种无二义的方式写出想表达的所有事物,那么这种语法便可被称之为良好定义的。
形式语义
形式语义(formal semantic)精确地描述了一种语言的含义,精确(precisely)意味着不涉及主观想象,不同的机器或人也不会存在不同的解释。这将有效地帮助我们理解句子含义并利用表达在句子中的知识进行推理。比如,在RDF和RDFs中,给定:
:x rdf:type :C .
:C rdfs:subClassOf :D .
我们可以推理出:x是:D的一个实例。
表达能力
RDF和RDFs的局限性在于其表达能力(expressive power)在某些地方非常有限,我们有时需要提供超出RDF和RDFs允许描述的更精确定义。如果构建本体,可能希望进行如下推理:
- 类成员关系 RDFs使用子类和定义域/值域来检测个体实例的类成员关系,但是,对于一个实例在什么情况下可以被认为属于一个类的更精确的描述将允许更加精确的推理。比如,如果我们已经声明某些(属性 - 值)对是一个类:A的成员关系的充分条件,则如果某个实例:x满足这些条件,我们可以得出:x必然是:A的实例的结论:某个事物是网球比赛,那么它至少包含球员、球拍等。
- 分类 类似地,我们希望使用类成员关系的条件来推导类自身之间的关系。例如,一个网球比赛的简单定义可以重用来定义羽毛球比赛。
- 等价关系和相同性 表达类之间的等价关系很有用。例如,:Tortoise类和:Land_Turtle类共享所有的成员,则它们是等价地。类似地,我们希望表达两个实例何时相同,:morning_star和:evening_star是同个星球:venus的不同名字,但这些实例是相同的。
- 不相交关系和不同性 同样,有时我们需要知道两个类不共享任何实例(即两个类不相交)或两个实例是不同的事物。
- 类的二元组合 有时类需要以超出子类关系的方式组合。例如,我们需要定义:Person类是两个不相交类:Male和:Femal的并集。
- 属性的局部作用域 在RDFs中我们不能区别不同情境下的值域限制。
- 属性的特性 有时声明一个属性是传递的(transitive),唯一的(unique),互逆的(inverse)都很有用。比如,:greater_than是传递的,:is_father_of是唯一的,:eats和:is_eaten_by是互逆的。
- 基数限制 有时,我们需要对某个属性可能或者必须拥有的不同取值的数目施加限制。比如,一门课至少需要一个教室讲授。
- 一致性 一旦我们能确定类之间的关系,我们可能也希望确定它们定义之间的冲突。假设声明:Fish和:Mammal是两个不相交类,则断言:dolphin是两者共同的实例是个错误。
推理支持
形式语义是推理支持(reasoning support)的前提。自动推理允许我们检查本体的正确性,如:检查本体的一致性、检查类之间的意外关系、检查实例的意外分类。当设计大型本体时,我们能够将一个本体语言映射到一个已知的逻辑系统,并且通过使用针对该系统已有的自动化推理机,为该本体语言提供形式化语义和推理支持。
OWL2和RDF/RDFs的兼容性
理想的情况下,既然RDF和RDFs已经为描述本体提供了基础,我们仅需要通过扩展RDF/RDFs为本体语言添加更多特征即可。实际上,当语言的建模原语越强大,语言越加趋于强大及不可控,越不利于高效地推理,所以简单的扩展RDFs将和获得高效推理的需求背道而驰。基于这点,W3C工作组将OWL2分成了几个不同的子语言,各自拥有不同的低层语义,面向满足需求全集的不同方面。
- OWL2 Full:基于RDF的语义
OWL2 Full使用完整的OWL2语言原语,允许以任意方式将这些原语与RDF/RDFs组合,包括了通过将语言原语用于其他原语来改变预定义的原语的含义的能力。OWL2 Full的优点在于其被映射到一个基于RDF的语义(RDF-based semantic),故而在结构和语义上完全兼容RDF:任何合法的RDF文档也是一个合法的OWL2 Full文档,并且任何有效的RDFs推理也是一个有效的OWL2 Full结论。缺点在于这个语言对完备的推理支持不友好。 - OWL2 DL:直接语义
为了高效的计算效率,子语言OWL2 DL被映射到描述逻辑上,描述逻辑是谓词逻辑的一个子集,这使得高效推理支持成为可能。OWL2 DL限制了OWL2、RDF/RDFs的原语使用方式,如:
(1)OWL2 DL不允许OWL2原语应用于其他原语,防止了将一个原语应用于另一个预定义原语以改变含义的情况发生;
(2)OWL2 DL只能定义非文字资源的类,所有OWL2 DL的类是owl:Class的实例,而不是rdf:Class;
(3)OWL2 DL严格区分了值域包含非文字资源的属性和关联文字值的属性。所有OWL2 DL属性要么是owl:ObjectProperty的实例,要么是owl:DatatypeProperty的实例,不能同时是两个的实例;
(4)OWL2 DL规定了一个资源不能同时是类、属性和实例。
上述限制保证了该语言维护了与一个广泛理解的描述逻辑之间的直接对应。这些受限的表达能力允许OWL2 DL进行高效的推理,其可以利用大量现有的推理机,如Pellet、FaCT、RACER和HermiT,缺点在于我们失去了和RDF间完整的兼容性。需要值得注意的是,每个合法的OWL2 DL文档,都是一个合法的RDF文档,反之则不然。下图展示了OWL2和RDF/RDFs的一些建模原语之间的子类联系:
OWL语言
先介绍几个和形式逻辑相关的名词:
- 个体(individual):OWL2中,类的成员通常被称为个体,而RDF/RDFs中相应地称之为实例(instance)。
- 断言(assertion):声明某个资源是一个特定类型时,称这是一个断言。e.g. :roger_federer rdf:type :Person . 是一个类断言(class assertion),将一个个体:roger_federer关联到它的类。
- 表达式(expression):当我们组合类、属性、实例时,它们形成了表达式。如:
_:x rdf:type owl:Class;
owl:unionOf(:Man :Woman) .
这是一个类表达式(class expression),它指出了一个匿名的类是:Man和:Woman类的并集。 - 公理(axiom):如果我们将这个定义关联到某个类,就创建了公理。如:
:Person owl:equivalentClass _:x .
_:x rdf:type owl:Class ;
owl:unionOf (:Man :Woman).
这是一个等价类公理,生命了类:Person等价于我们直接引入的并集。有时也将其称之为限制(restriction),因为它们对可以作为类的成员的一组个体施加了约束。
语法
OWL2建立在RDF/RDFs之上,故而可以使用所有合法的RDF语法来表达。同时,OWL2也存在许多语法,各有优势。
函数式语法:这种语法和本体的形式化结构关系紧密,用于OWL2的语言规范文档、OWL2本体语义定义、与RDF语法的相互映射,以及OWL2的不同概要中,相比其他语法更加紧凑和具有可读性。如上述约束可以写成:
EquivalentClasses(:Person ObjectUnionOf(:Man :Woman))OWL/XML:这是一种OWL2的XML语法,但不遵从RDF习惯,而是紧密映射到函数式语法,其优点主要在于它允许我们使用标准的现成的XML编辑工具来与本体交互。上述公理的等价OWL/XML语法如下:
< EquivalentClass >
< Class abbreviatedIRI=”:Person” />
< ObjectUnionOf >
< Class IRI=”#Man” />
< Class IRI=”#Woman” />
< /ObjectUnionOf >
< /EquivalentClass >曼彻斯特语法:这种语法是诸如Protege在内的当前绝大多数本体编辑器在用户界面中使用的语法。
Class:Person
EquivalentTo: Man or Woman
本体文档
当使用Turtle语法时,OWL2本体文档(或者简单地称之为本体),仅仅是另一个RDF文档。OWL2本体最少包含下面几个命名空间:
@prefix owl: < http://www.w3.org/2002/07/owl# >.
@prefix rdf: < http://www.w3.org/1999/02/22-rdf-syntax-ns# >.
@prefix rdfs: < http://www.w3.org/2000/01/rdf-schema# >.
@prefix xsd: < http://www.w3.org/2001/XMLSchema# >.
这里展示了一个简单的针对家政目的的OWL2本体,这个本体起始于一组断言,这些断言介绍了一个基本的命名空间、本体本身、名字、可能的注释、版本控制以及包含的其他本体。
imports 如上述家政目的本体示例,只有一个断言会影响本体的逻辑含义:owl:imports,它指向其他本体,这些本体的公理也是当前本体的一部分。我们的公寓本体导入了被定义在DBpedia本体中的所有公理,以及DBpedia本身的所有事物。这将引发一个问题,我们为了使用DBpedia中的部分信息,我们不得不导入它其中描述的所有6.72个三元组。
命名空间被用于消除歧义,而被导入的本体提供了可以被使用的定义。通常一个本体对每个它所使用的命名空间包含一个导入声明,但是也可能导入额外的本体。另外,owl:imports是传递的,如果本体Oi引入本体Oj,而本体Oj引入本体Ok,那么本体Oi也引入本体Ok。
属性类型(即属性的几大类)
在前述讨论中,OWL2 DL区别了两种类型的属性:对象属性(owl:ObjectProperty)和数据类型属性(owl:DatatypeProperty)。事实上,针对一些属性的特征,OWL2还提供了额外的属性。
- 对象属性 这些属性将个体与个体关联。如:rents和:livesIn
:rents rdf:type owl:ObjectProperty ;
rdfs:domain :Person ;
rdfs:range :Apartment ;
rdfs:subPropertyOf :livesIn ; 数据类型属性 这些属性将个体与一种数据类型的文字值关联。如:name和:age
:age rdf:type owl:DatatypeProperty ;
rdfs:range xsd:nonNegativeIntegerOWL2允许使用XML模式中的数据类型来声明一个文字的类型,或者指定一个数据类型属性的值域。
由于直接语义约束,在OWL2 DL中,下面的属性类型中只有函数型属性可以被赋予数据类型属性。- 标注属性 标注属性是一些不携带任何OWL2 DL直接语义含义的属性。换句话说,在描述逻辑推理机中,它们将被忽略。但是,在RDFs和OWL2 Full推理机中,将考虑它们。标注属性特别用于为OWL2本体、类、属性和个体添加可读的标签、注释或 解释。
:label rdf:type owl:AnnotationProperty ;
rdfs:range rdf:PlaintLiteral ;
rdfs:subPropertyOf rdf:label .
:Apartment :label “Apartment”@en,
“Apartment”@nl.
这个例子表示:我们首先定义:label属性的类型的owl:AnnotationProperty,值域是rdf:PlaintLiteral,:label属性是rdfs:label的一个子属性,并且给:Apartment类英语、荷兰语两种标签。 - 顶层和底层属性 OWL2中所有对象属性都是owl:topObjectProperty的子属性,这个属性被定义为关联本体中所有个体的属性。相反地,owl:bottomObjectProperty不关联任何个体。类似地,owl:topDataProperty关联所有个体到任何可能的文字值,而owl:bottomDataProperty不关联任何个体到任何值。
- 传递属性 我们知道每个类是它直接超类的所有超类的子类,即rdfs:subClassOf是传递的,类似的还有如isPartOf、isCheaperThan等,我们用下面的方式定义一个属性是传递的:
:isPartOf rdf:type owl:ObjectProperty ;
rdf:type owl:TransitiveProperty .
传递属性是所谓的复合属性(composite property):它们可以通过多步被声明。例如给定:
:BaronWayApartment :isPartOf :BaronWayBuilding .
:BaronWayKitchen :isPartOf :BaronWayApartment .
一个推理机可以得出::BaronWayKitchen :isPartOf :BaronWayBuilding .
最后一个:isPartOf关系是由前面两个属性断言复合而成。因为这种复合关系,传递属性服从一些约束。
何时属性是复合的? |
---|
top和bottom属性都是复合的 |
任意属性自身是传递的,或者有一个逆属性(定义见下文)是传递的 |
任意属性拥有一个传递的子属性,或者子属性的逆属性是传递的 |
任意属性是一个属性链(property chain)的超属性,或者是一个属性链的超属性的逆属性 |
任意属性是以上某种属性的等价属性,或者是以上某种属性的等价属性的超属性 |
复合属性也称为复杂角色(complex roles)或非简单(non-simple)属性 |
限制 |
---|
复合属性不能出现在以下公理中:(1)类上的限定和非限定基数限制;(2)类上的自限制;(3)不相交的属性公理 |
复合属性不能被赋予以下属性类型:(1)函数型或反函数型;(2)反自反;(3)非对称的 |
- 对称和非对称属性 某些属性,如:isFriendOf,是对称的。换句话说,若a:isFriendOf b,则反过来也成立。换句话说,对称属性和它们的逆属性等价。
:isFriendOf rdf:type owl:ObjectProperty ;
rdf:type owl:SymmetricProperty .
:isCheaperThan rdf:type owl:ObjectProperty ;
rdf:type owl:AsymmetricProperty ;
rdf type owl:TransitiveProperty . - 函数型和反函数型属性 对于某些属性,我们知道每个个体通过该属性总是最多存在另一个相关个体。例如:hasNumberOfRooms是一个函数型属性,而:hasRoom属性是反函数型的:
:hasNumberOfRooms rdf:type owl:DatatypeProperty ;
rdf:type owl:FunctionalProperty .
:hasRoom rdf:type owl:ObjectProperty ;
rdf:type owl:InverseFunctionalProperty . - 自反和反自反属性 一个属性的自反性意味着每个个体通过该属性关联到自身。例如,每个事物:isPartOf其自身。另一方面,反自反性意味着没有个体通过该属性关联到自身。大多数定义域和值域不相交的属性事实上是反自反。
(未完待续……)