专栏作家 Uche Ogbuji 深入思考了 XMLOpen 会议上提出的几种观点,最近在英国剑桥召开的这次会议是关于 XML 处理的一次盛会。值得注意的课题包括 XML 规格、 Semantic Web、XML 管道、Web Proper Names 和数据类型。他还从实用的角度对 XML Hacks 一书作了进一步分析,上一期文章中已经详细地介绍了这部关于技巧和窍门的书籍。
XMLOpen 2004 于 9 月 21 至 23 日在英国的剑桥召开。与会的有很多 XML 专家,大部分来自英国,也有来自欧洲、美国、澳大利亚、日本和其他地方的专家。我在致词中申明了本次会议的主题是 XML与开放标准和开放源代码的交叉。会议展现了大量的劳动结晶和思想成果,本文将讨论与我在其他 developerWorks 文章中已经讨论过的问题相关的会议内容。
本文的后面将对 XML Hacks 一书作最后的评述,完成 本专栏上一期文章 的讨论。
卡姆河平底船上的 XML
庞特(Punt,一种平底船)是在卡姆河(流经剑桥的一条河)上航行的一种简单的、类似刚朵拉小船(gondola,威尼斯常见的一种平底船),这条河平静而庄严地流经世界上最著名学府的校园。那些坐了三天的船赶来参加 XMLOpen 会议(请参阅 参考资料)的专家学者,听到大量对 W3C XML Schema (WXS) 和 Web 服务规格的怀疑、对 XPath 2.0 和 XQuery 的毁誉、对 RELAX NG 和 ISO DSDL 的追捧,以及对通过编程语言和框架处理 XML 的鼓吹(在某种程度上不属于主流)。这些问题汇合在一起,自然而然地把发言者和那些从事前卫的 XML 工具和技术研究的人分离了出来。
XML 规格
Schematron 的缔造者 Rick Jelliffe 在发言的一开始就宣布,XML 模式和报告语言已经赢得了足够的投票,将被批准为 ISO 委员会草案标准,作为 ISO Document Schema Definition Languages(DSDL):Rule-based validation(请参阅 参考资料)的第 3 部分。我在最近的 Schematron 实用入门 中介绍了这个重要的准标准。由于 Schematron 的实现越来越多,并且得到了各种语言的认可,Schematron 一直是会议的热点话题。
Jelliffe 的发言实际上是关于尝试度量 XML 模式复杂性的经验。基本的想法是:用一个序数字,来评估针对某个词汇表及其典型应用实现处理任务(如创建 XSLT 转换)的难度。Jelliffe 的公式是计算元素类型、属性和各种特殊情况的个数,可以使用 DTD 或者一个或多个实例文档。虽然对度量的细节有不同的意见,比如复杂内容处理中结构化字段和控制词汇表的范围,但其他人已经考虑甚至实现过这种想法。我提到在 Fourthought 公司(我是这家公司的顾问),我们曾经建立了一种轻型的度量方法,只要客户给出了需要的词汇表概貌,就可以估计开发 XML 模式(用 RELAX NG)的难度。是否会出现关于 XML 语言复杂性的通用测量,或者按照软件质量 ISO 标准的道路标准化这种测量,这是值得关注的一个问题。
语义 Web 的 URI 方案?
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)本专栏的以前文章,特别是 Thinking XML: 知识管理的基本 XML 和 RDF 技术,第七部分中,我讨论了与语义 Web 有关的话题,语义 Web 是 W3C 雄心勃勃的下一代 Web 计划,详细注明文档的意义和上下文。语义 Web 技术使用 URI 作为涉及到的所有事物的基本标识符,无论是计算机记录、客观对象还是抽象事物。语义 Web 搜索遇到的一个挑战是创建可靠标识某个事物的 URI,而非局限于事物的某个方面。比如,有时候使用语义 Web 语言描述一个人,人们就用他的 Web 主页作为代表。但这样做混淆了真正的主页自身和这个人的描述。
开发人员、研究人员、W3C 职员和知名的 XSL 与 Schema 工作组成员 Henry Thompson,提出了使用称为 Web Proper Names 新 URI 方案解决这一问题。按照 WPN 方案,URI 是以知名引擎(如 Google)的搜索结果为基础构造的,URI 包括搜索引擎的细节和使用的搜索条件、搜索的日期和语言、某个人对搜索结果进行相关性检查的程度,这个关键的人称为所有者,或者按照 Thompson 的说法叫施洗者,是对这个名字负责的人或者实体。施洗者通常和执行搜索并检查结果的是同一个人。
下面是 WPN 的一个例子。如果要断言某个人,应该对这个人的姓名执行搜索,并使用适当的条件限制范围,得到和这个人关系最密切的结果。因此,如果某个Ralph Parker从事材料工程,而另一个从事医药行业,若希望描述后者,可以指定搜索条件忽略出现词语材料的页面。搜索引擎可能返回 Ralph Parker 的主页,您可能也曾经考虑使用它作为表示这个人的 URI。但是如果使用 WPN,就会更加明确所要描述的不是该 Web 页面(也不是搜索结果返回的其他任何页面),而是这些网页相关的对象。WPN 可能很长,下面是 Thompson 列举的关于埃菲尔铁塔的例子:
wpn://www.ltg.ed.ac.uk/~ht/WPN/EiffelTower?terms=eiffel+tower+paris+-hotel+-webcam&ln=en&se=www.google.com&dt=2004-05-21&rs=17&cs=5&pc=8
注意:在上面的例子中,代码通常作为单独的连续行出现,但为了便于设置格式和打印,将它分成了多行。
我曾经在这次访谈中指出,按照某些支持者的陈述,语义 Web 可能超出了下一代 Web 的能力。信息技术基于这样一种认识,所处理的资料仅仅是客观事物的相似物。我们处理人员、组织、地点、观念等的计算机记录,而不是这些事物的客观存在。名称、词语和含义的哲学体系非常古老而且争议颇多,稍微涉及计算机标识符在现实世界中的具体 含义这类问题,都会引起无限的复杂性和陷阱。语义 Web 应该专注于为 Web 作者提供廉价、简单的工具(更具体地说,就是提供开放源代码的替代品,而且半天就能学会的工具),使其用相关的思想注解页面。按照兴趣组织的社区,形成现约定俗成的惯例,就像人们遇到信息共享问题时所做的那样。在封闭的系统中(比如一个组织),约定是通过行政手段强制实施的。(结果,标识符的含义由组织的政策决定,完全是固定的)。对于语义 Web 来说,强制采用统一的标识符甚至惯例都是不可能的任务,无论您支持 RDF 还是支持主题映射。
最后,Thompson 的想法很有创见,我计划以不那么雄心勃勃的方式使用它。比方说,在 Weblog 中定义和描述它的主题似乎是个好主意,特别是因为 WPN 能够被转化成 HTTP URL,后者被转化为 Resource Directory Description Language(RDDL) 请参阅我撰写的文章 将 RDDL 用于 XML 和 Web 服务名称空间。
XML 管道
Sean McGrath 长期以来一直鼓吹 XML 管道,他称之为将系统看作数据流而非对象 API 的方式。XML 管道是将 XML 处理项目分解成更小的任务,再分别由独立的、可重用的处理阶段完成这些任务的一种方式。比如,可以通过一个阶段重命名 XML 文件中的某些元素,另一个阶段在根据换行例程在文本中增加新行字符,最后再把文档转化成文本文件输出。管道属于传统的 分而治之问题解决方法,基本上所有程序员都熟悉它。但不要认为是把算法分解成可管理的块,McGrath 和其他管道支持者强调的是数据和数据转换。他接受了软件工程先驱 Michael Jackson 的思想,所有要处理的数据都可以分解成关于时间的数据流。McGrath 认为,Web 服务和建立的其他很多 XML 处理实践都把数据硬套进了目前流行的编程技术,带来了不必要的复杂性。管道恢复了 XML 赖以成功的简单性和多功能性。
McGrath 讨论了管道的很多特点,包括相对容易审计和调试、管道阶段重用的价值、每个管道阶段可以使用最合适的编辑工具编写,有人使用 SAX,有人使用 DOM,还有人使用 XSLT。他还谈到了在管道数据流之间合并和分解的技术和 delta schemata 使用模式计算管道阶段之间的中间数据量。管道以多种不同的形式出现在 XML 领域中,包括 ISO 的 DSDL,它使用管道方法将 XML 模式的很多方面分解成更小的、独立的规范。XML 最佳实践仍在演化之中,但很多专家同意这种或那种形式的管道是 XML 处理实践的未来。
丰富和可扩展的数据类型
WXS 数据类型规范(WXS 规范的第 2 部分)常常被其他规范引用,特别是 W3C 规范,但是也饱受批评,被认为是随意的、复杂的数据类型集合,常常不能满足实际应用的需求。Jeni Tennison 对这个问题研究了一段时间,并开发了 Data Type Library Language(数据类型库语言)(DTLL,请参阅 参考资料),作为规定自定义 XML 数据类型的一种方法。她发现实际 XML 数据更多的是供人类阅读而不是作为处理的表示,从而受到了启发。这种观点与 RELAX NG 非常吻合,事实上 DTLL 的主要目标是为 RELAX NG 定义数据类型库。RELAX NG 是 ISO DSDL 的第三部分,而 DSDL 是Part 5: Data types当前的候选方案。
DTLL 通过定义正则表达式将数据类型分解成不同的要素(如 RGB 色彩值中的红、蓝、绿),来通知解析器如何解析数据类型。然后可以表达如何对数据类型进行相等测试,或者规定先后顺序。这样就可以方便地在 XSLT 的 xsl:for-each 语句或者其他处理设置中使用。DTLL 支持类型成分的继承(超类型),以及其他支持数据类型库模块化和重用的特性。总之,这些特性是经过对现有常用 XML 词汇表所用数据类型的详细分析而得到的,包括 DocBook、XHTML、SVG、MathML 等等,我撰写的 XML 标准概览:第 4 部分中都有介绍。将 XML 这类文本格式绑定到通常使用非文本型数据的很多数据类型和系统涉及到一些非常困难的问题,Tennison 对此进行了深入思考,而且她承认还有一些问题仍然没有解决。DTLL 仍然很年轻,但是因为其优点再加上 ISO 的支持,您很快就会将其用于与处理需求关系密切的数据类型。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)关于 XML Hacks的一点说明
我进一步研读了 XML Hacks 一书。Hack #92,Use Elements Instead of Entities to Avoid the 'amp Explosion Problem',这一节讨论了由于粗心大意造成不必要和模糊文本的问题,如&。如果转义已经转义的文本就会出现这种情况。该书中给出的解决方法是用特殊的元素表示这类实体,然后在处理结束后再用需要的是替代体元素(大概使用上述的管道)。我怀疑这种措施是否必要。XML 系统知道所处理的每段文本的