XUL教程:RDF数据源

来源:岁月联盟 编辑:zhuzhu 时间:2008-12-30

  以下是对原文的翻译:

  在这一节,我们来搜索一下Mozilla中还有哪些数据源,并学习如果使用自定义的RDF文件来作为数据源。

  更多的Mozilla数据源(Other Mozilla Datasources)

  Mozilla提供了很多数据源,所有的这些数据源的工作方式和书签数据源都是很相似的,只是字段不同而已。下面通过一些实例展示了其中的几个。

  历史记录(The History List)

  历史记录数据源可以让用户访问网页的浏览历史记录列表,在这个列表中包含用户最近访问的网页的地址。可以通过rdf:history来访问这个数据 源里的数据。下面的表格表明这个数据源里具体有哪些资源(或者称为字段)可以供我们使用。在需要使用的地方,调用下面的URL地址,就可以获取相应的值。

Date http://home.netscape.com/NC-rdf#Date 最后访问日期 Name http://home.netscape.com/NC-rdf#Name 网页标题 Page http://home.netscape.com/NC-rdf#Page 网页名称 Referrer http://home.netscape.com/NC-rdf#Referrer 来源地址 URL http://home.netscape.com/NC-rdf#URL 网页URL Visit Count http://home.netscape.com/NC-rdf#VisitCount 访问数

  一个典型的历史记录通常会采用树型结构来显示,你只需把button或者treecell的label特性设置为相应的URL地址就可以。你可以将 ref特性的值设置为NC:HistoryRoot,也可以设置为NC:HistoryByDate,这样就可以按日期排序了。

  让我们来看一个显示历史记录的完整例子,在这个例子中,我们将在树型结构中显示三个字段:Name、Page和Date。

  实例9.4.1: 下载源代码

<tree flex="1" datasources="rdf:history" ref="NC:HistoryRoot">
<treecols>
<treecol id="name" label="Name" flex="1"/>
<treecol id="url" label="URL" flex="1"/>
<treecol id="date" label="Date" flex="1"/>
</treecols>
<template>
<rule>
 <treechildren>
  <treeitem uri="rdf:*">
   <treerow>
    <treecell label="rdf:http://home.netscape.com/NC-rdf#Name"/>
    <treecell label="rdf:http://home.netscape.com/NC-rdf#URL"/>
    <treecell label="rdf:http://home.netscape.com/NC-rdf#Date"/>
   </treerow>
  </treeitem>
 </treechildren>
</rule>
</template>
</tree>
其他数据源(Other Datasources)

  下面列表列出了一些其他的Mozilla数据源,你可以根据需要直接使用这些数据源。

  书签数据源(rdf:bookmarks): 书签数据源对应的是用户的书签列表。

   资源列表 Added Date http://home.netscape.com/NC-rdf#BookmarkAddDate 书签的添加日期 Description http://home.netscape.com/NC-rdf#Description 书签的说明 Last Modified http://home.netscape.com/WEB-rdf#LastModifiedDate 最后修改日期 Last Visited http://home.netscape.com/WEB-rdf#LastVisitDate 最后访问日期 Name http://home.netscape.com/NC-rdf#Name 书签名称 Shortcut URL http://home.netscape.com/NC-rdf#ShortcutURL 关键字 URL http://home.netscape.com/NC-rdf#URL 书签URL

  可以使用的书签类型

NC:BookmarksRoot 书签分层结构的最顶层 NC:IEFavoritesRoot 对应于IE的书签列表 NC:PersonalToolbarFolder 对应于自定义工具栏目录

  文件(rdf:files): 对应于用户的文件视图。

   资源 Name http://home.netscape.com/NC-rdf#Name Name of the file URL http://home.netscape.com/NC-rdf#URL URL of the file

  可能会使用的根节点

NC:FilesRoot 文件数据源的最顶级,用于显示驱动器列表 文件路径 使用一个目录作为ref特性的值,就可以返回这个目录下的所有文件。比如可以指定file:///windows或者files:///usr/local等。

  文件数据源是一个典型的按需加载数据源,所有的数据只有在需要的时候才会加载。实际上,我们也不需要这个数据源的数据在使用之前就加载,相反,我们需要只有在树型结构中实际显示数据的时候才去加载数据源里对应的文件列表。

  综合数据源(Composite Datasources)

  你可以像下面的例子一样,在datasources特性中定义多个数据源,每个数据源之间用空格符分割。这样就可以从所有声明的数据源中读取数据。

