关于RDF Schema的一些概念

RDF使用命名特定和值来表达表达与资源有关的简单声明。但很多情况下,用户希望能够自定义一些词汇,然后用这些词汇来描述资源。总的说来,就是需要定义一些类和特性,比如定义Person类来描述人,定义Book类来描述图书,定义author特性来描述图书的作者等。RDF本身并不能定义这些类和特性,它们需要用RDF的描述语言RDF Schema来定义。
RDFS描述类是通过其中的资源rdfs:Class和rdfs:Resource,特性rdf:type和rdfs:subClassOf来完成的。比如我们要定义一个机动车类MotorVechile,我们为该类指定一个URIref,如ex:MotorVechile,然后将其描述成为一个具有rdf:type特性,其值为rdfs:Class的资源,如下:
ex:MotorVechile rdf:type rdfs:Class
而如果想使用这个类,即将某个资源,如某个特定机动车exthings:companyCar,描述为这个类的实例,则依然可以用rdf:type来完成,如下:
extings:companyCar rdf:type ex:MotorVechile
此外,利用rdfs:subClassOf,我们还可以定义子类。比如,我们可以定义货车Truck类为机动车MotorVechile的子类如下:
ex:Truck rdf:type rdfs:Class
ex:Truck rdfs:subClassOf ex:MotorVechile
下面是一个比较完整的机动车类层次的RDF Schema声明:
ex:MotorVehicle        rdf:type          rdfs:Class .
  ex:PassengerVehicle     rdf:type          rdfs:Class .
  ex:Van                rdf:type          rdfs:Class .
  ex:Truck               rdf:type          rdfs:Class .
  ex:MiniVan            rdf:type          rdfs:Class .
  ex:PassengerVehicle     rdfs:subClassOf   ex:MotorVehicle .
  ex:Van                rdfs:subClassOf   ex:MotorVehicle .
  ex:Truck               rdfs:subClassOf   ex:MotorVehicle .
  ex:MiniVan             rdfs:subClassOf   ex:Van .
  ex:MiniVan             rdfs:subClassOf   ex:PassengerVehicle .
这个机动车类的概念图如下图示,我们可以利用RDF/XML定义完成,如下例:

vehicleClassesJan12.png

<?xml version="1.0"?>

 <!DOCTYPE rdf:RDF [<!ENTITY xsd " http://www.w3.org/2001/XMLSchema#">]>

 <rdf:RDF  

<rdf:Description rdf:ID="MotorVehicle">

   <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
 </rdf:Description>

<rdf:Description rdf:ID="PassengerVehicle">

   <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
   <rdfs:subClassOf rdf:resource="#MotorVehicle"/>
 </rdf:Description>

<rdf:Description rdf:ID="Truck">

   <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>

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

 </rdf:Description>

<rdf:Description rdf:ID="Van">

   <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>

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

 </rdf:Description>

<rdf:Description rdf:ID="MiniVan">

   <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>

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

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

 </rdf:Description>
</rdf:RDF>
也可以利用简写形式的RDF/XML定义如下:

<?xml version="1.0"?>

 <!DOCTYPE rdf:RDF [<!ENTITY xsd " http://www.w3.org/2001/XMLSchema#">]>

 <rdf:RDF  

<rdfs:Class rdf:ID="MotorVehicle"/>

<rdfs:Class rdf:ID="PassengerVehicle">

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

 </rdfs:Class>

<rdfs:Class rdf:ID="Truck">

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

 </rdfs:Class>

<rdfs:Class rdf:ID="Van">

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

 </rdfs:Class>

<rdfs:Class rdf:ID="MiniVan">

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

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

 </rdfs:Class>
</rdf:RDF>
除了上面利用RDF Schema定义类以外,还需要描述这些类的特性。在RDF Schema中,特性是利用RDF类rdf:Property和RDF Schema特性rdfs:domain(定义域)、rdfs:range(值域)和rdfs:subPropertyOf来进行的。
这里,定义域指某个特性只能用于指定的类,而值域则限定了该特性的取值范围,而rdfs:subPropertyOf则表明该特性是指定的特性的子特性。下例是关于书的作者特性的描述:

ex:Person   rdf:type     rdfs:Class .

 ex:author   rdf:type     rdf:Property .

 ex:author   rdfs:range   ex:Person .

ex:author    rdfs:domain ex:Book .
下例是关于车辆的RDF/XML描述:

<?xml version="1.0"?>

 <!DOCTYPE rdf:RDF [<!ENTITY xsd " http://www.w3.org/2001/XMLSchema#">]>

 <rdf:RDF  

<rdfs:Class rdf:ID="MotorVehicle"/>

<rdfs:Class rdf:ID="PassengerVehicle">

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

 </rdfs:Class>

<rdfs:Class rdf:ID="Truck">

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

 </rdfs:Class>

<rdfs:Class rdf:ID="Van">

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

 </rdfs:Class>

<rdfs:Class rdf:ID="MiniVan">

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

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

 </rdfs:Class>

<rdfs:Class rdf:ID="Person"/>

<rdfs:Datatype rdf:about="&xsd;integer"/>

<rdf:Property rdf:ID="registeredTo">

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

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

 </rdf:Property>

<rdf:Property rdf:ID="rearSeatLegRoom">

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

   <rdfs:range rdf:resource="&xsd;integer"/>

 </rdf:Property>

<rdf:Property rdf:ID="driver">

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

 </rdf:Property>

<rdf:Property rdf:ID="primaryDriver">

   <rdfs:subPropertyOf rdf:resource="#driver"/>

 </rdf:Property>
</rdf:RDF>
从某种意义上讲,RDF Schema的类型系统与面相对象语言(如Java)是相似的,但它们之间还是有一些重要的区别。
第一个重要的区别是面向对象的类的属性是属于类本身的,而RDFS的属性是全局的。即如果我们定义了两个类:书和杂志,它们都有作者属性。在面向对象程序语言中,书和杂志的作者属性是分别属于类本身的,即作者属性是两个不同的,不能通用的属性。而在RDFS中,类和属性分别定义,具有全局作用,所以无论是书的作者属性还是杂志的作者属性,我们都可以使用相同的同一个属性来描述。
另一个重要区别是,在面向对象语言中,属性的声明是规约性( prescriptive )的,即通常可以看成是一种约束。比如对于 Book 类的 author 属性,若规定其值域是 Person ,则面向对象语言不允许一个实例没有属性 author ,也不允许 author 的取值不是 Person 。而在 RDF Schema 中,这些信息是对资源的额外描述进行的,即并不成为一个硬性的限制在其具体的实例上。这样,一个具体的应用即可以利用这些额外的信息进行检查,来施加相应限制,也可以不检查这些,从而并不形成相应的限制。这可以根据应用的需求来灵活操作。
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值