本文档《OWL2 Web本体语言入门》是W3C发布的OWL 2 Web Ontology Language Primer2009-10-27)的中文译本。文中若存在译法不当和错误之处,欢迎批评指正,请发邮件至:zengxh@szu.edu.cn,谢谢!

翻译说明:

·本文档的英文版是唯一正式版本。此处的中文译本仅供学习与交流。

·中文译本的内容是非正式的,仅代表译者的个人观点。

·中文译本的内容会根据反馈意见随时进行修订。

·中文译本同时通过W3C Translations网站发布。

·转载本文,请注明译者和原链接。

译者:

曾新红(Xinhong Zeng),深圳大学图书馆NKOS研究室

  鹏(Peng Wu),深圳大学计算机与软件学院

林伟明(Weiming Lin),深圳大学图书馆NKOS研究室 

资助声明:

本次翻译工作得到国家社科基金项目“中文知识组织系统的形式化语义描述标准体系研究”(批准号:12BTQ045)和广东省哲学社会科学“十一五”规划项目(批准号:GD10CTS02)的资助。

翻译时间:20139

发布时间:20131113


W3C

OWL 2 Web本体语言

入门

W3C推荐标准20091027

当前版本:

http://www.w3.org/TR/2009/REC-owl2-primer-20091027/

最新版本 (系列 2):

http://www.w3.org/TR/owl2-primer/

最新推荐标准版本:

http://www.w3.org/TR/owl-primer

上一版本:

http://www.w3.org/TR/2009/PR-owl2-primer-20090922/ (彩色标注不同之处版本)

贡献者:

Pascal Hitzler, Wright State University

Markus Krötzsch, FZI Research Center for Information Technology

Bijan Parsia, University of Manchester

Peter F. Patel-Schneider, Bell Labs Research, Alcatel-Lucent

Sebastian Rudolph, FZI Research Center for Information Technology

请参阅本文档的勘误表,那里可能会有一些规范的校正

本文档也可以以如下的非规范格式查看PDF 版本

另见译文

Copyright © 2009 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.


摘要

OWL2 Web本体语言,简称OWL2,是一种本体语言,用于带有形式化定义含义的语义网。OWL2本体提供了类、属性、个体及数据值,以语义网文档的形式存储。OWL2本体可与以RDF记载的信息结合使用,并且OWL2本体本身也主要是以RDF文档的形式进行交换。OWL2文档概述(Document Overview阐述了OWL2的整体状态,因此,应当在阅读其他OWL2文档之前先阅读该文档。

本文档提供了对OWL2语言通俗易懂的介绍,包括对来自于其他学科的内容的定位,通过一个连续示例来展示OWL2如何首先用来表示简单的信息,然后表示更复杂的信息,OWL2如何管理本体,最后介绍OWL2本体语言的各种子语言之间的区别。

本文档的状态

可能已被替代

    本节描述的是本文档在发布时的状态。其他的文档可能替代了该文档。在http://www.w3.org/TR/W3C technical reports index中,可以找到当前的W3C出版物列表和该技术报告的最新版本。

XML Schema数据类型依赖

根据定义,OWL2使用的是XML Schema Definition Language (XSD)中定义的数据类型。对本文档中的OWL2而言,XSD的最新W3C推荐标准是版本1.0,此时,版本 1.1正在向推荐标准演进。OWL2的设计已经利用了XSD1.1中的新数据类型和更清晰的注释,但是目前这些利用有一部分暂时搁置。特别地,OWL2中基于XSD1.1的那些元素将被当作是可选的,直到XSD1.1成为W3C的推荐标准为止,详见Conformance, section 2.3。等到XSD1.1发布为W3C的推荐标准时,这些元素才会终止可选状态而与其他指定元素一样进入必备状态。

我们提议,目前开发人员和用户遵循XSD 1.1 Candidate Recommendation。根据SchemaOWL工作组之间的讨论,当XSD1.1演进成为推荐标准时,我们并不希望任何实现会有必须的改动。

未变的文档

本文档与先前版本并没有主体上的改变。关于更早版本的变动细节,请见change log color-coded diff

请发表意见

请将意见发送至public-owl-comments@w3.org公开文档)。虽然由OWL工作组执笔的本文档已经完成,但是您的意见依旧可能在勘误表或者未来的修订版中得到解决。欢迎开发人员在public-owl-dev@w3.org(公开文档)公开讨论。

W3C批准

本文档已经由W3C成员、软件开发人员以及其他W3C小组和兴趣组织审查,并由W3C主管(Director)批准成为W3C推荐标准。这是一个稳定的文档,可以作为参考资料或被其他文档引用。W3C在制作推荐标准过程中担任的角色,是要引起人们对该规范的注意并促进它的广泛应用。这提升了Web的功能性和交互性。

专利

    本文档由遵循5 February 2004 W3C Patent Policy的小组完成。它只是一个提供信息的文档。W3C维护着一个专利披露公开列表(public list of any patent disclosures),它与该组织的可交付成果一起制作;此页面也包含披露专利的说明。

目录

1 简介

W3COWL2 Web本体语言(OWL)是一种语义Web语言,它被设计用来表示关于事物、事物群和事物之间关系的丰富和复杂知识。OWL是一个以计算逻辑为基础的语言,于是用OWL表示的知识可以通过计算机程序进行推理,从而验证知识一致性,或者使隐性知识显性化。OWL文档,也被称为本体,能够在万维网上发布,可以引用其他的OWL本体或者被其他的OWL本体引用。OWLW3C Semantic Web技术堆栈(其中还包括RDF [RDF Concepts]SPARQL[SPARQL] )的一部分。

入门文档编写的目的是帮助读者深入理解OWL,以及它的优势和劣势。此文档的核心是通过一个连续示例来介绍OWL的大多数语言特性。本文很多例子来自一个样本本体(在附录an appendix中完整展示)。这个样本本体被设计用来以一种容易理解的方式接触OWL的关键语言特性,它本身并不是一个好的本体。

1.1 本文档指南

这篇文档拟提供对OWL2的初步了解,特别适用于对OWL2不熟悉的读者。因此,我们在Section 2OWL2的性质进行一些高层介绍,在Section 3提供一些很基本的知识表达概念,并解释它们如何与OWL2使用的术语相关。熟悉知识表达和推理的读者,也许只需快速浏览本节就可以获得OWL2的术语集。

48节描述了OWL提供的大多数语言特性,从非常基础的开始,逐步推进到更复杂的特性。Section 4 呈现和讨论了OWL2的基本建模特性,之后Section 5引入了复杂类。Section 6 专门介绍用于属性的高级建模特性。Section 7 关注与数据类型相关的高级建模。Section 8 总结了主要用于本体管理目的的超逻辑(extralogical)特性。

Section 9 我们专注于OWL2 DLOWL2 Full这两个OWL语义视图的不同之处,而在Section 10 我们描述了OWL2的三个易处理的子语言,称为配置语言。Section 11 专门介绍对OWL2的工具支持,而在Section 12 中我们指出,在看完本文档的OWL2非正式介绍之后,应该到哪儿去找继续阅读的资料。

最后,Section 13 列出了在本文档中使用的完整本体样例。

如果想要一个全面的OWL2语言特性清单,请查看OWL2快速参考指南[OWL 2 Quick Guide],它提供了链接指向相应章节中关于语义和例子的适当文档。

对于已经熟悉了OWL1的读者,OWL2新特性与原理[OWL 2 New Features and Rationale]提供了一个OWL2中所有变化的全面概述。

1.2 OWL语法

OWL是一个在语义Web上使用的语言,因此OWL中的名称是国际资源标识符(IRIs) [RFC 3987]。因为IRI很长,所以我们会常常使用缩写。缩写的工作方式特定于每个句法格式,可用于编码OWL本体,但本文档中的例子通常不用知道它们的细节就可以理解。在Section 8.2会进一步给出适当的命名空间声明和相关机制。

OWL提供了各种可用的语法,服务于不同的目的。设计函数式语法[OWL 2 Specification]是为了更容易达到规范目的,并且给OWL2工具(例如APIs和推理器)的实现提供一个基础。用于OWLRDF/XML语法,就是RDF/XML,再加上一个对于OWL结构的特定翻译 [OWL 2 RDF Mapping],这是唯一一个所有的OWL2工具都必须支持的语法。曼彻斯特语法[OWL 2 Manchester Syntax]是一个OWL语法,它的设计目的是让非逻辑学家更好阅读。OWL XML语法是一种用于OWLXML语法,用一个XML schema定义[OWL 2 XML]。有一些工具能够为OWL转换不同的语法。OWL语言结构在很多句法形式中也用IRIs表示,很多声明需要用到缩写形式,如例子所示。必要的细节也请见Section 8.2

附录中的例子和样本本体可用4种不同的语法浏览,基于RDF语法序列化方式我们既提供RDF/XML [RDF Syntax],也提供Turtle [RDF Turtle Syntax]。在整个文档,你可以通过下边的按钮控制显示哪个语法。

下边的按钮可以用来显示或者隐藏可用的语法。(译者注:此功能略)

窗体顶端

窗体底端

2 OWL2是什么?

OWL2是一种表示本体的语言。本体这个术语在计算机科学之内和之外都有一个复杂的历史,但是我们用它来表示某种计算工件(computational artifact),即类似于一个程序,一个XML schema,或者一个网页的东西,通常都以文档的形式表示。本体是一组对世界某一部分(通常被称为本体的兴趣领域或题材)的精确的描述性陈述。精确的描述要满足几个因素:最重要的,要防止在人类交流中产生误解,要保证软件以统一且可预测的方式表现,并且能够与其他的软件很好地协同工作。

