OWL学习笔记

来源:互联网 发布:linux脚本判断语句 编辑:程序博客网 时间:2024/06/18 13:33
本体:本体描述了某个领域内概念与概念之间的相互关系。不同的本体语言提供不同的特征。OWL是W3C推出的一种本体语言,用于对描述网络上资源的相互关系的RDF进行高层概念的定义,是对RDFS在逻辑推理上的补充。
包括:
OWL Lite:表达能力最弱,OWL DL的一个子集,它通过降低了OWL DL中的公理约束来达到高效的推理。它支持的基数约束只有0和1.

OWL DL:将可判定推理能力和较强表达能力最为首要目标。它包含了OWL语言的所有成分,但使用时须收到一定的约束。

OWL Full:OWL Full包含OWL的全部语言成分并取消了OWL DL中的限制,它将RDFS扩展为一个完备的本体语言,支持那些不需要可计算性保证(no computational guarantees)但需要最强表达能力和完全自由的RDFS用户。

1. owl本体头部的声明

<owl:Ontology rdf:about="">  //关于owl本体的声明,为空表示使用owl:Ontology的基准URI

<rdfs:comment>An example OWL ontology</rdfs:comment>   //注释

<owl:priorVersion   //版本控制

rdf:resource="http://www.w3.org/TR/2003/PR-owl-guide-20031215/wine"/>

<owl:imports   //其他本体的嵌入,接受rdf:resource的参数

rdf:resource="http://www.w3.org/TR/2004/REC-owl-guide-20040210/food"/

 <rdfs:label>Wine Ontology</rdfs:label>  //对自然语言进行标注

 ...   

</owl:Ontology>


2. 一个owl本体中的大部分元素是类(Class)和属性(Property)。由属于某个类的实例个体所组成的集合称之为该类的外延(extension)

3. owl中的所有个体都是类owl:Thing的成员,各个类都是owl:Thing的子类。要定义特定领域的根类,只需要将他声明为一个具名类(named class)即可。owl也可以定义空类owl:Nothing。
owl定义具名类:

<owl:Class rdf:ID="Winery"/>

<owl:Class rdf:ID="Region"/>

<owl:Class rdf:ID="ConsumableThing"/>

注意:我们只是说这里有三个具有指定名称(通过语法“rdf:ID=”)的类。形式上,即使我们使用了熟悉的英语单词作为标签,但我们除了知道这些类的存在以外,仍不了解任何其他关于它们的信息。而这些类尽管存在,但它们可能没有成员。就所有目前我们所知道的信息而言,将这些类分别命名为Thing1、Thing2和Thing3与命名为上述名称没有什么区别


4. owl定义子类

<owl:Class rdf:ID="PotableLiquid">

<rdfs:subClassOf rdf:resource="#ConsumableThing" />

...

</owl:Class>


5. 定义一个类的个体
首先定义类:<owl:Class rdf:ID="WinwGrape">
定义一个个体:<owl:thing rdf:ID="CabernetSauvignonGrape">
定义上述类的个体:
<owl:thing rdf:ID="#CabernetSauvignonGrape">
    <rdf:type rdf:resource="#WineGrape">
</owl:thing>
也等价于:
<WineGrape rdf:ID="CabernetSauvignonGrape">
这是一种RDF/XML语法中定义的省略方式

6. 定义属性
数据类型属性:  owl:DatatypeProperty
对象属性:  owl:ObjectProperty
定义一个对象属性
<owl:ObjectProperty rdf:ID="madeFromGrape">   
   <rdfs:domain rdf:resource="#Wine"/>  
   <rdfs:range rdf:resource="#WineGrape"/>   
 </owl:ObjectProperty>     
 <owl:ObjectProperty rdf:ID="course">  
   <rdfs:domain rdf:resource="#Meal" />  
   <rdfs:range rdf:resource="#MealCourse" />

定义一个数据类型属性:
<owl:Class rdf:ID="VintageYear" />
 <owl:DatatypeProperty rdf:ID="yearValue"> 
     <rdfs:domain rdf:resource="#VintageYear" /> 
     <rdfs:range rdf:resource="&xsd;positiveInteger"/> 
</owl:DatatypeProperty> 
属性也可以像类一样定义层次结构:rdfs:subPropertyOf


7. 属性特性
传递属性

如果一个属性 P 被声明为传递属性,那么对于任意的 x,y 和 z: P(x,y) 与 P(y,z) 蕴含 P(x,z)

<owl:ObjectProperty rdf:ID="locatedIn">

       <rdf:type rdf:resource="&owl;TransitiveProperty" />

       <rdfs:domain rdf:resource="&owl;Thing" />

       <rdfs:range rdf:resource="#Region" />

