级别: 初级 Elliotte Rusty Harold (elharo@metalab.unc.edu), 副教授, Polytechnic University
2007 年 2 月 06 日 十二月的第一个星期在马萨诸塞州的波士顿召开了一年一度的 IDEAlliance XML 研讨会。通过这次会议,新的标记诞生了,相关规范得到了论证,与会者还开怀畅饮了 Samuel Adams 酒。此次会议突出了几个主题,包括 XQuery、原生 XML 数据库、Atom Publishing Protocol、Web 2.0 以及从数据中提取隐式元数据。
上个月是 Web Editorial Review Board 的万维网联盟(World Wide Web Consortium,W3C)标准通用标记语言(Standard Generalized Markup Language,SGML)在 SGML 96 研讨会上公开发布第一版 Extensible Markup Language (XML) 1.0 的十周年纪念。1996 年 11 月,就在同一家宾馆,Tim Bray 从讲台上将打印好的 27 页 XML 规范扔向听众,27 页纸轻轻飘落下来;然后他说:“如果这是 SGML 规范,就应去掉前三行。”这不无道理。尽管直到今天 SGML 的应用依然存在,与会者在此次会议中也注意到了这一点,但 markup 社区已经迅速转向了 XML 技术而且从未回头。
此后的十年,IDEAlliance 的年度研讨仍按期举办,今年会议的题名为 XML 2006。它是北美主要的 XML 研讨会,也是还在如期举办的最大的纯 XML 的 展览会。不过,该领域中的大多数“玩家”基本没变,还是那些。在早些时候,确实有一些与会者(和一个主要演讲人)能够为像我这样仅从 XML 才发现了描述性标记的强大功能的人提供第一手报告。
本次研讨会规模小于往届(像所有其他研讨会一样,受 post-dotcom 的影响)—— 大约 400 名参会者。但是,曾多次参加过往届研讨会的与会者却一致认为本次会议是历年来最令人兴奋也是最活跃的 一次。尽管在本次会议中,三天时间内有四个会场在同时运转,演讲者的演讲时间也被限制为 400 秒(对于最不热门的主题)到 45 分钟(对于最热门的主题)之间,且并不担负演讲者的差旅费用,但是,提交给此次会议的论文或报告还是很多,其数量大概是会议时间所能容许的演讲数目的四倍,组委会不得不从中甄选。对于其中六个最为热门的论题,筛选的比率高达 10:1。似乎 XML 界又再度迅猛发展了。
除了终于从 post dot 的阴影中走了出来以及 Bubble 2.0 的可能扩展之外,还有其他一些因素使本次研讨会成为了自 90 年代末以来最吸引人的 XML 研讨会之一,这些因素包括:
XQuery
从 Roger Bamford 的开场演讲开始,XQuery 无疑就成为了展览会的主角,在其报告中,Roger Bamford 宣布了 FLWOR Foundation 及其在开发用 C++ 编写的开源 XQuery 引擎方面的新贡献。该引擎将位居各种存储引擎(包括 Oracle 的 Berkeley DB)之上。
本次研讨会至少进行了十二场有关 XQuery 的演讲,而去年只有三次。在研讨会召开的两个星期前,W3C XQuery and Extensible Stylesheet Language Transformation (XSLT) 工作小组(经多年的开发后)刚刚发布了八个建议提案,但这丝毫没有影响人们对 XQuery 的极大热忱。规范中的最后一些 bug 修正之后,最终的建议预计会在几星期内(而不是几月内)正式发布。但现在已经有不少大体上符合这些规范的实现了,在本次展会上就展出了其中的四个:IBM® DB2® 9、Oracle Database 10g Release2、Mark Logic 和 Data Direct XQuery。
星期三早上,Reed Elsevier 的 Darin McBeath 进行了题为 “Unleashing the Power of XML” 的演讲,其中他讲述了诸如 Oxford University Press、O'Reilly 甚至是 JetBlue 这样的出版商在其混合或纯 XML 数据库之上成功实现 XQuery 项目的许多案例。混合 XML 数据库是类似 DB2 和 Oracle 的数据库,它们既支持结构化查询语言(Structured Query Language,SQL),也支持 XQuery。原生 XML 数据库是类似 Mark Logic 的数据库,仅支持 XQuery。
我与展区内的一些数据库提供商进行了交谈,也参加了另外一些有关 XQuery 的演讲,以加深对它的理解。简单地说,混合数据库仍由关系表构成。但是,字段不局限于常见的 SQL 类型(如 INT 和 DATE)。还可以将它们声明为 XML 类型。XML 类型字段包含一个完整的、格式规范的抑或模式有效的文档(或者为空)。使用具有嵌入的 XQuery 子查询的 SQL 语句,可以选择、插入并更新 XML 值。例如,清单 1 中的代码会将 Extensible Hypertext Markup Language (XHTML) 格式的注释插入到注释表中。该表有两个字段,CHAR(16) 用户名和 XML 注释。
清单 1: 将 XML 插入到混合 SQL-XML 数据库中
INSERT INTO comments (username, comment)
VALUES ("FP",
"<div xmlns='http://www.w3.org/1999/xhtml' class='comment'>
<p>
The relational model rules <strong>supreme</strong>.
It can do anything an XML model can do. Unfortunately, no one's ever
listened to me and implemented a true relational database.
</p>
<p>
I will now go sulk in my corner until the world accepts Codd
and the <a href='http://www.itworld.com/nl/db_mgr/05072001/'>12 commandments</a>.
</p>
</div>"); |
数据库在进行插入操作之前解析 XML 数据并以某种方式加以存储,该方式应适于进行搜索和查询而无需在每次查询时重新解析数据。甚至可以在 XML 树的特定路径上定义索引来改善性能。
对于 SQL 来说,这个数据看起来像是一个 CLOB。但是 XQuery 表达式可以利用 XML 的结构。例如,清单 2 展示了从 comments 表提取 img 元素的查询。
清单 2: XQuery 选择
XQUERY
declare namespace html = "http://www.w3.org/1999/xhtml"
for $img in db2-fn:xmlcolumn('comments.comment')//html:img
return $img; |
该过程的一部分使用 XQuery 规范(JSR 225:XQuery API for Java)或 SQL/XML 进行了标准化。但仍有一些尚在开发中,尤其是更新和全文搜索功能。但是,很多部分是有意保留的因而没有指定。结果,大多数应用程序将会使用一些特定于提供商的代码。清单 2 使用了特定于 DB2 的函数 xmlcolumn 来查找正确的字段。
所有这些均从不
同的方面违背了关系模型。然而,当今,还没有任何一种主流产品数据库能够完全实现关系模型,追求纯粹的关系是不现实的。标准化也被抛到了脑后(因为通常在大型的数据库中,性能是主要关注点)。
尽管理念上有些杂乱,但这仍然是组织数据的一种极为有效的方式。特别地,出版以及(需要存储大型文档而不是小字段和未标记的字符串的)Web 应用程序更应当从该方法中获益。当前这种以 BLOB、CLOB 和 VARCHAR 格式存储已标记文本的策略还远不够自然或有效。将文档划分成可存储在单独记录中单独节点的做法更糟糕。允许将文档作为单一单元存储在记录中的某个字段中,同时仍允许使用 XQuery 对之进行搜索,这与大多数传统的 Web 出版应用程序的结构恰好相符。
编辑器
正如 Jon Bosak 在闭幕演讲中提到的,我们仍需要与叫嚣着要回到 SGML 技术时代(甚至更早的时代)的现象做斗争。这并不奇怪,很多这类问题都是技术问题伪装下的人为问题。
很多这类问题都围绕编辑器展开:用什么创建标记,以及如何创建?三个传统方法如下:
- 在 WYSIWYG 编辑器(例如 OpenOffice 或 Microsoft Word)中进行输入;然后将其转换为 XML。
- 在支持结构的 XML 编辑器(例如 <Oxygen/>)中进行输入。
- 在具有有限 XML 知识的编辑器(例如 emacs 或 BBEdit)中输入空白文本。
尽管第 3 种选择是我首选的方法(例如,它就是我撰写本文所采取的方式),但该方法有些太过简单,以至于不足以用来论证研讨会上的演讲的正确性,而且可能也不适合于并非专业的编程人员的终端用户。今年,Microsoft 的 Office Open XML Formats 和 OpenOffice 的 OpenDoc format (ODF) 之间的竞争焦点集中在第 1 种方法上。
ODF 与 OpenXML
Microsoft 和 OpenDoc 的支持者似乎都准备好了背水一战。前者坚信自己不亚于是在为寻求真理(truth)、正义 (justice)而战,后者同样认为自己是在为追求自由(liberté)、平等( égalité)和博爱(fraternité)而努力。结果,在本次展览中,没有一方能够胜出。双方若能减少这种狂热的自大并正视自身的局限性,就一定可以受益匪浅。
排出那些恶意抨击,今年的大多数技术讨论都更偏重于 Microsoft 格式 —— 也许是因为它们是新生事物,不过本次研讨会不乏这类新事物。更关键的因素似乎在于 10 多年来 Microsoft 一直在坚定不移地保持着与遗留 Microsoft Office 二进制格式的完美兼容性。这意味着最新出炉的 ECMA Open XML 标准实际上就是遗留格式的 XML 编码。因此,该规范受到兼容性要求的严格限制。
其结果是该规范长达 6,000 页之多。在实现近乎相同的功能的前提下,该规范几乎是 OpenDoc 规范的 10 倍。这可能是我所遇到的最大的 XML 规范。我怀疑连 WS-* 规范族是否也比不上它。它也比 Microsoft 过去所发布的任何相似的规范都要完整,而且将为任何需要阅读或生成 Microsoft Office 文档的人提供帮助。但是,除了必须要与 Microsoft Office 进行通信之外,我实在想不出其它项目还会出于什么原因采用该格式。该规范太庞大了,并且拥有过于详尽的遗留细节。如果在读取、编写以及显示类似于该规范的遗留代码方面您不具备 10 年以上的使用经验,就别指望能够实现该规范。
与之相反,尽管是从 StarOffice 遗留格式演化而来,OpenDoc 格式要简单得多,并且十分独立于其起源。它已经作为原生文件格式应用于带有独立代码基的单独的办公套件和程序。如果 Microsoft 公司之外的人想使用 Office Open XML 进行类似的尝试,我会十分惊讶,若此人还能成功,我定会惊讶万分。即使是 Microsoft 自己的人也尚不能在 Mac 环境的 Microsoft Office 中实现该格式 —— 并且它不是独立的代码基。
顺便提一句:Microsoft 的另一个失误是将其格式命名为 Office Open XML,这个名字太容易与 OpenOffice OpenDoc 混淆了。
DITA
XML 界另一个最新的发展是 Darwin Information Typing Architecture(DITA),一种用于模块文档的 XML 格式。DITA 文档被划分为主题、概念和任务,而非书和文章。Map 文档指明如何重新排列不同的主题,以获得杂志文章、Web 页面、教程、研讨会演讲、手册页及更多内容。不同的 map 文档可以重用相同的主题来制作不同的新文档集合。甚至可以将单个的段落、句子和词语指向并交叉包括到输出文档中。
对于像我这样的技术作者,这听起来好似天籁。我不再需要多次重写或剪贴相同的内容了。我究竟可以使用多少种不同方式来解释所链接的列表呢?具体的方法取决于撰写者对结构化编程和 DRY(Don't Repeat Yourself,不要重复自己)原则的认识。至少还有理论可循。
现实可能永远无法满足期望。虽然没有明确提及 DITA,但 Jon Bosak 在闭幕演讲中总结性地宣布 DITA 理论是错误的。正如他所言,人们早就尝试和考验过它。他在 20 世纪 70 年代末就接触过这一概念,并为之着迷了一段时间。
问题在于您不能在文档之间自由地剪贴主题。如果硬要剪贴主题,就无法保证一致的编著风格、目标受众和流程。最糟糕的问题之一是当您编写一个主题时,您不知道能否假设读者已经从前面的章节中了解了那些内容,因为这些章节总在被移来移去。结果,您要么就不断重复所有的先决条件,要么就干脆完全不考虑必需的这些先决条件。
Bosak 提到以前有人曾多次想在该技术取得一些突破,但它至今仍不能使用。现在即使想用神奇的 XML 技术来拯救这个有缺陷的概念,也已无济于事。他猜想一些人之所以喜欢该方法,是因为它让他们看起来更像是十分重要的软件开发人员,而不是普通的技术撰稿人。(Bosak 说他就有过这种感觉。)这就是为什么人们一忘记它以前的失败,就会重归这个糟糕概念的原因。
Web
在 2006 年,很难找到不涉及 Web 的技术研讨会或技术主题。XML 2006 也不例外。整个议程都专注于 XML 和 Web。诸如 mashups、Asynchronous JavaScript and XML(Ajax)和用户交互性这样的 Web 2.0 主题尤其突出;此次研讨会 Web 部分所涉及的范围非常广泛,从移动电话到服务器,从 RSS 到 Atom,再到 HTML。
Atom 和 APP
Atom 可能是本次研讨会中比较过时的内容了,然而新出现的 Atom Publishing Protocol(APP)却吸引了很多人。APP 现在更像是蓄机待发的一项技术,就像 10 年前的 XML 技术一样。与 XML 类似,APP 技术也是从为解决一个简单的应用问题发展起来的(对于 XML,这个简单的应用就是将 SGML 放到 Web 页面上,而对于 APP,这个简单应用则是发布 blog 条目)。和它之前的 XML 技术一样,APP 技术的能力也远超出了当初设计者的初衷。它可以很好地用于应用程序层协议,就像 XML 在数据格式方面所起的作用一样:APP 最终可能会允许人们使用一些标准的、可互操作的、可靠的库在系统之间传递内容,而不再需要费力编写各自的代码。
并非所有的相关技术提供商都出席了这次会议,不过 IBM 携其 Abdera 库参加了此次会议。Abdera 是一个 Apache Incubator 项目,它以 Java™ 类库的形式实现了 APP,客户端或服务器端的其他应用程序都可以调用它。在 Abdera 基础上再包装一个用户界面,就可以得到一个 blog 编辑器。增加一个后端数据库,就可得到一个内容管理系统。Abdera 看起来很有前途;虽然它尚未正式发布,现在就已经有很多开发人员在其他语言和环境中开发类似的类库了。
REST
APP 源于 Representational State Transfer(REST),REST 是 Hypertext Transfer Protocol(HTTP)和 Web 所基于的架构。在编程方面 REST 还没有被规范定义起来,但它的应用却在不断涌现。例如,在一个关于 Google Checkout API 的会议中,Google 的技术宣传人员 Patrick Chanezon 提到只有他们早期设计的公共 API 是利用了 WS-* 堆栈的。如今,他们在尝试完全使用 REST 来设计他们的 API。他们也许会考虑为那些偏爱这些工具的开发人员实现 SOAP 网关,但后台技术会完全基于 REST。
同时我也注意到 WS-* 和 REST 之间的区别也日益模糊起来。尽管开发人员还没有意识到,但 REST 看起来在实际的代码中更有优势。很多人纷纷开始使用 REST,他们中的一些甚至还尚未弄清楚这项技术的名称所代表的含义。不止一次,我在演讲者的幻灯片中看到 “WS-*” 或者类似的词汇,但在与之进行更深入的交谈之后,我发现他们所指的仅仅是在 HTTP
之上发送遗留 XML ―― 甚至没有使用 SOAP 或 Web Services Description Language (WSDL),更不用说此基础上的一整套的规范了。实际上,我并不在意他们如何称呼自己的设计,只要他们能以正确的方式进行设计就行。
Web 服务 一直就是一个模糊的术语。以后,开发人员需要注意不加任何限定单单说Web 服务 对于不同的人来说可能代表完全不同的含义。
元数据
元数据可能是另外一个典型的冒充成技术问题的人为问题。简言之,就是如何让作者为其内容创建并输入可靠的元数据。Google 通过完全忽略元数据并仅集中处理数据已经创建了世界上最高效的搜索引擎之一。
语义 Web 的狂热者并不准备放弃 Resource Description Framework (RDF)(尽管这次会议关于它的讨论并不多),所以一些演讲侧重于介绍如何从 HTML 数据、关系数据库和其他未注释系统中生成 RDF 元数据。
最有希望的方法(可能是因为这种方法做的承诺最少)是 W3C 的 Gleaning Resource Descriptions from Dialects of Languages (GRDDL),由 Harry Halpin 提供。他正在开发 XSL 变换,能够从各种 XML、HTML 和微格式中产生 RDF 元数据。Ronald Reck 和 Ken Sall 所做的工作是从 CIA World Factbook、Wikipedia 和 Project Gutenberg 推断出元数据,在我看来他们的目标很多但并没有实现多少。
与前些年相比,这些提案最令人震惊的地方是它们都不需要原始文档作者的任何协作。这是否意味着元数据社区最终终于想要吸取 Google 的教训了呢?如果能够从这些文档中提取出嵌入其中的隐式元数据,而不要求作者在文档之外添加显式元数据,那么就能够得到更多更好的元数据。
结束语
XML 2006 是历年来我所参加的研讨会中最令人兴奋的也是最活跃的一次。日程中的每个时间段都会同时至少有两个,并且通常是三或四个我想要了解的演讲。随意的交谈和探讨随处可见,展厅的气氛也很活跃。甚至在研讨会正式结束的那天,在宾馆休息室和酒吧里还有不少的技术活动在继续着(也许这也是寒冷的波士顿天气的“功劳”)。
展望 2007,我想 XQuery 以及原生 XML 数据库将非常非常热门。很多大型的出版商已经成功实现了能够良好运行的 XQuery 系统。较小型的出版商更想等待使用更简单、更便宜、甚至开源的解决方案;不过,他们可能也不用等待太久。本次研讨会中最大的传言是:某一大型 pure XML 数据库公司和某一大型混合 XML 数据库公司已达成协议打算联手共同打造一个极具竞争力的新的开源 XQuery 引擎。
除 XQuery 之外,需要注意的技术还包括 GRDDL、APP 和 XProc。另外任何冠以 Web 2.0 的东西也不容忽视。没错,这个概念现在还云里雾里的不很明确;并且如果您向本次研讨会的四位演讲者询问他们对 Web 2.0 的定义,您可能会得到六种不同的答案;但,这一概念确实也有实际的一面。最后,如果您以前注意过类似 XSL-FO 或 XForms 之类的技术并只是由于其实现不够健壮而放弃了它们,那么请您三思。这些技术中的大量 bug 已经被修正,并且人们已经能够在从前不太可靠的基础上构建出很不错的系统了。
XML 的前十年仅仅是个开端,XML 的未来将无限光明。
参考资料 学习
获得产品和技术
- 使用 IBM 试用版软件:构建您的下一个项目,可直接从 developerWorks 下载。
讨论
关于作者
对本文的评价
|