1 简单的类和个体
简单的具名类:Class, rdfs:subClassOf
一个领域中的最基本概念应分别对应于各个分类层次树的根。OWL中的所有个体都是类owl:Thing的成员。因此,各个用户自定义的类都隐含地是 owl:Thing的一个子类。要定义特定领域的根类,只需将它们声明为一个具名类(named class)即可。OWL也可以定义空类,owl:Nothing。
个体:要引入一个个体(individual),只需将它们声明为某个类的成员。关于OWL中类与个体的区别,有一些重要的问题。一个类仅是一个名称和一些描述某集合内个体的属性;而个体是该集合的成员。因此,类应自然地对应于与某论域中的事物的出现集合,而个体应对应于可被归入这些类的实际的实体。
2 简单属性
属性:ObjectProperty, DatatypeProperty, rdfs:subPropertyOf, rdfs:domain, rdfs:range,一个属性是一个二元关系。有两种类型的属性:
数据类型属性(datatype properties),类实例与RDF文字或XML Schema数据类型间的关系。
对象属性(object properties),两个类的实例间的关系。注意:对象属性这个名称并不是要反映与RDF术语rdf:object的联系.
根据是将个体关联到个体,还是将个体关联到数据类型,我们可以区分两类属性:前者称为对象属性;后者称为数据类型属性。类型属性的值域范围是RDF文字或者是XML Schema数据类型中定义的那些简单类型、
属性特性:
1 TransitiveProperty 传递属性:如果一个属性P被声明为传递属性,那么对于任意的x,y和z: P(x,y)与P(y,z) 蕴含 P(x,z);
2 SymmetricProperty 对称属性:如果一个属性P被声明为对称属性,那么对于任意的x和y: P(x,y)当且仅当P(y,x)
3 FunctionalProperty 函数型属性: 如果一个属性P被标记为函数型属性,那么对于所有的x , y, 和z: P(x,y)与P(x,z) 蕴含 y = z
4 inverseOf 逆属性:如果一个属性P1被标记为属性P2的逆, 那么对于所有的x 和 y: P1(x,y) 当且仅当P2(y,x)。请注意owl:inverseOf的语法,它仅仅使用一个属性名作为参数。A 当且仅当B意思是 (A蕴含B)并且(B蕴含A).
5 InverseFunctionalProperty--反函数属性:如果一个属性P被标记为反函数型的,那么对于所有的x, y和z: P(y,x)与P(z,x) 蕴含 y = z
。因为一个函数型属性的逆必定是反函数型的。反函数型属性的值域中的元素可以看成是在数据库意义上定义的一个唯一的键值。owl:InverseFunctional意味着属性的值域中的元素为定义域中的每个元素提供了一个唯一的标识。
3 属性限制
在一个明确的上下文OWL:Restriction中限制属性的值域,owl:onProperty元素指出了受限制的属性。
1
allValuesFrom, someValuesFrom
owl:allValuesFrom属性限制要求:对于每一个有指定属性实例的类实例,该属性的值必须是由owl:allValuesFrom从句指定的类的成员。owl:someValuesFrom限制与之相似。这两种限制形式间的不同就是全称量词与存在量词间的不同。
2 基数限制
使用owl:cardinality,这一约束允许对一个关系中的元素数目作出精确的限制。
owl:maxCardinality能够用来指定一个上界。owl:minCardinality能够用来指定一个下界。使用二者的组合就能够将一个属性的基数限制为一个数值区间。
3 hasValue [OWL DL]
hasValue 使得我们能够根据“特定的”属性值的存在来标识类。因此,一个个体只要至少有“一个”属性值等于hasValue的资源,这一个体就是该类的成员。
4 本体映射
为了让本体发挥最大的作用,就需要让本体得到充分的共享,为了使得在开发本体时尽可能的节省人力,就需要使得开发出来的本体能够被重要。更理想的情况是他们能够被组合使用。在开发一个本体的过程中,很多精力都被投入到将类与属性联系起来以获取最大意义的工作上去了,意识到这一点是很重要的。我们希望对类成员作出的断言较为简单同时又要有广泛的和有用的含意在里面。这也是在本体开发过程中最为困难的工作。如果你能找到已经经过广泛使用和精炼的本体,那么采用它才有意义。
1 类和属性之间的等价关系--equivalentClass, equivalentProperty
属性owl:equivalentClass被用来表示两个类有着完全相同的实例。但我们要注意,在OWL DL中,类仅仅代表着个体的集合而不是个体本身。然而在OWL FULL中,我们能够使用owl:sameAs来表示两个类在各方面均完全一致。类似的,owl:equivalentProperty属性声明表达属性的等同。
2 个体间的同一性--sameAs
描述个体之间相同的机制与描述类之间的相同的机制类似,仅仅只要将两个个体声明成一致的就可以了修饰(或引用)两个类用sameAs还是用equivalentClass效果是不同的。用sameAs的时候,把一个类解释为一个个体,就像在OWL Full中一样,这有利于对本体进行分类。
3 不同的个体--differentFrom, AllDifferent
这一机制提供了与sameAs相反的效果。
5 复杂类
1 集合运算符
交运算:intersectionOf
并运算:unionOf
补运算:complementOf
2 枚举类 oneOf
OWL提供了一种通过直接枚举类的成员的方法来描述类。这是通过使用oneOf结构来完成。特别地,这个定义完整地描述了类的外延,因此任何其他个体都不能被声明为属于这个类。oneOf结构的每一个元素都必须是一个有效声明的个体。一个个体必须属于某个类。
3 不相交类 disjointWith
使用owl:disjointWith构造子可以表达一组类是不相交的。它保证了属于某一个类的个体不能同时又是另一个指定类的实例。
6 本体的版本控制
本体和软件一样需要维护,因此它们将随着时间的推移而改变。在一个owl:Ontology元素内,链接到一个以前定义的本体版本是可能的。属性owl:priorVersion被用来提供这种链接,并能用它跟踪一个本体的版本历史。本体版本可能彼此互不兼容,例如,一个本体以前的版本可能包含与现在版本中的陈述相矛盾的陈述。在一个owl:Ontology元素中,我们使用owl:backwardCompatibleWith和owl:incompatibleWith这些属性来指出本体版本是兼容还是不兼容以前的版本。如果没有进行owl:backwardCompatibleWith声明,那么我们假定就不存在兼容性。
OWL Full提供的表示能力能够对一个类进行任何类型的声明,也即可以声明一个类可以是另一个类的实例,或者一个类(不是它的实例)有一个属性和一个对应的属性值。这一框架就能被用来为版本跟踪信息建立一个由类和属性构成的本体。OWL的名称间中包括了两个预定义的类owl:DeprecatedClass和 owl:DeprecatedProperty来完成这个目的。他们被用来指明某个类或属性在未来发布的版本中可能以一种不兼容的方式发生变化。
OWL Full提供的表示能力能够对一个类进行任何类型的声明,也即可以声明一个类可以是另一个类的实例,或者一个类(不是它的实例)有一个属性和一个对应的属性值。这一框架就能被用来为版本跟踪信息建立一个由类和属性构成的本体。OWL的名称间中包括了两个预定义的类owl:DeprecatedClass和 owl:DeprecatedProperty来完成这个目的。他们被用来指明某个类或属性在未来发布的版本中可能以一种不兼容的方式发生变化。