本章我们关注与RDF (资源描述框架).
资源描述框架
我们可以使用 tree 元素呈现数据集,就像书签和邮件管理器一样。然而这样却使向 XUL 文件中直接添加数据变得很不方便。直接在XUL文件中修改书签变得十分困难。这就需要RDF 数据结构。
RDF (资源描述框架)是一种用于储存像书签或邮件这样的资源的格式。其他形式的数据可以被编码为RDF,也可以有RDF创建其他形式的数据。这是 Mozilla 处理像书签、邮件、历史等的方法。Mozilla 为这些常用的数据提供了数据源,使我们很容易使用他们。
你可以使用任意的RDF数据源来填充树结构,或者仅把RDF指向一个存有数据的XML文件。这使得显示含有许多行的树变得非常容易。RDF 也可以填充其他的 XUL 元素比如列表及菜单,见下一章。
这里是关于RDF的一个非常简略的概述,希望看到更为详尽的内容请访问XULPlanet上的 Introduction to the RDF Model。如果你刚刚接触RDF请继续向下阅读。
更多信息参见 RDF specification.
RDF/XML
RDF 包含这数据的图表示形式。 RDF/XML 时一种用于表示RDF数据的XML语言。它包含非常简单的元素集,下面的例子显示一个简单的RDF模板。
<?xml version="1.0"?> <RDF:RDF xmlns:RDF="https://www.w3.org/1999/02/22-rdf-syntax-ns#"> ... </RDF:RDF>
与XUL头有些相似,
元素被 window
RDF
元素代替。同样为RDF定义了名空间,在RDF元素中将填充一些数据。可以在Mozilla文件夹中找到一些 RDF/XML 文件的例子,他们以rdf作为后缀。
RDF 数据库
让我们来以有RDF产生的书签列表为例。书签列表包含一系列记录,每项记录都有一系列数据相关联,比如书签标题,URL,访问日期等。
把书签当作数据库来考虑,这个数据库是一个含有多个域的表格。这个列表需要分级,因为我们需要利用文件夹来分组书签。每一个域都来源与RDF数据库,都由名字相关联。名字用URI描述。
例如Mozilla书签列表的名字的RUI描述如下:
Name | https://home.netscape.com/NC-rdf#Name | Bookmark name |
URL | https://home.netscape.com/NC-rdf#URL | URL to link to |
Description | https://home.netscape.com/NC-rdf#Description | Bookmark description |
Last Visited | https://home.netscape.com/WEB-rdf#LastVisitDate | Date of last visit |
这些是按照名空间加域名构造的。下一章,我们利用它来自动填充数据域。注意访问日期的名空间与其他的不同。
RDF/XML 文件样例
下面是一个RDF/XML文件,有三条记录和三个域。
<RDF:RDF xmlns:RDF="https://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ANIMALS="https://www.some-fictitious-zoo.com/rdf#"> <RDF:Seq about="https://www.some-fictitious-zoo.com/all-animals"> <RDF:li> <RDF:Description about="https://www.some-fictitious-zoo.com/mammals/lion"> <ANIMALS:name>Lion</ANIMALS:name> <ANIMALS:species>Panthera leo</ANIMALS:species> <ANIMALS:class>Mammal</ANIMALS:class> </RDF:Description> </RDF:li> <RDF:li> <RDF:Description about="https://www.some-fictitious-zoo.com/arachnids/tarantula"> <ANIMALS:name>Tarantula</ANIMALS:name> <ANIMALS:species>Avicularia avicularia</ANIMALS:species> <ANIMALS:class>Arachnid</ANIMALS:class> </RDF:Description> </RDF:li> <RDF:li> <RDF:Description about="https://www.some-fictitious-zoo.com/mammals/hippopotamus"> <ANIMALS:name>Hippopotamus</ANIMALS:name> <ANIMALS:species>Hippopotamus amphibius</ANIMALS:species> <ANIMALS:class>Mammal</ANIMALS:class> </RDF:Description> </RDF:li> </RDF:Seq> </RDF:RDF>
对每一种动物使用一条记录描述。每一个 RDF:Description
标签描述一条记录。每条记录定义了三个域:name
, species
,class
。虽然没有必要让每一条记录拥有相同的域,但是最好如此。
三个域都在 ANIMALS
名空间下, ANIMALS名空间在
RDF标签中定义。选择这个名字是因为它的意思,但完全可以选择其他名字。这里的名空间定义是有用的,因为如果使用样式表
class
域可能发生冲突。
Seq
和 li
元素在列表中区分每一条记录,与HTML 列表中的定义很相似。 Seq
指明记录是有序的紧挨着的,对于无序内容使用 Bag
标签, Alt 用于指明其中的记录只能选择其一
(如映射 URL)。
在XUL文件中可以通过名空间和域名来引用其中的数据,在上例中,下面的URI描述其中的数据域:
Name | https://www.some-fictitious-zoo.com/rdf#name |
Species | https://www.some-fictitious-zoo.com/rdf#species |
Class | https://www.some-fictitious-zoo.com/rdf#class |
记下来,看看如何使用RDF来填充XUL数据。