基本元素 Basic Elements
1簡單的 Class 及 Individual
1-1. Class
在 OWL的世界裡,每個Individual 都是 owl:Thing 的成員,也就是說每個自訂的Class都是 owl:Thing 的 subClass
簡單的 Class 範例:
<owl:Class rdf:ID="Winery"/>
<owl:Class rdf:ID="Region"/>
<owl:Class rdf:ID="ConsumableThing"/>
rdf:ID 表示這個Class的名稱
Class建立後,其他的Ontology如果要參照這邊的Class, 以上面中的 Region 來說,就可以使用 ref:resource="#Region" ,不過正常應該會用完整的URI,如 http://www.w3.org/TR/2004/REC-owl-guide-20040210/wine#Region
如以下範例中:
<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>
<owl:Class rdf:ID="Pasta">
<rdfs:subClassOf rdf:resource="#EdibleThing" />
...
</owl:Class>
另一個參照(reference)的作法則是使用 rdf:about="$Region",可以用來擴展(extend)這個資源的定義。即可以再不修改原始資源的狀況下增加新的結構。
rdfs:label 用來提供人類可讀的名稱
Class , rdfs:subClassOf
1-2.Individuals
直接看範例,下面範例定義了 CenteralCoastRegion 的 Thing,他是 #Region 的成員之一
<owl:Thing rdf:ID="CentralCoastRegion" />
<owl:Thing rdf:about="#CentralCoastRegion">
<rdf:type rdf:resource="#Region"/>
</owl:Thing>
rdf:type 用來把一個 Individual 與 一個Class 關連起來,
2.簡單的 Property
ObjectProperty, DatatypeProperty, rdfs:subPropertyOf,rdfs:domain, rdfs:range
property 是 一個二元關連。分成兩種:
- datatype : 用來把Class的實例(instance) 與 RDF literals 或 XML Schema datatype 關連起來
- object:把兩個Class 關連起來。
範例:
<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:ObjectProperty>
madFromGrape 實際上把 Wine 以及 WineGrape 關連起來了,course 則把 Meal 與 MealCourse 關連起來
即 Wine - madeFromGrape - WineGrape 是一個 tripple
Meal - cource - MealCourse 也是一個 tripple
Property 也如同Class 一樣,可以有層級(hierarchy)
<owl:Class rdf:ID="WineDescriptor" />
<owl:Class rdf:ID="WineColor">
<rdfs:subClassOf rdf:resource="#WineDescriptor" />
...
</owl:Class>
<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>
hasColor 是 hasWineDescriptor 的 subProperty
然後也可以加一些限制,
<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>
上面範例中 使用了匿名 Class(_anonymous _classes) , 即下面這一段
<owl:Restriction>
<owl:onProperty rdf:resource="#madeFromGrape"/>
<owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality>
</owl:Restriction>