IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  XML  >

Xerces、XML4J 和 XML4C 添加了对 XML Schema 的支持

2001 年夏天对 Apache 和 IBM 语法分析器的更新

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

Natalie Walker Whitlock (casaflora@aol.com), 作家和所有者, Casaflora Communications

2001 年 7 月 01 日

6 月份发布的新版“Apache XML 项目”的 Xerces 语法分析器支持“W3C XML 模式建议书”。新的 Xerces for Java 基本支持所有 XML Schema 规范;Xerces for C++ 实现更有限的 XML Schema 子集,它正逐步实现对这种新选定的、在 XML 开发的很多情况下都将取代 DTD 的规范的完全支持。IBM 也发布了对与 Xerces 语法分析器相对应的 alphaWorks 语法分析器 - XML4C 和 XML4J - 的更新。一个表略述了该发行版的语法分析器所支持的 XML Schema 特性。

“Apache 软件基金会”推出的两款流行的 Xerces 语法分析器 Xerces Java(aka Xerces-J)和 Xerces C++(aka Xerces-C)6 月份在支持 XML Schema 方面向前迈进了一大步。Xerces-J 1.4.1 自称完全支持整个“W3C XML Schema 建议书”。Xerces-C 1.5 支持更有限的 XML Schema 子集。另外,还用相应的 XML Schema 支持(请参阅 参考资料)更新了基于它们的 alphaWorks 语法分析器 XML4J 和 XML4C。

XML4J,简史

XML4J 由 Hiroshi Maruyama 在“IBM 东京研究实验室”开发,它可以分解并解释 XML 文档,以便机器和应用程序读取。在 1998 年 W3C 宣布建议的 XML 规范的同一天,XML4J 作为免费试用下载软件进入 alphaWorks 网站。从那时起,XML4J 的日渐流行导致人们对 alphaWorks 网站上的该技术要使用商业许可证选项,并将它作为一部分包括在 IBM 的 WebSphere Application Server 中。其它公司(包括 Vervet Logic、NC.Focus 和 First Union)也在其最新软件中采用该技术。

1999 年,IBM 通过将源码捐赠给“Apache 软件基金会”,将源码发放给在此技术基础上构建程序的社区。

需要正式 XML4J 支持的开发人员可以通过 IBM 产品 WebSphere Application Server 或 Visual Age for Java 的产品来获得支持。否则,只能通过 alphaWorks 的 XML4J 论坛获得支持。 -- Sarah Mascarenas,alphaWorks

Xerces-C 更新以逐步实现对 W3C XML Schema 的完全支持为特色。在对其邮递列表的通知中,"Apache XML 项目”承诺继续稳固更新其开放源码 C++ 语法分析器,力争在年末以前实现当前“XML Schema 建议书”的所有特性。

新的语法分析器实现当前“XML Schema 结构和数据类型建议书”中指定的“W3C XML Scheml 语言”。(请参阅 参考资料)。所有这四个语法分析器都可以用以 DTD 或 XML Schema 格式指定的语法读取或确认 XML 文档。

其它语法分析器(例如来自 Oracle 的那些语法分析器、XSV、XmlSpy、MSParser 和 Extensibility)都声称对 XML Schema 具有某些支持。然而,根据公司的技术规范,这些语法分析器当前只能编辑和确认 XML Schema;还不能读取或解释 XML Schema 实例。另外,在我写这篇文章时,MSXML 语法分析器只支持 Microsoft 版本的 Schema 语言 XML-data。根据我对联机文献(网站、新闻组和邮递列表)的研究,Xerces 语法分析器(以及 alphaWorks 语法分析器)是最先真正支持高级 W3C XML Schema 功能的。

“IBM 多伦多实验室” XML 语法分析器开发经理 Luc Chamberland 说:“XML4J 3.2 在对‘W3C XML Schema 建议书’的实现支持方面处于业界领先地位.... 我们已经进行了实现整个规范方面的工作,但如文档中所述,仍有一些限制。”另外很重要的一点是,新的 Java 语法分析器现在包括对 JAXP 1.1(一种整体说明语法分析器的 Java 语言规范)的支持。

对于 C++ 实现,Chamberland 说:“XML4C 3.5 提供部分‘W3C XML Schema 建议书’支持,允许对 Schema 进行端对端处理。”

根据“IBM 多伦多实验室”XML 语法分析器开发部门的 Tinny Ng 的说法,除了 XML Schema 支持之外,新的 Xerces-C(和 XML4C)语法分析器发行版还包括:

  • Mac OS X 命令行配置和构建支持
  • 在 Unix 下启用的 libWWW NetAccessor 支持
  • 启用的 COMPAQ Tru64 Unix 机器,以便用 gcc 构建 Xerces-C
  • 更新的、对 SCO UnixWare 7(gcc)的支持
  • 对来自“DOM 级别 3”工作稿的、为快速实现而设计的 DOM 变体的实验性支持
  • 对 ICU 1.8 的支持
  • PDF 格式的文档
  • 错误修复和性能改进