为了精确描述一个兴趣领域,提出一组中心术语(通常也叫词汇表)并且确定它们的含义是有用的。除了一个简短的自然语言定义之外,这个词的含义还可以通过说明这个词怎样与其他词相互联系来进行描述。提供词汇表以及相互关系信息的术语集(terminology),是典型的OWL2文档的组成要素。除了术语知识,本体也可能包含所谓的断言知识,处理具体的域对象而不是笼统的观念考虑。

OWL2不是一种编程语言:OWL2是声明性的(declarative),也就是说,它用逻辑的方式描述一个事务的状态。合适的工具(所谓的推理器)于是可以进一步用来推断关于这种状态的信息。这些推断怎样用算法实现不是OWL文档的一部分,但是依赖于具体的实现。不过,任何这种问题的正确答案都由形式语义(有两个版本:直接语义[OWL 2 Direct Semantics]和基于RDF的语义 [OWL 2 RDF-Based Semantics])预先决定。只有遵守这些语义的实现才能叫OWL2一致(参考[OWL 2 Conformance])。透过其声明性的本质,创建OWL2文档的活动在概念上就不同于编程。不过,在这两种情况下都需要创建复杂的形式化文档,可以将某些观念从软件工程转移到本体工程,如方法论和协同工作、模块化、模式等。

OWL2不是一个用于语法一致性的schema语言。不同于XMLOWL2不提供精确的方法来规定一个文档应该如何在句法上结构化。特别是,它没有方法执行某些信息(如一个人的社会安全号)必须按句法呈现。这一点要记住,因为OWL有一些特性可能会让使用者产生这样的误解。

OWL2不是一个数据库框架。当然,OWL2文件存储信息,数据库也一样。此外,断言信息和数据库内容之间以及术语信息和数据库模式之间的某种相似也可以被描绘出来。然而, 它们在基本假设上通常有重要区别(技术层面:使用的语义)。如果一些事实不存在于数据库中,它通常被认为是假的(所谓的封闭世界假设),而对于一个OWL 2文档它可能只是丢失了(但可能是真的),遵循开放世界假设。此外,数据库模式常常会有上面提到的规定性约束语义。不过,在技术上,数据库为许多面向本体的系统提供了可行的支柱。

3 知识建模:基本概念

OWL2是一种知识表示语言,旨在对兴趣领域的知识进行明确表达(formulate)、交换和推理。应该首先解释一些基本概念,以方便理解知识在OWL2中是如何被表达的。这些基本概念如下:

·                     公理(Axioms):,一个OWL本体表达的基本陈述

·                     实体(Entities)用来指向现实世界对象的元素

·                     表达式(Expressions)实体的组合,从简单的描述形成复杂的描述

OWL2的目的是捕获知识,可以用OWL表示的这种“知识”当然不能反映人类知识的所有方面。OWL2可以被看作是一种针对人类知识某些部分的强大而通用的建模语言。建模的结果被称为本体,这个术语也有助于避免混乱,因为在知识表示领域,“模型”这个术语经常以一种相当不同的意义在使用。

现在,为了明确地阐述知识,假设它由被称为陈述(statements)或命题(propositions)的基本块组成是有用的。如陈述“下雨了”或“每个人终有一死”这样的基本命题,都是典型的例子。事实上,每一个OWL2本体实际上就是这样一组基本的“知识块”。本体中的陈述在OWL2中被称为公理,该本体断言其公理是真的。一般来说,给定事务的某种状态,OWL陈述可以是真的或假的。这可以将它们与实体和表达式区分开来,下面会进一步描述。

当人类思考时,他们从自己的知识中推出结果。OWL的一个重要特点,就是它会以其可以表示的知识形式捕捉人类智力的这一方面。那么通常所说的一个陈述是其他陈述的推论是什么意思呢?它基本上意味着只要其他陈述是真的,这个陈述也是真的。用OWL的术语来说,就是如果在任何状态下,A中的所有陈述是真的,a也是真的,那么陈述集合A蕴涵entails陈述a。此外,一个陈述集合可能是一致的(即存在一个可能的状态,其中的所有陈述均为真)或不一致的(即不存在这样的状态)。OWL的形式语义规定,在本质上,对于那种可能的“状态”一个特定的OWL陈述集是真的。

OWL工具(推理器)可以自动计算结果。这种本体公理互动的方式非常微妙,人类很难理解。对于OWL2,这既是优势又是劣势。它的优势是用OWL2工具能够发现人类没有发现的信息。这允许知识工程师更直接地建模,系统能够对建模提供有用的反馈和评论。它的劣势是人类较难立即预见各种组合中的各种结构的实际效果。工具的支持可以改善情况,但成功的知识工程往往仍然需要一定的培训和经验。

仔细看一下OWL的陈述,我们发现它们很少是“单一整体结构”,但经常有一些可以显式表示的内部结构。它们通常指世界中的对象,并被放入类别(category)中(如“Mary是女人”)或说一些关于其关系的事情(“JohnMary结婚了”)来进行描述。陈述中的所有原子成分被称为实体(entities),它们是对象(JohnMary),类别(女性)或关系(结婚)。在OWL2中,对象用个体individuals)表示,类别用classes)表示,关系用属性properties)表示,属性将会进一步细分。对象属性object properties)将对象关联到对象(如一个人与其配偶的关联),而数据类型属性datatype properties)分配数据值给对象(如将年龄赋予一个人)。注释属性annotation properties)被用于为本体本身(或其部分)进行信息编码(如一个公理的作者和创建日期),取代兴趣领域。

作为OWL的中心特征,可以用所谓的构造器constructors)将实体的名称组合进表达式expressions)。一个基本例子,原子类“女性”和“教授”可以结合起来描述类“女教授”。后者可以用一个OWL类表达式描述,该表达式可用于陈述或其他表达式中。从这个意义上讲,表达式可以被视为被其结构(structure)定义的新实体。在OWL中,用于每种类型实体的构造器(constructors)差异很大。用于类的表达式语言十分丰富和复杂,而用于属性的表达式语言则要少得多。这些差异有历史和技术的原因。

4 类、属性和个体——及其基本建模

介绍完基本概念,我们现在要深入OWL2建模的细节了。在随后的段落中,我们将介绍OWL2提供的基本建模特性,为如何使用它们提供例子和一般性意见。我们从基本特性(这些基本特性任何建模语言都会具备)出发,逐步向更高级的结构推进。

因此我们将展示一个特定家庭的信息。注意我们并不打算用这个例子作为这类应该用OWL描述的领域的代表,或作为用OWL建模的好典型,或者是相当复杂、多变和具有文化依赖性的家庭领域的正确表示。相反,这只是一个展示OWL各种特性的相当简单的例子。

