XUL_教程/RDF介绍

3 位贡献者:

 

 

    本章我们关注与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="http://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 http://home.netscape.com/NC-rdf#Name Bookmark name
URL http://home.netscape.com/NC-rdf#URL URL to link to
Description http://home.netscape.com/NC-rdf#Description Bookmark description
Last Visited http://home.netscape.com/WEB-rdf#LastVisitDate Date of last visit

    这些是按照名空间加域名构造的。下一章,我们利用它来自动填充数据域。注意访问日期的名空间与其他的不同。

RDF/XML 文件样例

    下面是一个RDF/XML文件,有三条记录和三个域。

<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:ANIMALS="http://www.some-fictitious-zoo.com/rdf#">

  <RDF:Seq about="http://www.some-fictitious-zoo.com/all-animals">
    <RDF:li>
       <RDF:Description about="http://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="http://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="http://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 标签描述一条记录。每条记录定义了三个域:namespeciesclass。虽然没有必要让每一条记录拥有相同的域,但是最好如此。

    三个域都在 ANIMALS名空间下, ANIMALS名空间在RDF标签中定义。选择这个名字是因为它的意思,但完全可以选择其他名字。这里的名空间定义是有用的,因为如果使用样式表class 域可能发生冲突。

     Seqli 元素在列表中区分每一条记录,与HTML 列表中的定义很相似。 Seq 指明记录是有序的紧挨着的,对于无序内容使用 Bag 标签, Alt 用于指明其中的记录只能选择其一(如映射 URL)。

    在XUL文件中可以通过名空间和域名来引用其中的数据,在上例中,下面的URI描述其中的数据域:

Name http://www.some-fictitious-zoo.com/rdf#name
Species http://www.some-fictitious-zoo.com/rdf#species
Class http://www.some-fictitious-zoo.com/rdf#class

    记下来,看看如何使用RDF来填充XUL数据。

文档标签和贡献者

向此页面作出贡献: teoli, ziyunfei, alzhu
最后编辑者: teoli,