NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:321587
用户头像

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

关注

评论

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

策略分析:Atlassian Server版停止支持,Server版用户应该转向数据中心版本还是云版?

龙智—DevSecOps解决方案

SNZ资本的首席信息官Gavin确认出席Hack .Summit() 2024香港开发者大会!

TechubNews

实时交互数字人源码独立部署,你了解多少?

青否数字人

数字人

喜讯 | 思码逸Devinsight 入选中国信通院《高质量数字化转型产品及服务全景图》

思码逸研发效能

即时通讯技术文集(第34期):IM群聊技术合集(Part1) [共15篇]

JackJiang

网络编程 即时通讯 IM

追踪Jira中项目成本与工时,更符合国人使用习惯——TimeWise工时管理

龙智—DevSecOps解决方案

DevOps DevSecOps Atlassian

PTS 3.0:开启智能化的压测瓶颈分析

阿里巴巴云原生

阿里云 云原生 压测

访问串是什么?有什么作用?

行云管家

运维 IT运维 访问串

以解析csv数据为例,讨论string、char[]、stream 不同类型来源是否能进行高性能读取解析封装可能性

八苦-瞿昙

C#

在本地运行 LLMs 的 6 种方法

SEAL安全

人工智能 开源 LLMs

测试开发名企定向培养训练营,手把手带你提升核心竞争力!

测试人

软件测试 自动化测试 测试开发

用“AI产业顾问”写企业分析报告,五天工作10分钟搞定!

飞桨PaddlePaddle

百度 BAIDU 百度飞桨 文心大模型 文心大模型4.0

手机厂商的开年大考:卷AI,还是卷MR?

Alter

MR 大模型 AI手机

区块链游戏解说:什么是 Arcade Champion

Footprint Analytics

EMQX Enterprise 5.5 发布:新增 Elasticsearch 数据集成

EMQ映云科技

mqtt mqtt broker

跨端轻量JavaScript引擎的实现与探索

京东零售技术

JavaScript

Supermicro 通过新基础设施解决方案,加速 5G 和电信云工作负载性能

财见

通过解析库探究函数式抽象代价 ( ini 解析示例补充)

八苦-瞿昙

C#

亚马逊云科技为派拓网络打造数字安全平台产品组合

财见

鸿蒙移动开发加速器何处寻?

Geek_2305a8

破防了,谁懂啊家人们:记一次mysql问题排查

阿里技术

MySQL 索引 问题排查 表结构

活动回顾 | DevData Talks沙龙深圳站:中小到千人规模团队研发效能提升实践

思码逸研发效能

Udemy 上最受欢迎的免费编程课程

秃头小帅oi

php 学习 React 课程 java

蜗牛游戏宣布利用AI技术提升其开发流程

财见

AI数字人克隆系统源码实现数字人24小时直播带货!

青否数字人

数字人

云平台纳管是什么意思?用什么工具比较好?

行云管家

云计算 云服务 云平台 云管平台 云管理

致 Tapdata 全体用户:2023 年,我们把更多精力集中到了产品能力和稳定性上

tapdata

数据库

密码学在 Web3 钱包中的应用:私钥是什么?bitget钱包为例

威廉META

通过解析库探究函数式抽象代价

八苦-瞿昙

C#

客户案例 | 思码逸DevInsight帮助企业提炼关键指标,建立研发效能体系

思码逸研发效能

【论文精读】| 综述:模糊测试的艺术、科学和工程(上)

云起无垠

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