4.1 类(Classes)和实例(Instances

    我们先介绍我们正在讨论的人,做法如下:

Functional-Style Syntax

 ClassAssertion( :Person :Mary )

   

    这个陈述谈到一个名叫Mary的个体并且声明这个个体是人。更专业地,是一个人通过说明Mary归属于(或者“is a member of”,甚至更专业地称“is an instance of”)所有人类的这个class来表达。通常,类被用来对一些具有共性的个体分组,以便引用它们。因此,类本质上代表了个体集合。建模时,类经常被用来表示由一组人类思维概念组成的对象,如概念person或者woman所以,我们可以用同样的方式表明Mary是女人,即她是woman类的实例:

Functional-Style Syntax

 ClassAssertion( :Woman :Mary )

    由此也可以知道类成员关系不是排他的:因为可能有各种各样的标准对个体分组(例如性别、年龄、鞋码等等),一个个体可能同时属于多个类。

4.2 类层次结构

在上节中,我们提到两个类:所有人的类和所有女人的类。对于人类读者而言很明显这两个类有一个特殊的关系:人比女人更广泛,也就是说,只要我们知道一些个体是女人,那么这些个体也一定是人。然而,这个对应关系并非源自“person”和“woman”这两个标签,它是关于世界和这些术语用法的人类背景知识的一部分。因此,为了让一个系统能够得出预期的结论,必须告诉它这些对应关系。在OWL2中,这通过一个所谓的子类公理来实现:

Functional-Style Syntax

 SubClassOf( :Woman :Person )

在一个本体中这个公理的存在使得推理器可以针对每一个被指定为woman类的实例的个体,推断出她同样也是person这个类的实例。作为一个经验法则,如果短语“每一个A都是一个B”有意义且正确,那么类A跟类B之间的子类关系就能够指定。

在本体建模中经常使用子类陈述,不仅用来偶尔声明这种相关性,而且通过指定兴趣领域所有类的泛化关系对整个类层次结构建模。假设我们想表示所有的母亲都是女人:

Functional-Style Syntax

 SubClassOf( :Mother :Woman )

那么推理器不仅可以推导出每个归类为母亲的单独个体,也是一个女人(因此也是人),而且可以推导出Mother也是Person的子类——和我们的直觉一致。从专业上讲,这意味着类和子类之间的关系是传递的(transitive)。除此之外,它也是自反的(reflexive),意味着每一个类都是它自己的子类,这也很直观,很明显每个人都是一个人。

在我们的词汇表中,类可以有效指向相同的集合,而OWL提供了一种机制,表明它们在语义上被认为是等价的。例如,我们交替使用PersonHuman这两个术语,意味着每一个Person类的实例也是Human类的实例,反之亦然。如果两个类包含完全相同的个体,这两个类被认为是等价的。下面的例子指出Person类和Human类是等价的。

Functional-Style Syntax

 EquivalentClasses( :Person :Human )

    上述陈述声明了Person类和Human类是完全等价的,相当于同时声明Person类是Human类的子类以及Human类是Person类的子类。

4.3 类不相交

4.1节,我们说明了一个个体可以是几个类的实例。然而在某些情况下,一个类的成员明显不包括另外一个类的成员。例如,就类ManWoman而论,可以排除存在一个个体同时是这两个类的实例(为了这个示例,我们忽略生物学上的边界个案)。这种在两个类之间的“不相容关系”被称为(类)不相交((class) disjointness)。两个类不相交的信息又是我们背景知识的一部分,必须为推理系统明确声明才能使用。做法如下:

Functional-Style Syntax

 DisjointClasses( :Woman :Man )

实际上,不相交陈述经常被忘记或者忽略。一个不太确定的原因可能是,直观而言,除非有其他证明才会考虑类不相交。如果不相交陈述被忽略,很多可能有用的结果会丢失。注意在我们的例子中,需要不相交公理来推导出Mary不是一个男人。此外,通过上述公理,推理器才能推断出类Mother和类Man之间的不相交性。

4.4 对象属性

在前面章节,我们关注单一的个体、它们的类成员关系以及类是如何基于它们的实例相互关联的。但通常一个本体也意味着指定了一个个体如何与其他个体关联。当描述一个家庭时,这些关系是核心。我们首先说明MaryJohn的妻子。

Functional-Style Syntax

 ObjectPropertyAssertion( :hasWife :John :Mary )

在此,描述个体以何种方式关联的实体,称作属性 (properties),如我们例子中的hasWife

注意,个体书写的顺序很重要。“Mary is John's wife”可能是真,“John is Mary's wife”则一定为假。事实上,这是一种常见的建模错误,通过使用只允许一种直观阅读的属性名称可以避免。例中的名词(如wife),这种无歧义的名称可以用“of”或者“has”来构建(wifeOfhasWife)。对于动词(例如“to love”),变化词形(loves)或者使用带有 by”的被动语态(lovedBy)就可以防止误解。

我们也能够声明两个个体不是通过一个属性关联。例如下面的例子,指出Mary不是Bill的妻子。

Functional-Style Syntax

 NegativeObjectPropertyAssertion( :hasWife :Bill :Mary )

否定属性断言提供了一个唯一的机会声明我们知道为假的事物。这类信息在OWL中特别重要,OWL的默认立场是任何事情都是可能的,除非你另外说明。

4.5 属性层次结构

4.2节,我们讨论过指定一个类成员关系蕴涵(implies)另外一个是有用的。本质上,同样的情形也会发生在属性上:如果知道BA的妻子,也就知道了BA的配偶(注意,顺序反过来就不成立)。OWL允许如下陈述:

Functional-Style Syntax

 SubObjectPropertyOf( :hasWife :hasSpouse )

这也是用于属性等价(类似于类等价)的一个语法快捷方式。

4.6 定义域和值域限制

两个个体通过某个属性相互关联的信息,经常允许推出关于个体本身的进一步结论。特别是可以推断出类成员关系(membership)。例如,陈述“BA的妻子”显然隐含着B是女人而A是男人。所以在某种程度上,关于两个个体通过某个属性相关联的陈述,携带着有关这些个体的隐含的额外信息。在我们的例子中,这些额外信息能够通过类成员关系来表示。OWL提供一种方法说明这种对应关系:

Functional-Style Syntax

 ObjectPropertyDomain( :hasWife :Man )

 ObjectPropertyRange( :hasWife :Woman )

有了这两个公理,并且给定信息,例如 SashaHillary通过属性hasWife 关联,推理器就能够推断出Sasha是男人和Hillary是女人。

4.7 等价和非等价个体

请注意,到目前为止,从给出的信息可以推断出JohnMary是不同的个体,因为他们分别是不相交类ManWoman的实例。然而,如果我们添加另一个家庭成员信息,例如Bill,指出他是男性,且至今为止也没有说什么来暗示JohnBill不一样。OWL没有假设不同的名字是不同个体的名称(这种对必需的“unique names assumption(唯一名称假设)”的缺失特别适用于语义Web应用程序,那里的名称可能由不同组织在不同时间创建,不知不觉指向同一个个体)。因此,如果我们想排除JohnBill是相同个体这种选项,就必须明确定义如下:  

Functional-Style Syntax

 DifferentIndividuals( :John :Bill )

也有可能要声明两个名称指向(代表)同一个个体。例如,我们可以说JamesJim是同一个个体。

Functional-Style Syntax

 SameIndividual( :James :Jim )

这可以使推理器推断出任何关于个体James的信息也适合Jim这个个体。

4.8 数据类型

到目前为止,我们已经了解了如何通过类成员关系以及与其他个体的关系来描述个体。然而在很多情况下,个体要通过数据值描述。例如一个人的生日、年龄、电子邮箱地址等。为此,OWL提供了另一种属性,称为数据类型属性Datatype properties。这些属性将个体与数据值(而不是其他个体)关联,很多XML Schama数据类型[XML Schema Datatypes]可以利用。下面是一个使用数据类型属性的示例,它描述了John的年龄是51岁。

Functional-Style Syntax

 DataPropertyAssertion( :hasAge :John "51"^^xsd:integer )

同样的,我们也能够描述Jack的年龄不是53岁。

Functional-Style Syntax

 NegativeDataPropertyAssertion( :hasAge :Jack "53"^^xsd:integer )

    定义域和值域也可以为数据类型属性声明,就像为对象属性那样。然而,在这种情况下,值域将是一个数据类型而不是一个类。下面声明了hasAge属性仅用来将人与非负整数关联。

Functional-Style Syntax

 DataPropertyDomain( :hasAge :Person )

 DataPropertyRange( :hasAge xsd:nonNegativeInteger )

   现阶段我们要指出使用属性定义域和值域时很容易发生的一个常见错误。在刚才给出的例子中hasAge属性仅用来关联人和非负整数,假如我们也要指定信息“FlixCat类并且9岁”。从这种合并信息中,可能推出Flix也是Person类,这可能不是所预期的。这是一个常见的建模错误:注意一个定义域(或值域)声明不是一个对知识的约束,但是允许推理器进一步推出知识。在我们的例子中,如果我们声明年龄只能赋予给人,那么一切我们赋予年龄的东西自然而然是一个人。

5 高级类关系

在前面的章节,我们把类当作是某种有名字的“不透明的”东西。我们用它们来描述个体,并且通过子类或不相交陈述将它们与其他的类关联。

现在我们将演示如何将具名的类、属性和个体用作构建块来定义新的类。

5.1 复杂类

利用迄今为止描述过的语言元素,可以建模简单的本体。为了表达更复杂的知识,OWL提供了逻辑类构造器(logical class constructors)。具体而言,OWL为逻辑与、或、非提供了语言元素。相应的OWL术语是从集合论借用过来的:(类的交集intersection并集union)和补集complement)。这些结构将原子类(即有名字的类)结合起来构建复杂类。

两个类的交集只包含那些同时是这两个类的实例的个体。下述例子描述了Mother类只包含了那些同时是Woman类和Parent类的实例的对象:

Functional-Style Syntax

 EquivalentClasses(

   :Mother

   ObjectIntersectionOf( :Woman :Parent )

 )

从上例中可以得到一个推论:Mother类的所有实例也是Parent类的实例。

两个类的并集包含了每一个至少包含于其中一个类的个体。因此我们可以把所有父母的类描述成Mother类和Father类的并集:

Functional-Style Syntax

 EquivalentClasses(

   :Parent

   ObjectUnionOf( :Mother :Father )

 )

类的补集对应于逻辑非:它完全是由不属于该类本身成员的对象组成。下面用类的补集定义了没有孩子的人,也演示了类构造器(class constructors)可以嵌套:

Functional-Style Syntax

 EquivalentClasses(

   :ChildlessPerson

   ObjectIntersectionOf(

     :Person

     ObjectComplementOf( :Parent )

   )

 )

以上所有的例子演示了类构造器的用法,为的是把新类定义为其他类的组合。但是,当然也可能同时使用类构造器和一个子类声明来指出一个类的必要非充分条件。下述声明指出每个Grandfather都是一个man和一个parent(而反过来就不一定):

Functional-Style Syntax

 SubClassOf(

   :Grandfather

   ObjectIntersectionOf( :Man :Parent )

 )

一般情况下,复杂类可以用在具名类可以出现的每个地方,因此也可以用在类断言中。下面的例子演示了这一点,断言Jack是一个人但不是一个父母。

Functional-Style Syntax

 ClassAssertion(

   ObjectIntersectionOf(

     :Person

     ObjectComplementOf( :Parent )

   )

   :Jack

 )

5.2 属性限制

属性限制为复杂类提供了另一种类型的基于逻辑的构造器(constructors)。顾名思义,属性限制使用涉及属性的构造器。

一种叫做存在量化existential quantification的属性限制定义了一个类,它是以下所有个体的集合:这些个体通过一个特定属性关联另一个个体(是某个类的实例)。这可以通过以下例子得到最好的解释,下例定义了Parent类,其个体通过hasChild这个属性关联到一个人。

Functional-Style Syntax

 EquivalentClasses(

   :Parent

   ObjectSomeValuesFrom( :hasChild :Person )

 )

这意味着存在一个预期,对于每个Parent类的实例,存在至少一个孩子,而且这个孩子是Person类的成员。这对捕获不完整知识是很有用的。例如,Sally告诉我们Bob是一个父母,因此我们就能推断出他至少有一个孩子,即使我们不知道他们的名字。使用存在量化的自然语言指示物是像“some”或“one”这样的单词。

另外一种叫全称量化universal quantification的属性限制用来描述一个类,其包含的所有个体都必须是某给定类的实例。我们可以用以下陈述说明:某人是一个快乐的人,如果其所有孩子都是快乐的人。

Functional-Style Syntax

 EquivalentClasses(

   :HappyPerson

   ObjectAllValuesFrom( :hasChild :HappyPerson )

 )

这个例子也说明了OWL陈述被允许自引用,HappyPerson这个类同时用在等价陈述的两边。

