本體結構介紹

1.本體的結構
OWL是語義網活動的一個組成部分。這項工作的目的是通過對增加關於那些描述或提供網絡內容的資源的信息,從而使網絡資源能夠更
容易地被那些自動進程訪問。由於語義網絡固有的分佈性,OWL必須允許信息能夠從分佈的信息源收集起來。其中,允許本體間相互聯
系,包括明確導入其他本體的信息,能夠部分實現這樣的功能。
另外,OWL提出了一個開放世界的假設。也就是說,對資源的描述並不侷限於在一個簡單的文件或範圍內。類C1本來是由本體O1定義出
來的,然而,它也可以是由其他的本體擴展出來的。對C1進行這樣的假設的結果是單調的。新的信息不能否定之前的信息。新的信息
可以是和舊的信息矛盾的,但是事實和推導只能被增加而不能被刪減。
當設計一個本體的時候,設計者必須考慮到這種矛盾的可能性。一種期望是,工具的支持將幫助偵測到這樣的情況。
爲了能寫出一個能被唯一翻譯的而且能被軟件(代理)使用的本體,我們要求OWL有一個語法和正規的語義。


2.命名空間
<rdf:RDF 
     xmlns     ="http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#" 
     xmlns:vin ="http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#" 
     xml:base  ="http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#" 
     xmlns:food="http://www.w3.org/TR/2004/REC-owl-guide-20040210/food#" 
     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#">
