OWL语言
RDF, RDFS表达能力有限,RDFS局限于子类分层和属性分层,以及属性的定义域和值域的限定。
一些语义网特征用例需要更强的表达能力,所以OWL(Web Ontology Language),
一种表达能力更强的本地语言被提出来。OWL以RDF和RDFS为基础,使用基于XML的RDF语法。
头部
owl语言的头部主要指定了一些主要的命名空间。
<rdf:RDF
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#">
</rdf:RDF>
类元素
类之间有子类关系,不相容关系, 相等关系
<!--定义了子类关系-->
<owl:Class rdf:ID=“副教授”>
<rdfs:subClassof rdf:resource="#教师"/>
</owl:Class>
<!--不相容关系-->
<owl:Class rdf:about="#副教授">
<owl:disjointWith rdf:resource="#教授"/>
<owl:disjointWith rdf:resource="#助理教授"/>
</owl:Class>
<!--相等关系-->
<owl:Class rdf:ID="教师">
<owl:equivalentClass rdf:resource="#教员"/>
</owl:Class>
属性
OWL中有两种属性,一种是对象属性,一种是数据类型属性。
对象属性:将对象相互关联,例如监督(谁 监督 谁),吃
数据类型属性:将对象与数据类型值关联起来,例如电话,年龄等
例如下面定义的年龄,这个数据类型值
<owl:DatatypeProperty rdf:ID="年龄">
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#nonNegativeInteger"/>
</owl:DatatypeProperty>
属性约束
OWL语言中的属性约束是重点,极大得增强了OWL语言的表达能力。
-
声明类满足某些条件,也就是声明类是满足这些条件类的子类
owl:Restriction
相当于定义了一个匿名类其中owl:allValuesFrom用来规定owl:onProperty指定属性(由…讲授)的所有可能取值范围
owl:hasValue用来规定owl:onProperty必须取规定的特定值。
owl:someValueFrom用来规定一部分可能的取值范围。
<!--所有可能取值范围,意思就是一年级的课程必须由教授来讲授--> <owl:Class rdf:about="#一年级课程"> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#由..讲授"/> <owl:allValuesFrom rdf:resource="#教授"/> </owl:Restriction> </rdfs:subClassOf> </owl:Class> <!--数学课必须由编号为948352的这位老师来讲授--> <owl:Class rdf:about="#数学课"> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#由...讲授"/> <owl:hasValue rdf:resource="#948352"/> </owl:Restriction> </rdfs:subClassOf> </owl:Class> <!--所有老师都至少要教授一门本科课程--> <owl:Class rdf:about="#教员"> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#讲授"/> <owl:someValuesFrom rdf:resource="#本科课程"/> </owl:Restriction> </rdfs:subClassOf> </owl:Class>
-
基数约束
owl:minCardinality, owl:maxCardinality用来实现基数约束
<!--一个系至少有10个成员,至多有30个成员--> <owl:Class rdf:about="#系"> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#成员"/> <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger"> 10 </owl:minCardinality> </owl:Restriction> </rdfs:subClassOf> </rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#成员"/> <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger"> 30 </owl:minCardinality> </owl:Restriction> <rdfs:subClassOf> </owl:Class>
特殊性质
-
owl:TransitiveProperty
定义传递性,例如优于,高于,祖先 -
owl:SymmetricProperty
定义对称性,例如同年级,同胞兄弟 -
owl:FunctionProperty
定义函数性,定义函数性,可能有点难理解,其实更数学上的函数定义差不多,规定一个属性对任何对象最多只能取一个值,如年龄,身高
-
owl:InverseFunctionalProperty
定义逆函数性,即规定一个属性对不同的对象不能取相同的值,例如身份证号。定义了属性值的唯一性
例子
<owl:ObjectProperty rdf:ID="同年级"> <rdf:type rdf:resource="&owl;TransitiveProperty"/> <rdf:type rdf:resoure="&owl;SymmetricProperty"/> <rdf:domain rdf:resource="#学生"/> <rdf:range rdf:resource="#学生"/> </owl:ObjectProperty>
布尔组合
布尔组合就是表达类之间的并交补关系
-
补的关系,就是一种不相容关系,
owl:disjointWith
也可以达到相同的目的。<owl:Class rdf:about="#课程"> <rdfs:subClassOf> <owl:Class> <owl:complementOf rdf:resource="#教工"/> </owl:Class> </rdfs:subClassOf> </owl:Class>
-
并的关系用
owl:unionOf
定义<owl:Class rdf:ID="大学人员"> <owl:unionOf rdf:parseType="Collection"> <owl:Class rdf:about="#教工"/> <owl:Class rdf:about="#学生"/> </owl:unionOf> </owl:Class>
-
交的关系用
owl:intersectionOf
<!--计算机系的老师必须同时满足是教师,并且属于计算机系这两个条件--> <owl:Class rdf:ID="计算机系老师"> <owl:intersectionOf rdf:parseType="Collection"> <owl:Class rdf:about="#教师"/> <owl:Restriction> <owl:onProperty rdf:resource="#属于"/> <owl:hasValue rdf:resource="#计算机系"/> </owl:Restriction> </owl:intersectionOf> </owl:Class>
枚举
owl:oneOf
定义枚举类
<owl:Class rdf:ID="星期">
<owl:oneOf rdf:parseType="Collection">
<owl:Thing rdf:about="#星期一"/>
<owl:Thing rdf:about="#星期二"/>
<owl:Thing rdf:about="#星期三"/>
<owl:Thing rdf:about="#星期四"/>
<owl:Thing rdf:about="#星期五"/>
<owl:Thing rdf:about="#星期六"/>
<owl:Thing rdf:about="#星期七"/>
</owl:oneOf>
</owl:Class>