Java理论与实践:用XQuery举行屏幕堆积[Java编程]
本文“Java理论与实践:用XQuery举行屏幕堆积[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
上个月,Java 技术讲师 Sam Pullara 向我演示了他最新的支持 Java 的电 话 Nokia 6630.这个手机利用了全面的技术 —— 嵌入式 JVM、GPRS 和蓝牙, 但是它也遭受了全部智妙手机都苦恼的问题 —— 有限的屏幕实际利用区.有些 Web 站点支持基于手机的浏览器,并且嵌入式浏览器也试图在小小的屏幕上有效 地渲染页面,但是,在电话屏幕上查看典型的 Web 页面,就像要把一头大象强 行塞进车后座一样(此中的每个参与者城市感到绝望,包含您、车和大象). Sam 构建了一个简单的、文雅的办理筹划,从他喜好的 Web 站点上对数据举行 屏幕汇集,然后把数据重新格局化,在小屏幕上显示.
新办法
从 HTML 文档提取数据的办法有很多种,但是我真的很喜好 Sam 采取的办法 :既把 XQuery 当作屏幕汇集工具(从页面中提取相当的数据),又把它当作样 式表工具(重新格局化数据,以便数据适应页面,不需求举行页面转动).只要 少量底子设备和一些非常简单的 XQuery 表达式,便可以从大量数据源提取出相 关数据 —— 比方交通、天色和财政报价等,并在电话上无缺地显示数据.
我过去常常处于这种情形:对 HTML 页面举行屏幕汇集对某些特定问题来说 仿佛是可行的筹划,但是几近没有效于屏幕汇集的 Java 工具包.有很多 HTML 解析工具,但它们普通贫乏充足的抽象本领(把屏幕汇集代码弄得乱七八糟), 大量不符合 HTML 标准的利用限制了它们,它们也无法处理那些构造大概随时间 发生改变的、动态生成的页面.
为了补偿质量低下的 HTML 和丰富的 XML 处理工具之间的空白,首先要把 HTML 转换成 XML.很多工具有助于完成这项工作;JTidy 工具包做得很好,可 以使这项工作变得轻松一些.JTidy 的计划目标是读入典型质量(即很糟)的 HTML 并输出更整洁的后果(有选项可供挑选),它还供应了一个 DOM 接口,用 来遍历可以发送给 XML 解析器的 HTML 文档.清单 1 中的代码将从 InputStream 中读取 HTML 文档,并生成文档的 DOM 表示:
清单 1. 用 JTidy 把 HTML 转换成 XML 兼容的 DOM
Tidy tidy = new Tidy();
tidy.setQuiet(true);
tidy.setShowWarnings(false);
Document tidyDOM = tidy.parseDOM(inputStream, null);
用这个简单的转换,就差不多能把每个 Web 页面都当作 XML 文档举行处理 ,还能用自己喜好的任何 XML 工具(比方 SAX、XSL、XPath,等等)提取数据 .固然 XSL 大概是很明智的挑选(因为其计划目标就是为了从 XML 文档中提取 信息并转换这些信息,以便显示它们),但是假如不理解 XSL 的话,它的学习 曲线就很难掌握,即便是最简单的 XSL 转换也复杂得让人心烦.XPath 是处理 信息提取的一个好挑选 —— XSL 和 XQuery 都用它举行内容挑选,可以很简单 地利用 XPath 把需求的数据提取出来,然后对 HTML 举行格局化,但是 XQuery 会让这项工具越发简单.
XQuery:简介
XQuery 的计划目标是从大概非常大的 XML 数据集合提取数据.输入的数据 集没必如果 XML 文档,固然它大概是 XML 文档,但是也大概是已经编入索引并保 存在 XML 数据库中的文档调集,乃至是一组关系数据库中的表.像 SQL 一样, XQuery 包含从多个数据集合提取数据、汇总数据、聚合数据和衔接数据的函数 .
就像 JSP、ASP 或 Velocity 这样的表示性模板语言一样,XQuery 把两个域 (表示域和计算域)中的元素组合成一种组合语法.后果,全部 XML 文档都自 动成为有效的 XQuery 表达式,并对自身举行评价.XQuery 还包含一些语言语 句(language statement),比方“for”和“let”,它们可以与 XML 元素混 合利用.
清单 2 显示了一个示例 XML 文档 bib.xml,它表示一个书目.然后我们将 介绍一些快速的 XQuery 表达式,让您对 XQuery 可以做什么形成一种熟习,最 后我们将再转到屏幕汇集的示例上.要全面介绍 XQuery 的语法和利用情形大概 要用几百页的篇幅,有关更具体的参考质料和示例,请参阅 参考资料 小节.
清单 2. 示例 XML 书目
<bib>
<book year="1994">
<title>TCP/IP Illustrated</title>
<author><last>Stevens</last><first>W.</firs t></author>
<publisher>Addison-Wesley</publisher>
<price> 65.95</price>
</book>
. . . more books . . .
</bib>
清单 3 显示了一个 XQuery 表达式,它挑选 Addison-Wesley 在 1991 年以 后出版的全部书籍,提取它们的标题,并把标题格局化成前面有项目标记的 (<ul>)列表.大括号表示从“表示情势”(数据直接传送到输出 ,例 如 <ul> 和 <li> 标签)到“代码情势”的切换;然后在 return 子句之后当即举行从“代码情势”到“表示情势”的隐式切换.
清单 3. 按照查询参数挑选图书标题的 XQuery 表达式
<ul>
{
for $b in doc("bib.xml")/bib/book
where $b/publisher = "Addison-Wesley" and $b/@year > 1991
return
<li>{ data($b/title) }</li>
}
</ul>
以上是“Java理论与实践:用XQuery举行屏幕堆积[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |