资源描述框架RDF(Resource Description Frame)是全球资讯网协会W3C提出的。其主要目的在于描述关于资源的元数据,即关于数据的数据,从而能够是数据本身的信息得以存储,并能够被机器理解和处理。例如在传统的信息程序中,一个人名Jack可能只是一个字符串,人能够理解这个字符串是一个人的名字,但机器是没有办法理解的。又例如在传统的数据库系统中,一个SQL语句“Select Name from employee where salary > 30000”,机器不能真正地理解employee和salary。而通过对数据的数据,即元数据的描述,有可能让机器理解这样的信息并进行相关的处理。
RDF用主体、谓词、客体的三元组来描述一个数据的元数据。比如John Smith创建了某个网页,用自然语言来描述是“http://www.example.org/index.html has a creator whose value is John Smith”。这里,网页是一个主体,即一个数据,而John Smith是一个客体,creator则是一个谓词。客体和谓词都是主体的属性。通过对主体的属性填入相应的值,则描述了关于主体的数据,即元数据。一个这样的三元组描述关于主体的一个特性,多个这样的三元组则可以描述多个属性。一个三元组可以用一个图:一个表示主体的节点,一个表示客体的节点和一个由主体指向客体的表示谓词的弧来表示。如下图就表示了关于网页的几个特性,它的建立者,它的语言和建立的时间。
则rdf:string则表示了完整的URIref:< http://www.w3.org/1999/02/22-rdf-syntax- ns/string>。
l 一个要用数据类型文字表示的值的集合,被称作值空间(value space)。例如,XML模型数据类型xsd:date的值空间就是日期的集合。
l 一个数据类型用来表示它的值的字符串的集合,被称作是词法空间(lexical space)。词法空间决定了哪一种字符串能够合乎规则地被用来表示这种数据类型的文字。例如:数据类型xsd:date定义了“1999-08-16” 是书写这种类型文字的一种合乎规则的方法(相反的如果写成“August 16,1999”则可认为是不合乎规则的)。
l 一个从词空间到值空间的“词-值(lexical-to-value)映射”.这决定了这样的一个字符串的值:一个为表示这种特殊数据 类型的取自词法空间里的一个特定的字符串。例如:一个映射到数据类型xsd:date的词-值映射,决定了对于这种数据类型,字符串“1999-08- 16”表示日期“August 16, 1999”。词-值映射是个重要因素因为相同的字符串可能为不同数据类型表示不同的值。
2. <!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
7. <exterms:creation-date rdf:datatype="&xsd;date">1999-08-16</exterms:creation-date>
8. <dc:language>en</dc:language>
在下面的RDF/XML例子中,描述了一个关于帐篷的产品:
1. <?xml version="1.0"?>
2. <!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
3. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
4. xmlns:exterms="http://www.example.com/terms/"
xml:base="http://www.example.com/2002/04/products">
6. <rdf:Description rdf:ID="item10245">
7. <rdf:type rdf:resource="http://www.example.com/terms/Tent"/>
8. <exterms:model rdf:datatype="&xsd;string">Overnighter</exterms:model>
9. <exterms:sleeps rdf:datatype="&xsd;integer">2</exterms:sleeps>
10. <exterms:weight rdf:datatype="&xsd;decimal">2.4</exterms:weight>
11. <exterms:packedSize rdf:datatype="&xsd;integer">784</exterms:packedSize>
12. </rdf:Description>
13. </rdf:RDF>
在这个例子中,注意第7行的属性rdf:type,这与本体中类的应用有关。假设我们已经在URIref http://www.example.com/terms/Tent中定义了某个帐篷类class,用该属性来描述一个RDF资源时,则表示描述的资源是该URIref所标示的类的实例,这相当于在面向对象的程序中,对类的实例的声明。不过在RDF中,并没有提供方法在应用中定义特定的类,这些定义需要在RDF schema中用RDF schema语言来定义。
为了描述一组事务,如一本书的多个作者,一个班的多个学生,RDF提供了容器来进行描述。RDF的容器词汇包括三个预定义类型,以及他们的一些属性。这三个类型是:
rdf:Bag,包,表示一组可能包含重复成员,且成员间无序的资源或者文字;
rdf:Seq,序列,表示可能有重复成员,但成员间有序的一组资源或者文字;
rdf:Alt,替换,表示一组可以选择的资源或者文字。
除了容器,RDF还可以用集合来描述一组成员。一个RDF集合是用列表表示的一组事务,与容器的区别是容器不能封闭其成员,如描述所有的容器成员等。而集合则可以访问所有的集合成员。由于是列表,所以RDF集合词汇包括属性rdf:first,rdf:rest和资源rdf:nil。