QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

IBM WebSphere 7 添加 XPath 2.0,XSLT2.0 和 XQuery 1.0 支持

  • 2010-01-07
  • 本文字数:4315 字

    阅读完需:约 14 分钟

IBM 的 WebSphere 功能包是可选择的安装产品扩展,为应用服务器提供了新功能。IBM最近发布的 XML 功能包为应用开发者提供了对最新生效的的 W3C XML 标准集的支持:

  • XQuery 1.0: 新引入的查询和函数式编程语言,为查询 XML 数据集合而设计。它使用 XPath 表达式语法来访问一个 XML 文档的特定部分,并且有“FOR,LET,WHERE,ORDER BY 和 RETURN”表达式作为补充。通常缩写为"FLWOR"的这些表达式可以被用于以类似 SQL 的方式执行跨多个 XML 流的连接。
  • XPath****2.0: 一个用于 XML 文档的表达式语言。一个 XPath 表达式的结果通常是从输入文档选择出的节点或者是原子值。XPath 2.0 现在是 XQuery 1.0 的一个子集。XPath 1.0 到 XPath 2.0 最引人注意的一个改变是引入了更加丰富的类型系统:每个值现在都是一个序列,一个单一的值将被视为长度为 1 的序列。XPath 2.0 支持“模式认知”,意味着树的元素有类型注解,可以用于 XPath 导航。 一个解析器必须为内建的类型比如字符串,数字,日期等等提供模式认知。作为可选项,也有可能支持用户自定义类型,这将极大的简化所要求的表达式。例如,一个因特网邮件服务公司可能有一个 XML 文档,内容是与客户订单挂钩的记帐地址与投递地址。如果两个地址域都有一个公共的 AddressType,表达式 **//element(*, tns:AddressType)/postalCode** 将会返回两个地址的邮编。XPath 同时还提供强大的功能扩展集和操作符。新的功能包括用于模式匹配的正则表达式语法,新的日期函数比如当前日期,还有新的算术函数比如 floor,ceiling 和 round。新的操作符包括 intersect 和 except。
  • XSLT 2.0:一种用于将 XML 转换为一种新 XML 格式,或其它的表示格式,比如 HTML,XHTML 或 SVG 的编程语言。如 XQuery 1.0 一样,XSLT 2.0 也使用 XPath 2.0 作为路径解析语言。XSLT 2.0 加入了一系列的功能,包括 grouping——从一个单一的输入文档输出多个结果的能务,以及在 XSLT 中定义可以被 XPath 调用的函数的能力。 因此一个 XPath 2.0 解析器或者 XSLT 解析器可能会是“模式认知”的。这样将会带来许多优势,比如在 XSLT 转换前可以检验输入树,并且可以检验输出树以合格证 XSLT 转换产生正确的结果。 你可以可以为变量指明数据类型,输入参数,来自函数的返回值,用户自定义函数以及模板。XSLT 继续成为转换 XML 数据的主流选择,而 XQuery 有望成为查询 XML 文档的标准。由于 XQuery 与 XSLT 2.0 两者都使用 XPath 2.0 作为路径解析语言,XQuery 对于 XPath 2.0 的扩展对于 XSLT 开发者来说就无关了。

为了寻求该功能包的更多细节,InfoQ 采访了它的首席架构师,Andrew Spyker:

InfoQ:XML 显而已见已成为在企业计算中广泛应用的格式。你能给我们提供一些例子,哪一类型的应用中这些标准的新功能有可能会引起特别注意?

XML 已在企业计算中非常流行的前提下,要讨论能用到这一功能包的每一个场景将非常困难。因此,下面要提到的并不是所有——而只是作个说明。 查询和表示来自于 XML 源数据的应用。例如,博客 feed,评论以及与 feed 相关的分析。你可以考虑这样一个应用,它挖掘你所有的博客,查找有问题的评论内容,再将这些信息表示为 web 表格的形式,允许你调查其趋势并将特定的评论者标记为不受欢迎的。不断发展下去,你会选择将这一列表存储在数据库里,这样就可以先行一步判定不受欢迎的评论。由于这一场景里所有的输入源都是 XML 和 XHTML(XSLT 2.0 里新支持的序列化格式) 可以方便地被用于 web 展示,使用基于 XML 的编程模型再自然不过。在功能包里有一个示例应用就演示了这一点。