</owl:ObjectProperty> 

<Region rdf:ID="SantaCruzMountainsRegion">

        <locatedIn rdf:resource="#CaliforniaRegion" />

</Region> 

<Region rdf:ID="CaliforniaRegion">

        <locatedIn rdf:resource="#USRegion" />

</Region> 

那么SantaCruzMountainsRegion同样也在USRegion中

对称属性:

如果一个属性 P 被声明为对称属性,那么对于任意的 x 和 y:P(x,y)当且仅当 P(y,x) 

<owl:ObjectProperty rdf:ID="adjacentRegion">  
     <rdf:type rdf:resource="&owl;SymmetricProperty" />  
     <rdfs:domain rdf:resource="#Region" />  
     <rdfs:range rdf:resource="#Region" />  
 </owl:ObjectProperty>  
<Region rdf:ID="MendocinoRegion">  
    <locatedIn rdf:resource="#CaliforniaRegion" />
    <adjancentRegion rdf:resource="#SonomaRegion />
</Region>

函数属性:

如果一个属性 P 被标记为函数型属性,那么对于所有的 x, y, 和 z: P(x,y) 与 P(x,z) 蕴含 y = z

<owl:Class rdf:ID="VintageYear" />


<owl:ObjectProperty rdf:ID="hasVintageYear">

     <rdf:type rdf:resource="&owl;FunctionalProperty" /> 

     <rdfs:domain rdf:resource="#Vintage" />

     <rdfs:range rdf:resource="#VintageYear" />

</owl:ObjectProperty>


逆(inverse of):

如果一个属性 P1 被标记为属性 P2 的逆(owl:inverseOf), 那么对于所有的 x 和 y: P1(x,y) 当且仅当 P2(y,x) 

请注意 owl:inverseOf 的语法,它仅仅使用一个属性名作为参数。A 当且仅 当 B 意思是 (A 蕴含 B)并且(B 蕴含 A).

<owl:ObjectProperty rdf:ID="hasMaker">

       <rdf:type rdf:resource="&owl;FunctionalProperty" /> 

</owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="producesWine"> 

       <owl:inverseOf rdf:resource="#hasMaker" /> 

</owl:ObjectProperty>


反函数型(InverseFunctionalProperty):

如果一个属性 P 被标记为反函数型的(InverseFunctional),那么对于所有 的 x, y 和 z: P(y,x) 与 P(z,x) 蕴含 y = z 

<owl:ObjectProperty rdf:ID="hasMaker" />

<owl:ObjectProperty rdf:ID="producesWine"> 

         <rdf:type rdf:resource="&owl;InverseFunctionalProperty" />

          <owl:inverseOf rdf:resource="#hasMaker" /> 

</owl:ObjectProperty>


8.属性限制
owl:Restriction的上下文中,我们还能对属性的值域(range)进行进一步的限制

allValueFrom, someValueFrom
注意这两个属于的限制是局部的,而之前domain,range的限制是全局的——也就是说对于这个属性的所有实例都必须满足range的限制。而allValueFrom和someValueFrom则要求:

对于每一个有指定属性实例的类实例,该 属性的值必须是由 owl:allValuesFrom 从句指定的类的成员

<owl:Class rdf:ID="Wine"> 

      <rdfs:subClassOf rdf:resource="&food;PotableLiquid" />

      ...   

      <rdfs:subClassOf> 

           <owl:Restriction>

                <owl:onProperty rdf:resource="#hasMaker" />   //对"hasMaker"属性进行限制

                <owl:allValuesFrom rdf:resource="#Winery" />   //所有的wine类实例的hasMaker属性的值都必须是Winery的实例

            </owl:Restriction> 

     </rdfs:subClassOf>

       ... 

</owl:Class>

如果把上述的allValueFrom 换成 someValueFrom则表明:  至少有一个wine类实例的hasMaker属性的值是Winery类的实例
可以把allValueFrom 和someValueFrom 的差别理解为全称量词存在量词的差别

基数限制

这一约束允许对一个关系中的元素数目作出精确的限制

<owl:Class rdf:ID="Vintage">
   <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasVintageYear"/>
         <owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality>
     </owl:Restriction>
   </rdfs:subClassOf>
</owl:Class>
上述owl:cardinality限制使hasVintageYear属性只有一个值,即每个Vintage类实例只有一个VintageYear
另外,类似的两个限制:
owl:maxCardinality
owl:minCardinality
则分别用来限定值个数的上界和下界

hasValue

hasValue 使得我们能够根据“特定的”属性值的存在来标识类。因此,一个个体只要至少有“一个”属性值等于hasValue的资源,这一个体就是该类的成员。

