IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Lotus  >

利用 RSS Feed Generator 数据库为 Domino 8 Web 服务构建 RSS 提要

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

罗 运鹏 (luoyp@cn.ibm.com), 软件工程师, IBM 中国软件开发中心

2007 年 9 月 21 日

本文介绍如何在最新的 Domino 8 服务器端利用 RSS Feed Generator 数据库方便的为现有的 Domino Web 服务构建 RSS 提要。以及如何为 Domino Web Access Mail 构建 RSS/Atom 提要,另外还简单介绍了如何在新的 Notes 8 客户端中订阅这些频道。

RSS 作为一种通知内容更新的方法,在现在得到越来越多的普及。Weblog 用户,新闻出版商以及许多个人和商业 Web 站点都支持这种格式。RSS 已经成为 Internet 上联合内容和元数据的事实上的标准。在新的 IBM Lotus Notes/Domino 8 中,服务器端提供了一个新的工具 RSS Feed Generator 数据库,能够为现有的 Domino Web 服务以及用户邮箱快速构建 RSS 提要。以前,为了发布 RSS 数据,一个设计者必须建立一个页面或者表单用来显示用户自定义的专门被设计用来发布 XML 的视图。设计者必须至少熟悉 Domino Web 设计、RSS XML 模式、RFC-822 类型数据才能建立一个可以使用的提要,这将使得设计者的工作变得复杂。现在利用 RSS Feed Generator 数据库可以很容易的建立 RSS XML 并将其和 Domino Server 上的数据映射起来。本文将探讨如何使用该数据库发布 RSS 提要。

在 Notes 8 新的客户端中集成了 RSS 阅读器,用来帮助您发现和组织感兴趣的频道列表。本文将介绍如何订阅在 Domino Server 上发布的频道列表。

另外 Domino Web Access 为 Notes 用户提供了基于浏览器的访问,可以访问 Notes 邮件、Notes 日历和日程安排功能,本文将介绍一种简单的方法为 DWA 用户的邮箱构建 RSS/Atom 提要。

RSS 概述

RSS 是 Internet 上联合内容和元数据的一种格式,是利用 XML 把一个网站的内容发送给其他网站。通常用于共享标题和到新闻文章的链接。RSS 的含义是"Really Simple Syndication",它基于 XML 语言,并符合万维网联盟(World Wide Web Consortium,W3C)Web 站上发布的 XML 1.0 规范。RSS 将网站的内容从表示层分离出来,网站提供 RSS 服务,用户通过 RSS 阅读器订阅自己感兴趣的新闻和其他内容,就像定制自己要阅读的报纸一样。它使得用户不需要在网站上的所有文章中挑选,而是让各个主题的文章自己“送到门口”,减少多余信息,例如广告的骚扰,并使读者能读到最新的按照主题或行业分类的新闻。清单 1 显示一个示例 RSS 2.0 提要:


清单 1. 示例 RSS 2.0 提要
                
<?xml version="1.0"?>
<rss version="2.0">
   
    <channel>
        <title>RSS Title</title>
        <link>http://samplewebsite.com/</link>
        <description>RSS Description</description>
        <language>en-us</language>
        <pubDate>Mon, 03 Jan 2007 12:00:00 GMT</pubDate>
     
        <item>
            <title>An Article Title</title>
            <link>http://samplewebsite.com/articleurl.html</link>
            <description>The description of this article.</description>
        </item>
     
    </channel>
</rss>

RSS 文件由一个 <channel> 元素及其子元素组成。除了频道内容本身之外,<channel> 还以项的形式包含表示频道元数据的元素 —— 比如 <title>、<link> 和 <description>。项通常是频道的主要部分,包含经常变化的内容。项通常是提要中最重要的部分。每个项都可以关于某个 weblog、完整文档、或者任何希望与频道联合的内容的记录。频道中的其他元素可能不变,但项经常发生变化。

每个项元素 <item> 通常包含三个元素:

  • <title>: 这是项的名称,在标准应用中被转换成 HTML 中的标题。
  • <link>: 这是该项的 URL。title 通常作为一个链接,指向包含在 <link> 元素中的 URL。
  • <description>: 通常作为 link 中所指向的 URL 的摘要或者补充。

更多 RSS 2.0 相关规范请参见 参考资源





回页首


Atom 1.0 概述