使用业界标准模式的应用。几乎每个垂直行业都要与业界标准模式打交道,并且许多企业都扩展了这些模式来定制自己的业务。在过去,使用 XPath 1.0(并且依赖于 XSLT 1.0),XML 运行时不知道模式知识。这意味着如果你查找所有 PurchaseOrder 类型的数据元素,你必须在你的搜索中硬编码每一个可能吻合的名字。即使最好的情况下这也会带来代码维护的困难,而最坏的情况当企业扩展现有类型而引入新类型时,脆弱的代码就会失效。而在 XPath 2.0 (以及相关的 XSLT 2.0 和 XQurey 1.0 中),你可以在查询中根据类型搜索。

使用 XPath 1.0 和 XSLT 1.0 的应用。这似乎是显而易见的,但也值得单独提出来。XPath 2.0 和 XSLT 2.0 考虑了业界使用 7 年以来积累的经验。新功能提供了许多新的功能性场景 (一些例子是:多种语言的比对支持以及 XSLT 2.0 的多输出),这些之前是不可能做到的。 同时,这些能力还加入了对模式的支持,而这些模式用 XSLT 1.0 表达则过于复杂 (例如,grouping 的支持),这些支持将会使得代码减少,易于维护并会比以前执行得更好——因为现在是运行时提供支持而不是在运行时之上编码。

跨多个数据源查询数据的应用。尽管一些原生支持 XML 的数据库有时也支持 XQuery(DB2 pureXML 即是一例),但在中间件级别支持 XQuery 可以允许在这些 XML 数据库与数据库之外的 XML 存储之间进行连接。 一个例子是一个批处理文件,处理一个 XML 数据库的数据,并通过调用 Web 2.0 API 来丰富数据,然后将其存储到另一个数据库。 该 XML 功能包通过一个可以在服务器 JVM 环境之外的标准 Java SE 应用瘦客户端来支持这一场景,只要它以支持应用服务器功能的方式被使用。

如我之前所说,有很多可能的应用场景。所有可能的应用只局限于企业所存储的 XML 数据或文档——而这是非常巨大的。

InfoQ: XSLT 2 和 XQuery 1 这样的语言处理 XML 相比 Java DOM 模型在多核或者云计算的环境里有什么优势呢?

使用如 XML 功能包所支持的声明式 (vs. 命令式) 的以 XML 为中心 (vs. 以语言为中心) 的语言主要有两大方面的优势。 首先,声明式编程询问用户他们想要做什么事。这与命令式编程是相反的 (例如,操作 DOM 或 JAXB API 的 Java 代码),询问的是用户想要如何实现他们想做的事。Declarative programming leads to smaller, 声明式编程带来的是可适应快速变更的更精简,更易维护的代码。它同时还支持用户向 XML 运行时表达他们的兴趣,或者是他们想要如何查询或转换数据,这种方式运行时可以进行优化,而如果用户直接告诉运行时具体怎样执行则无法做到优化。这一区别在多核及云计算的环境下非常重要,你可以想像得到,优化不仅仅能认出可以单核 CPU 下执行更出色的模式,在多 CPU 或跨虚拟环境的条件下也能出色的执行。 还有,因为 XSLT 和 XQuery 是函数式并且无副作用,你可以完全安全地执行这样的优化——而在命令式语言里使用典型的编程 API 是无法做到这一点的。另外,我个人相信,从长远来看,高级的声明式语言会更加迎合云计算,因为它们比那些假设特定运行时环境的低级语言可移植性更强。