<owl:Class rdf:ID="Burgundy">
   <rdfs:subClassOf>
      <owl:Restriction>
      <owl:onProperty rdf:resource="#hasSugar" />
      <owl:hasValue rdf:resource="#Dry" />
     </owl:Restriction>
 </rdfs:subClassOf>
</owl:Class>

只有实例的hasSugar属性等于"Dry",那么它就是类BurGundy的成员

9.本体映射

类和属性之间的等价关系
equivalentClass
equivalentProperty

<owl:Class rdf:ID="Wine">

        <owl:equivalentClass rdf:resource="&vin;Wine"/> 

 </owl:Class>

<owl:Class rdf:ID="TexasThings">

     <owl:equivalentClass>

           <owl:Restriction>

                   <owl:onProperty rdf:resource="#locatedIn" />

                   <owl:someValuesFrom rdf:resource="#TexasRegion" /> 

           </owl:Restriction>

      </owl:equivalentClass> 

</owl:Class>

equivalentClass也可以用于类名(类的表达式中,类似于subClassOf),因而更加灵活。


个体之间的统一性
相同的个体:sameAs
描述两个个体之间的同一性,仅仅将两个个体声明为一致就行了
<Wine rdf:ID="MikesFavoriteWine">
      <owl:sameAs rdf:resource="#StGenevieveTexasWhite" />
</Wine>
注意在OWL中并没有名称唯一的假定,因此同一个资源可能有多个名字。


不同的个体:differentFrom, ALLDifferent

这一机制提供了与sameAs相反的效果

<WineSugar rdf:ID="Dry" />

<WineSugar rdf:ID="Sweet">

         <owl:differentFrom rdf:resource="#Dry"/>

</WineSugar>

<WineSugar rdf:ID="OffDry">

           <owl:differentFrom rdf:resource="#Dry"/>

<owl:differentFrom rdf:resource="#Sweet"/> </WineSugar>

上述定义了三个值两两不同。还有一种更方便的声明方式:

<owl:AllDifferent>

       <owl:distinctMembersrdf:parseType="Collection">

            <vin:WineColor rdf:about="#Red" />

            <vin:WineColor rdf:about="#White" />

            <vin:WineColor rdf:about="#Rose" />

        </owl:distinctMembers>

</owl:AllDifferent>

注意:owl:distinctMembers 只能和 owl:AllDifferent结合在一起使用



10.集合运算符

交运算符(intersectionOf)

上述陈述说明whiteWine是Wine和所有白颜色事物的交集

并运算(unionOf)
非常类似于交运算

补运算(complementOf)
补运算与交,并运算符结合使用:



11. 枚举类
OWL提供了一种通过直接枚举类的成员的方法来描述类。这是通过使用oneOf结构来完成。特别地,这个定义完整地描述了类的外延,因此任何其他个体都不能被声明为属于这个类。

oneOf结构的每一个元素都必须是一个有效声明的个体。其他任何这些个体之外的个体都不属于这个类。
上述我们是使用owl:Thing来引用每一个个体,这有点多余(因为任何个体都属于owl:Thing),因此我们也可以引用具体的WineColor类:


较复杂的个体元素也可以是oneOf结构的组成元素之一,如:

<WineColor rdf:about="#White"> 

           <rdfs:label>White</rdfs:label> 

</WineColor>


12. 不相交类

使用 owl:disjointWith 构造子可以表达一组类是不相交的。它保证了属于某一 个类的个体不能同时又是另一个指定类的实例。


这个例子只声明了Pasta与以下枚举的不相交。
如果想声明一组元素两两不相交,我们必须声明每两个都是owl:disjointWith的。

一个常见的需求就是定义一个类为一组互不相交的子类的联合:


13. 本体的版本控制

本体和软件一样需要维护,因此它们将随着时间的推移而改变。在一个 owl:Ontology 元素(如上面讨论的 http://www.w3.org/TR/2004/REC-owl-guide-20040210/#OntologyHeaders) 内,链接到一个以前定义的本体版本是可能的。属性 owl:priorVersion 被用来 提供这种链接,并能用它跟踪一个本体的版本历史。


owl:backwardCompatibleWith
owl:incompatibleWith
用于支出本体是否兼容以前的版本

owl:versionInfo: 提供了版本的相关信息。它的值是一个文字值

owl:DeprecatedClass
owl:DeprecatedProperty
用于指明某个类或者某个属性在未来发布的版本中可能以一种不兼容的形式发生变化。

<owl:DeprecatedClass rdf:ID="&vin;JugWine" />

<owl:DeprecatedProperty rdf:ID="&vin;hasSeeds" />

















0 0