软件频道>程序开发>JavaVBVCDelphiC/C++Web开发微软专栏移动数据库程序人生软件工程|开发客
您现在的位置: 天极网 > 开发频道 > DB2 的 pureXML 特性与 Ruby on Rails
全文

DB2 的 pureXML 特性与 Ruby on Rails

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

  除了基本的 CRUD 操作之外,还可以利用 XQuery 语言的功能非常精确地控制如何执行查询以及如何返回数据。例如,尽管获得客户所在的城市的列表是有意义的,但是市场营销部门更希望知道哪些类别的产品最畅销。这可以使市场营销活动更有针对性,不必将市场营销活动的预算分散在所有产品上。度量产品是否畅销的一种方法是,检查最近的销售是否是在某一产品类别中发生的,或者在特定的时间段内这些类别的产品是否畅销。

  为了进行数据挖掘,我们首先问一个问题:在 2007 年 4 月 15 日到 2007 年 4 月 30 日之间,客户购买了哪些类别的产品?

  为了回答市场营销部门的这个问题,使用清单 16 所示的查询:

  清单 16. 获得 4 月 15 日到 4 月 30 日之间的产品类别销售的 XQuery

XQUERY
declare default element namespace "http://www.ibm.com/developerworks";
<categories>
  { let $categories := fn:distinct-values(
      for $c in db2-fn:xmlcolumn( "XML_CONTENTS.DATA")/marketinfo/sales/customer
          where xs:date($c/last_purchase) >  xs:date("2007-04-15")
            and xs:date($c/last_purchase) <= xs:date("2007-04-30")
         return $c/categories/category/@type)
      for $c in $categories
         return <category>{$c}</category>
  }
</categories> 

  与前面的示例相似,我们要返回一个有效的 XML 文档,所以将 XQuery 的结果封装在 XML 根元素 中。这个 XQuery 分为两个部分。首先,一个 “let” 语句将一个表达式与变量 $categories 绑定在一起。然后,将这个变量用作 for 语句的上下文。我们来分别分析这些语句。

  “let” 语句本身由一个 FLWOR(for、let、where、order by 和 return) XQuery 表达式组成。您可能会注意到,FLWOR 表达式常常相当于 SQL 中的 SELECT-FROM-WHERE 块。然后,循环遍历每个客户:for $c in db2-fn:xmlcolumn("XML_CONTENTS.DATA") /marketinfo/sales/customer,条件是购买日期晚于 2007 年 4 月 15 日,并早于 2007 年 4 月 30 日。如果购买满足这个条件,市场营销部门就想知道这次购买的情况:where xs:date($c/last_purchase) > xs:date("2007-04-15") and xs:date($c/last_purchase) <= xs:date("2007-04-30")。

  对于这些购买,我们返回存储为 XML 属性的类别类型:$c/categories/category/@type。与前一个示例一样,使用 fn:distinct-values() 函数避免重复出现同一类别中的购买。将这个类别列表绑定到变量 $categories。

  现在,$categories 存储着一系列不重复的类别,但是因为我们希望返回 XML,所以将序列中的每个值封装在 XML 元素中。最终的输出与清单 17 相似,输出执行了过滤操作,只包含 4 月 15 日到 4 月 30 日之间的购买。

  清单 17. 4 月 15 日到 4 月 30 日之间发生购买的产品类别的数据示例

 <categories>
  <category>Home</category>
  <category>Electronics</category>
  <category>Apparel</category>
  <category>Gifts & Flowers</category>
  <category>Baby</category>
</categories>
  
  这个 XQuery 可以进行参数化,这样就能够在市场营销部门感兴趣的任何时间范围上执行查询。另外,为了封装这个查询,可以将该功能放在一个存储过程中,这样就可以为 Rails 开发人员提取 XQuery 细节。

  在下面的图 3 中,文档列表视图(/app/views/documents/list.rhtml)布局还包含预构建的报告表单,可以用来执行 XQuery 和 XPath 搜索。

  图 3. Team Room 文档存储库和预构建的市场营销报告

  Team Room 文档存储库

相关搜索:
关注此文读者还看过
热门关注
特别推荐
文章排行
本周
本月
最近更新
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 渝ICP证B2-20030003号
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众