资源描述框架(Resource Description Framework, 简称 RDF)是一个用于表达关于万维网(World Wide Web)上的资源的信息的语言. 它专门用于表达关于Web资源的元数据, 比如Web页面的标题、作者和修改时间,Web文档的版权和许可信息,某个被共享资源的可用计划表等。然而,将“Web资源(Web resource)”这一概念一般化后,RDF可被用于表达关于任何可在Web上被标识的事物的信息,即使有时它们不能被直接从Web上获取。
RDF基于这样的思想:用Web标识符(称作统一资源标识符,Uniform Resource Identifiers或URIs)来标识事物,用简单的属性(property)及属性值来描述资源。这使得RDF可以将一个或多个关于资源的简单陈述表示为一个由结点和弧组成的图(graph),其中的结点和弧代表资源、属性或属性值。画RDF图时,节点为URIrefs的用椭圆来表示,而节点为文字的则用方框来表示.
RDF是基于这一思想的:被描述的事物具有一些属性 (http://www.w3.org/TR/rdf-concepts/#dfn-property) (properties),而这些属性各有其值(values);对资源的描述可以通过对它作出指定了上述属性及值的陈述(statement)来进行。RDF用一套特定的术语来表达陈述中的各个部分。确切地说,关于事物的陈述中用于识别事物的那部分就叫做主体
(http://www.w3.org/TR/rdf-concepts/#dfn-subject),而用于区分陈述对象主语的各个不同属性(譬如:作者,创建日期,语种等等)的那部分就叫做谓词 (http://www.w3.org/TR/rdf-concepts/#dfn-predicate),陈述中用于区分各个属性的值的那部分叫做客体 (http://www.w3.org/TR/rdf-concepts/#dfn-object)。
完全的三元组表示法要求写出完整的URIref(括在尖刮号中)。简写法中, 一个不用尖刮号的XML限定名(QName)作为一个完整的URIref 的缩写形式 。(一个QName包括一个被赋为命名空间URI的前缀,其后是一个冒号,然后是个"局部名称"(local name)。由QName可以生成完整的URIref,即将局部名称添加到已经赋了命名空间URI的前缀。RDF 词汇表中的 URIrefs 都以 “http://www.w3.org/1999/02/22-rdf-syntax-ns# ”开头,其QName用前缀“rdf:”来表示。RDF词汇描述语言(rdfschema)定义了另一套都以http://www.w3.org/2000/01/rdf-schema# 开头的URIrefs的术语集合,其QName用前缀“rdfs:”来表示。
表示包含空白结点的图:为各个空白结点指定一个空白结点标识符(blank node identifier)。空白结点标识符用于标识某个特定RDF/XML文档内部的一个空白结点。但是与URIref不同,空白结点标识符在所属文档外部是不可识别的[即仅在它被指定为空白结点标识符的那个文档内有效]。在RDF/XML中,所有可以出现资源URIref的地方都可以用rdf:nodeID属性来引用空白结点(用一个空白结点标识符作为该属性的值)。 具体地,一个以空白结点为主体的陈述,在RDF/XML中可以用一个拥有rdf:nodeID(而不是rdf:about)属性的rdf:Description元素来描述。同样地,一个以空白结点为客体的陈述可以用一个拥有rdf:nodeID(而不是rdf:resource)属性的属性元素(property element)来描述。使用空白结点标识符的优点是可以在一个RDF/XML文档中多次引用同一个空白结点。
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:exterms="http://example.org/stuff/1.0/">
<rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar">
<dc:title>RDF/XML Syntax Specification (Revised)</dc:title>
<exterms:creation-date rdf:datatype="http://www.w3.org/2001/XMLSchema#date">
1999-08-16
</exterms:creation-date>
<exterms:editor rdf:nodeID="abc"/>
</rdf:Description>
<rdf:Description rdf:nodeID="abc">
<exterms:fullName>Dave Beckett</exterms:fullName>
<exterms:homePage rdf:resource="http://purl.org/net/dajobe/"/>
</rdf:Description>
<exterms:fullName>Dave Beckett</exterms:fullName>
<exterms:homePage rdf:resource="http://purl.org/net/dajobe/"/>
</rdf:Description>
</rdf:RDF>
上例中exterms:creation-date属性元素的值是一个类型文字(而不是平凡文字),这是通过为exterms:creation-date元素的首标签(start-tag)增加一个rdf:datatype属性并由此指定数据类型实现的。rdf:datatype属性的值应是某个数据类型的URIref,在本例中它是XML Schema中的date数据类型的URIref。作为属性值,URIref必须被写全[即写为相对URIref或绝对URIref],而不是像在三元组中那样写出它的QName形式xsd: date。
RDF/XML允许使用XML 实体(entities)以提高可读性,即为URIrefs提供一个简写形式。XML实体声明的本质是将一个XML名称(XML name)与一个字符串相关联。如果实体名在XML文档中被引用,XML处理器(XML processors)将用相应的字符串来替换该引用。
比如,下列ENTITY声明(被写在RDF/XML文档头部的DOCTYPE声明中):
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
则后面可简写成:
<exterms:creation-date rdf:datatype="&xsd;date">1999-08-16</exterms:creation-date>
上例中exterms:creation-date属性元素的值是一个类型文字(而不是平凡文字),这是通过为exterms:creation-date元素的首标签(start-tag)增加一个rdf:datatype属性并由此指定数据类型实现的。rdf:datatype属性的值应是某个数据类型的URIref,在本例中它是XML Schema中的date数据类型的URIref。作为属性值,URIref必须被写全[即写为相对URIref或绝对URIref],而不是像在三元组中那样写出它的QName形式xsd: date。
RDF/XML允许使用XML 实体(entities)以提高可读性,即为URIrefs提供一个简写形式。XML实体声明的本质是将一个XML名称(XML name)与一个字符串相关联。如果实体名在XML文档中被引用,XML处理器(XML processors)将用相应的字符串来替换该引用。
比如,下列ENTITY声明(被写在RDF/XML文档头部的DOCTYPE声明中):
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
则后面可简写成:
<exterms:creation-date rdf:datatype="&xsd;date">1999-08-16</exterms:creation-date>
一个RDF图可以这样书写RDF/XML:
* 所有空白结点(blank nodes)被指定空白结点标识符(blank node identifiers)。
* 依次列出各个结点,将它作为一个非嵌套的rdf:Description元素的主体(subject)。若该结点有URIref,则 rdf:Description元素使用rdf:about属性;若该结点是空结点,则rdf:Description元素使用 rdf:nodeID属性。
对于各个以该结点作为主体(subject)的三元组(triple),创建一个正确的属性元素(property element)。该属性元素或者是元素内容(element content)为文字(literal)(可能为空)、或者是有一个指定该三元组的客体(object)的rdf:resource属性(attribute)(对于客体有URIref的情况)、或者是有一个指定该三元组的客体的rdf:nodeID属性(attribute)(对于客体结点为空结点的情况)。
rdf:ID用于指定一个片断标识符(fragment identifier)作为资源完整URIref的简略形式,该片断标识符在rdf:ID属性值中给出。
Web体系结构的一个基本原则,即任何人都应能够用他们愿意使用的任何词汇自由地添加关于某一现存资源的信息。例子进一步说明了描述某个特定资源的RDF不需要全部存放于某一处;相反,它可以被分布于Web上。这一点不仅对上述情形(即一个组织对其他组织定义的资源给出排名或评论)适用,对于下面这种情形也是适用的,即资源的最初定义者希望通过增加关于资源(或其他人)的信息来充实资源的描述。这可以通过修改 RDF文档(即资源被最初定义的文档)来实现:即增加为了描述附加信息所必需的属性和值。另一种实现方式是:创建一个单独的文档,并在其中通过使用rdf:Description元素为资源(用rdf:Description元素的rdf:about属性的值来标识)提供附加的属性和值。
XML Base允许XML文档指定一个基准URI,而不是将XML文档本身的URI作为基准URI。
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [<!ENTITY
xsd "http://www.w3.org/2001/XMLSchema#">]>
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [<!ENTITY
xsd "http://www.w3.org/2001/XMLSchema#">]>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax- ns#"
xmlns:exterms="http://www.example.com/terms/"
xml:base="http://www.example.com/2002/04/products">
<rdf:Description rdf:ID="item10245">
<exterms:model rdf:datatype="&xsd;string">Overnighter</exterms:model>
<exterms:sleeps rdf:datatype="&xsd;integer">2</exterms:sleeps>
<exterms:weight rdf:datatype="&xsd;decimal">2.4</exterms:weight>
<exterms:packedSize rdf:datatype="&xsd;integer">784</exterms:packedSize>
</rdf:Description>
...other product descriptions...
xmlns:exterms="http://www.example.com/terms/"
xml:base="http://www.example.com/2002/04/products">
<rdf:Description rdf:ID="item10245">
<exterms:model rdf:datatype="&xsd;string">Overnighter</exterms:model>
<exterms:sleeps rdf:datatype="&xsd;integer">2</exterms:sleeps>
<exterms:weight rdf:datatype="&xsd;decimal">2.4</exterms:weight>
<exterms:packedSize rdf:datatype="&xsd;integer">784</exterms:packedSize>
</rdf:Description>
...other product descriptions...
</rdf:RDF>
xml:base声明为rdf:RDF元素里的内容指定了基准URI http://www.example.com/2002/04/products 。这样,在元素里引用的所有相对URIrefs的解析将相对于xml:base所指定的基准URI,而与这些相对URIrefs所在文档的URI是什么无关。因此,所描述帐篷的相对URIref #item10245将被解析为同一个绝对URIref http://www.example.com/2002/04/products#item10245,不管产品目录文档的实际URI是什么,也不管基准URIref是否真的标识了某一具体文档。
xml:base声明为rdf:RDF元素里的内容指定了基准URI http://www.example.com/2002/04/products 。这样,在元素里引用的所有相对URIrefs的解析将相对于xml:base所指定的基准URI,而与这些相对URIrefs所在文档的URI是什么无关。因此,所描述帐篷的相对URIref #item10245将被解析为同一个绝对URIref http://www.example.com/2002/04/products#item10245,不管产品目录文档的实际URI是什么,也不管基准URIref是否真的标识了某一具体文档。
我们用rdf:type属性(property)来描述一个RDF资源时,该属性的值就是被看作表达这种事物的种类(kings)或类别(categories)的资源。该属性的主体被看作为该种类(kings)或类别(categories)的一个实例(instance)。
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:exterms="http://www.example.com/terms/"
xml:base="http://www.example.com/2002/04/products">
<rdf:Description rdf:ID="item10245">
<rdf:type rdf:resource="http://www.example.com/terms/Tent"/>
<exterms:model rdf:datatype="&xsd;string">Overnighter</exterms:model>
<exterms:sleeps rdf:datatype="&xsd;integer">2</exterms:sleeps>
<exterms:weight rdf:datatype="&xsd;decimal">2.4</exterms:weight>
<exterms:packedSize rdf:datatype="&xsd;integer">784</exterms:packedSize>
</rdf:Description>
...other product descriptions...
xmlns:exterms="http://www.example.com/terms/"
xml:base="http://www.example.com/2002/04/products">
<rdf:Description rdf:ID="item10245">
<rdf:type rdf:resource="http://www.example.com/terms/Tent"/>
<exterms:model rdf:datatype="&xsd;string">Overnighter</exterms:model>
<exterms:sleeps rdf:datatype="&xsd;integer">2</exterms:sleeps>
<exterms:weight rdf:datatype="&xsd;decimal">2.4</exterms:weight>
<exterms:packedSize rdf:datatype="&xsd;integer">784</exterms:packedSize>
</rdf:Description>
...other product descriptions...
</rdf:RDF>
rdf:type属性(property)表示被描述的资源是URLref http://www.example.com/terms/Tent 所标识的类的一个实例(instance)。这假定了example.com已经在某个词汇表中描述了这个类(class),因此才可以在上面的例子中用该类的绝对URIref来引用它。如果example.com是在产品目录所在文档中描述了这个类,那么可以用相对URIref #Tent来引用它。
rdf:type属性(property)表示被描述的资源是URLref http://www.example.com/terms/Tent 所标识的类的一个实例(instance)。这假定了example.com已经在某个词汇表中描述了这个类(class),因此才可以在上面的例子中用该类的绝对URIref来引用它。如果example.com是在产品目录所在文档中描述了这个类,那么可以用相对URIref #Tent来引用它。
RDF本身并没有提供方法来定义特定应用中的类(class),比如本例中的Tent、或它们的属性(properties)如exterms:weight等。这些类是在RDF schema中使用RDF Schema语言来描述的。其他用于类描述的方法也可以被定义,比如DAML+OIL和OWL语言。
在RDF中,为被描述的资源指定rdf:type属性(property)以指明它是某个特定类型或类的实例是非常普遍的手法。这样的资源在RDF图中被称作有类型结点(typed node),在RDF/XML中被称作有类型结点元素(typed node elements)。RDF/XML 提供了一种特殊的简略形式以描述这些有类型结点。在这种简略形式中,rdf:type属性及其的值被移去,而结点对应的rdf:Description元素被替换为一个以QName为名称的元素(QName对应于被移去的那个rdf:type属性的值,也就是某个类的URIref)。
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:exterms="http://www.example.com/terms/"
xml:base="http://www.example.com/2002/04/products">
<exterms:Tent rdf:ID="item10245">
<exterms:model rdf:datatype="&xsd;string">Overnighter</exterms:model>
<exterms:sleeps rdf:datatype="&xsd;integer">2</exterms:sleeps>
<exterms:weight rdf:datatype="&xsd;decimal">2.4</exterms:weight>
<exterms:packedSize rdf:datatype="&xsd;integer">784</exterms:packedSize>
</exterms:Tent>
...other product descriptions...
xmlns:exterms="http://www.example.com/terms/"
xml:base="http://www.example.com/2002/04/products">
<exterms:Tent rdf:ID="item10245">
<exterms:model rdf:datatype="&xsd;string">Overnighter</exterms:model>
<exterms:sleeps rdf:datatype="&xsd;integer">2</exterms:sleeps>
<exterms:weight rdf:datatype="&xsd;decimal">2.4</exterms:weight>
<exterms:packedSize rdf:datatype="&xsd;integer">784</exterms:packedSize>
</exterms:Tent>
...other product descriptions...
</rdf:RDF>
因为一个资源可能被描述为是多个类的实,因此一个资源可能有多个rdf:type属性。但是,在这些rdf:type属性中,只有一个可被写为简略形式,其余的必须像样用rdf:type属性写出。
因为一个资源可能被描述为是多个类的实,因此一个资源可能有多个rdf:type属性。但是,在这些rdf:type属性中,只有一个可被写为简略形式,其余的必须像样用rdf:type属性写出。
RDF提供了容器词汇,包括三个预定义的类型,以及他们的一些属性。一个容器是一个包含了一些事物的资源,这些被包含的事物称为成员。容器的成员可能是资源(包括匿名节点)或文字。RDF定义了三种类型的容器: rdf:Bag rdf:Seq rdf:Alt。
一个包(Bag,是类型为rdf:Bag的资源)表示了一组可能包含重复成员的资源或文字,且成员之间是无序的。
一个序列(Sequence,是类型为rdf:Seq的资源)表示了一组资源或文字,其中可能有重复的成员,而且成员之间是有序的。
一个替换(Alternative,是类型为rdf:Alt的资源)表示了一组可以选择的资源或文字(常常是属性的一个值)。
容器的成员和容器资源之间的关系是由一组专门为此定义的表示成员关系的属性描述的,这些属性的主体是容器资源,客体是其成员。这些成员关系属性的名字形为rdf:_n,其中n是一个大于0的十进制整数,如 rdf:_1, rdf:_2, rdf:_3等等。
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:s="http://example.org/students/vocab#">
<rdf:Description rdf:about="http://example.org/courses/6.001">
<s:students>
<rdf:Bag>
<rdf:li rdf:resource="http://example.org/students/Amy"/>
<rdf:li rdf:resource="http://example.org/students/Mohamed"/>
<rdf:li rdf:resource="http://example.org/students/Johann"/>
<rdf:li rdf:resource="http://example.org/students/Maria"/>
<rdf:li rdf:resource="http://example.org/students/Phuong"/>
</rdf:Bag>
</s:students>
</rdf:Description>
<s:students>
<rdf:Bag>
<rdf:li rdf:resource="http://example.org/students/Amy"/>
<rdf:li rdf:resource="http://example.org/students/Mohamed"/>
<rdf:li rdf:resource="http://example.org/students/Johann"/>
<rdf:li rdf:resource="http://example.org/students/Maria"/>
<rdf:li rdf:resource="http://example.org/students/Phuong"/>
</rdf:Bag>
</s:students>
</rdf:Description>
</rdf:RDF>
展示了RDF/XML用rdf:li作为一个便利元素来避免显式地指定属性的名字。那些标号了的属性,如rdf:_1, rdf:_2是由图中的rdf:li自动生成的。元素名rdf:li是借鉴HTML的列表的。
展示了RDF/XML用rdf:li作为一个便利元素来避免显式地指定属性的名字。那些标号了的属性,如rdf:_1, rdf:_2是由图中的rdf:li自动生成的。元素名rdf:li是借鉴HTML的列表的。
容器的一个缺点是没有办法封闭它,即没有办法说这些是容器的所有成员。一个容器只说一些有标识的资源是它的成员,无法说没有其他的成员了。而且,如果有一个图描述它的一些成员,我们没法排除在其他地方有图也描述这个容器的其它成员的可能。RDF以RDF集合(collection)的形式提供了对描述特定成员的组的支持。一个RDF集合是用列表结构表示的一组事物,这个列表结构是用一些预定义的集合词汇表示的。RDF的集合词汇包括属性rdf: first 和rdf:rest,和资源rdf:nil.
RDF/XML提供了一种特殊的图的记法使描述集合更为简单。在RDF/XML中,一个集合可以用一个代表属性的元素节点表示,且这个元素节点有个属性节点是rdf:parseType="Collection",这表示元素节点下的内容要以一种特殊的方式解释。
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:s="http://example.org/students/vocab#">
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:s="http://example.org/students/vocab#">
<rdf:Description rdf:about="http://example.org/courses/6.001">
<s:students rdf:parseType="Collection">
<rdf:Description rdf:about="http://example.org/students/Amy"/>
<rdf:Description rdf:about="http://example.org/students/Mohamed"/>
<rdf:Description rdf:about="http://example.org/students/Johann"/>
</s:students>
</rdf:Description>
<s:students rdf:parseType="Collection">
<rdf:Description rdf:about="http://example.org/students/Amy"/>
<rdf:Description rdf:about="http://example.org/students/Mohamed"/>
<rdf:Description rdf:about="http://example.org/students/Johann"/>
</s:students>
</rdf:Description>
</rdf:RDF>
在RDF模型中,这种类型的带有修饰的属性值可以看成一种简单的结构化值。为了表达这个,一个单独的资源可以用来表示结构化值,且作为原来陈述的客体。这个资源可以有属性表示结构值中的部分。在这里,应该有个属性表示数值,还一个属性表示单位。RDF提供了一个预定义的属性rdf: value来描述结构值中的主值。
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:exterms="http://www.example.org/terms/">
xmlns:exterms="http://www.example.org/terms/">
<rdf:Description rdf:about="http://www.example.com/2002/04/products#item10245">
<exterms:weight rdf:parseType="Resource">
<rdf:value rdf:datatype="&xsd;decimal">2.4</rdf:value>
<exterms:units rdf:resource="http://www.example.org/units/kilograms"/>
</exterms:weight>
<exterms:weight rdf:parseType="Resource">
<rdf:value rdf:datatype="&xsd;decimal">2.4</rdf:value>
<exterms:units rdf:resource="http://www.example.org/units/kilograms"/>
</exterms:weight>
</rdf:Description>
</rdf:RDF>
在这里,rdf:parseType="Resource"用以表示节点的内容同时被解释为一个新的匿名节点,而不用写一个嵌套的rdf:Description元素。rdf:parseType="Resource" 用在属性 exterms:weight 元素节点中表示创建了一个匿名节点作为属性的值,且包含的元素 (rdf:value 和 exterms:units) 描述了这个匿名节点的属性。
在这里,rdf:parseType="Resource"用以表示节点的内容同时被解释为一个新的匿名节点,而不用写一个嵌套的rdf:Description元素。rdf:parseType="Resource" 用在属性 exterms:weight 元素节点中表示创建了一个匿名节点作为属性的值,且包含的元素 (rdf:value 和 exterms:units) 描述了这个匿名节点的属性。
XML文字
有时候,属性的值可能是一个XML的片断,或包含XML标记的文本。RDF/XML提供了一个特殊的符号,使书写这种文字变得简单。即通过属性rdf:parseType第三个值,如果一个元素节点的有属性节点rdf:parseType="Literal",表明这个元素节点的内容应该被解释为一个XML片断。
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xml:base="http://www.example.com/books">
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xml:base="http://www.example.com/books">
<rdf:Description rdf:ID="book12345">
<dc:title rdf:parseType="Literal">
<span xml:lang="en">
The <em><br /></em> Element Considered Harmful.
</span>
</dc:title>
</rdf:Description>
<dc:title rdf:parseType="Literal">
<span xml:lang="en">
The <em><br /></em> Element Considered Harmful.
</span>
</dc:title>
</rdf:Description>
</rdf:RDF>
RDF Schema
1.这些RDF 词汇是一组带有特殊含义的、预定义的RDF资源。 这些资源的(RDF Schema词汇)URI带有前缀http://www.w3.org/2000/01/rdf-schema# (QName通常采用前缀 rdfs:)。采用RDF Schema 语言所定义的词汇描述(schemas)也是合法的RDF图。
在RDF Schema中,一个类是任何具有rdf:type特性、并且该特性的值为rdfs:Class的资源。
rdfs:Class本身也是资源,而且也有一个rdf:type特征并且该特性的值为rdfs:Class。一个资源可以是一个或多个类的实例.
rdfs:subClassOf特性具有传递性(transitive)。
RDF Schema规定:所有的类总是rdfs:Resource的子类(因为任何类的实例都是资源)。
示例:
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xml:base="http://example.org/schemas/vehicles">
rdfs:Class本身也是资源,而且也有一个rdf:type特征并且该特性的值为rdfs:Class。一个资源可以是一个或多个类的实例.
rdfs:subClassOf特性具有传递性(transitive)。
RDF Schema规定:所有的类总是rdfs:Resource的子类(因为任何类的实例都是资源)。
示例:
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xml:base="http://example.org/schemas/vehicles">
<rdfs:Class rdf:ID="MotorVehicle"/>
<rdfs:Class rdf:ID="PassengerVehicle">
<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>
<rdfs:Class rdf:ID="PassengerVehicle">
<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实例数据(即描述属于某个类的个体的数据)中引用这些类,example.org可采取下列方式:声明一个恰当的xml:base,并书写相对URIrefs,然后根据这两者所确定的绝对URIrefs来标识类;或者,声明一个恰当的名字空间,并书写 QNames,然后根据由QName展开得到的绝对URIrefs来标识类。
2.值域(range)和定义域(domain)
在RDF schema中,特性是用RDF类rdf:Property以及RDF Schema特性rdfs:domain(定义域)、rdfs:range(值域)以及rdfs;subPropertyOf来描述的。
RDF中的所有特性都被描述为类rdf:Property的实例。因此一个新特性(例如exterms:weigntInKg)的描述是通过为它指派一个URIref,并使用一个值为rdf:Property的rdf:type特性来完成的。
在RDF schema中,特性是用RDF类rdf:Property以及RDF Schema特性rdfs:domain(定义域)、rdfs:range(值域)以及rdfs;subPropertyOf来描述的。
RDF中的所有特性都被描述为类rdf:Property的实例。因此一个新特性(例如exterms:weigntInKg)的描述是通过为它指派一个URIref,并使用一个值为rdf:Property的rdf:type特性来完成的。
rdfs:range用于表明某个特性的值(定义域)是给定类的实例。
例:ex:person是一个类,ex:author是一个特性,并且对于使用ex:author特性的RDF声明,其客体(Object)是ex:person类的实例。
ex:Person rdf:type rdfs:Class
ex:author rdf:type rdf:Property
ex:author rdfs:range ex:Person
例:ex:person是一个类,ex:author是一个特性,并且对于使用ex:author特性的RDF声明,其客体(Object)是ex:person类的实例。
ex:Person rdf:type rdfs:Class
ex:author rdf:type rdf:Property
ex:author rdfs:range ex:Person
rdfds:domain用于表明某个特性应用于指定的类(定义域)。
例:ex:Book是类,ex:author是特性。而使用ex:author特性的RDF声明以ex:Book的实例为主体。
ex:Book rdf:type rdfs:Class
ex:author rdf:type rdf:Property
ex:author rdfs:domain ex:Book
例:ex:Book是类,ex:author是特性。而使用ex:author特性的RDF声明以ex:Book的实例为主体。
ex:Book rdf:type rdfs:Class
ex:author rdf:type rdf:Property
ex:author rdfs:domain ex:Book
一个特性可以是零个、一个或多个特性的子特性(subproperty)。当RDF Schema中的rdfs:range和rdfs:domain特性应用于某个RDF特性时,它们也会应用于该RDF特性的子特性。
添加到1.的示例:
添加到1.的示例:
<rdfs:Class rdf:ID="Person"/>
<rdfs:Datatype rdf:about="&xsd;integer"/>
<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>
<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>
<rdfs:domain rdf:resource="#MotorVehicle"/>
</rdf:Property>
<rdf:Property rdf:ID="primaryDriver">
<rdfs:subPropertyOf rdf:resource="#driver"/>
</rdf:Property>
rdfs:subPropertyOf关系的含义在于,如果一个实例exstaff:fred是实例ex:companyVan的一个ex: primaryDriver,那么RDF Schema定义exstaff:fred也是ex:companVan的一个ex:driver
示例:一个ex:PassengerVehicle类的实例
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ex="http://example.org/schemas/vehicles#"
xml:base="http://example.org/things">
<ex:PassengerVehicle rdf:ID="johnSmithsCar">
<ex:registeredTo rdf:resource="http://www.example.org/staffid/85740"/>
<ex:rearSeatLegRoom rdf:datatype="&xsd;integer">127</ex:rearSeatLegRoom>
<ex:primaryDriver rdf:resource="http://www.example.org/staffid/85740"/>
</ex:PassengerVehicle>
</rdf:RDF>
本例假定实例与schema是分别在不同的文档中描述的。由于schema以http://example.org/schemas/vehicles作为其XML base(即作为xml:base属性的值),因此在实例数据中用命名空间声明xmlns:ex="http://example.org/schemas/vehicles#" 来保证QNames(如ex:registeredTo)得以展开为正确的、标识schema中类和特性的URIrefs。实例描述中也使用了一个 xml:base声明,用于将rdf:ID="johnSmithsCar"中的johnSmithsCar展开为正确的绝对URIref,而绝对 URIrefs的展开过程是根据xml:base进行的,与当前文档的位置无关。
本例假定实例与schema是分别在不同的文档中描述的。由于schema以http://example.org/schemas/vehicles作为其XML base(即作为xml:base属性的值),因此在实例数据中用命名空间声明xmlns:ex="http://example.org/schemas/vehicles#" 来保证QNames(如ex:registeredTo)得以展开为正确的、标识schema中类和特性的URIrefs。实例描述中也使用了一个 xml:base声明,用于将rdf:ID="johnSmithsCar"中的johnSmithsCar展开为正确的绝对URIref,而绝对 URIrefs的展开过程是根据xml:base进行的,与当前文档的位置无关。
RDF Schema描述属性可以作用于哪些特定的类(通过domain和range属性),而不是(像面向对象类型系统)描述类具有哪些特定属性的集合。例如:在一个典型的面向对象编程语言中,类 Book会定义为有一个属性author,且author的类型是Person;而在RDF Schema中,类ex:Book和属性ex:author都会被分开定义,另外,属性ex:author的定义域是ex:Book,值域是ex:Person。
这两种定义方法的区别表面上看起来只是语法层次上的,其实,他们有着重大的区别。在程序设计语言中,属性author是关于类Book的描述的一部分,而且只能应用于类Book的实例。如果另外一个类,例如SoftwareModule也有个属性author,这两个author属性被看成是不同的属性。因为在大多数编程语言中,属性的作用域局部与它被定义的类或类型的。而在RDF中,缺省地,属性的描述是独立于类描述的,并且属性的作用域是全局的(尽管可以它们可被声明为只能应用于某些类)。
都柏林核心元数据倡议
都柏林核心是描述文件(因此,也是为了记录元数据)的一个“元素”集(属性)。都柏林核心的目的是提供一个描述性的元素的最小集,以便对类似文档的网络对象进行描述和自动索引,就像一张图书目录卡一样。都柏林核心元数据集的设计目标是适合让因特网上资源发现工具使用,如通行的万维网搜索引擎使用的网络爬虫(“Webcrawlers”)。此外,都柏林核心有意为足够简单,使得为因特网提供信息的各种各样的作者和出版商都能够理解和使用。都柏林核心元素已广泛地应用于记录因特网资源的有关信息。
# Title: 资源的名字。
# Creator: 一个主要负责创建资源内容的实体。
# Subject: 资源内容的主题.
# Description: 资源内容的描述.
# Publisher: 一个负责使得资源内容可用的实体
# Contributor: 一个负责为资源内容作出贡献的实体(如作者)。
# Date: 在资源生命周期中某时间关联的日期。
# Type: 资源内容的类型。
# Format: 资源的物理形式或数据形式.
# Identifier: 一个在给定上下文中明确标识资源的标识符。
# Source: 一个对作为目前资源的来源的资源引用。
# Language: 资源内容采用的语言
# Relation: 一个对相关资源的引用
# Coverage: 资源内容所在的范围或区域
# Rights: 关于资源的权限信息.
# Creator: 一个主要负责创建资源内容的实体。
# Subject: 资源内容的主题.
# Description: 资源内容的描述.
# Publisher: 一个负责使得资源内容可用的实体
# Contributor: 一个负责为资源内容作出贡献的实体(如作者)。
# Date: 在资源生命周期中某时间关联的日期。
# Type: 资源内容的类型。
# Format: 资源的物理形式或数据形式.
# Identifier: 一个在给定上下文中明确标识资源的标识符。
# Source: 一个对作为目前资源的来源的资源引用。
# Language: 资源内容采用的语言
# Relation: 一个对相关资源的引用
# Coverage: 资源内容所在的范围或区域
# Rights: 关于资源的权限信息.
示例:一个用都柏林核心属性描述的网页
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<rdf:Description rdf:about="http://www.dlib.org">
<dc:title>D-Lib Program - Research in Digital Libraries</dc:title>
<dc:description>The D-Lib program supports the community of people with research
interests in digital ibraries and electronic publishing.
</dc:description>
interests in digital ibraries and electronic publishing.
</dc:description>
<dc:publisher>Corporation For National Research Initiatives</dc:publisher>
<dc:date>1995-01-07</dc:date>
<dc:subject>
<rdf:Bag>
<rdf:li>Research; statistical methods</rdf:li>
<rdf:li>Education, research, related topics</rdf:li>
<rdf:li>Library use Studies</rdf:li>
</rdf:Bag>
</dc:subject>
<rdf:Bag>
<rdf:li>Research; statistical methods</rdf:li>
<rdf:li>Education, research, related topics</rdf:li>
<rdf:li>Library use Studies</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:type>World Wide Web Home Page</dc:type>
<dc:format>text/html</dc:format>
<dc:language>en</dc:language>
<dc:format>text/html</dc:format>
<dc:format>text/html</dc:format>
<dc:identifier rdf:resource="urn:issn:1082-9873"/>
<dcterms:isPartOf rdf:resource="http://www.dlib.org"/>
</rdf:Description>
</rdf:RDF>
都柏林的限定词“isPartOf”(来自一个单独的词汇表)来说明这份杂志是以前描述过的Web网站的一部分。