第二点,以 XML 为中心 (vs. Java 或 C#等其它语言),就是将 XML 类型系统作为核心类型系统。 将 XML 类型系统映射为原生语言的类型系统有两方面的劣势。首先,有一个 XML 保真性的问题。将 XML 映射为对象表示十分困难,稍不注意就有可能造成信息的丢失。像 JAXB2.0 这样的 API 处理这类问题非常棒,但到最后映射成一个完美的无损的 XML 表示,对比纯 XML 模型并不见得有什么好。 其次,因为我们转换了类型系统或转换成 DOM 模型,我们加入了显著的性能开销。本质上这意味着数据拷贝,这在中间件是十分昂贵的操作应当予以避免。而以其原生的表示使用 XML 数据,我们可以保证没有数据丢失而且性能最优。鉴于 XML 作为业务与企业间的数据交换格式如此流行,拥有这两个益处是十分重要的。

我应该说明我们理解人们不会将现有的应用全盘转变成 XML 编程模型。 因此,我们允许以一种简单的方式来将现有的 Java 数据和逻辑添加到 XML 运行时的执行。这一扩展是通过同一个一致的 API 来完成的,而不管使用的是哪一种 XML 语言。这一一致性是重要的,它统一了跨三种语言的编程体验,并且支持数据可以从 XQuery 1.0 到 XSLT 2.0 有效的流水。 我们同时还设计了 API,以保证这一技术简单高效的多线程服务器应用。 之前的 XML API 是为客户端环境而设计的,相对于支持高效多线程编码而言更倾向于单一调用的简洁性。我们的 API 为所有的共享对象加入了线程安全,使得为服务器运用编程更加自然高效。

InfoQ:就操作 XML 而言,W3C 标准与微软的 LINQ 相较而言如何?

一个关键的区别在于 XML 功能包实现的是公开制定的 W3C XML 处理标准。有着这样的一个标准作为根基,组织和开发者就可以更好的跨该标准的多种具体实现而利用这种一致的 XML 编程模型技术和工具。

InfoQ: 该功能包相对于 Michael Kay 的 Saxon 实现有什么优势?

先让我首先解释一下我观察到的所有来自业界的反馈——Saxon 是非常优秀的 XPath 2.0,XSLT 2.0 以及 XQuery 1.0 实现。同时,Michael Kay 与来自 IBM 和其它公司的贡献者一道,在驱动 XML 的 W3C 标准化方面作了许多工作。 Saxon 及 XML 功能包都是实现的相同的标准集。所以从编程模型的角度来看这里保持了一种一致性。从运维的角度,WebSphere 客户可以得到一个背后有 IBM 支持的 XML 实现,他们现有的 WebSphere Application Server V7 权利范围内的测试及支持也将得到保证。 就像我们上面所谈到的一样,我们可以看到许多客户想要在 WebSphere 之上实现基于 XML 的解决方案的应用场景。意识到这一点,我们想要以这样一种形式来提供支持这些标准的新功能,那就是我们的客户不管是现在还是将来都可以信赖它们。

InfoQ:你觉得什么时候我们可以看到这些技术能够融入 Java 平台而得以标准化?到那时你的实现将会怎样呢?

目前,Java 通过 JAXP 支持 XPath 1.0 和 XSLT 1.0,但不支持 XPath 2.0 和 XSLT 2.0。同时,还有一个支持 XQuery 1.0 的 JSR 叫作 XQJ。今后我们应当考虑在 Java 中实现普遍化的 XQuery。 个人而言,我比较担忧面向连接的 XQJ API 以及用户要多大的需要去学习多种 API(JAXP 和 XQJ) 来运用 XML 标准。 Java 平台正逐渐变得更加应变,这也是业界对它的要求,因此基于业界的支持和用户的需求我期待着这些标准能够被吸纳进该平台。IBM 将会继续驱动 XML 的 Java 标准化过程,为用户创造价值。 如果 Java 平台的进展到可以处理 XPath 2.0,XSLT 2.0 以及 XQuery 1.0,我们的实现仍可以保留。目前 IBM 的 JVM 也是用的自己的 XPath 1.0 和 XSLT 1.0 实现。IBM 有这样的历史,在支持 Java 标准的同时,JVM 的 XML 部分还提供高效的,可靠的,功能性的附加值。这些改进将会持续为整个 WebSphere 系列产品在 XML 处理,web 服务和 SOA 等方面提供有力支持。

更多关于 WebSphere XML 功能包的信息可以在 WebSphere 社区博客上找到。那里有初始指南,其中包括了安装指引,也可移步 YouTube观看

查看英文原文: IBM Adds Support for XPath 2.0, XSLT 2.0 and XQuery 1.0 to WebSphere 7

2010-01-07 21:321776
用户头像

发布了 133 篇内容, 共 39.3 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

鸿蒙开发实例 | 可复用列表项的ListContainer

TiAmo

华为 华为云 12月月更

架构实战营 1-6 学生管理云平台实战随堂测验

西山薄凉

「架构实战营」

MMM互助系统开发智能合约部署

薇電13242772558

dapp

mysql优化之 performance Schema常用查询sql

@下一站

MySQL 优化 12月日更 12月月更

积分盲盒商城系统开发方案(成熟定制技术)

I8O28578624

4.如何做好架构设计

程序员小张

「架构实战营」

AngularJS进阶(二十四)AngularJS与单选框及多选框的双向动态绑定

No Silver Bullet

AngularJS 12月月更 单选 多选

CDH+Kylin三部曲之一:准备工作

程序员欣宸

大数据 kylin 12月月更

CorelDRAW2023中文版专业矢量软件更新介绍

茶色酒

CorelDRAW 2022 CorelDraw2023 CorelDraw

如何用 7 分钟击破 Serverless 落地难点?

Serverless Devs

DQMIS 2022第六届数据质量管理国际峰会议程新鲜出炉

数据质量管理智库

大数据 数据 数据治理 数据安全 隐私计算

浅谈 Apache Flume 数据接入的实现原理以及问题分析处理方式

移动云大数据

flume

工作中常用的设计模式--策略模式

lpe234

Java 后端 设计模式 策略模式 spring-boot

MetaTown:一个可以自己构建数字资产的平台

华为云开发者联盟

区块链 华为云 12 月 PK 榜 数字资产平台

底层逻辑-理解Go语言的本质

面向加薪学习

golang go语言 源代码 golang 面试 Go源代码

会议报道 | 第二届百家医院单细胞中心联盟年度峰会圆满落幕

联营汇聚

理解DALL·E 2, Stable Diffusion和 Midjourney的工作原理

Baihai IDP

人工智能 AI 工具 AIGC 文转图

火山引擎DataTester:一个爆款游戏产品,是如何用A/B测试打磨出来的?

字节跳动数据平台

大数据 游戏 AB testing实战 12 月 PK 榜

DTALK直播预约 | 12月8日开播:后疫情时代,制造企业如何实现数字化转型?

袋鼠云数栈

数字化转型

源码解析:Dubbo3 的 Spring 适配原理与初始化流程

Apache Dubbo

Java 开源 微服务 dubbo

架构实战营 - 微信业务架构图 & “学生管理系统”毕设架构设计

huiwen

架构实战营

AngularJS进阶(二十二)实现时间选择插件

No Silver Bullet

AngularJS 12月月更 AngularJS时间插件

TDengine3.0:解决高基数问题的时序数据库设计思路

TDengine

数据库 tdengine 时序数据库

AngularJS进阶(二十五)requirejs + angular + angular-route 浅谈HTML5单页面架构

No Silver Bullet

AngularJS 12月月更 requirejs angular-route

2023最新版EasyRecovery软件下载安装教程

茶色酒

EasyRecovery EasyRecovery15 easyrecovery2023

EasyRecovery2023不要钱的硬盘数据恢复工具

茶色酒

EasyRecovery EasyRecovery15 easyrecovery2023

LED透明屏在夜晚经济有怎样的发展机遇

Dylan

LED LED显示屏

华为云低代码技术:让矿区管理“智变”,一览无遗

华为云开发者联盟

云计算 低代码 华为云 12 月 PK 榜

踩坑之旅:配置 ROS 环境

eng八戒

机器人 ROS 移动机器人 机器人开发

喜讯!YMatrix 当选新能源汽车国家大数据联盟理事单位

YMatrix 超融合数据库

数据库 新能源汽车 新能源 超融合数据库 YMatrix

Meta Force佛萨奇2.0元宇宙项目系统开发技术讲解方案

I8O28578624

IBM WebSphere 7添加XPath 2.0,XSLT2.0和XQuery 1.0支持_Java_Charles Humble_InfoQ精选文章