前兩個聲明標識了與該本體相關的命名空間。第一個聲明指定了缺省命名空間,即表明所有無前綴的限定名(qualified names)都出
自當前本體。第二個聲明爲當前本體指定了前綴 vin:。第三個聲明爲當前文檔(參見下文 (http://www.w3.org/TR/2004/REC-owl-
guide-20040210/#owl_imports))指定了基準URI(base URI)。第四個聲明指出食物(food)本體將用前綴food:來標識。
第五個命名空間聲明指出,在當前文檔中,前綴爲owl:的元素應被理解是對出自http://www.w3.org/2002/07/owl#中的事物的引用。
這是引入OWL詞彙表的慣例用法。
OWL要依賴RDF、RDFS以及XML Schema數據類型中的構詞(constructs)。在本文檔中,rdf:前綴表明事物出自命名空間
http://www.w3.org/1999/02/22-rdf-syntax-ns#。接下來的兩個命名空間聲明分別爲RDF Schema和XML Schema數據類型指定前綴
rdfs:和xsd:。


3.實體定義
爲幫助書寫冗長的URLs,在本體的定義之前,在文檔類型聲明(DOCTYPE)中提供一些實體定義(entity definitions)常常是很有用
的。這些被命名空間聲明定義的名稱僅當作爲XML標籤的一部分時才具有意義。屬性值(attribute values)是不具有命名空間的。但
是在OWL裏,我們經常要用屬性值來引用本體標識符。我們可以寫出它們的完整URI形式,比如“http://www.w3.org/TR/2004/REC-
owl-guide-20040210/wine#merlot”。或者,利用實體定義來簡略URI的書寫,例如:
 <!DOCTYPE rdf:RDF [
     <!ENTITY vin  "http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#" >
     <!ENTITY food "http://www.w3.org/TR/2004/REC-owl-guide-20040210/food#" > ]>
在聲明這些實體後,可以將“&vin;merlot”作爲“http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#merlot”的簡寫。
所以上述命名空間可寫爲:
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
     <!ENTITY vin  "http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#" >
     <!ENTITY food "http://www.w3.org/TR/2004/REC-owl-guide-20040210/food#" > ]>
<rdf:RDF 
     xmlns     ="&vin;" 
     xmlns:vin ="&vin;" 
     xml:base  ="&vin;" 
     xmlns:food="&food;"
     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#">
4.本體頭部
建立了命名空間後,接下來我們通常要在owl:Ontology標籤裏給出一組關於本體的聲明。這些標籤支持一些重要的常務工作比如註釋
、版本控制以及其他本體的嵌入等。
 <owl:Ontology rdf:about=""> 
   <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="http://www.w3.org/TR/2004/REC-owl-guide-20040210/food"/> 
   <rdfs:label>Wine Ontology</rdfs:label> 
   ...
owl:Ontology元素是用來收集關於當前文檔的OWL元數據的。
rdf:about屬性爲本體提供一個名稱或引用。根據標準,當rdf:about屬性的值爲""時,本體的名稱是owl: Ontology元素的基準URI。
典型地,這是一個包含本體的文檔的URI。在使用了xml:base的上下文中則是一個特殊情況,這時owl: Ontology元素的基準URI也許會
被設爲其他URI。
rdfs:comment提供了顯然必須的爲本體添加註解的能力。
owl:priorVersion是一個爲用於本體的版本控制系統提供相關信息(hook)的標準標籤。
owl:imports提供了一種嵌入機制,接受一個用rdf:resource屬性標識的參數。導入另一個本體將把那個本體中的全部聲引入到當前本
體中。爲了充分利用好這一機制,通常要與命名空間聲明結合使用。請注意這兩種機制的區別:命名空間聲明提供的是一種方便對其
他本體定義的名稱進行引用的方法。概念上,owl:imports用於表明包含目標本體中的聲明。在導入另一個本體02時,在02中導入的其
他本體也將被導入。
rdfs:label對本體進行自然語言標註。
5.基本元素
1> 簡單的類和個體
使用本體是爲了用它進行關於個體的推理。爲了在一種有效的方式下做到這一點,我們需要一種機制來描述個體所屬的類以及這些個
體通過類成員關係而繼承得到的屬性。儘管我們總能爲個體聲明特定的屬性,但是本體的大部分能力在於"基於類的推理"。
當我們希望強調區分一個類是作爲對象還是作爲包含元素的集合。稱由屬於某個類的個體所構成的集合爲該類的外延(extension)。
1>>簡單的具名類--Class, rdfs:subClassOf
一個領域中的最基本概念應分別對應於各個分類層次樹的根。OWL中的所有個體都是類owl:Thing的成員。因此,各個用戶自定義的類
都隱含地是 owl:Thing的一個子類。要定義特定領域的根類,只需將它們聲明爲一個具名類(named class)即可。OWL也可以定義空
類,owl:Nothing。
 
定義可以是增量的和分佈式的:
語法<owl:Class rdf:ID="Region"/> 被用於引入一個名稱(作爲定義的一部分)。該rdf:ID屬性(attribute) 類似於XML中的ID屬
性。在這一文檔中,我們現在可以用#Region來引用Region類,例如 rdf:resource="#Region"。而其他的本體可以通
過"http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#Region"這一完整形式來引用該名稱。
語法<owl:Class rdf:about="Region"/>來擴展對一個資源的定義。語法 rdf:about="&ont;#x" 的使用在分佈式本體的創建中是一個
關鍵要素。它允許導入x類的定義並對它進行擴展,而不需修改源定義文檔,從而支持增量構建更大的本體。
rdfs:subClassOf是用於類的基本分類構造符。它將一個較具體的類與一個較一般的類關聯。如果X是Y的一個子類(subclass),那麼
X的每個實例同時也都是Y的實例。rdfs:subClassOf關係是可傳遞的,即如果X是Y的子類,而Y又是Z的子類,那麼X就是Z的子類。
 <owl:Class rdf:ID="Wine"> 
   <rdfs:subClassOf rdf:resource="&food;PotableLiquid"/> 
   <rdfs:label xml:lang="en">wine</rdfs:label> 
   <rdfs:label xml:lang="fr">vin</rdfs:label> 
   ...  
 </owl:Class> 
rdfs:label是可選的,它爲該類提供一個人類可讀的名稱。負責呈現的工具可以利用這個元素。“lang”屬性爲多語言提供了支持。
一個label(標號)就像一個註釋,不向本體的邏輯解釋添加任何內容。
2>>個體
要引入一個個體(individual),只需將它們聲明爲某個類的成員。
 <owl:Class rdf:ID="WineGrape">
   <rdfs:subClassOf rdf:resource="&food;Grape" />
 </owl:Class> 
 <WineGrape rdf:ID="CabernetSauvignonGrape" />
關於OWL中類與個體的區別,有一些重要的問題。一個類僅是一個名稱和一些描述某集合內個體的屬性;而個體是該集合的成員。因此
,類應自然地對應於與某論域中的事物的出現集合,而個體應對應於可被歸入這些類的實際的實體。
2>簡單屬性
1>>定義屬性--ObjectProperty, DatatypeProperty, rdfs:subPropertyOf, rdfs:domain, rdfs:range
一個屬性是一個二元關係。有兩種類型的屬性:
 * 數據類型屬性(datatype properties),類實例與RDF文字或XML Schema數據類型間的關係。
 * 對象屬性(object properties),兩個類的實例間的關係。注意:對象屬性這個名稱並不是要反映與RDF術語rdf:object的聯繫。
 <owl:ObjectProperty rdf:ID="hasWineDescriptor">
   <rdfs:domain rdf:resource="#Wine" />
   <rdfs:range  rdf:resource="#WineDescriptor" />
 </owl:ObjectProperty> 
 <owl:ObjectProperty rdf:ID="hasColor">
   <rdfs:subPropertyOf rdf:resource="#hasWineDescriptor" />
   <rdfs:range rdf:resource="#WineColor" />
   ...
 </owl:ObjectProperty>
爲同一屬性聲明多個定義域表明該屬性的定義域是所有這些類的交集(多個值域聲明也類似這樣)。屬性也可以像類一樣按照層次結
構來組織。
介紹locatedIn屬性,它將事物和事物所在的地區相關聯:
 <owl:ObjectProperty rdf:ID="locatedIn">
   ...
   <rdfs:domain rdf:resource="http://www.w3.org/2002/07/owl#Thing" />
   <rdfs:range rdf:resource="#Region" />
 </owl:ObjectProperty>
該定義域定義允許任何事物被值域某個區域中,包括該區域自身。這一關係的傳遞的組合本質上構建了一個包含子區域和事物的地理
網絡。沒有包含其他事物於其中的那些事物可以屬於任意類,而包含其他事物或者區域的那些事物則必須是區域。
示例:
 <owl:ObjectProperty rdf:ID="madeFromGrape"> 
   <rdfs:domain rdf:resource="#Wine"/>
   <rdfs:range rdf:resource="#WineGrape"/> 
 </owl:ObjectProperty>
 <owl:Class rdf:ID="Wine">    
   <rdfs:subClassOf rdf:resource="&food;PotableLiquid"/>    
   
   <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#madeFromGrape"/>
         <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality>
      </owl:Restriction>
   </rdfs:subClassOf>
   ...  
 </owl:Class>
第二個子類屬性元素中定義了一個無名類(unnamed class),該無名類代表至少具有一個madeFromGrape屬性的事物集合。我們稱這
些類爲匿名類。在Wine類的定義中包含該限定表明屬於Wine類的事物,也是該匿名類的成員。也就是說,任何葡萄酒都必須參與至少
一個madeFromGrape關係。
2>>屬性和數據類型
根據是將個體關聯到個體、還是將個體關聯到數據類型,我們可以區分兩類屬性:前者稱爲對象屬性;後者稱爲數據類型屬性。數據
類型屬性的值域範圍是RDF文字或者是XML Schema數據類型中定義的那些簡單類型。
OWL使用XML Schema內嵌數據類型中的大部分。對這些數據類型的引用是通過對http://www.w3.org/2001/XMLSchema這個URI引用。
3>屬性特性
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)
示例: 
 <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" />
   <adjacentRegion rdf:resource="#SonomaRegion" />
 </Region>
3>>FunctionalProperty 函數型屬性
如果一個屬性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>
一種葡萄酒有着一個特定的製造年份。也即,一個給定的 Vintage個體只能使用hasVintageYear屬性與單獨一個年份相關聯。
4>>inverseOf 逆屬性
如果一個屬性P1被標記爲屬性P2的逆, 那麼對於所有的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>
各種葡萄酒都有製造商,這些製造商在Wine類的定義中被限制爲釀酒廠(Winery)。而每個釀酒廠生產的酒均以該釀酒廠爲製造商。
5>>InverseFunctionalProperty--反函數屬性
如果一個屬性P被標記爲反函數型的,那麼對於所有的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>
producesWine屬性是反函數型屬性。因爲一個函數型屬性的逆必定是反函數型的。反函數型屬性的值域中的元素可以看成是在數據庫
意上定義一個唯一的鍵值。owl:InverseFunctional意味着屬性的值域中的元素爲定義域中的每個元素提供了一個唯一的標識。
4>屬性限制--在一個明確的上下文owl:Restriction中限制屬性的值域,owl:onProperty元素指出了受限制的屬性。
1>>allValuesFrom, someValuesFrom
owl:allValuesFrom屬性限制要求:對於每一個有指定屬性實例的類實例,該屬性的值必須是由owl:allValuesFrom從句指定的類的成
員。owl:someValuesFrom限制與之相似。這兩種限制形式間的不同就是全稱量詞與存在量詞間的不同。
示例:
<owl:Class rdf:ID="Wine">
   <rdfs:subClassOf rdf:resource="&food;PotableLiquid" />
   ...
   <rdfs:subClassOf>
     <owl:Restriction>
       <owl:onProperty rdf:resource="#hasMaker" />
       <owl:allValuesFrom rdf:resource="#Winery" />
     </owl:Restriction>
   </rdfs:subClassOf>
   
   ...
 </owl:Class>
