首页产品库评测行情新闻|手机数码笔记本台式机DIY硬件数字家庭数码相机办公外设|软件下载游戏开发|社区

更多

数码相机
MP4
LCD
机箱
音箱

软件资讯设计 工具 系统 开发 安全 办公 陶吧 IT教育 Vista频道 | 下载中心酷我音乐盒 腾讯QQ
天极网 > 开发频道>DB2 的 pureXML 特性与 Ruby on Rails

DB2 的 pureXML 特性与 Ruby on Rails

2007-12-13 10:36作者:John Chun出处:论坛整理责任编辑:方舟

  Web 2.0 时代的新需求

  本系列的第 1 部分引入了订阅特性,让用户能够订阅感兴趣的主题。当订阅的主题出现更新时,用户会收到电子邮件通知。多么古老的方式,似乎还停留在 20 世纪。在这个 Web 2.0 时代,一些用户可能希望在阅读器中以 RSS 或 Atom 提要形式接收这些通知。

  可以使用 DB2 9 pureXML 生成这样的提要,用户可以在提要阅读器中方便地查看这些。我们使用 SQL/XML XML 发布函数来实现这个特性。XML 发布函数用来构造 XML 节点和文档。关系数据和 XML 数据都是可以使用的。

  注:发布函数有时候也称为构造器函数。

  DB2 9 中的 XML 发布函数包括:

  •   XMLNAMESPACES
  •   XMLELEMENT
  •   XMLATTRIBUTE
  •   XMLFOREST
  •   XMLDOCUMENT
  •   XMLCONCAT
  •   XMLCOMMENT
  •   XMLPI
  •   XMLTEXT

  我们来提供一个 Atom 提要,当订阅的主题发生更新时,它会通知用户。尽管我们选用 Atom 提要,但是 DB2 同样能够生成 RSS 提要。这仅仅是选用哪种提要 XML 模式来构造提要的问题。

  清单 22. Atom 提要存储过程

CREATE PROCEDURE GET_ATOM_FEED (  )
  DYNAMIC RESULT SETS 1
------------------------------------------------------------------------
-- SQL Stored Procedure
------------------------------------------------------------------------
P1: BEGIN
  -- Declare cursor
  DECLARE cursor1 CURSOR WITH RETURN FOR
    SELECT XMLSERIALIZE(
      XMLDOCUMENT(
        XMLELEMENT (NAME "feed",
          XMLNAMESPACES(DEFAULT 'http://www.w3.org/2005/Atom'),
          XMLCONCAT (
            XMLELEMENT (NAME "id", 'http://localhost:3000/documents'),
            XMLELEMENT (NAME "title", 'Teamroom Documents'),
            XMLELEMENT (NAME "updated", CURRENT TIMESTAMP),
            XMLELEMENT (NAME "link",
                        XMLATTRIBUTES('http://localhost:3000/documents/atom_feed'
                        as "href", 'self' as "rel")),
            XMLELEMENT (NAME "author",
              XMLCONCAT(
                XMLELEMENT (NAME "name", 'TeamRoom'),
                XMLELEMENT (NAME "email", 'teamroom@developerWorks.ibm.com')
              )
            ),
            XMLAGG (
              XMLELEMENT (NAME "entry",
                XMLCONCAT (
                    XMLELEMENT (NAME "title", name),
                    XMLELEMENT (NAME "id", 'http://localhost:3000/documents/show/'
                               || CHAR(id)),
                    XMLELEMENT (NAME "updated", updated_at),
                    XMLELEMENT (NAME "link", 'http://localhost:3000/documents/show/'
                               || CHAR(id)),
                    XMLELEMENT (NAME "category", category),
                    XMLELEMENT (NAME "summary", content_type),
                    XMLELEMENT (NAME "content", XMLATTRIBUTES('text' as "type"), content)
                )
              )
            )
          )
        )
      )
      AS CLOB INCLUDING XMLDECLARATION
    )
      FROM (SELECT d.id as id, d.name as name, d.content_type as content_type,
            d.updated_at as updated_at, s.name as category, s.description as content
          FROM DOCUMENTS d, SUBJECTS s
          WHERE d.subject_id = s.id
          ORDER BY d.updated_at DESC
          FETCH FIRST 10 ROWS ONLY)
      AS doc_list;
     
  -- Cursor left open for client application
  OPEN cursor1;
END P1 

  我们选择以存储过程的形式提供这个功能,这样 Rails 开发人员就不需要为生成 Atom 提要的细节操心。开发人员只需调用这个存储过程即可。

  清单 23. 调用 Atom 提要存储过程

class Document < ActiveRecord::Base
  [...]
  def atom_feed
    feed = Document.find_by_sql("call teamroom.get_atom_feed()")
    content = feed[0].attributes["1"]
    send_data(content,
              :filename => 'TeamRoomFeed.atom',
              :type => 'text/xml',
              :disposition => "inline")
  end
  [...]
end 

  对 DB2 XML 发布函数和 Atom Syndication Format Protocol 的全面讨论超出了本文的范围。更多的信息请参考 参考资料 一节中的链接。另外,本文提供的应用程序下载包包含 Atom 提要的完整实现,包括用来生成 feed 的存储过程和应用程序代码。

  结束语

  DB2 的 pureXML 功能可以将 XML 数据存储为其固有的层次化格式,这使应用程序能够轻松地使用 XML 语言,同时保持 DB2 关系数据库管理系统提供的性能、可伸缩性、可靠性和可用性优势。再加上 Ruby on Rails 框架的简单性和灵活性,开发人员就可以快速轻松地构建、部署和维护高质量的 Web 2.0 应用程序。这两种技术的组合非常灵活,可以根据业务的需要将信息从关系格式转换为层次化格式。在转换数据格式的同时,仍然能够保持出色的性能(因为使用了同样的优化技术),而且可以应用 DB2 提供的所有其他可靠性和可用性特性:比如备份、恢复和可伸缩性。

  DB2 pureXML 不仅支持基本的本地 XML 支持,还可以以节点级粒度在硬盘上存储解析后的数据,从而支持通过编制索引(实际文档节点位置)来提高查询性能,以及使用 DB2 查询引擎中内置的 XQuery 和 XPath 原语。这使它非常适合在 Ruby on Rails 运行时中使用,因为 Ruby on Rails 提供了一组非常出色的 XML 库(例如 REXML 和 ROXML),可以快速地将 XML 数据存储与 Web 应用程序集成起来。

共7页。 上一页1234567
进入 最权威的Windows 7论坛 查看网友讨论

软件频道最新更新

热点推荐

IT嘉年华

编辑推荐

软件下载

热门
推荐

网友关注

软件
资料
游戏

装机推荐

文章排行

本周
本月
最新更新
天极服务|关于我们|About us|网站律师|RSS订阅|友情合作|加入我们|天极动态|网站地图|意见反馈|MSN/QQ上看天极
Copyright (C) 1999-2012 Yesky.com, All Rights Reserved 版权所有 天极网络