使用 XQuery 开发 mashup(一)

日期: 2007-12-09 作者:Ning Yan 来源:TechTarget中国

  今天的 Web 开发人员和架构师能够开发出具有更好用户体验的动态 Web 应用程序。改变 Web 应用程序框架的范型带来了一些挑战。了解如何在创建 mashup 示例应用程序的过程中利用 XQuery 有效地应对这些挑战。

  Web 2.0 应用程序为用户提供了更动态的体验,常常使用 Asynchronous JavaScript and XML (Ajax)。加载了 HTML 主文档之后,可以使用 Ajax 更新 Web 内容而不需要刷新整个网页。使用 Ajax,可以把 Web 内容看作是能够随时推出的数据片段。此外,客户端 JavaScript 过程能够自己格式化数据,无论普通文本、XML、JavaScript Object Notation (JSON) 对象还是 HTML 片段形式的数据。

  新的 Web 应用程序开发范型远远超出了传统的 “模型-视图-控制器(MVC)” 模型。不幸的是,很多 Ajax Web 应用程序框架,如 Direct Web Remoting (DWR) 和 JavaServer Faces (JSF) 都带来了一些挑战。尽管 Ajax 框架可以在很多方面简化应用程序开发,但框架的机制或多或少地控制着 Web 内容。很多现有的 Ajax 没有提供能够解决现实世界复杂性的统一解决方案,尤其是来自 XML 的数据集成和来自 RSS 提要的内容联合的要求越来越高。这些新的需求表明在服务器端需要高效的 Web 服务支持。

  为了利用这些变化的技术,可以创建 mashup 应用程序将 Web 内容与 XML 数据和 Web 服务结合起来。我将说明如何使用 XQuery(一种用于 Web 服务的很有前途的技术)和 XML 创建一个 mashup 应用程序。

  这个应用程序允许用户在当地所有图书馆组成的公共图书馆系统中搜索新书。每个图书馆中,管理员都定期购买新书,但不知道其他公共图书馆是否已经购买了这些书。这个应用程序通过 Web 服务发布和共享它存储的信息。应用程序从图书馆中汇集了所有的新书资料,为用户提供了搜索新书的功能。

  XQuery 来救援

  XQuery 是一种万维网联盟(W3C)标准,专门为从 XML 文档中提取信息而设计。它的 XML 处理能力和已有的面向对象编程模型如 Java™ 文档对象模型(DOM)API 相比有很多优势。

  简化服务器端 XML 处理

  可以通过 JavaScript 使用 DOM API 来解析 XML。但是,这并非意味着可以用 JavaScript 在客户端完成所有的 XML 处理。尤其是现在业务逻辑处理变得越来越复杂。如何平衡客户端和服务器端的 XML 处理是设计 Web 应用程序时要考虑的基本问题之一。XQuery 将复杂的业务逻辑留给了服务器端,这样做有很多好处。比方说,可以更全面地考虑安全问题,可以更容易地维护应用程序。此外,XQuery 函数还简化了整个开发过程。

  限制在网络上传输的内容

  设计 Web 应用程序时,必须考虑有多少内容在网络上传输以及传输的频率高还是低。对服务器的每次请求都会产生开销。应避免对每次按键或鼠标移动都发出异步调用。如果不能正确地使用服务器调用,很容易就会让不必要的网络流量和负荷使应用程序陷于困境。

  56K 的拨号网络传输 100KB 的 Web 内容需要 14 秒钟。XQuery 通过减少在网络上传输的内容提供了更好的用户体验。比如,为了限制 XML 内容的大小,可以在返回 XML 之前调用标准 XQuery 函数 string-length()。不过这个例子没有限制 XML 内容的大小,而是通过计算节点数把 XML 元素限制为 100 个 book 项。

  集成多个搜索字段

  有时候,Web 搜索使用多个项作为搜索条件。比如,这个示例应用程序为用户提供了三个选择。用户可以输入其中的一个字段或者多个字段组合(最多三个)。XQuery 函数与 XPath 表达式的结合为实现搜索需求提供了强大的搜索机制。

  不需要另外编程集成业务逻辑

  XQuery 是一种声明性语言。为了使用 XML 简化已有数据和服务的集成,它紧凑地封装了业务逻辑。查询输出可以采用用户定义的格式,这样不需要另外编程就能很容易地实现业务逻辑。

  示例应用程序

  图 1 显示了应用程序设计。服务器响应可以是客户要求的任何格式,包括 HTML 片段、XML、普通文本或者 JSON 对象。内嵌的 XQuery 根据动态搜索条件执行预定义的查询。在查询中定义业务逻辑和表示逻辑。XML 数据可以来自多个数据源,如文件系统、数据库或者表示 Representational State Transfer (REST) Web 服务的 URI。

  图 1. 示例应用程序体系结构

  嵌入 XQuery 引擎

  可以使用简单的 Java servlet 嵌入 XQuery 引擎。有很多 XQuery 引擎可供选择,既有厂商提供的也有开放源代码的。该应用程序使用开放源代码的 Saxon 8.7(如 清单 1 所示)。

  清单 1. 嵌入 Saxon XQuery 引擎