Wine的製造商必須是Winery。allValuesFrom限制僅僅應用在Wine的hasMaker屬性上。
在上個例子中,如果我們用owl:someValuesFrom替換owl:allValuesFrom,那就意味着至少有一個Wine類實例的hasMaker屬性是指向一
個Winery類的個體的。
2>>基數限制--使用owl:cardinality,這一約束允許對一個關係中的元素數目作出精確的限制。
示例:
 <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>
我們標識hasVintageYear屬性爲一個函數型屬性,也即意味着每個Vintage有至多一個VintageYear。而如果對Vintage類的
hasVintageYear屬性使用基數限制則是對其作出了更強的斷言,它表明了每個Vintage有恰好一個VintageYear。
值域限制在0和1的基數表達式(Cardinality expressions)是OWL Lite的一部分。這使得用戶能夠表示“至少一個”,“不超過一個”
,和“恰好一個”這幾種意思。OWL DL中還允許使用除0與1以外的正整數值。owl:maxCardinality能夠用來指定一個上界。
owl:minCardinality能夠用來指定一個下界。使用二者的組合就能夠將一個屬性的基數限制爲一個數值區間。
3>>hasValue [OWL DL]
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>
這裏我們聲明瞭所有的Burgundy酒都是幹(dry)的酒。也即,它們的hasSugar屬性必須至少有一個是值等於Dry(乾的)。
與allValuesFrom 和someValuesFrom類似,這是一個局部的限制。它僅僅對Burgundy類的hasSugar屬性作出限制。


5.本體映射
爲了讓本體發揮最大的作用,就需要讓本體得到充分的共享。爲了使得在開發本體時儘可能的節省人力,就需要使得開發出的本體能
夠被重用。更理想的情況是他們能夠被組合使用。在開發一個本體的過程中,很多的精力都被投入到將類與屬性聯繫起來以獲取最大
的意義的工作上去了,意識到這一點也是很重要的。我們希望對類成員作出的斷言較爲簡單同時又要求有廣泛的和有用的含意在裏面。
這也是在本體開發過程中最爲困難的工作。如果你能夠找到已經經過廣泛使用和精煉的本體,那麼採用它纔有意義。
1>類和屬性之間的等價關係--equivalentClass, equivalentProperty
在食物本體中,我們現在想把在餐宴菜餚中對葡萄酒特點的描述與葡萄酒本體相聯繫起來。達到這一目的一種方法就是在食物本體中
定義一個類(&food;Wine),然後在葡萄酒本體中將一個已有的類聲明爲與這個類是等價的。
 <owl:Class rdf:ID="Wine">
   <owl:equivalentClass rdf:resource="&vin;Wine"/>
 </owl:Class>