Atom 可以看作是对 RSS 2.0 进一步改进的协议,是一种重要的内容发布和管理新标准。由 Internet Engineering Task Force(IETF)开发,他们希望创建一种普遍采用的规范,用来描述一种健壮、灵活、一致的内容模型,该模型能够支持普通文本、不严格的 HTML、结构良好的 XHTML、任意的 XML、base-64 编码的二进制内容,等等。它的目地是提供更多的对 Weblog、在线日志、Wiki、播客以及类似需求的支持。由于不考虑使用非标准的名称空间扩展以及已实现的不一致的名称空间扩展,RSS 只能处理普通文本和不严格的 HTML 内容。

相比较 RSS 2.0,Atom 有很多加强的地方。例如,Atom 使用了与 ISO-8601 和 XML Schema 兼容的时间戳,它的类 HTML 的动态可扩展链接机制可以将提要(feed)或记录(entry)链接到外部资源。另外, Atom 定义了 author 元素,这是一个复杂结构,包括姓名、邮件地址以及与作者有某种联系的资源标识符(比如作者主页的 URL)。提要(feed)或记录(entry)可以有多个 author 元素,或多个 contributor 元素。

类似的扩展还有很多,更多关于 Atom 1.0 规范的介绍,读者可以参见 参考资源





回页首


应用 RSS Feed Generator 数据库构建 RSS 提要

RSS Feed Generator 数据库包含一组代理和脚本库,可以用来为 Domino 中的数据库视图生成 RSS 提要。这些数据库可以包括:

  • 用户数据库中的邮件,日历和联系人条目
  • 公有联系人
  • 讨论库

RSS Feed Generator 数据库有三个主要作用:

  • 将 Domino 数据库中的域映射到 RSS XML 元素
  • 生成 RSS 提要
  • 同步,发布 RSS 提要

RSS Feed Generator 数据库是由 Domino 服务器上的 rss_generator.ntf 模板创建,该数据库必须建立在 Domino 服务器上,并且该数据库只能访问同在该服务器上的别的数据库并为它们产生 RSS 提要。如果希望 RSS 提要能被任何人访问到,那么在 RSS Feed Generator 数据库中的 ACL 中必须包含有 Anonymous 并为其赋予读者权限,并禁用 Domino Web 服务的会话验证。

当用户通过浏览器打开 RSS Feed Generator 数据库时,将被自动导向到一个“Available Feeds”的页面,该页面用来发布所有的列在 RSS Feed Definition 视图中的 RSS 提要。

视图“External Web documents”用来收集和发布 Web 类型的文档并作为 RSS 提要。举例来说,开发者可能需要利用这个来收集重要的文档,例如公司人力资源的个人文档,公司的策略等等,那些不会出现在 Domino 某个应用中的视图里面的文档。

下面将通过一个实际例子来介绍如何针对一个 Domino 的应用来构建 RSS 提要,以及如何利用 Notes 8 中的阅读器功能来订阅这些提要。

首先,在 Domino 服务器上利用模板 discsw7.ntf 建立一个讨论数据库 discussion.nsf,修改 discussion.nsf 的 ACL,赋予 Anonymous 为读者权限。在其 All Documents 视图中建立几个文档,这个视图将在稍后被映射到 RSS 提要中,每次视图中文档的变化会在用户订阅该频道的 RSS 阅读器中得到体现。

利用 Domino 服务器上的 rss_generator.ntf 建立一个 RSS Feed Generator 数据库 rss.nsf,为使得其中的代理能够正常的在服务器端执行,需要在 Domino Administrator 里将 rss.nsf 的所有设计元素用在 Server 端有执行代理权限的用户签名。接着,打开 rss.nsf,在 RSS Feed Definitions 视图中,建立一个 RSS New Feed 文档,如 图 1:


图 1. RSS Feed Generator 数据库
图 1. RSS Feed Generator 数据库

然后先选择将要被用来发布成 RSS 频道的数据库 discussion.nsf,并指定所要映射的视图,该例中选择 All Documents 视图,如 图 2:


图 2. 选择数据库和视图
图 2. 选择数据库和视图

其中各字段的含义如下:

  • Database Type

    选择用来创建RSS提要的数据库类型(包括用户邮件数据库和普通数据库两种类型,数据库类型的不同将决定提要不同的表现形式。例如,如果选择用户邮件数据库,那么每次用户登录时候,该提要将指向当前用户的邮箱,并且用户名将出现在提要名里面)

  • Database

    选择需要创建提要的数据库

  • View

    选择提要将要对应的数据的视图

