RDF基础

RDF(资源描述框架)是描述网络资源的 W3C 标准, ,比如网页的标题、作者、修改日期、内容以及版权信息等。

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0"?>

<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:si="http://www.runoob.com/rdf/">

<rdf:Description rdf:about="http://www.runoob.com">
<si:title>RUNOOB</si:title>
<si:author>Jan Egil Refsnes</si:author>
</rdf:Description>

</rdf:RDF>

这是一个XML文件,用于描述一个资源的元数据信息。XML(可扩展标记语言)是一种标记语言,用于定义文档的结构和内容。在这个XML文件中:

  • <?xml version="1.0"?> 表示XML文档的版本号为1.0。
  • <rdf:RDF> 是XML文档的根元素,命名空间“rdf”是用于描述元数据的XML命名空间。
  • <rdf:Description> 是一个描述元数据的元素,它包含了关于一个资源的信息。
  • rdf:about 属性指定了描述的资源的URI(统一资源标识符)。
  • 在这个例子中,描述的资源是网站 http://www.runoob.com。
  • <rdf:Description> 元素内部,有两个子元素:
    • <si:title> 表示资源的标题,这里是 "RUNOOB"。
    • <si:author> 表示资源的作者,这里是 "Jan Egil Refsnes"。
  • <si> 是自定义的命名空间,用于描述作者和标题元素。

总之,这个XML文件描述了一个网站 http://www.runoob.com 的标题和作者信息。

简介

RDF,即资源描述框架(Resource Description Framework),是一种用于描述 Web 上资源的框架。它提供了针对数据的模型和语法,使得不同的独立团体可以交换和使用这些数据。RDF的设计目的是让计算机能够读取和理解这些描述信息,而不是为了人们直接阅读。

RDF使用XML编写,因此RDF文档被称为RDF/XML。XML的使用使得RDF信息可以轻松地在不同类型的操作系统和应用语言的计算机之间进行交换。

RDF是W3C的语义网络活动的一部分,其目标是实现语义网络愿景,即让Web上的信息具有确切的含义,让计算机能够理解和处理这些信息,并使计算机能够从Web上整合信息。

RDF在2004年2月成为W3C标准。W3C推荐标准是由W3C工作组开发并经W3C成员评审的稳定规范。

RDF(资源描述框架)使用Web标识符(URIs)来标识资源,并使用属性和属性值来描述这些资源。

  • 资源(Resource):可拥有URI的任何事物,例如:"https://www.runoob.com/rdf"。

  • 属性(Property):拥有名称的资源,用于描述资源的特征或关系,例如:"author"或"homepage"。

  • 属性值(Property Value):某个属性的具体取值,可以是另一个资源,例如:"Jan Egil Refsnes"或"https://www.runoob.com/"。

在RDF中,资源、属性和属性值的组合形成一个陈述,通常包含主体、谓语和客体:

  • 主体(Subject):陈述所描述的资源,例如:"https://www.runoob.com/rdf"。

  • 谓语(Predicate):用于描述主体的属性或关系,例如:"author"或"homepage"。

  • 客体(Object):谓语所描述的主体的具体属性值,例如:"Jan Egil Refsnes"或"https://www.runoob.com/"。

下面是一个简化的RDF文档示例:

1
2
3
4
5
6
7
<?xml version="1.0"?>
<RDF>
<Description about="https://www.runoob.com/rdf">
<author>Jan Egil Refsnes</author>
<homepage>https://www.runoob.com/</homepage>
</Description>
</RDF>

这个文档描述了资源"https://www.runoob.com/rdf"的作者是"Jan Egil Refsnes",并且其主页是"https://www.runoob.com/"。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0"?>

<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cd="http://www.recshop.fake/cd#">

<rdf:Description
rdf:about="http://www.recshop.fake/cd/Empire Burlesque">
<cd:artist>Bob Dylan</cd:artist>
<cd:country>USA</cd:country>
<cd:company>Columbia</cd:company>
<cd:price>10.90</cd:price>
<cd:year>1985</cd:year>
</rdf:Description>

<rdf:Description
rdf:about="http://www.recshop.fake/cd/Hide your heart">
<cd:artist>Bonnie Tyler</cd:artist>
<cd:country>UK</cd:country>
<cd:company>CBS Records</cd:company>
<cd:price>9.90</cd:price>
<cd:year>1988</cd:year>
</rdf:Description>
.
.
.
</rdf:RDF>
1
<?xml version="1.0"?>

这是XML文档的XML声明,指定了XML版本。