屬性owl:equivalentClass被用來表示兩個類有着完全相同的實例。但我們要注意,在OWL DL中,類僅僅代表着個體的集合而不是個體
本身。然而在OWL FULL中,我們能夠使用owl:sameAs來表示兩個類在各方面均完全一致。類似的,owl:equivalentProperty屬性聲明
表達屬性的等同。
示例:
 <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>
TexasThings指的是那些恰好位於Texas地區的事物。使用owl:equivalentClass 和使用rdfs:subClassOf 的不同就像必要條件和充要
條件的不同一樣。如果是使用subClassOf的話,位於Texas地區的事物不一定是TexasThings。但是,如果使用owl:equivalentClass,
位於Texas地區的事物一定屬於TexasThings類。
2>個體間的同一性z--sameAs
描述個體之間相同的機制與描述類之間的相同的機制類似,僅僅只要將兩個個體聲明成一致的就可以了。
示例:
 <Wine rdf:ID="MikesFavoriteWine>
     <owl:sameAs rdf:resource="#StGenevieveTexasWhite" />
 </Wine>
要清楚,修飾(或引用)兩個類用sameAs還是用equivalentClass效果是不同的。用sameAs的時候,把一個類解釋爲一個個體,就像在
OWL Full中一樣,這有利於對本體進行分類。
3>不同的個體--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:distinctMembers rdf: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屬性聲明一起結合使用。


6. 複雜類
1>集合運算符 intersectionOf,unionOf,complementOf
記住:OWL類外延是由個體組成的集合,而這些個體都是類的成員。OWL使用基本的集合操作算子來處理類的外延。
1>>交運算intersectionOf
 <owl:Class rdf:ID="WhiteWine">
   <owl:intersectionOf rdf:parseType="Collection">
     <owl:Class rdf:about="#Wine" />
     <owl:Restriction>
       <owl:onProperty rdf:resource="#hasColor" />
       <owl:hasValue rdf:resource="#White" />
     </owl:Restriction>
   </owl:intersectionOf>
 </owl:Class>
上面的語句說明WhiteWine恰好是類Wine與所有顏色是白色的事物的集合的交集。
(請注意:'rdf:parseType= "Collection"'是必需的語法元素。)
 <owl:Class rdf:about="#Burgundy">
   <owl:intersectionOf rdf:parseType="Collection">
     <owl:Class rdf:about="#Wine" />
     <owl:Restriction>
       <owl:onProperty rdf:resource="#locatedIn" />
       <owl:hasValue rdf:resource="#BourgogneRegion" />
     </owl:Restriction>
   </owl:intersectionOf>
 </owl:Class>
 <owl:Class rdf:ID="WhiteBurgundy">
   <owl:intersectionOf rdf:parseType="Collection">
     <owl:Class rdf:about="#Burgundy" />
     <owl:Class rdf:about="#WhiteWine" />
   </owl:intersectionOf> 
 </owl:Class>
2>>並運算unionOf
 <owl:Class rdf:ID="Fruit">
   <owl:unionOf rdf:parseType="Collection">
     <owl:Class rdf:about="#SweetFruit" />
     <owl:Class rdf:about="#NonSweetFruit" />
   </owl:unionOf>
 </owl:Class>
3>>補運算complementOf
complementOf結構從某個論域(domain of discourse)選出不屬於某個類的所有個體。通常它將指向一個非常大的個體集合:
 <owl:Class rdf:ID="NonFrenchWine">
   <owl:intersectionOf rdf:parseType="Collection">
     <owl:Class rdf:about="#Wine"/>
     
     <owl:Class>
       <owl:complementOf>
         <owl:Restriction>
           <owl:onProperty rdf:resource="#locatedIn" />
           <owl:hasValue rdf:resource="#FrenchRegion" />
         </owl:Restriction>
       </owl:complementOf>
     </owl:Class>
   </owl:intersectionOf>
 </owl:Class>