属性限制的使用可能对于“建模初学者”来说会导致一些概念混淆。作为一个经验法则,在将一个自然语言语句转换成逻辑公理时,存在量化的出现要频繁得多。使用全称量化的自然语言指示物是像“only”,“exclusively”或“nothing but”这样的单词。

关于全称角色限制有一种特别的误解。作为一个例子,考虑一下上面的快乐公理,直观读起来暗示着:一个人想要快乐必须有至少一个快乐的小孩。但是情况并不是这样:不是属性hasChild的“起始点”的任何个体,是用全称量化定义在hasChild上的任何类的类成员。因此,通过以上的陈述,每一个无子女的人也有资格快乐。要形式化前面提及的预期读法,必须声明如下:

Functional-Style Syntax

 EquivalentClasses(

   :HappyPerson

   ObjectIntersectionOf(

     ObjectAllValuesFrom( :hasChild :HappyPerson )

     ObjectSomeValuesFrom( :hasChild :HappyPerson )

   )

 )

这个例子也说明了属性限制也可以和复杂类嵌套。

属性限制也可以用来描述其个体与一个特殊的个体关联的类。例如我们可以定义John的孩子这个类:

Functional-Style Syntax

 EquivalentClasses(

   :JohnsChildren

   ObjectHasValue( :hasParent :John )

 )

    作为一个被属性相互连接的个体的特殊案例,个体可能被连接到其自身。下面的例子展示了如何表示所有自恋者都爱他们自己这样一个观点。

Functional-Style Syntax

 EquivalentClasses(

   :NarcisticPerson

   ObjectHasSelf( :loves )

 )

5.3 属性基数限制

使用全称和存在量化,我们可以表示分别至少有某人孩子中的一个的所有情况。然而,我们可能想要指定限制内的个体的数量。事实上,我们能够构建依赖于孩子的数量的类。下面的例子表明了John有至多4个其本身也是父母的孩子。

Functional-Style Syntax

 ClassAssertion(

   ObjectMaxCardinality( 4 :hasChild :Parent )

   :John

 )

注意,这个陈述允许John有任意多个其本身不是父母的孩子。

同样,也可以声明最小数量,说John是某个类的实例,该类的个体有至少两个其本身是父母的孩子:

Functional-Style Syntax

 ClassAssertion(

   ObjectMinCardinality( 2 :hasChild :Parent )

   :John

 )

如果我们知道John的孩子中本身是父母的孩子的确切数量,可以指定如下:

Functional-Style Syntax

 ClassAssertion(

   ObjectExactCardinality( 3 :hasChild :Parent )

   :John

 )

在基数限制里,提不提供类是可选的;如果我们只想谈谈John所有孩子的数量,我们可以写成:

Functional-Style Syntax

 ClassAssertion(

   ObjectExactCardinality( 5 :hasChild )

   :John

 )

5.4 个体的枚举

描述一个类的一个非常简单的方法就是枚举它所有的实例。OWL提供了这种可能性,例如,我们可以创建一个生日来宾类:

Functional-Style Syntax

 EquivalentClasses(

   :MyBirthdayGuests

   ObjectOneOf( :Bill :John :Mary)

 )

注意,这个公理比4.1节中描述的简单断言BillJohnMary的类成员关系提供更多信息。除此之外,它还规定BillJohnMaryMyBirthdayGuests类的唯一成员。因此,以这种方式定义的类有时也被称为封闭类或者枚举集。如果我们现在断言JeffMyBirthdayGuests类的一个实例,结果是Jeff必须等同于上面三个人中的一个。

6属性的高级使用

直到现在,我们关注的是仅仅用作类表达式构建块的类和属性。接下来,我们将看看用OWL2提供的属性可以实现什么其他建模功能。

6.1 属性特征

有时候,一个属性可以通过用另外一个属性并改变它的方向来获得,也就是取逆。例如,属性hasParent可以定义为hasChild的逆属性:

Functional-Style Syntax

 InverseObjectProperties( :hasParent :hasChild )

这允许推断,例如,任意个体AB,其中A通过hasChild属性关联到BBA也通过hasParent属性内联。然而,如果我们仅仅想使用它,比如,在一个类表达式里,我们不需要显式指定一个名称给逆属性。例如为了定义Orphan类,我们可以不使用新属性hasParent,而是直接称它为hasChild-inverse

Functional-Style Syntax

 EquivalentClasses(

   :Orphan

   ObjectAllValuesFrom(

     ObjectInverseOf( :hasChild )

     :Dead

   )

 )

在某些情况下,一个属性和它的逆一致,或者换句话说,属性的方向不重要。例如属性hasSpouse,如果B用它关联A,那么A也用它关联B。原因很明显,具有这种特征的属性是所谓的对称性(属性),它可以如下指定:

Functional-Style Syntax

 SymmetricObjectProperty( :hasSpouse )

另一方面,一个属性也可以非对称,意思就是说如果用它关联AB,则永远不会用它关联BA。显然(排除时空穿梭造成的矛盾场景),属性hasChild就是这种情况,表示如下:

Functional-Style Syntax

 AsymmetricObjectProperty( :hasChild )

注意,非对称(asymmetric)是一个比不对称(non-symmetric)更强的概念。同样,对称(symmetric)是一个比不非对称(non-asymmetric)更强的概念。