1
2
3
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cd="http://www.recshop.fake/cd#">

这是根元素<rdf:RDF>,其中包含了两个命名空间声明:

  • xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#":指定了RDF元素的命名空间。
  • xmlns:cd="http://www.recshop.fake/cd#":指定了CD元素的命名空间。
1
2
3
4
5
6
7
8
<rdf:Description
rdf:about="http://www.recshop.fake/cd/Empire Burlesque">
<cd:artist>Bob Dylan</cd:artist>
<cd:country>USA</cd:country>
<cd:company>Columbia</cd:company>
<cd:price>10.90</cd:price>
<cd:year>1985</cd:year>
</rdf:Description>

这个<rdf:Description>元素描述了一个资源,该资源有一个唯一的标识符(通过rdf:about属性指定),即"http://www.recshop.fake/cd/Empire Burlesque"。描述了这个资源的属性有<cd:artist><cd:country><cd:company><cd:price><cd:year>,分别表示艺术家、国家、公司、价格和年份。

1
2
3
4
5
6
7
8
<rdf:Description
rdf:about="http://www.recshop.fake/cd/Hide your heart">
<cd:artist>Bonnie Tyler</cd:artist>
<cd:country>UK</cd:country>
<cd:company>CBS Records</cd:company>
<cd:price>9.90</cd:price>
<cd:year>1988</cd:year>
</rdf:Description>

类似上一个<rdf:Description>元素,这个元素描述了另一个资源,其标识符为"http://www.recshop.fake/cd/Hide your heart"。描述了这个资源的属性也是艺术家、国家、公司、价格和年份。

1
2
3
.
.
.

这里是文档的截断部分,表示还有更多的CD资源的描述,但是省略了以保持简洁性。

1
</rdf:RDF>

XML文档的结束标记,标志着RDF文档的结束。

RDF 主要 元素

RDF 的主要元素是<RDF> 以及可表示某个资源的 <Description> 元素。


<rdf:RDF> 元素

1
2
3
4
5
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
...Description goes here...
</rdf:RDF>
  • <?xml version="1.0"?> 是 XML 的声明,表明这是一个 XML 文档,并指定了 XML 的版本。
  • <rdf:RDF> 是 RDF 文档的根元素。它将整个文档定义为一个 RDF 文档。xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 表示该文档使用了 RDF 的命名空间,并且为该命名空间定义了前缀 rdf
  • ...Description goes here... 是对资源的描述部分,通常包含一个或多个 <rdf:Description> 元素,用来描述具体的资源。

<rdf:Description> 元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cd="http://www.recshop.fake/cd#">

<rdf:Description
rdf:about="http://www.recshop.fake/cd/Empire Burlesque">
<cd:artist>Bob Dylan</cd:artist>
<cd:country>USA</cd:country>
<cd:company>Columbia</cd:company>
<cd:price>10.90</cd:price>
<cd:year>1985</cd:year>
</rdf:Description>

</rdf:RDF>

解释:

  • <rdf:RDF>:RDF 文档的根元素,用于将 XML 文档定义为一个 RDF 文档。它引用了 RDF 命名空间。
  • xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#":声明了 RDF 命名空间,用于定义 RDF 元素。
  • xmlns:cd="http://www.recshop.fake/cd#":声明了自定义的命名空间 cd,用于定义 CD 资源的属性。
  • <rdf:Description rdf:about="http://www.recshop.fake/cd/Empire Burlesque">:描述了一个名为 "Empire Burlesque" 的 CD 资源,并指定了其唯一标识符为 http://www.recshop.fake/cd/Empire Burlesque
  • <cd:artist>Bob Dylan</cd:artist><cd:country>USA</cd:country><cd:company>Columbia</cd:company><cd:price>10.90</cd:price><cd:year>1985</cd:year>:这些是 CD 资源的属性,分别表示艺术家、国家、公司、价格和年份。这些属性使用了自定义命名空间 cd
1
2
3
4
5
6
7
8
9
10
11
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cd="http://www.recshop.fake/cd#">

<rdf:Description
rdf:about="http://www.recshop.fake/cd/Empire Burlesque"
cd:artist="Bob Dylan" cd:country="USA"
cd:company="Columbia" cd:price="10.90"
cd:year="1985" />

</rdf:RDF>