2>枚舉類 oneOf 
OWL提供了一種通過直接枚舉類的成員的方法來描述類。這是通過使用oneOf結構來完成。特別地,這個定義完整地描述了類的外延,
因此任何其他個體都不能被聲明爲屬於這個類。oneOf結構的每一個元素都必須是一個有效聲明的個體。一個個體必須屬於某個類。
 <owl:Class rdf:ID="WineColor">
   <rdfs:subClassOf rdf:resource="#WineDescriptor"/>
   <owl:oneOf rdf:parseType="Collection">
     <owl:Thing rdf:about="#White"/>
     <owl:Thing rdf:about="#Rose"/>
     <owl:Thing rdf:about="#Red"/>
   </owl:oneOf>
 </owl:Class>
3>不相交類 disjointWith
使用owl:disjointWith構造子可以表達一組類是不相交的。它保證了屬於某一個類的個體不能同時又是另一個指定類的實例。
 <owl:Class rdf:ID="Pasta">
   <rdfs:subClassOf rdf:resource="#EdibleThing"/>
   <owl:disjointWith rdf:resource="#Meat"/>
   <owl:disjointWith rdf:resource="#Fowl"/>
   <owl:disjointWith rdf:resource="#Seafood"/>
   <owl:disjointWith rdf:resource="#Dessert"/>
   <owl:disjointWith rdf:resource="#Fruit"/>
 </owl:Class>
注意它只聲明瞭Pasta與其它所有類是不相交的。例如,它並沒有保證Meat和Fruit是不相交的。爲了聲明一組類是互不相交的,我們
必須對每兩個類都使用owl:disjointWith來聲明。
當n很大時,我們可以使用另一些方法以避免聲明的數目按二次方增長。工作原理如下:我們描述一個父類,它的元素有一個基數等於
一的屬性。接着,對於這個父類的每一個子類,我們都要求這個子類的實例的這一屬性必須具有一個唯一的值。在這種情況下,各個
不同子類就不可能有共同的成員了。
7.本體的版本控制
本體和軟件一樣需要維護,因此它們將隨着時間的推移而改變。在一個owl:Ontology元素內,鏈接到一個以前定義的本體版本是可能
的。屬性owl:priorVersion被用來提供這種鏈接,並能用它跟蹤一個本體的版本歷史。
 <owl:Ontology rdf:about=""> 
   ...
   <owl:priorVersion rdf:resource="http://www.w3.org/TR/2003/CR-owl-guide-20030818/wine"/>    
   ...
 </owl:Ontology>
本體版本可能彼此互不兼容,例如,一個本體以前的版本可能包含與現在版本中的陳述相矛盾的陳述。在一個owl:Ontology元素中,
我們使用owl:backwardCompatibleWith和owl:incompatibleWith這些屬性來指出本體版本是兼容還是不兼容以前的版本。如果沒有進
行owl:backwardCompatibleWith聲明,那麼我們假定就不存在兼容性。除了上面講到的兩個屬性,還有一個屬性 owl:versionInfo適
用與版本控制系統,它提供了一些相關信息(hook)。和前面三個屬性相反的是,owl:versionInfo的客體是一個文字值(literal)
,這一屬性除了可以用來註釋本體之外還可以用來註釋類和屬性。
OWL Full提供的表示能力能夠對一個類進行任何類型的聲明,也即可以聲明一個類可以是另一個類的實例,或者一個類(不是它的實
例)有一個屬性和一個對應的屬性值。這一框架就能被用來爲版本跟蹤信息建立一個由類和屬性構成的本體。OWL的名稱間中包括了兩
個預定義的類owl:DeprecatedClass和 owl:DeprecatedProperty來完成這個目的。他們被用來指明某個類或屬性在未來發布的版本中
可能以一種不兼容的方式發生變化。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章