之前,我们认为子属性类似于子类。事实上,将类不相交的概念转移到属性上也成立:如果没有两个个体同时通过某两个属性相互关联,则这两个属性不相交。按照普通法(common law,我们可以因此陈述父母-子女(parent-child)婚姻不可以出现:

Functional-Style Syntax

 DisjointObjectProperties( :hasParent :hasSpouse ) 

属性也能够自反reflexive:这样的属性将一切事物关联到其自身。如下面的例子,指出每个人都是他自己的亲属。

Functional-Style Syntax

 ReflexiveObjectProperty( :hasRelative )

注意,这并不一定意味着任何两个通过一个自反属性相关联的个体是等同的。

而且,属性可以非自反(irreflexive,意味着没有个体能够通过这样的角色关联其自身。以下是一个典型例子,简单陈述了没有人可以是他自己的父母。

Functional-Style Syntax

 IrreflexiveObjectProperty( :parentOf )  

接下来,考虑hasHusband属性。因为每个人只能有一个丈夫(为了此示例我们认为理所当然),每个个体通过hasHusband属性最多能够关联另外一个个体。这类属性称作函数型functional,如下描述:

Functional-Style Syntax

 FunctionalObjectProperty( :hasHusband )

注意,这个陈述不要求每个个体有一个丈夫,它仅仅陈述了不能多于一个。另外,如果我们有一个陈述说Mary的丈夫是James,而又有一个陈述说Mary的丈夫是Jim,可以推论JimJames必须指的是同一个个体。

也有可能指出一个给定属性的逆是函数型:

Functional-Style Syntax

 InverseFunctionalObjectProperty( :hasHusband )

这表明了一个个体可以是至多一个其他个体的丈夫。这个例子也表明了函数型和反函数型之间的区别,在一夫多妻制下,前一条公理是有效的而后者不是。

现在来看看属性hasAncestor,这个属性意味着不论何时AB的直系后裔,个体A都和B关联。显然,属性hasParenthasAncesor的一个“特例”,由此它可以被定义为一个子属性。而且,如果能“自动地”包含父母的父母(以及父母的父母的父母)也很好。这个可以通过将hasAncestor定义为传递性transitive属性来实现。对于某个个体B,每当传递属性关联个体AB并且关联BC,它也关联个体AC

Functional-Style Syntax

 TransitiveObjectProperty( :hasAncestor )

6.2 属性链

前面一节的最后一个例子意味着,当有hasParent属性的一个链时, 存在一个属性hasAncestor。我们可能想要更具体一点定义,比如说,用属性hasGrandparent代替。从技术上说,这意味着我们想用hasGrandparent关联所有通过两个hasParent属性的链来关联的个体。与前面hasAncestor例子形成对比,我们不希望hasParenthasGrandparent的特例,也不想用hasGrandparent指曾祖父母等。我们可以表示,每一个这样的链必须通过一个hasGrandparent属性涵盖,如下:

Functional-Style Syntax

 SubObjectPropertyOf(

   ObjectPropertyChain( :hasParent :hasParent )

   :hasGrandparent

 )

6.3

OWL2里,一个(数据或对象)属性集合能够被指定为一个类表达式的键。这意味着,该类表达式的每一个具名实例,都可以用这些属性获得的关于该实例的值的集合来唯一标识。

一个简单的例子就是,一个人可以由她的社会安全号识别:

Functional-Style Syntax

 HasKey( :Person () ( :hasSSN ) )

7数据类型的高级使用

4.8节,我们知道个体可以被赋予数值信息,基本上是通过数据类型属性连接它们和数据值,就像对象属性关联其他领域个体。实际上,这些相似之处延伸到很多数据类型高级特性的使用上。

首先,数据值被分组为数据类型,我们已经在4.8节看到一个数据类型属性的值域限制如何可以用来指明该属性可以关联到的值的种类。此外,可以通过约束或组合现有的数据类型来表示和定义新的数据类型。数据类型通过所谓的分面(facets(借用自XML Schema Datatype [XML Schema Datatypes])进行限制。接下来的例子,我们通过限定整数数据类型的值在(包含)0150之间,为一个人的年龄定义一个新数据类型。

Functional-Style Syntax

 DatatypeDefinition(

   :personAge

   DatatypeRestriction( xsd:integer          

     xsd:minInclusive "0"^^xsd:integer

     xsd:maxInclusive "150"^^xsd:integer

   )

 )

    同样,数据类型也可以被组合,就像类的补集、交集和并集。因此,假设我们已经定义了一个数据类型minorAge,我们可以通过从personAge排除minorAge的所有数据值,定义数据类型majorAge

Functional-Style Syntax

 DatatypeDefinition(

   :majorAge

   DataIntersectionOf(

     :personAge

     DataComplementOf( :minorAge )

   )

 )

    而且,一个新的数据类型也可以仅仅通过枚举它所包含的数据值而创建。

Functional-Style Syntax

 DatatypeDefinition(

   :toddlerAge

   DataOneOf( "1"^^xsd:integer "2"^^xsd:integer )

 )

    6.1节,我们见到了描述对象属性特征的多种方式。其中一些也可用于数据类型属性。例如,我们可以通过描述数据对象属性hasAge为函数型,表示每个人仅仅有一个年龄:

Functional-Style Syntax

 FunctionalDataProperty( :hasAge )

   新类可以通过施加在数据类型属性上的限制来定义。下面的例子定义了青少年类为所有年龄在1319岁之间的个体。

Functional-Style Syntax

 SubClassOf(

   :Teenager

   DataSomeValuesFrom( :hasAge

     DatatypeRestriction( xsd:integer

       xsd:minExclusive "12"^^xsd:integer

       xsd:maxInclusive "19"^^xsd:integer

     )

   )

 )

8文档信息和注释

接下来,我们描述的OWL2特性不会给本体中指定的“逻辑”知识带来实际贡献。这些特性用来为本体自身、公理甚至单个的实体提供额外信息。

8.1 注释公理和实体

    在很多情况下,我们希望用信息配备我们的OWL本体的某些部分,这些信息实际上不描述领域本身,但是谈及有关领域的描述。OWL为此目的提供了注释。OWL注释简单地把属性-值对与本体的部分或整个本体自身联系在一起。甚至注释本身也可以加注释。注释信息实际上不是本体的逻辑意义的一部分。所以,例如,我们可以为我们本体中的一个类增加信息,对其含义给出一个自然语言描述。

Functional-Style Syntax

 AnnotationAssertion( rdfs:comment :Person "Represents the set of all people." )

下面是一个带有注释的公理的例子。

Functional-Style Syntax

 SubClassOf(

   Annotation( rdfs:comment "States that every man is a person." )

   :Man

   :Person

 )

    这种注释经常在工具中使用,提供自然语言文本,显示在帮助界面中。

8.2 本体管理

   OWL中,有关一个主题的一般信息几乎总是聚集成一个本体,然后被各种应用程序使用。我们也可以为OWL本体提供一个名字,通常就是本体文档位于网络中的位置。如果有关一个主题的特定信息被不同的应用程序使用,也可以放置在本体中。

Functional-Style Syntax

 Ontology(<http://example.com/owl/families>

   ...

 )

 

我们把OWL本体放进OWL文档,然后这些文档被放置到本地文件系统或万维网上。除了包含一个OWL本体,OWL文档也包含有关通常用在OWL本体中的简短名字(例如Person)转换为IRIs的信息(通过为前缀提供展开)。于是,IRI就是一串前缀展开和引用。

到目前为止,在我们的例子中已经使用了大量的前缀,包括xsd和空前缀。前缀xsd已被用在XML Schema数据类型的简约名字中,其IRI已经由XML Schema推荐标准确定。因此我们必须使用xsd的标准展开(也就是http://www.w3.org/2001/XMLSchema#)。我们为其他前缀选择的展开方式会影响我们本体中的类、属性和个体的命名,也会影响本体自身的命名。如果我们把本体放到网上,就应该选择一个展开方式,让它在我们控制的网络的某一部分上,这样就不会意外地用到别人的名字。(这里我们使用了一个没有人控制的虚构位置。)两种基于XML的语法需要用于内置名称的命名空间,也可以为命名空间使用XML实体。一般来说,应该要注意:可用的缩写机制及其特定语法在OWL的每一个序列化中是不同的,甚至在用到类似关键词的案例中(也是这样)。

 

Functional-Style Syntax

 Prefix(:=<http://example.com/owl/families/>)

 Prefix(otherOnt:=<http://example.org/otherOntologies/families/>)

 Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)

 Prefix(owl:=<http://www.w3.org/2002/07/owl#>)

 

 Ontology(<http://example.com/owl/families>

    ...

 )

    OWL中重用已被存储在其他本体中的一般信息很常见。不需要复制这个信息,OWL允许使用引入陈述来引入在其他本体中的整个本体的内容,如下:

Functional-Style Syntax

 Import( <http://example.org/otherOntologies/families.owl> )

因为语义Web和本体构建是分布式的,本体为同样的概念、属性或个体使用不同的名称很常见。正如我们所见到的,OWL中有几个结构可以用来陈述不同名称指向同一个类、属性或个体,所以,例如,我们可以将我们本体中使用的名称绑定到一个引入本体所使用的名称上(而不是冗长乏味地重命名实体),如下:

Functional-Style Syntax

 SameIndividual( :John otherOnt:JohnBrown )

 SameIndividual( :Mary otherOnt:MaryBrown )

 EquivalentClasses( :Adult otherOnt:Grownup )

 EquivalentObjectProperties( :hasChild otherOnt:child )

 EquivalentDataProperties( :hasAge otherOnt:age )

8.3 实体声明

为了帮助管理本体,OWL有声明的概念。基本思想就是认为在一个本体中要声明每一个类、属性或个体,然后,它就能够在这个本体中使用,且其他本体可以引用这个本体。

在曼彻斯特语法中,声明是隐式的。如果需要的话,提供关于一个类、属性或个体信息的结构(constructs),隐式地声明那个类、属性或个体。其他的语法有显式的声明:

Functional-Style Syntax

 Declaration( NamedIndividual( :John ) )

 Declaration( Class( :Person ) )

 Declaration( ObjectProperty( :hasWife ) )

 Declaration( DataProperty( :hasAge ) )

    然而,一个IRI可能同时表示不同的实体类型(例如既是一个个体又是一个类)。这种可能性(称作“双关(punning)”)已被引入,以允许一定数量的元建模,第9节我们给出了这样一个例子。不过,OWL2在使用和重用名称上仍需要一些规则。为了允许一个可读性更好的语法和其他技术原因,OWL2 DL要求一个名称不能用于一个以上的属性类型(对象、数据类型或注释属性),一个IRI也不能既表示一个类又表示一个数据类型。此外,“内置”名称(例如那些RDFRDFS还有OWL的各种语法使用的名称)不能在OWL中随意使用。

9 OWL2 DLOWL2 Full

    OWL2中,对本体指定含义有两种可选的方式,分别是所谓的直接模型理论语义[OWL 2 Direct Semantics]和基于RDF的语义[OWL 2 RDF-Based Semantics]。非正式地,概念“OWL2 DL”用来指使用直接语义解释OWL2本体,当考虑基于RDF的语义时,则使用概念“OWL2 Full”。OWL2函数式语法文档[OWL 2 Specification]另外列出了一些条件,满足这些条件的OWL2本体才是OWL2 DL本体。

    直接模型理论语义[OWL 2 Direct Semantics]以一种描述逻辑[Description Logics]的方式为OWL2提供含义。基于RDF的语义[OWL 2 RDF-Based Semantics]是对RDFS语义 [RDF Semantics]的扩展,并建立在将OWL2本体视为RDF图的基础上。

    当考虑本体的时候,这两个语义间的差异一般是很微小的。事实上,给定一个OWL2 DL本体,使用直接语义得到的推论,在基于RDF的语义之下仍然有效,请参考“基于RDF的语义”文档[OWL 2 RDF-Based Semantics]Section 7.2中的对应定理(correspondence theorem)。二者的两个主要区别是:基于直接模型理论语义的注释没有形式化的含义,而基于RDF的语义有一些额外的由RDF全集视图(RDF view of the universe)产生的推论。

    从概念上讲,我们可以从两个方面考虑OWL2 DLOWL2 Full间的区别:

    当然,这两个语义一起设计,因此也影响了彼此。例如,OWL2的一个设计目的就是让OWL2 DL在句法上更接近OWL2 Full(即,允许更多的RDF/OWL2 Full本体成为合法的OWL2 DL本体)。这导致了所谓的双关(punning合并进了OWL2,比如,一个类和一个个体使用相同的IRI作为名称。这个例子的用法如下所示,陈述了John是一个父亲而父亲是一个社会角色:

Functional-Style Syntax

ClassAssertion( :Father :John )

ClassAssertion( :SocialRole :Father )

注意第一个陈述,Father被用作一个类,而在第二个陈述中它被用作一个个体。在这个意义上,SocialRole充当Father类的一个元类(metaclass)。

OWL1中,一个包含这两个陈述的文档将是一个OWL1 Full文档,但不是一个OWL1 DL文档。然而,在OWL2 DL中这是被允许的。但必须注意到, OWL2 DL的直接模型理论语义通过将Father类和Father个体理解为同一IRI的两个不同视图去适应它,也就是说,在进行语义解释时它们被区别对待。

10 OWL2配置语言

    除了OWL2 DLOWL2 Full之外,OWL2指定了三种配置语言。一般来说,OWL2是一种非常具有表达力的语言(不管是在计算上还是对用户),因此很难实现好并使用其进行工作。这些附加的配置语言被设计成易于接受的OWL2子集,可满足各种应用程序的需要。正如OWL2 DL,这些配置语言的主要要求是计算上的考虑(并且它们都具备强大的可扩展性,更容易在给定现有技术上实现),但是有很多具备良好计算性能的OWL2子集。已选定的OWL2配置语言被认为是已经具有了大量的用户社区,尽管有几个其他的配置语言没有被包含进来并且人们应该会期待更多配置语言出现。文档[OWL 2 Profiles]为指定附加配置语言提供了一个清晰的模板。

    为了保证可扩展的推理,现有的配置语言共享一些涉及其表达力的限制。一般而言,它们不允许否定和析取,因为这些结构会使推理复杂化并且已经证明建模时鲜有需要。例如,没有一个配置语言可以指定每一个人是男性或者女性。配置语言更具体的建模限制将在单个配置语言的章节中论述。

    我们讨论每一个配置语言及其设计原理,并为用户选择哪个配置语言进行工作提供一些指导。请注意这个讨论是不全面的,也不可能全面。任何一种决策都必须部分基于可用的工具以及如何适应你的系统或工作流程的其余部分。

   大体上,不同的配置语言可以从句法上进行区分,因为在各种配置语言之间存在包含关系。例如,OWL2 DL可以被看作是OWL Full的一个句法片段,OWL2 QLOWL2 DL的一个句法片段(因此也是OWL Full的句法片段)。(但)下面这些配置语言(彼此之间)都不是另一个配置语言的子集。理想情况下,可以在子配置语言上使用一个符合父配置语言的推理器(或者其他工具),且获得的结果没有变化。对于与OWL2 DL相关的配置语言OWL2 ELOWL2 QL而言,这个原则确实成立:每个符合OWL2 DL的推理器都是一个OWL2 EL推理器和OWL2 QL推理器(但是可能在性能上不同,因为OWL2 DL推理器面向的是更通用的案例集合)。

10.1 OWL2 EL

使用OWL2 EL非常类似于使用OWL2 DL:在一个子类(subClassOf)陈述的两边都能使用类表达式甚至推断这个关系。对于很多大型的、面向类表达式的本体,只要稍作简化就可以获得一个OWL2 EL本体,并且保留原本体的大部分含义。

OWL2 EL是随着大型生物健康本体而设计的(例如SNOMED CTNCI叙词表和Galen)。这类本体的共同特征是包含复杂的结构描述(例如,根据它们包含和被包含在什么部位来定义某些身体部位,或者沿着部分-子部分(part-subpart)关系传播疾病),巨量的类,大量使用分类来管理术语,将结果术语应用到巨量数据上。因此,OWL2 EL拥有一个具备相对表达力的类表达式语言,并且它对类表达式如何可以用在公理中没有限制。它也拥有相当有表达力的属性表达式,包括属性链,但排除逆属性。

OWL2 EL的合理使用明显不限于生物健康领域:正如其他配置语言,OWL2 EL是独立于领域的。然而,当你的领域和你的应用程序需要识别结构上复杂的对象时,OWL2 EL作用明显。这类领域包括系统配置、产品库存和许多科学领域。

    除了否定和析取,OWL2 EL也不允许对属性使用全称量化。因此,不能陈述像“富人的所有孩子都富有”这样的命题。而且,因为各种角色逆都不可用,所以没有办法说明,例如parentOfchildOf是彼此的逆。

缩略词EL反映了该配置文件是基于所谓的描述逻辑EL家族 [EL++]的;它们是主要提供存在量化变量的语言。

    下面的例子使用了一些在OWL2 EL中可用的典型建模特性

Functional-Style Syntax

 SubClassOf(

   :Father

   ObjectIntersectionOf( :Man :Parent )

 )

 

 EquivalentClasses(

   :Parent

   ObjectSomeValuesFrom(

     :hasChild

     :Person

   )

 )

 

 EquivalentClasses(

   :NarcisticPerson

   ObjectHasSelf( :loves )

 )

 

 DisjointClasses(

   :Mother

   :Father

   :YoungChild

 )

 

 SubObjectPropertyOf(

   ObjectPropertyChain( :hasFather :hasBrother )

   :hasUncle

 )

 

 NegativeObjectPropertyAssertion(

   :hasDaughter

   :Bill

   :Susan

 )

10.2 OWL 2 QL

    OWL2 QL可以使用标准关系型数据库技术(例如SQL)来实现,仅需要依据类公理扩展查询。这意味着它可以与RDBMSs紧密结合并且受益于它们的健壮实现和多用户特性。此外,它可以不必“接触数据”即可实现,从而真正作为一个翻译/预处理层。在表达力上,它可以表示实体关系和UML图(至少是那些有功能限制的)的主要特性。因此,它既适合表示数据库模式也适合通过查询重写整合它们。其结果是,它也可以直接作为一个高层次数据库模式语言使用,尽管用户可能更喜欢基于语法的图表。

    OWL2 QL也捕获许多RDFS的常用特性并由此进行了小扩展,如逆属性和子属性层次。OWL2 QL非对称地限制类公理,也就是,你可以把结构(constructs)用作一个子类,但你不能将它用作超类。

在其他结构(constructs)中,OWL2 QL不允许对一个类表达式使用角色的存在量化,例如,它可以描述每个人都有parent,但不能描述每个人都有一个female parent。而且不支持属性链公理。

缩略词QL反映了这样一个事实:在这个配置语言中,通过将查询重写成标准关系型查询语言(Query Language[DL-Lite]就可以实现查询应答。

下面的例子使用了一些在OWL2 QL中可用的典型建模特性。第一个公理陈述了对于每一个没有孩子的人,不存在任何人称这个人为父母:

Functional-Style Syntax

 SubClassOf(

   :ChildlessPerson

   ObjectIntersectionOf(

     :Person

     ObjectComplementOf(

       ObjectSomeValuesFrom(

         ObjectInverseOf( :hasParent )

         owl:Thing

       )

     )

   )

 )

 

 DisjointClasses(

   :Mother

   :Father

   :YoungChild

 )

 

 DisjointObjectProperties(

   :hasSon

   :hasDaughter

 )

 

 SubObjectPropertyOf(

   :hasFather

   :hasParent

 )

10.3 OWL 2 RL

OWL2 RL配置语言面向需要可扩展推理又不能牺牲太多表达能力的应用程序。它被设计用来适应可以牺牲语言的完整表达力以换取效率的OWL2应用程序,以及需要一些来自OWL2的额外表达力的RDF(S)应用程序。这可以通过定义一个OWL2句法子集来达到目标,它可以使用基于规则的技术实现,并且以一阶蕴涵的形式展现一个基于RDF语义的OWL2部分公理化,用作这样一个实现的基础。

OWL2 RL的适当的基于规则的实现可以与任意的RDF图一起使用。因此,对于丰富RDF数据,OWL2 RL是理想的,特别是当数据必须由附加规则修改的时候。然而,从建模的角度来看,这个会促使我们远离使用类表达式:OWL2 RL保证我们不能(容易地)在父类表达式里谈及未知的个体(此限制由规则特性产生)。OWL2 QL相比,当你已经把数据整理成RDF并且将它作为RDF工作的时候,OWL2 RL效果更好。

在其他结构中,OWL2 RL不允许这样的陈述:一个个体的存在迫使另一个个体的存在。例如,陈述“每个人有一个父母”不可以在OWL2 RL中表示。

OWL2 RL非对称地限制类公理,也就是,你可以把结构(constructs)用作一个子类,但你不能将它用作超类。

缩略词RL反映了这样的一个事实:在这个配置语言中的推理可以使用标准的规则语言(Rule Language[DLP]来实现。

下面的例子使用了一些在OWL2 RL中可用的典型建模特性。第一个公理(有点人为编造)陈述:对于MaryBillMeg(都是女性)中的每一个,下述成立:她是一个有至多一个孩子的父母,所有她的孩子(如果她有的话)都是女性。

Functional-Style Syntax

 SubClassOf(

   ObjectIntersectionOf(

     ObjectOneOf( :Mary :Bill :Meg )

     :Female

   )

   ObjectIntersectionOf(

     :Parent

     ObjectMaxCardinality( 1 :hasChild )

     ObjectAllValuesFrom( :hasChild :Female )

   )

 )

 

 DisjointClasses(

   :Mother

   :Father

   :YoungChild

 )

 

 SubObjectPropertyOf(

   ObjectPropertyChain( :hasFather :hasBrother )

   :hasUncle

 )

11 OWL工具

    为了使用OWL本体进行工作,工具支持是必要的。主要有两种类型的工具专注于本体生命周期的两个主要阶段:本体编辑器用来创建和编辑本体,而推理器用来查询本体以获得隐性知识,即,它们决定一个正在考虑中的陈述是否是一个本体的逻辑结果。

    目前用得最广泛的OWL编辑器是Protégé,一个由斯坦福大学开发的免费开源编辑框架。凭借其开放的插件结构,它允许特殊用途本体编辑组件的简易集成。其他编辑器包括TopQuadrant的商用TopBraid Composer,以及开源系统SWOOPNeOn-Toolkit

    有若干用于OWL DL的推理器,其支持的推理特性覆盖范围稍有不同。对于其中的一些,OWL2一致(OWL2 conformance)目前已有规划,相应的实现正在进行中。Test Suite Status文档罗列了,下面提及的一些推理器在何种程度上遵从测试用例。

    对于OWL DL内的推理,最突出的系统是曼彻斯特大学的Fact++,牛津大学计算实验室的Hermit,“Clark & Parsia, LLC”的PelletRacer SystemsRacerPro

除了那些支持所有OWL DL的一般用途的推理器,还有为易处理的OWL配置语言定制的推理系统。德累斯顿工业大学(Dresden University of Technology)的CEL支持OWL EL罗马Sapienza大学Sapienza Università di Roma)的QuOnto支持OWL QLORACLE 11g支持OWL RL

开源的OWL API作为目前最重要的OWL开发工具,扮演着相当重要的角色。

    必须提到,在本文档创建时,有几个OWL工具还在开发中,因此当前的概述应该看做是此开发的快照而不是最新的概述。OWL工具的全面列表可以在semanticweb.orgESW-Wiki上找到。

12 下一步读什么

    这篇简短的入门只触及了OWL的表面。有很多更长和内容更丰富的关于OWL以及如何使用OWL工具的教程可以在网上搜索到。阅读其中一个文档并使用工具构建一个OWL本体,可能是获得OWL应用知识的最佳方式。如果要学习更多的有关OWL的基础知识,我们建议首先翻阅一本教科书[FOST]然后再追踪其中引用的原始文章。

    这篇简短的入门也不是OWL的规范定义。OWL语法的规范定义以及每一个OWL结构的资料性描述可以查看“OWL2结构化规范与函数式语法”文档[OWL 2 Specification]

当要寻找有关一个特定语言特性的信息时,OWL2快速参考指南[OWL 2 Quick Guide]是一个方便的参考。

对于那些对更形式化的文档感兴趣的读者,OWL2的形式化含义可以在OWL2语义文档[OWL 2 Direct Semantics] [OWL 2 RDF-Based Semantics]中找到。

OWL语义与RDF三元组的映射请见“映射到RDF图”文档[OWL 2 RDF Mapping]

13 附录:完整的样本本体

    这里包含的是完整的OWL本体样例。本体公理按照其使用的顶级表达特性排序。此外,我们遵循一种常用的排序,依次是本体和声明信息、有关属性的信息、类和数据类型、个体。

Functional-Style Syntax

 Prefix(:=<http://example.com/owl/families/>)

 Prefix(otherOnt:=<http://example.org/otherOntologies/families/>)

 Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)

 Prefix(owl:=<http://www.w3.org/2002/07/owl#>)

 Ontology(<http://example.com/owl/families>

   Import( <http://example.org/otherOntologies/families.owl> )

 

   Declaration( NamedIndividual( :John ) )

   Declaration( NamedIndividual( :Mary ) )

   Declaration( NamedIndividual( :Jim ) )

   Declaration( NamedIndividual( :James ) )

   Declaration( NamedIndividual( :Jack ) )

   Declaration( NamedIndividual( :Bill ) )

   Declaration( NamedIndividual( :Susan ) )

   Declaration( Class( :Person ) )

   AnnotationAssertion( rdfs:comment :Person "Represents the set of all people." )

   Declaration( Class( :Woman ) )

   Declaration( Class( :Parent ) )

   Declaration( Class( :Father ) )

   Declaration( Class( :Mother ) )

   Declaration( Class( :SocialRole ) )

   Declaration( Class( :Man ) )

   Declaration( Class( :Teenager ) )

   Declaration( Class( :ChildlessPerson ) )

   Declaration( Class( :Human ) )

   Declaration( Class( :Female ) )

   Declaration( Class( :HappyPerson ) )

   Declaration( Class( :JohnsChildren ) )

   Declaration( Class( :NarcisticPerson ) )

   Declaration( Class( :MyBirthdayGuests ) )

   Declaration( Class( :Dead ) )

   Declaration( Class( :Orphan ) )

   Declaration( Class( :Adult ) )

   Declaration( Class( :YoungChild ) )

   Declaration( ObjectProperty( :hasWife ) )

   Declaration( ObjectProperty( :hasChild ) )

   Declaration( ObjectProperty( :hasDaughter ) )

   Declaration( ObjectProperty( :loves ) )

   Declaration( ObjectProperty( :hasSpouse ) )

   Declaration( ObjectProperty( :hasGrandparent ) )

   Declaration( ObjectProperty( :hasParent ) )

   Declaration( ObjectProperty( :hasBrother ) )

   Declaration( ObjectProperty( :hasUncle ) )

   Declaration( ObjectProperty( :hasSon ) )

   Declaration( ObjectProperty( :hasAncestor ) )

   Declaration( ObjectProperty( :hasHusband ) )

   Declaration( DataProperty( :hasAge ) )

   Declaration( DataProperty( :hasSSN ) )

   Declaration( Datatype( :personAge ) )

   Declaration( Datatype( :majorAge ) )

   Declaration( Datatype( :toddlerAge ) )

 

   SubObjectPropertyOf( :hasWife :hasSpouse )

   SubObjectPropertyOf(

     ObjectPropertyChain( :hasParent :hasParent )

     :hasGrandparent

   )

   SubObjectPropertyOf(

     ObjectPropertyChain( :hasFather :hasBrother )

     :hasUncle

   )

   SubObjectPropertyOf(

     :hasFather

     :hasParent

   )

 

   EquivalentObjectProperties( :hasChild otherOnt:child )

   InverseObjectProperties( :hasParent :hasChild )

   EquivalentDataProperties( :hasAge otherOnt:age )

   DisjointObjectProperties( :hasSon :hasDaughter )

   ObjectPropertyDomain( :hasWife :Man )

   ObjectPropertyRange( :hasWife :Woman )

   DataPropertyDomain( :hasAge :Person )

   DataPropertyRange( :hasAge xsd:nonNegativeInteger )

 

   SymmetricObjectProperty( :hasSpouse )

   AsymmetricObjectProperty( :hasChild )

   DisjointObjectProperties( :hasParent :hasSpouse )

   ReflexiveObjectProperty( :hasRelative )

   IrreflexiveObjectProperty( :parentOf )

   FunctionalObjectProperty( :hasHusband )

   InverseFunctionalObjectProperty( :hasHusband )

   TransitiveObjectProperty( :hasAncestor )

   FunctionalDataProperty( :hasAge )

 

   SubClassOf( :Woman :Person )

   SubClassOf( :Mother :Woman )

   SubClassOf(

     :Grandfather

     ObjectIntersectionOf( :Man :Parent )

   )

   SubClassOf(

     :Teenager

     DataSomeValuesFrom( :hasAge

       DatatypeRestriction( xsd:integer

         xsd:minExclusive "12"^^xsd:integer

         xsd:maxInclusive "19"^^xsd:integer

       )

     )

   )

   SubClassOf(

     Annotation( rdfs:comment "States that every man is a person." )

     :Man

     :Person

   )

   SubClassOf(

     :Father

     ObjectIntersectionOf( :Man :Parent )

   )

   SubClassOf(

     :ChildlessPerson

     ObjectIntersectionOf(

       :Person

       ObjectComplementOf(

         ObjectSomeValuesFrom(

           ObjectInverseOf( :hasParent )

           owl:Thing

         )

       )

     )

   )

   SubClassOf(

     ObjectIntersectionOf(

       ObjectOneOf( :Mary :Bill :Meg )

       :Female

     )

     ObjectIntersectionOf(

       :Parent

       ObjectMaxCardinality( 1 :hasChild )

       ObjectAllValuesFrom( :hasChild :Female )

     )

   )

 

   EquivalentClasses( :Person :Human )

   EquivalentClasses(

     :Mother

     ObjectIntersectionOf( :Woman :Parent )

   )

   EquivalentClasses(

     :Parent

     ObjectUnionOf( :Mother :Father )

   )

   EquivalentClasses(

     :ChildlessPerson

     ObjectIntersectionOf(

       :Person

       ObjectComplementOf( :Parent )

     )

   )

   EquivalentClasses(

     :Parent

     ObjectSomeValuesFrom( :hasChild :Person )

   )

   EquivalentClasses(

     :HappyPerson

     ObjectIntersectionOf(

        ObjectAllValuesFrom( :hasChild :HappyPerson )

        ObjectSomeValuesFrom( :hasChild :HappyPerson )

     )

   )

   EquivalentClasses(

     :JohnsChildren

     ObjectHasValue( :hasParent :John )

   )

   EquivalentClasses(

     :NarcisticPerson

     ObjectHasSelf( :loves )

   )

   EquivalentClasses(

     :MyBirthdayGuests

     ObjectOneOf( :Bill :John :Mary)

   )

   EquivalentClasses(

     :Orphan

     ObjectAllValuesFrom(

       ObjectInverseOf( :hasChild )

       :Dead

     )

   )

   EquivalentClasses( :Adult otherOnt:Grownup )

   EquivalentClasses(

     :Parent

     ObjectSomeValuesFrom(

       :hasChild

       :Person

     )

   )

 

   DisjointClasses( :Woman :Man )

   DisjointClasses(

     :Mother

     :Father

     :YoungChild

   )

   HasKey( :Person () ( :hasSSN ) )

 

   DatatypeDefinition(

     :personAge

     DatatypeRestriction( xsd:integer

       xsd:minInclusive "0"^^xsd:integer

       xsd:maxInclusive "150"^^xsd:integer

     )

   )

   DatatypeDefinition(

     :majorAge

     DataIntersectionOf(

       :personAge

       DataComplementOf( :minorAge )

     )

   )

   DatatypeDefinition(

     :toddlerAge

     DataOneOf( "1"^^xsd:integer "2"^^xsd:integer )

   )

 

   ClassAssertion( :Person :Mary )

   ClassAssertion( :Woman :Mary )

   ClassAssertion(

     ObjectIntersectionOf(

       :Person

       ObjectComplementOf( :Parent )

     )

     :Jack

   )

   ClassAssertion(

     ObjectMaxCardinality( 4 :hasChild :Parent )

     :John

   )

   ClassAssertion(

     ObjectMinCardinality( 2 :hasChild :Parent )

     :John

   )

   ClassAssertion(

     ObjectExactCardinality( 3 :hasChild :Parent )

     :John

   )

   ClassAssertion(

     ObjectExactCardinality( 5 :hasChild )

     :John

   )

   ClassAssertion( :Father :John )

   ClassAssertion( :SocialRole :Father )

 

   ObjectPropertyAssertion( :hasWife :John :Mary )

   NegativeObjectPropertyAssertion( :hasWife :Bill :Mary )

   NegativeObjectPropertyAssertion(

     :hasDaughter

     :Bill

     :Susan

   )

   DataPropertyAssertion( :hasAge :John "51"^^xsd:integer )

   NegativeDataPropertyAssertion( :hasAge :Jack "53"^^xsd:integer )

 

   SameIndividual( :John :Jack )

   SameIndividual( :John otherOnt:JohnBrown )

   SameIndividual( :Mary otherOnt:MaryBrown )

   DifferentIndividuals( :John :Bill )

 )

14 附录:变动日志(资料性)

14.1 相对于建议推荐标准的变动

本节总结了该文档相对于2009922日的建议推荐标准的变动。

14.2 相对于上一征求意见版本的变动

本节总结了该文档相对于2009611日候选推荐标准的变动。

15 致谢

OWL2的开发始于OWL1.1成员提交 (其本身是用户和开发者反馈的结果),尤其是在体验与研究方向工作组(OWLED)系列中积累的信息。该工作组也考虑了来自于WebOnt工作组(WebOnt Working Group)的待解决问题(postponed issues)。

本文档由OWL工作小组(见下)执笔,它的内容反映了作为一个整体的该工作小组内部的广泛讨论。编者向Jie Bao RPI),Michel Dumontier(卡尔顿大学),Christine Goldbreich(凡尔赛大学和LIRMM),Henson Graves(洛克希德马丁公司),Ivan HermanW3C/ERCIM),Rinke Hoekstra(阿姆斯特丹大学),Doug LenatCycorp),Deborah L. McGuinnessRPI),Alan Rector(曼彻斯特大学),Alan RuttenbergScience Commons),Uli Sattler(曼彻斯特大学),Michael Schneider FZI)和 Mike SmithClark & Parsia)的仔细审阅和有益评论致以特别的谢意。

    在本文档发布时,经常参加OWL工作组会议的与会者有:Jie Bao RPI),Diego CalvaneseBozen-Bolzano大学),Bernardo Cuenca Grau(牛津大学计算实验室),Martin Dzbor(英国公开大学),Achille FokoueIBM公司),Christine Golbreich(凡尔赛大学和LIRMM),Sandro Hawke W3C/MIT),Ivan HermanW3C/ERCIM),Rinke Hoekstra(阿姆斯特丹大学),Ian Horrocks(牛津大学计算实验室),Elisa KendallSandpiper软件),Markus KrötzschFZI), Carsten Lutz不来梅大学),Deborah L. McGuinness RPI),Boris Motik(牛津大学计算实验室),Jeff Pan(阿伯丁大学),Bijan Parsia(曼彻斯特大学),Peter F. Patel-Schneider(贝尔实验室,阿尔卡特公司),Sebastian RudolphFZI),Alan RuttenbergScience Commons),Uli Sattler(曼彻斯特大学),Michael SchneiderFZI),Mike Smith Clark & Parsia),Evan Wallace NIST),Zhe Wu(甲骨文公司)和Antoine ZimmermannDERI Galway)。我们还要感谢以前的工作组成员:Jeremy CarrollJim HendlerVipul Kashyap

