使用 RDF 管理 Mozilla 中的数据

ZDNet软件频道 时间:2004-11-16 作者:Builder.com |  我要评论()
本文关键词:opensource
Mozilla 提供了一些资源用于同 Internet 技术打交道。例如,通过 XBL 规范可以将 XML 数据绑定到 HTML 元素上;而且使用 XUL 规范可以控制 Mozilla 的用户界面(UI)。
本文译自Builder.com,未经许可请勿转载

Mozilla 提供了一些资源用于同 Internet 技术打交道。例如,通过 XBL 规范可以将 XML 数据绑定到 HTML 元素上;而且使用 XUL 规范可以控制 Mozilla 的用户界面(UI)。再进一步使用 XUL 规范,还可以从远程数据源提取 XML 数据到你的 XUL,从而使其可以根据你的数据更改或调整。通过资源描述框架(RDF,Resource Description Framework)可以实现这些功能。下面让我们看一下 RDF 数据模型并探讨一下它的好处。

RDF 是一个数据模型,主要用来描述 Internet 资源,比如 Web 页面以及 Web 页面之间相互关联的方式。你可以将 RDF 数据模型用作一个组织 Internet 资源的机制。例如,大多数浏览器都允许你组织一些书签到文件夹中。每个书签都是一个指向一个 Web 页面的指针,Web 页面是一种形式的 Internet 资源。其它资源包括电子邮件消息或者 Usenet 新闻组。有了 RDF,你就可以使用任意属性构建一个相关资源的层次结构。

RDF 还是一个可序列化(serialization)规范。也就是说 RDF 数据模型的部分可以通过网络进行序列化,而且在更多数据从远程服务到达时数据可以动态改变。这就是Smart mail 现在的工作方式。“收件箱(Inbox)”中的数据是一个指针,该指针指向一个包含更多 RDF 的 Internet 资源,而“Internet 资源(Internet resource)”是一个指向一个脚本的 URL。脚本自动产生序列化的 RDF,产生的 RDF 是基本的 XML。

下面是 Smart mail XML 的一个例子:

<rdf:RDF
    xmlns:rdf=http://www.w3.org/TR/WD-rdf-syntax#
    xmlns:sm="http://www.mozilla.org/smart-mail/schema#">
  <rdf:Description
    about="http://www.mozilla.org/smart-mail/get-mail.cgi?
user=username&folder=inbox">
    <sm:message id="1111111">
       <sm:recipient>
         John Doe jdoe@tempuri.com
       </sm:recipient>
       <sm:sender>
         Jane Doe jane.doe@termuri.org
       </sm:sender>
       <sm:received-by>mail.tempuri.com</sm:received-by>
       <sm:subject>Hello</sm:subject>
       <sm:body>
         http://www.mozilla.org/smart-mail/get-body.cgi?id=1111111
       </sm:body>
    </sm:message>
    . . .
  </rdf:Description>
</rdf:RDF>

在 Mozilla 接收到这个 XML 之后,RDF 引擎将 RDF 折叠到位于适当位置的一个图中。然后,实现显示功能的三个控件接收到开始为最新消息画一些图标的通知。

为了能够在你的代码中使用 RDF 功能,Mozilla 提供了nsIRDFService 接口。GetDataSource() 方法允许你创建一个常驻内存的数据源,你的代码将对这个数据源进行操作。这个数据源可以是由一个特殊的以“rdf”开头的 URI 所指定的内建数据源(比如书签),也可以是由 URL 指定的一个远程数据源。

GetDataSource() 方法返回一个nsIRDFDataSource 对象。有了这个对象,就可以通过QueryInterface() 方法获取nsIRDFRemoteDataSource 对象。nsIRDFRemoteDataSource 对象允许你通过 loaded属性检查数据是否被装载(基于 URL 的远程文件是异步装载的)。你还可以通过Refresh() 方法刷新基础数据。

最后,你可以使用Flush() 方法更新基础数据。“file:”URL写到文件中,而“http:”URL则通过一个 HTTP-POST 将信息发送回服务器。为了让一个更加事件驱动化的方法去异步数据,你可以为nsIRDFXMLSink 接口指定一个观察器(observer)。这个 observer 对象是一个事件集合。这些事件包括onAssert、onUnassert、onChange 和 onMove。

你可能还想要查看这些 RDF 实践的例子,并于在 Mozilla 中使用 RDF 规范方面有所提高。


本文作者:Phillip Perkins 的经验从机器控制、客户端服务器编程延伸到企业内部网应用程序。


责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134