Configuration config = new Configuration();
staticQueryContext = new StaticQueryContext(config);
dynamicQueryContext = new DynamicQueryContext(config);

  收集 XML 数据和定义数据格式

  为了收集 XML 数据,需要考虑 XML 数据来自何处、是否需要使用文档类型定义(DTD)或模式、是否需要执行 XML 验证。该程序对 XML 数据格式使用了一个 DTD,并假定在 XQuery 处理之前所有的数据源都是对该 DTD 有效的 XML 文档。清单 2 给出了 XML 数据格式的一个例子。

  清单 2. 示例 XML 数据格式

<?xml version="1.0" encoding="UTF-8"? >
<!DOCTYPE library SYSTEM "dtd/book.dtd">
<booklist>
<book category="COOKING">
  <title lang="en">Everyday Italian</title>
  <authors>
   <author>Giada De Laurentiis</author>
  </authors>
  <isbn></isbn>
  <numberCopies>1</numberCopies>
  <status>On Shelf</status>
  <year>2005</year>
  <library>John C. Hart Library</library>
  <price>30.00</price>
</book>

</booklist>

  用业务逻辑定义 XQuery 查询

  在 XQuery 业务逻辑中,使用三个字段搜索图书,需要建立六种查询策略。此外,还需要考虑没有提供搜索参数的默认场景。与传统的 Web 应用程序框架不同,Xquery 很容易在查询文件中构造业务逻辑。如果需要可以在以后修改该文件,甚至不需要停止应用程序的运行。比方说,可以将查询改为查找最近三年中出版的新书。

  XML 数据可能有不同的来源,book_collection.xml 文件定义了一个 XML 数据集合。一个 XML 数据来源是这个应用程序本身:http://localhost:9080/bookinfor/newbooks_localhost.xml。测试该应用程序时,一定要将 Web 应用程序上下文根目录设置正确,如 bookinfor。清单 3 给出了一个 XML 数据集合。

  清单 3. XQuery 集合

<collection >
<doc href="newbooks_library_01.xml"/>
<doc href="newbooks_library_02.xml"/>
<doc href="newbooks_library_03.xml"/>
<doc href="newbooks_library_04.xml"/>
<doc href="http://localhost:9080/bookinfor/newbooks_localhost.xml"/>
</collection>

  设计 XQuery Web 应用程序时务必要考虑性能问题。在这里,我把搜索输出的阈值设为 100 本书。与传统的对象编程如 Java 相比,XQuery 实现业务逻辑不需要服务器端的开发。在处理大量 XML 数据时,可以把内嵌 XQuery 引擎与 IBM DB2 Viper 版结合起来,它能够处理大量 XML 内容,最高可达 2GB。清单 4 显示了 booklist_app.xql 文件中的应用程序业务逻辑。

 

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

作者

Ning Yan
Ning Yan

相关推荐

  • SAP收购CallidusCloud 与Salesforce竞争

    一直被称为后台办公巨头的SAP现在似乎也想在前台办公大展拳脚。 最新的迹象是SAP收购CallidusClou […]

  • API设计如龙生九子 各不相同

    IT咨询管理公司CA Technologies对API产业做了个问卷调查,问卷内容涉及API设计风格以及管理部署的新动向。调查结果表明,JSON与XML可谓两分天下。

  • 八个超实用的jQuery技巧攻略

    jQuery是JavaScript最好的库之一,主要用于制作动画、事件处理,支持Ajax及HTML脚本客户端。文中分享了8个超实用的jQuery代码技巧攻略,希望你会喜欢。

  • 从头开始实现领域驱动设计

    领域描述业务;它是驱动企业的概念和逻辑的集合。如果遵循领域驱动设计(DDD)这一本质,那么领域就是应用程序中最重要的组成部分。