16 参考文献

[Description Logics]

The Description Logic Handbook: Theory, Implementation, and Applications, second edition. Franz Baader, Diego Calvanese, Deborah L. McGuinness, Daniele Nardi, and Peter F. Patel-Schneider, eds. Cambridge University Press, 2007. Also see the Description Logics Home Page.

[DLP]

Description Logic Programs: Combining Logic Programs with Description Logic. Benjamin N. Grosof, Ian Horrocks, Raphael Volz, and Stefan Decker. in Proc. of the 12th Int. World Wide Web Conference (WWW 2003), Budapest, Hungary, 2003. pp.: 48-57

[DL-Lite]

Tractable Reasoning and Efficient Query Answering in Description Logics: The DL-Lite Family. Diego Calvanese, Giuseppe de Giacomo, Domenico Lembo, Maurizio Lenzerini, Riccardo Rosati. J. of Automated Reasoning 39(3):385-429, 2007

[EL++]

Pushing the EL Envelope. Franz Baader, Sebastian Brandt, and Carsten Lutz. In Proc. of the 19th Joint Int. Conf. on Artificial Intelligence (IJCAI 2005), 2005

[FOST]

Foundations of Semantic Web Technologies. Pascal Hitzler, Markus Krötzsch, and Sebastian Rudolph. Chapman & Hall/CRC, 2009, ISBN: 9781420090505.