这些语法分析器还支持 IBM International Components for Unicode 的更新版。

更新的发行版是源代码和二进制(AIX、HP11、Linux、Solaris 和 Windows)发行版。

Ng 说,开发人员仍然认为更新的、用于 C++ 的 Xerces 和 alphaWorks 语法分析器是实验性的,并且对 Schema 的支持有限。 表 1 略述了根据 Apache.org 中的文档所得到的、新语法分析器发行版中对 W3C XML Schema 特性的支持级别。

Java 语法分析器中的 XML Schema 支持

Xerces 和 alphaWorks Java 语法分析器都实现大部分 W3C XML Schema 规范。如您在 表 1 顶部所见,Java 语法分析器实现几乎没有什么限制。根据 Xerces 页面上的限制和已知问题所述,只对少数几个数据类型方面的值和数值具有很小的限制。另外,虽然您可以包括或导入一系列基本上以循环引用方式工作的 Schema,但却无法通过该系列向后递归。到目前为止,这些语法分析器还不提供唯一接口来显示确认后的信息集;它们不提供 DOM 和 SAX 之外的接口。

JDK 1.3 中的“小数”规范的一个已知问题意味着:语法分析器将监察在确认过程中出现的小数错误。

最后,该文档解释到:在“XML Schema 建议书”的实现中,有两个灰色区:QName 和 keyref。QName 的 W3C 规范不定义长度单位;Java 的语法分析器实现“以值空间中 XML 字符为单位(名称空间 URI 中字符数目 + ":" + 本地部分)”实现长度方面。Java 语法分析器开发人员用一种与 W3C XML Schema 第 0 部分:Primer 不同的方法解释 XML Schema 规范。语法分析器采用的方法是:“需要 <keyref> ‘标识约束’来引用位于与 <keyref> 连接的元素范围内的 <key><unique> 标识约束。这种解释与 Schema Primer 不同,后者包含一个示例,该示例在一个与之对应的 <key> 元素内部使用的元素上声明了 <keyref>





回页首


C++ 语法分析器中的 XML Schema 支持

目前,Xerces for C 和 XML4C 对 W3C XML Schema 规范的支持更有限。如您在 表 1 中所能见的那样,在本次对 C++ 语法分析器所作的第一次 Schema 更新中,很多 XML Schema 特性不受支持,而某些特性只是部分受支持。我们期待在今年后半年会推出新发行版来填补这些空白。

表 1. Apache 和 IBM 语法分析器支持的“W3C XML Schema 建议书”特性,2001 年夏

技术特性 支持部分 不支持部分
目前为止 Xerces for Java 和 XML4J 对 XML Schema 的支持:
数据类型方面 lengthminLengthmaxLength 将这些方面限制为值 2147483647将无法正确确认大于该限制的项
表示日期和时间数据类型的值这些值不可以大于 2147483647将无法正确确认大于该限制的项
循环导入和包括语法分析器只允许向前引用只限于一个 Schema 导入或包括实际上是其祖先的 Schema 的情况;有关详细信息,请参阅 Xerces-J 介绍页(请参阅 参考资料
所有其它 XML Schema 特性完全支持--
目前为止 Xerces for C 和 XML4C 对 XML Schema 的支持:
简单类型基本简单类型联合体,列表
复杂类型选项,序列组,全部
元素和属性声明几乎完全支持 anyanyAttribute
内置数据类型基本数据类型(19 个中的 5 个): string、boolean、decimal、hexbinary 和 base64binary 派生数据类型(25 个中的 14 个): integer、token、language、 NameNCName normalizedStringNMTOKENNMTOKENS IDIDREFIDREFSENTITYENTITIES 其余 25 个内置数据类型
xsi 标记 xsi:nilxsi:schemaLocationxsi:noNamespaceSchemaLocation xsi:type
派生的复数类型完全支持 simpleContentcomplexContent --
使用 "ref" 重用元素和属性完全支持--
包括完全支持--
导入完全支持--
替代组完全支持--
所有其它“W3C XML Schema 建议书”特性--当前不支持





回页首


引用 XML Schema

请注意,必须按“建议书”指定的那样,必须由文档根元素上的 xsi:schemaLocationxsi:noNamespaceSchemaLocation 属性指定 Schema,并且必须将 xsi 前缀绑定到 Schema 文档实例名称空间。例如:


清单 1. 用 xsi 标记指定 XML Schema 文档
   <?xml version="1.0" encoding="UTF-8"?>
     <personnel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:noNamespaceSchemaLocation='personal.xsd'>
     ...
     </personnel>



参考资料



关于作者

author

Natalie Walker Whitlock 是 Casaflora Communications 的业主,Casaflora Communications 是一个致力于电子商务和技术问题的内容服务机构。她定期为 developerWorks 以及 PC World、Smart Computing、Office.com、iVillage、Intraware、CBS Marketwatch 和 The Tribune Syndicate 等出版机构撰稿。可以通过 casaflora@aol.com 与她联系。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款