解释:

  • <rdf:RDF>:RDF 文档的根元素,声明了 RDF 的命名空间。
  • xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#":声明了 RDF 的命名空间。
  • xmlns:cd="http://www.recshop.fake/cd#":声明了自定义的命名空间 cd,用于定义 CD 资源的属性。
  • <rdf:Description rdf:about="http://www.recshop.fake/cd/Empire Burlesque">:描述了一个名为 "Empire Burlesque" 的 CD 资源,并指定了其唯一标识符为 http://www.recshop.fake/cd/Empire Burlesque
  • cd:artist="Bob Dylan" cd:country="USA" cd:company="Columbia" cd:price="10.90" cd:year="1985":这些是 CD 资源的属性,分别表示艺术家、国家、公司、价格和年份。这些属性被直接写入 <rdf:Description> 元素的属性中,而不是通过子元素的形式。
1
2
3
4
5
6
7
8
9
10
11
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cd="http://www.recshop.fake/cd#">

<rdf:Description
rdf:about="http://www.recshop.fake/cd/Empire Burlesque">
<cd:artist rdf:resource="http://www.recshop.fake/cd/dylan" />
<!-- 其他属性元素 -->
</rdf:Description>

</rdf:RDF>

在这段代码中:

  • <rdf:RDF> 元素是 RDF 文档的根元素,定义了 RDF 文档的命名空间。
  • xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 定义了 RDF 命名空间的前缀为 rdf。
  • xmlns:cd="http://www.recshop.fake/cd#" 定义了自定义命名空间 cd,用于标识 CD 信息。
  • <rdf:Description> 元素定义了一个资源,其 about 属性指定了资源的 URI,即 "http://www.recshop.fake/cd/Empire Burlesque",表示一个 CD 实体。
  • <cd:artist> 是一个属性元素,表示 CD 实体的艺术家属性。
  • rdf:resource="http://www.recshop.fake/cd/dylan"<cd:artist> 元素的属性,指定了艺术家属性的值,即 "http://www.recshop.fake/cd/dylan",表示艺术家信息的资源。

RDF 容器元素


RDF 容器用于描述一组事物。

1
2
3
<rdf:Bag> 元素
<rdf:Bag> 元素用于描述一个规定为无序的值的列表。
<rdf:Bag> 元素可包含重复的值。

下面是一个使用 <rdf:Bag> 元素的不同示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ex="http://example.org/">

<rdf:Description rdf:about="http://example.org/Book1">
<ex:authors>
<rdf:Bag>
<rdf:li>Author1</rdf:li>
<rdf:li>Author2</rdf:li>
<rdf:li>Author3</rdf:li>
<rdf:li>Author1</rdf:li> <!-- 重复的值 -->
</rdf:Bag>
</ex:authors>
</rdf:Description>

</rdf:RDF>

解释:

  • <rdf:Description> 元素描述了一个资源,其标识符为 "http://example.org/Book1"。
  • <ex:authors> 元素表示书籍的作者属性。
  • <rdf:Bag> 元素定义了一个 RDF Bag,用于表示作者列表。在这个例子中,它包含了四个作者。
  • <rdf:li> 元素用于指定 Bag 中的每个成员。这里有四个 <rdf:li> 元素,分别表示四个不同的作者。
  • 注意最后一个 <rdf:li> 元素中的值是 "Author1",这是一个重复的值。RDF Bag 允许包含重复的值,因此这个例子中的重复值是有效的。
1
2
3
4
<rdf:Seq> 元素
<rdf:Seq> 元素用于描述一个规定为有序的值的列表(比如一个字母顺序的排序)。

<rdf:Bag> 元素可包含重复的值。

下面是一个使用 <rdf:Seq> 元素的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ex="http://example.org/">

<rdf:Description rdf:about="http://example.org/Book1">
<ex:chapters>
<rdf:Seq>
<rdf:li>Chapter1</rdf:li>
<rdf:li>Chapter2</rdf:li>
<rdf:li>Chapter3</rdf:li>
</rdf:Seq>
</ex:chapters>
</rdf:Description>

</rdf:RDF>

解释:

  • <rdf:Description> 元素描述了一个资源,其标识符为 "http://example.org/Book1"。
  • <ex:chapters> 元素表示书籍的章节属性。
  • <rdf:Seq> 元素定义了一个 RDF Sequence,用于表示章节列表。在这个例子中,它包含了三个章节。
  • <rdf:li> 元素用于指定 Sequence 中的每个成员。这里有三个 <rdf:li> 元素,分别表示三个不同的章节。
  • 由于 <rdf:Seq> 定义了一个有序列表,因此章节的顺序是按照 <rdf:li> 元素的顺序确定的。

<rdf:Alt> 元素用于表示一个值的列表,其中用户只能选择其中的一个值。这在描述一些属性具有多个备选值,但只能选择其中一个的情况下非常有用。