[OWL 2 Conformance]

OWL 2 Web Ontology Language: Conformance Michael Smith, Ian Horrocks, Markus Krötzsch, Birte Glimm, eds. W3C Recommendation, 27 October 2009, http://www.w3.org/TR/2009/REC-owl2-conformance-20091027/. Latest version available at http://www.w3.org/TR/owl2-conformance/.

[OWL 2 Manchester Syntax]

OWL 2 Web Ontology Language: Manchester Syntax Matthew Horridge, Peter F. Patel-Schneider. W3C Working Group Note, 27 October 2009, http://www.w3.org/TR/2009/NOTE-owl2-manchester-syntax-20091027/. Latest version available at http://www.w3.org/TR/owl2-manchester-syntax/.

[OWL 2 New Features and Rationale]

OWL 2 Web Ontology Language: New Features and Rationale Christine Golbreich, Evan K. Wallace, eds. W3C Recommendation, 27 October 2009, http://www.w3.org/TR/2009/REC-owl2-new-features-20091027/. Latest version available at http://www.w3.org/TR/owl2-new-features/.

[OWL 2 Profiles]

OWL 2 Web Ontology Language: Profiles Boris Motik, Bernardo Cuenca Grau, Ian Horrocks, Zhe Wu, Achille Fokoue, Carsten Lutz, eds. W3C Recommendation, 27 October 2009, http://www.w3.org/TR/2009/REC-owl2-profiles-20091027/. Latest version available at http://www.w3.org/TR/owl2-profiles/.

