1.属性概述
RDF/OWL里都是用二元关系来描述东西的,比如描述:比尔盖茨是一个人,在RDF/OWL里就是这样描述的:比尔盖茨 ——是——> 人。其中,比尔盖茨 和 人 之间的那个关系“——是——>”就是RDF/OWL里的属性。
属性:就是一个二元关系。OWL里包括两种属性:
1. 类型属性(datatype properties):描述类与其实例之间关系的属性。
2. 对象属性(object properties):描述两个不同类的实例之间关系的属性。
既然属性是上面例子里那样的一个二元关系,那么属性就必须有且只有两个端点,起点和终点都应该是两个个体(实例)。我们用原集(domain)来描述起点的实例的类,用象集(range)来描述终点的实例的类。这是属性中一个比较重要的概念。
例如,有这样一条OWL语句:比尔盖茨 is-father-of "Jennifer Gates" ,并且我们的本体中定义得有:属性:is-father-of 的domain是类:男人。这样,就算我们没有明显的说“比尔盖茨”是男的,但是通过上面这个属性定义,OWL的推理机就能知道 比尔盖茨 是 男人 的实例。
属性也类似类那样,有子属性(Subproperty)的概念。例如,类:酒 有一个属性是:有说明书,说明书可能包括酒的颜色、酒精含量、生产日期等,酒 还有一个属性是:有颜色标签,这样,其实颜色标签就是一种简单的说明书——只是里面只说明了酒的颜色,所以,有颜色标签 这个属性就是 有说明书 属性的子属性。
2.定义属性
关键字:
* ObjectProperty
* DatatypeProperty
* rdfs:subPropertyOf
* rdfs:domain
* rdfs:range
一个属性是一个二元关系。有两种类型的属性:
* 数据类型属性(datatype properties),类实例与RDF文字或XML Schema数据类型间的关系。
* 对象属性(object properties),两个类的实例间的关系。注意:对象属性这个名称并不是要反映与RDF术语rdf:object的联系。
数据类型属性例子:描述 VintageYear is 1998
<owl:DatatypeProperty rdf:ID="yearValue">
<rdfs:domain rdf:resource="#VintageYear" />
<rdfs:range rdf:resource="&xsd;positiveInteger" />
</owl:DatatypeProperty>
<VintageYear rdf:ID="Year1998">
<yearValue rdf:datatype="&xsd;positiveInteger">1998</yearValue>
</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 has VintageYear that is 1998 ------ 葡萄酒的年份是1998 或 1998的葡萄酒
yearValue属性将VintageYears与一个整数值相关联。我们引入hasVintageYear属性,它将一个Vintage关联到一个VintageYear
一种葡萄酒有着一个特定的制造年份。也即,一个给定的 Vintage个体只能使用hasVintageYear属性与单独一个年份相关联。
对象属性例子:描述 wine hasWinDescriptor WineDescriptor
<owl:ObjectProperty rdf:ID="hasWineDescriptor">
<rdfs:domain rdf:resource="#Wine" />
<rdfs:range rdf:resource="#WineDescriptor" />
</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关系。
3.属性特征
属性特征:
* TransitiveProperty
* SymmetricProperty
* FunctionalProperty
* inverseOf
* InverseFunctionalProperty
3.1 TransitiveProperty 传递属性
如果一个属性P被声明为传递属性,那么对于任意的x,y和z: P(x,y)与P(y,z) 蕴含 P(x,z)
示例:TransitiveProperty :将locatedIn标识上传递性
<owl:Class rdf:ID="Region"/>
<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)位于(locatedIn)加利福尼亚地区(CaliforniaRegion),那么它也应该位于(locatedIn)美国地区(USRegion),因为属性locatedIn是传递属性。
3.2 SymmetricProperty 对称属性
如果一个属性P被声明为对称属性,那么对于任意的x和y: P(x,y)当且仅当P(y,x)
示例: SymmetricProperty :对adjacentRegion标识对称性
<owl:Class rdf:ID="Region"/>
<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>
MendocinoRegion地区与SonomaRegion地区相邻,反过来也是这样。MendocinoRegion地区位于CaliforniaRegion地区,但是反过来并不成立。
3.3 FunctionalProperty 函数型属性
如果一个属性P被标记为函数型属性,那么对于所有的x, y, 和z: P(x,y)与P(x,z) 蕴含 y = z
即个体的某个属性的值域(range)具有惟一性。
示例:FunctionalProperty :对hasVintageYear标识惟一性
详见上面《数据类型属性例子》
一种葡萄酒有着一个特定的制造年份。也即,一个给定的 Vintage个体只能使用hasVintageYear属性与单独一个年份相关联。
3.4 inverseOf 逆属性
如果一个属性P1被标记为属性P2的逆, 那么对于所有的x 和 y:
P1(x,y) 当且仅当P2(y,x)
请注意owl:inverseOf的语法,它仅仅使用一个属性名作为参数。A 当且仅当B意思是 (A蕴含B)并且(B蕴含A).
示例:inverseOf :描述各种葡萄酒都有制造商
<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>
各种葡萄酒都有制造商,即hasMaker和producesWine两个属性的domain和range互逆
3.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属性是反函数型属性。因为一个函数型属性的逆必定是反函数型的。
反函数型属性的domain和range是一一对应的。
4.属性限制
一个明确的上下文中限制属性的值域。
关键字:
* Restriction
* onProperty :指出了受限制的属性
* allValuesFrom
* someValuesFrom
* cardinality
* hasValue
4.1 allValuesFrom
owl:allValuesFrom属性限制要求:对于每一个有指定属性实例的类实例,该属性的值必须是由owl:allValuesFrom从句指定的类的成员。
示例:
<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 属性上。Cheese的制造商并不受这一局部限制的约束。
4.2 someValuesFrom
表示至少存在一个指定属性实例的类实例,该属性的值必须是由owl:someValuesFrom从句指定的类的成员。
示例:
<owl:Class rdf:ID="Wine">
<rdfs:subClassOf rdf:resource="&food;PotableLiquid" />
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="#hasMaker" />
<owl:someValuesFrom rdf:resource="#Winery" />
</owl:Restriction>
</rdfs:subClassOf>
...
</owl:Class>
至少存在一个Wine的制造商是Winery
4.3 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>
<owl:ObjectProperty rdf:ID="hasVintageYear">
<rdf:type rdf:resource="&owl;FunctionalProperty" />
<rdfs:domain rdf:resource="#Vintage" />
<rdfs:range rdf:resource="#VintageYear" />
</owl:ObjectProperty>
例子表示:每瓶Vintage葡萄酒只有一个年度
4.4 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>
所有的Burgundy酒都是干(dry)的酒。也即,它们的hasSugar属性必须至少有一个是值等于Dry(干的)