下面是一个使用 <rdf:Alt> 元素的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ex="http://example.org/">

<rdf:Description rdf:about="http://example.org/Book1">
<ex:format>
<rdf:Alt>
<rdf:li>PDF</rdf:li>
<rdf:li>EPUB</rdf:li>
<rdf:li>MOBI</rdf:li>
</rdf:Alt>
</ex:format>
</rdf:Description>

</rdf:RDF>

解释:

  • <rdf:Description> 元素描述了一个资源,其标识符为 "http://example.org/Book1"。
  • <ex:format> 元素表示书籍的格式属性。
  • <rdf:Alt> 元素定义了一个 RDF Alternative,用于表示可替换的格式选项列表。在这个例子中,它包含了三种不同的格式选项。
  • <rdf:li> 元素用于指定 Alternative 中的每个选项。这里有三个 <rdf:li> 元素,分别表示三种不同的格式选项:PDF、EPUB 和 MOBI。
  • 用户可以从这三种格式选项中选择其中一个,因此 <rdf:Alt> 元素表示了用户可以选择的可替换值的列表。

RDF 集合

在RDF中,rdf:parseType="Collection"属性用于表示一个集合,该集合仅包含指定的成员。与容器不同,集合可以明确地指定其成员,而不会允许其他成员。

下面是一个使用rdf:parseType="Collection"属性的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ex="http://example.org/">

<rdf:Description rdf:about="http://example.org/Book1">
<ex:authors rdf:parseType="Collection">
<rdf:Description rdf:about="http://example.org/author1"/>
<rdf:Description rdf:about="http://example.org/author2"/>
<rdf:Description rdf:about="http://example.org/author3"/>
</ex:authors>
</rdf:Description>

</rdf:RDF>

解释:

  • <rdf:Description> 元素描述了一个资源,其标识符为 "http://example.org/Book1"。
  • <ex:authors> 元素表示书籍的作者属性,它是一个集合。
  • rdf:parseType="Collection"属性告诉解析器,<ex:authors> 元素包含的是一个集合,而不是普通的属性。
  • 集合的成员是通过内部的 <rdf:Description> 元素指定的。在这个例子中,<ex:authors> 集合包含了三个作者,分别是 "http://example.org/author1"、"http://example.org/author2" 和 "http://example.org/author3"。

这样,通过rdf:parseType="Collection"属性,我们可以明确地表示集合中的成员,而不必依赖于容器的隐式规则。


RDF Schema (RDFS) 是一种对 RDF 的扩展,它提供了一种描述应用程序专用的类和属性的框架。在RDF中,类、属性和值用于描述资源,但为了定义应用程序特定的类和属性,需要使用RDF Schema来扩展RDF。

RDF Schema中的类类似于面向对象编程语言中的类,允许资源作为类的实例和类的子类来定义。下面是一个简单的RDFS实例,演示了类之间的关系:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0"?>
<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://www.animals.fake/animals#">

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

<rdfs:Class rdf:ID="horse">
<rdfs:subClassOf rdf:resource="#animal"/>
</rdfs:Class>

</rdf:RDF>

在这个例子中,我们定义了两个类:animal和horse。horse类是animal类的子类,这意味着所有的horse实例也都是animal实例。这种继承关系允许我们在RDFS中建立层次化的类结构,以便更好地组织和描述数据。


都柏林核心元数据倡议(Dublin Core Metadata Initiative,DCMI)提供了一些预定义属性,用于描述文档的元数据。这些属性可以用于描述资源的各个方面,例如内容、创建者、日期等。

其有一些常用的都柏林核心属性及其定义,包括Contributor、Coverage、Creator、Format、Date等。

通过使用这些属性,我们可以在RDF文档中描述资源的不同方面。下面是一个使用了都柏林核心属性的RDF实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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/">

<rdf:Description rdf:about="http://www.runoob.com">
<dc:description>Run Noob - 奔跑吧!菜鸟</dc:description>
<dc:publisher>Refsnes Data as</dc:publisher>
<dc:date>2008-09-01</dc:date>
<dc:type>Web Development</dc:type>
<dc:format>text/html</dc:format>
<dc:language>en</dc:language>
</rdf:Description>

</rdf:RDF>

在这个例子中,我们使用了dc命名空间来引用都柏林核心属性。rdf:Description元素表示一个资源,它的rdf:about属性指定了资源的唯一标识符。然后,我们使用了dc属性来描述资源的各个方面,如描述、发布者、日期、类型、格式和语言。