[OWL 2 Quick Reference Guide]

OWL 2 Web Ontology Language: Quick Reference Guide Jie Bao, Elisa F. Kendall, Deborah L. McGuinness, Peter F. Patel-Schneider, eds. W3C Recommendation, 27 October 2009, http://www.w3.org/TR/2009/REC-owl2-quick-reference-20091027/. Latest version available at http://www.w3.org/TR/owl2-quick-reference/.

[OWL 2 RDF-Based Semantics]

OWL 2 Web Ontology Language: RDF-Based Semantics Michael Schneider, editor. W3C Recommendation, 27 October 2009, http://www.w3.org/TR/2009/REC-owl2-rdf-based-semantics-20091027/. Latest version available at http://www.w3.org/TR/owl2-rdf-based-semantics/.

[OWL 2 RDF Mapping]

OWL 2 Web Ontology Language: Mapping to RDF Graphs Peter F. Patel-Schneider, Boris Motik, eds. W3C Recommendation, 27 October 2009, http://www.w3.org/TR/2009/REC-owl2-mapping-to-rdf-20091027/. Latest version available at http://www.w3.org/TR/owl2-mapping-to-rdf/.

[OWL 2 Direct Semantics]

OWL 2 Web Ontology Language: Direct Semantics Boris Motik, Peter F. Patel-Schneider, Bernardo Cuenca Grau, eds. W3C Recommendation, 27 October 2009, http://www.w3.org/TR/2009/REC-owl2-direct-semantics-20091027/. Latest version available at http://www.w3.org/TR/owl2-direct-semantics/.

[OWL 2 Specification]

OWL 2 Web Ontology Language: Structural Specification and Functional-Style Syntax Boris Motik, Peter F. Patel-Schneider, Bijan Parsia, eds. W3C Recommendation, 27 October 2009, http://www.w3.org/TR/2009/REC-owl2-syntax-20091027/. Latest version available at http://www.w3.org/TR/owl2-syntax/.

[OWL 2 XML Serialization]

OWL 2 Web Ontology Language: XML Serialization Boris Motik, Bijan Parsia, Peter F. Patel-Schneider, eds. W3C Recommendation, 27 October 2009, http://www.w3.org/TR/2009/REC-owl2-xml-serialization-20091027/. Latest version available at http://www.w3.org/TR/owl2-xml-serialization/.

[pD*]

Completeness, decidability and complexity of entailment for RDF Schema and a semantic extension involving the OWL vocabulary. Herman J. ter Horst. J. of Web Semantics 3(2-3):79-115, 2005

[RDF Concepts]

Resource Description Framework (RDF): Concepts and Abstract Syntax. Graham Klyne and Jeremy J. Carroll, eds. W3C Recommendation, 10 February 2004, http://www.w3.org/TR/2004/REC-rdf-concepts-20040210/. Latest version available as http://www.w3.org/TR/rdf-concepts/.

[RDF Semantics]

RDF Semantics. Patrick Hayes, ed., W3C Recommendation, 10 February 2004, http://www.w3.org/TR/2004/REC-rdf-mt-20040210/. Latest version available as http://www.w3.org/TR/rdf-mt/.

[RDF Turtle Syntax]

Turtle - Terse RDF Triple Language. David Beckett and Tim Berners-Lee, 14 January 2008

[RDF Syntax]

RDF/XML Syntax Specification (Revised). Dave Beckett, ed. W3C Recommendation, 10 February 2004, http://www.w3.org/TR/2004/REC-rdf-syntax-grammar-20040210/. Latest version available as http://www.w3.org/TR/rdf-syntax-grammar/.

[RFC 3987]

RFC 3987: Internationalized Resource Identifiers (IRIs). M. Duerst and M. Suignard. IETF, January 2005, http://www.ietf.org/rfc/rfc3987.txt

[SPARQL]

SPARQL Query Language for RDF. Eric Prud'hommeaux and Andy Seaborne, eds. W3C Recommendation, 15 January 2008, http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115/. Latest version available as http://www.w3.org/TR/rdf-sparql-query/.

[XML Schema Datatypes]

XML Schema Part 2: Datatypes Second Edition. Paul V. Biron, and Ashok Malhotra, eds. W3C Recommendation 28 October 2004, http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/. Latest version available as http://www.w3.org/TR/xmlschema-2/. This reference is to be considered a reference to XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes upon its expected publication as a W3C Recommendation (see Section 2.3 in OWL 2 Conformance). The (non-normative) version of the XSD 1.1 document available at publication time is the 30 April 2009 Candidate Recommendation.