级别: 初级 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
的支持:
| 数据类型方面
length 、
minLength 和
maxLength
| 将这些方面限制为值 2147483647 | 将无法正确确认大于该限制的项 | | 表示日期和时间数据类型的值 | 这些值不可以大于 2147483647 | 将无法正确确认大于该限制的项 | | 循环导入和包括 | 语法分析器只允许向前引用 | 只限于一个 Schema 导入或包括实际上是其祖先的 Schema
的情况;有关详细信息,请参阅 Xerces-J 介绍页(请参阅
参考资料)
| | 所有其它 XML Schema 特性 | 完全支持 | -- | |
目前为止 Xerces for C 和 XML4C 对 XML Schema
的支持:
| | 简单类型 | 基本简单类型 | 联合体,列表 | | 复杂类型 | 选项,序列 | 组,全部 | | 元素和属性声明 | 几乎完全支持 |
any ,
anyAttribute
| | 内置数据类型 | 基本数据类型(19 个中的 5 个):
string、boolean、decimal、hexbinary 和 base64binary
派生数据类型(25 个中的 14 个):
integer、token、language、
Name 、
NCName 、
normalizedString 、
NMTOKEN 、
NMTOKENS 、
ID 、
IDREF 、
IDREFS 、
ENTITY
和
ENTITIES
| 其余 25 个内置数据类型 | | xsi 标记 |
xsi:nil 、
xsi:schemaLocation 和
xsi:noNamespaceSchemaLocation
|
xsi:type
| | 派生的复数类型 | 完全支持
simpleContent 和
complexContent
| -- | | 使用 "ref" 重用元素和属性 | 完全支持 | -- | | 包括 | 完全支持 | -- | | 导入 | 完全支持 | -- | | 替代组 | 完全支持 | -- | | 所有其它“W3C XML Schema 建议书”特性 | -- | 当前不支持 |
引用 XML Schema
请注意,必须按“建议书”指定的那样,必须由文档根元素上的
xsi:schemaLocation 或
xsi: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>
|
参考资料
关于作者  | 
|  | Natalie Walker
Whitlock 是 Casaflora Communications 的业主,Casaflora
Communications
是一个致力于电子商务和技术问题的内容服务机构。她定期为
developerWorks 以及 PC World、Smart
Computing、Office.com、iVillage、Intraware、CBS Marketwatch 和 The
Tribune Syndicate 等出版机构撰稿。可以通过
casaflora@aol.com
与她联系。
|
对本文的评价
|