下一步,配置 RSS 频道本身的信息,如 图 3:


图 3. 选择数据库和视图
图 3. 选择数据库和视图

各字段分别表示:

  • <title>:频道或提要的名称;
  • <description>:简要介绍该频道是做什么的;
  • <language>:语言默认选择 English;
  • <encoding>:编码选择默认值 UTF-8;

另外,可以对 RSS 频道做进一步的设置,这是可选的:


图 4. RSS 频道其他设置
图 4. RSS 频道其他设置
  • A. Number of entries to be emitted:指定在 RSS 频道中会列出的提要数目
  • B. Convert Domino names to RFC-822 email address:是否需要将 Domino 格式的用户名(例如,John Doe/West/Acme)转换成标准的 internet 邮件地址(例如,johndoe@acme.com)
  • C. Add additional tag libraries:可以增加另外的名称空间
  • D. Treat this view as an ordered list?: 是否为当前的视图指定规则。如果指定这项,那么不符合规则的项将不会显示。一个最常见的例子就是指定十本销量最好的书。
  • E. Additional XML to describe the RSS feed (view):在此可以增加用户自定义的 RSS XML 信息,例如,作为播客生产者,您可能需要在这里加入 <enclosure> 标签,用来发布音频和视频文件。

因为我们需要将 Discussion.nsf 中的 All Document 视图发布出来,我们还需要继续针对频道中的每一项 <Item>,也就是对应于视图中的每个条目的属性进行定义。定义如图:


图 5. 定义频道项属性
图 5. 定义频道项属性
  • <title> :定义项的名称,在标准应用中被转换成 HTML 的标题。用户可以通过 Columns 按钮选择视图中的某个列值作为 title,也可以通过 Keyword 按钮选择某个预定义好的函数作为值。这里指定为 Subject,是将讨论库中的文档的 Subject 域作为 <title> 显示出来。类型指定为 Text。
  • <author>:采用默认值,指定 <author> 标签为文档作者。
  • <pubDate>:定义项的发布日期对应于文档的最后修改日期。
  • <Link>:这是该项的 URL。采用默认值,链接将指向该新闻项对应的文档的网络地址。

另外还可以指定针对每个新闻项的可选项目,可以按照用户的需要增加多个。此处增加了一个 <description> 标签,用来指向文档的 body 域。<description> 通常作为 link 中所指向的 URL 的摘要或者补充。该定义如 图 6:


图 6. 定义项附加属性
图 6. 定义项附加属性

开发者还可以在这里创建 iCalendar 或 vCard 对象,以 <enclosure> 的方式定义,<enclosure> 的 URL 指向 iCalendar 或 vCard 对象,这对针对通讯录或者日历的 RSS 频道将有用处。

到此,该提要已经完成,保存退出。通过浏览器访问该 RSS Feed Generator 数据库。用户将被定向到 Available Feeds 的页面(可以在 RSS Feed Generator 数据库中的 Set Global Options 中定义此页面的属性),刚才创建的提要会显示在此处:


图 7. 获得 RSS 链接
图 7. 获得 RSS 链接

打开此链接,会显示该 RSS Feed 的 XML 文件,代码如下:

 <?xml version="1.0" encoding="UTF-8" ?> 
<rss version="2.0" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005">
<channel>
    <title>
        <![CDATA[ discussion  : All Documents   ]]> 
    </title>
    <link>http://9.186.127.160:80/rss/discussion.nsf/
        8178B1C14B1E9B6B8525624F0062FE9F/</link> 
    <description>
        <![CDATA[  Discussion db description   ]]> 
    </description>
    <language>en</language> 
    <pubDate>Tue, 24 Jul 2007 08:31:38 GMT</pubDate> 
  
    <item>
        <guid>notes://9.186.127.160/rss/discussion.nsf/8178B1C14B1E9B6B8525624F0062FE9F/
            8B00CB8C9D35B38A48257320005F6A49</guid> 
        <link>http://9.186.127.160:80/rss/discussion.nsf/8178B1C14B1E9B6B8525624F0062FE9F/
            8B00CB8C9D35B38A48257320005F6A49</link> 
        <pubDate>Sun, 22 Jul 2007 18:51:47 GMT</pubDate> 
        <title>
            <![CDATA[ 2007-07 Meeting Agenda  ]]> 
        </title>
        <author>
            <![CDATA[ admin/org8  ]]> 
        </author>
        <description>
            <![CDATA[ Content of 2007-07 Agenda.  ]]> 
        </description>
    </item>
  
    <item>
        <guid>notes://9.186.127.160/rss/discussion.nsf/8178B1C14B1E9B6B8525624F0062FE9F/
            F7B0C8949BEDA7CD48257320005E4D96</guid> 
        <link>http://9.186.127.160:80/rss/discussion.nsf/8178B1C14B1E9B6B8525624F0062FE9F/
            F7B0C8949BEDA7CD48257320005E4D96</link> 
        <pubDate>Sun, 22 Jul 2007 18:51:55 GMT</pubDate> 
        <title>
            <![CDATA[ 2007-06 Meeting Agenda  ]]> 
        </title>
        <author>
            <![CDATA[ admin/org8  ]]> 
        </author>
        <description>
            <![CDATA[ Content of 2007-06 Agenda.  ]]> 
        </description>
    </item>