<tree datasources="rdf:bookmarks rdf:history animals.rdf"
ref="NC:BookmarksRoot">

  在这个例子中,会从书签、历史记录和animals.rdf文件三个来源读取数据。这三个数据源被组合到一个综合数据源中,使用起来和一个数据源没有任何差别。

  特殊数据源rdf:null代表什么都不做,如果你要在脚本中动态设置数据源,而又不想设置一个默认数据源或者不知道数据源的确切地址时,就可以把datasources特性设置为rdf:null。

  自定义RDF数据源(Custom RDF Datasources)

  你可以根据需要使用上面提到过的内部数据源,内部数据源还有一些其他的,比如邮件列表、地址簿和搜索结果等。但可能所有的内部数据源都不满足你的需 要,你需要将自己的数据储存在一个RDF文件中。这个文件可以是本地的,也可以在远程的服务器中,只需要在datasources特性中设置RDF对应的 URL地址就可以。

  使用RDF文件作为数据源,在功能上和内部数据源是相同的。你可以使用规则来匹配特别类型的内容。rule元素上的特性只要和数据源文件中的Description元素相匹配就会获取数据。你还可以建立分层结构的RDF数据文件。

  下面的例子展示了怎样使用RDF文件作为数据源,RDF文件真的很大,没有列在这里,但你可以在这两个链接查看:文本格式代码 实际的RDF数据源

  实例 9.4.2: 源代码 预览执行结果

<tree flex="1" width="200" height="200"
   datasources="animals.rdf" ref="http://www.some-fictitious-zoo.com/all-animals">
<treecols>
<treecol id="name" label="Name" primary="true" flex="1"/>
<treecol id="species" label="Species" flex="1"/>
</treecols>
<template>
<rule>
 <treechildren>
  <treeitem uri="rdf:*">
   <treerow>
    <treecell label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
    <treecell label="rdf:http://www.some-fictitious-zoo.com/rdf#species"/>
   </treerow>
  </treeitem>
 </treechildren>
</rule>
</template>
</tree>

XUL教程 - 9.4 - RDF数据源

  在这个例子中,数据是通过文件中的数据源加载的。ref特性对应于RDF文件里seq元素。运行结果展示的是一个动物的列表。只要我们有需要,可以 把ref特性的值设置为其他数据源中根元素的about特性值,这样就可以返回我们需要的数据。比如要只显示所有的回复,我们只需要把ref的值设置为“http://www.some-fictitious-zoo.com/reptiles”。

  下面的例子展示了需要使用RDF数据源中的特定部分数据时,应该怎样设置ref特性的值。

  实例 9.4.3: 源代码 预览执行结果

<window
 id="example-window"
 title="History List"
 xmlns:ANIMALS="http://www.some-fictitious-zoo.com/rdf#"
 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<button label="Click here to see the mammals the zoo has" type="menu"
    datasources="animals.rdf" ref="http://www.some-fictitious-zoo.com/mammals">
<template>
<rule ANIMALS:specimens="0"></rule>
<rule>
 <menupopup>
  <menuitem uri="rdf:*" label="rdf:http://www.some-fictitious-zoo.com/rdf#name"/>
 </menupopup>
</rule>
</template>
</button>
</window>

  在这个例子中,我们只想加载哺乳动物的数据,所以我们指定了哺乳动物列表的URI地址。在这里,ref特性的值被设置为“http://www.some-fictitious-zoo.com/mammals”,也就是对应于RDF文件里其中一个seq元素,这样最后只会返回这个seq元素的子元素。

  在这里使用了两条规则。第一条规则捕获所有拥有ANIMALS:specimens特 性,并且该特性的值等于0的资源。在RDF文件中,每个description元素都包含这个特性,而其中的一些设置这个特性的值为0,而等于0的这些资 源就会根据规则一而被匹配。但规则一并没有包含任何内容,所以就算匹配也不会显示出来什么。我们通常使用这个技巧来隐藏那些我们不想显示的数据。

  第二条规则用来匹配剩下的那些资源,并在弹出菜单中增加一个菜单项。最后的效果就是我们生成了一个弹出菜单,而菜单项的内容对应于所有specime不是0的哺乳动物。

  译者注:

  本文是XUL教程第九章的第四节,文章的内容已经很古老了,比如例子中都是以Mozilla浏览器为基础讲的,而Mozilla已经停止开发了,但是大部分对于Firefox来说还是一样的。