# OWL简介 [owl官方标准文档](https://www.w3.org/TR/2004/REC-owl-features-20040210/) ## 1. 本体 `本体(notes.ontology)`指的就是概念和概念之间的关系。本体的目标是获取相关的领域知识,提供对该领域知识的共同理解,确定该领域内共同认可的词汇,并从不同层次的形式化模式上给出这些词汇(术语)和词汇间相互关系的明确定义。 ## 2. 本体语言OWL ### 2.1 OWL的子语言 OWL提供三种子语言(语言表达能力逐渐增强): * OWL Lite从 语法上来说,OWL-Lite是三个之中最简单的一个,当你的本体中类的层次结构很简单,并且只有简单的约束(constraint)时适合使用它来描述本体 * OWL DL 和 OWL-Lite相比,OWL-DL的表达能力要丰富许多,它的基础是描述逻辑(Description Logics,即DL的由来)。描述逻辑是一阶逻辑(First Order Logic)的一个可判定的变种(译注:不一定准确,原文decidable fragment),因此可以用来进行自动推理,计算机从而可以知道本体中的分类层次,以及本体中的各种概念是否一致 * OWL Full是OWL的三种子语言中表达能力最强的一个,适合在那些需要非常强的表达能力,而不用太关心可判定性(decidability)或是计算完全性的场合下使用。不过也正是由于表达能力太强这个原因,用OWL-Full表示的本体是不能进行自动推理的。 这三种子语言是包含关系,分别是OWL Full>OWL DL>OWL Lite,OWL Full是最大的集合。 ### 2.2 OWL基础词汇 在OWL中,包含着一些基础的词汇,这些在构建本体的时候非常有用。 |词汇|作用| |:--|:--| |owl:Ontology|声明一个本体| |owl:Class|定义一个类| |rdfs:subClassOf|定义一个类的子类| |owl:Thing|内置的类,作为所有类的父类| |owl:ObjectProperty|定义对象属性| |rdfs:domain|定义属性的定义域| |owl:DatatypeProperty|定义数值类型的属性| |rdfs:range|定义属性的值域| |owl:FunctionalProperty|定义函数类型的属性| |owl:inverseOf|表示两个属性是互逆| |rdfs:ID|定义所描述概念的名称| ### 2.3 OWL Lite纲要 OWL Lite主要包含以下关系描述: ![owl lite](../../images/owl-01.png) 可以看到这些关系术语都是很贴近计算机编程的,例如类、属性、数据类型等等。 ### 2.4 OWL DL和OWL Full纲要 ![owl dl & owl](../../images/owl-02.png) ## 3. OWL Lite的术语描述 简介关系描述的具体含义 TBD). ## 4. 本体描述文件 [owl guide](https://www.w3.org/TR/owl-guide/) ### 2.1 命名空间(Namespace) 在我们使用术语之前,我们需要通过命名空间来指定本体使用了哪些词汇。一个典型的本体描述文件都会以命名空间声明开头。 ```xml ``` 属性值不具有命名空间,在OWL里可以写出它们的完整URI,完整的URI可以利用实体定义来简略。 ```xml ]> ``` 上面的命名空间就可以简写成为: ```xml ``` ### 2.2 本体头部 在`owl:Ontology`标签中给出本体的声明。来看一个例子: ```xml An example OWL ontology Wine Ontology ``` 其中 * `owl:Ontology`标签内收集了文档的OWL元数据。 * `rdf:about`属性为本体提供一个名称或引用。当值为""时,表示本体的名称为base URI。 * `rdfs:comment`用于描述本体。 * `owl:priorVersion`为本体版本控制提供相关信息的标准标签。 * `owl:imports`提供一种嵌入机制,接受一个用`rdf:resource`属性标识的参数。 ## 3. 基本元素 大多数OWL本体的元素都是关于 * classes * properties * instances of classes * relationships between instances ### 3.1 简单的类(Classes)和个体(Individuals) `extension(外延)`:属于某个类的个体所构成的集合为该类的外延。 #### 3.1.1 简单的命名类 一个领域中最基本的概念对应各个分类层次树的根。 在OWL中,每一个个体都是类`owl:Thing`的成员(基类,类似于Java中的Object)。因此每个自定义的类都是`owl:Thing`的子类。 在OWL中,可以通过`owl:Nothing`来定义一个空的类。 特定领域的根类可以通过声明一个命名类来定义。 ```xml ```