</channel>
</rss>
 

从代码中可以看到在 RSS Feed 文档中定义的数据都显示在了 XML 文件中。其中代码含有两个 <item> 项,是因为 discussion.nsf 的 All Documents 视图中现在有两个文档。其中每一项对应一个文档,<link> 指向文档的 Internet 地址,<title> 为文档的 subject 域显示的信息。<description> 为文档中的 body 域的信息。

到此为止,该提要就创建好了。用户可以将此 XML 链接加入到自己的 Domino Web 服务中,方便用户订阅关于 Discussion.nsf 的频道新闻。用户的 RSS 阅读器就可以随时查阅 Discussion.nsf 中的新增文档了。





回页首


Notes 8 中订阅 RSS 频道

Lotus Notes 8 中集成了 RSS 阅读器,可以用此阅读器订阅刚刚创建好的 Discussion 频道:

在 Lotus Notes 8 右边的 Feeds 栏目中,点 Subscribe to Feed 按钮,将 RSS Feed XML 的链接拷贝到对话框里面:


图 8. 订阅 RSS 频道
图 8. 订阅 RSS 频道

再下一步,定义 Feed 的名称,检查频道更新的频率和保留此频道的时间。


图 9. 频道更新频率
图 9. 频道更新频率

点确定后,该频道将被加入到 Lotus Notes 8 客户端。频道显示了两栏,对应了 Discussion.nsf 中的两个文档,单击其中一个会显示其标题和摘要。如图 10:


图 10. 阅读 RSS 频道
图 10. 阅读 RSS 频道

用户通过 Lotus Notes 8 的 RSS 阅读器就可以随时了解 Discussion.nsf 中的更新了,点 Open 按钮会通过浏览器打开实际库中的文档了。此例中,将通过 Notes 8 内嵌的浏览器打开 Discussion.nsf 中的文档,如 图 11:


图 11. 浏览频道详细内容
图 11. 浏览频道详细内容

至此,该频道就订阅好了。





回页首


为 Domino Web Access 用户构建 RSS 和 Atom 提要

Domino Web Access 用户可以为他们的邮箱的收件夹加入 RSS 或者 Atom 提要,只需要在 Domino Server 的 Notes.ini 文件中加入:

iNotes_WA_Feeds=atom,rss  (指定产生 rss 还是 atom 提要,或者两个都产生)
iNotes_WA_FeedsSecured=0  (允许匿名用户访问该 Feed)

更多的配置可以参考 Lotus Domino Administrator 8 Help,更改生效后,可以看到在用户的 DWA 邮箱中有一个 RSS 的图标,用户就可以通过图标的链接订阅该邮箱的频道了。


图 12. Domino Web Access Mail 邮箱
图 12. Domino Web Access Mail 邮箱




回页首


结束语

本文介绍了如何在最新的 Domino 8 服务器端利用 RSS Reed Generator 数据库为现有的 Domino 服务构建 RSS 提要,它简化了开发者开发,发布 RSS 的步骤,并提供了更多的扩展。更多的相关信息请参阅参考资料。



参考资料

学习

讨论


关于作者

罗运鹏,IBM 中国软件开发中心软件工程师,从事 IBM Lotus Notes/Domino 及其扩展产品的测试工作,对自动测试,Notes 开发及其相关技术有一定了解。您可以通过 luoyp@cn.ibm.com 和他联系。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?




回页首


IBM,Lotus,Lotus Notes 是国际商业机器公司在美国和/或其他国家的注册商标。 其他公司、产品或服务的名称可能是其他公司的商标或服务标志。

IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款