软件频道>程序开发>JavaVBVCDelphiC/C++Web开发微软专栏移动数据库程序人生软件工程|开发客
您现在的位置: 天极网 > 开发频道 > 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页。 首页 上一页 3 4 5 6 7
相关搜索:
关注此文读者还看过
热门关注
特别推荐
文章排行
本周
本月
最近更新
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 渝ICP证B2-20030003号
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众