XML for Microsoft Windows 2000 的新增功能
作者:Charlie Heinemann
更新日期:2000 年 1 月 10 日 发表日期:1999 年 12 月 15 日
随 Microsoft® Windows® 2000 发布的 Microsoft XML 分析程序 (MSXML.DLL) 实际上是一个服务包版本。它包含的新增功能不多,但修正了大量的错误。还可从 Internet Explorer 5.01 的 Web 版本中得到该版本的 MSXML.DLL,因此它也能用于 Windows NT 4.0。不过,与其早期版本相比,此版本的分析程序最突出的改进在于大大提高了可靠性和缩放能力。新版本的分析程序面对大工作负荷具有更出色的性能,并且在多处理器环境中具有更强大的缩放能力,从而更好地满足服务器的要求。
最突出的改进在于大大提高了可靠性和缩放能力。
本文概述了此分析程序的新增功能,并说明了影响其功能的行为上的变化。如需了解其更多的详细内容,请参阅 XML Developer Center(英文)的 XML 参考文档。
Microsoft XML 分析程序的新增功能
本文将详细说明 Microsoft XML 分析程序的以下新增功能:
- 对属性的数据类型支持
- “id”类型的元素
- 作为元素名称的数据类型
- 在 XSL 脚本块中创建 COM 对象的例示
对属性的数据类型支持
Internet Explorer 5 版本的 Microsoft XML 分析程序所提供的数据类型支持,已发展为对属性提供简单的数据类型支持(如“int”、“float”和“date”)。如需查看所支持的数据类型的完整列表,请参阅“XML 数据架构”的参考文档。
分析程序内部的扩展的数据类型支持功能,实现了拥有以属性为核心的数据,这种数据仍可被指定数据类型。可以在整个架构的属性节点上声明数据类型,正如在元素节点上声明一样。使用 AttributeType 元素的 dt:type 属性:
<AttributeType name="y" dt:type="int"/><ElementType name="x"> <attribute type="y"/></ElementType>
“id”类型的元素
现在,元素可以为“id”类型,如下面的代码所示:
<foo xmlns:dt="urn:schemas-microsoft-com:datatypes"> <bar dt:dt="id">fooid</bar></foo>
bar 元素具有“id”类型,这说明 bar 元素的文本值可以用于引用 foo 元素。除了将实例上的元素指定为“id”类型之外,架构还可用于将元素指定为“id”类型。
当元素具有“id”类型之后,该元素的父元素即可通过 id 元素的值来引用。例如,如果想把字串“fooid”传递给 nodeFromID 方法,则该方法会返回 foo 元素。
xmldoc.nodeFromID("fooid")
作为元素名称的数据类型
当前,可以在实例上用 dt:dt 属性来声明数据类型,也可以在架构中用 dt:type 属性或 datatype 元素来声明数据类型。对于随 Windows 2000 发布的 Microsoft XML 分析程序,还可以通过元素的名称来指定其类型。
下面的 XML 元素为整数类型,原因在于其名称拥有“urn:schemas-microsoft-com:datatypes”命名空间,并且其局部名称为有效的数据类型 —“int”:
<dt:int>8</dt:int>
这一指定元素类型的新方法,为创建赋有类型的元素提供了便捷的方式。
在 XSL 脚本块中的 COM 对象的例示
在随 Internet Explorer 5 发布的 Microsoft XML 分析程序中,出于安全原因而不允许在 xsl:script 块中存在 COM 对象的例示。对于随 Windows 2000 发布的 Microsoft XML 分析程序,已经改正了这种情况,现在可以在 xsl:script 块中安全地例示 COM 对象了。
Microsoft XML 分析程序行为上的变化
Windows 2000 版本的 Microsoft XML 分析程序的一些行为发生了变化。这些变化是因修正错误和用户的反馈而产生的。下表列出了会导致行为发生意外变化的错误更正。
错误更正
功能领域 | 错误说明 | 注释 |
---|---|---|
XSL 模式 | 对于由实体定义的元素,带有 // 的查询将返回重复的结果。 | 现在不允许对 DocumentType 节点的内容进行 XSL 模式的导航。 |
数据类型 | 即使删除了数据类型声明(即 "dt:dt='int'"),元素仍保留其数据类型。 | 删除了数据类型声明之后,元素将不再保留其数据类型。 |
命名空间 | 允许用保留的命名空间来限定元素。 | 无论“xml”的大小写字母组合如何,用户都不能将其设置为前缀。它是一个保留的命名空间前缀。 |
命名空间 | 无法保持空元素上的命名空间声明。 | 现在能够保持空元素上的命名空间声明。 |
数据类型 | 数据类型有效性判断是在 XSL 变换之前进行的。这会造成下面这样的 XSL 元素发生错误:<price dt:dt="number"><xsl:value-of select="price"/></price> | 在 XSL 能够进行变换之前,Microsoft XML 分析程序不再使数据类型生效。 |
XML 数据源对象 | oncellchange 事件会激发两次。 | 现在,对于数据的每次实例变化,oncellchange 事件只激发一次。 |
对象模型 | 元素的第一个子元素的 previousSibling 特性将返回父元素上的 attributes 集合中的最后一个属性(如果 attribute 集合不为空)。 | 元素的第一个子元素的 previousSibling 特性现在将返回 null(无论父元素上的 attribute 集合是否为空)。 |
对象模型 | 复制的文档保留了原始文档的 ID 映射(即,ID 导航会使您回到原始文档)。 | 复制的文档中的 ID 被映射到该复制的文档内部的节点,而非原始文档中的节点。 |
对象模型 | 复制文档中不包含对原始文档的内部子集的复制。 | 现在复制的文档中包含对原始文档的内部子集的复制(如果存在这样的子集)。 |
XML DSO | 通过设置 documentElement 属性来替换根元素时,不会导致重新构造记录集的形式。 | 通过设置 documentElement 属性来替换根元素,现在会导致重新构造记录集的形式。 |
有效性 | DTD 中允许存在无效的 XML(作为实体的值)。 | 不再允许 DTD 中存在无效的 XML(当实体被分解后)。 |
对象模型 | 在 Visual Basic® 中没有提供错误信息。 | 现在 Visual Basic 中提供了错误信息。 |
对象模型 | 设置布尔型元素的 nodeTypedValue 特性,会在保持操作后产生无效的 XML。 | 现在当布尔值被设为真时,将保持“1”值,而非“-1”。“-1”值对于布尔型的节点不是有效的值。 |
IE4 对象模型 | 属性值与 Internet Explorer 4.0 不兼容。 | 现在,属性值中的 \t 和换行被转换为‘ ’(空格)。这与 Internet Explorer 4.0 的实现是兼容的。 |
分析程序 | Microsoft XML 2.0 分析程序不支持“us-ascii”编码。 | Microsoft XML 2.0 分析程序现在能够支持“us-ascii”编码。 |
对象模型 | 就基于 HTML 的 XML 应用程序而言,未正规化的换行堪称严重问题。 | 现在回车和换行均转换为换行。 |
对象模型 | 使用 loadXML 方法加载 XML 文档,会强制 resolveExternals 为 False。 | 如果没有安全环境(诸如在 C、C++ 或 HTML 行为中),则 resolveExternals 特性将为 False。如果存在安全环境(如在 HTML 页中),则应将其设为 True。 |
对象模型 | 如果 isSuccessful 参数为 NULL,那么 loadXML 方法将返回 S_FALSE。 | 分析失败时,Microsoft XML 分析程序只返回 S_FALSE。 |
分析程序 | Microsoft XML 2.0 分析程序无法处理用于元素声明中的参数实体,如下例所示:<!ELEMENT document (%inline;)> | 现在分析程序能够正确分析元素声明中的参数实体:<!ELEMENT document (%inline;)> |
数据类型 | 对 bin.base64 的实现不正确。Microsoft XML 2.0 分析程序将该字符集中的“/”识别为“*”。 | base64 字符集为: “ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz0123456789+/”。Microsoft XML 分析程序现在能正确识别了。 |
XSL | XSL 中的脚本能改变 Internet Explorer 中的 DOM,但不会改变其他容器中的 DOM。 | 现在无论对于何容器,均限制 Microsoft XML 分析程序改变 DOM。 |
XML DSO | $Text 域的值与映射到该域的节点文本值不同。 | 现在 $Text 域和节点值域均已正规化。 |
XSL | XSL 能够显露在架构中定义的数据类型的“dt”属性。 | 在架构中定义了数据类型后,不会再在 DOM 树中显露其 dt:dt 属性。 |
分析程序 | 注册实体声明之下的 ID。 | Microsoft XML 分析程序不再注册实体声明之下的 ID。 |
行为上的其他变化
以下变化是根据用户的反馈而做出的,会导致您的应用程序的行为发生变化:
- Microsoft URL 不再区分大小写。
- 如果两次调用 id(),并引用相同的节点,则起作用的是第二个引用。
- 当访问 xmlns:foo 和 xml:space 属性的 namespaceURI 特性时,会分别得到“http://www.w3.org/XML/1998/namespace”和“”。现在此变化是一个错误,表现为随 Internet Explorer 5 发布的 Microsoft XML 分析程序会发生异常行为。在将来发布的版本中会修正该错误。
在工作负荷和性能方面的提高
在自动化程度方面的一个引起争论的问题已得到解决,从而使得分析程序在用于“活动服务器页 (ASP)”时能够进行实质性地缩放。这意味着在多处理器计算机上,使用 XML 的 .asp 文件的吞吐量将显著提高。下面的图表显示了这些提高的情况,其中 x 轴表示处理器的数量,y 轴表示每秒钟 ASP 请求的数量:
![图表](http://www.microsoft.com/china/msdn/xml/images/xml1299-1a.gif)
这是根据使用执行一些 DOM 树操作的简单 XML .asp 页而测出的。
此外,还改正了一些工作负荷所导致的错误,因而大大提高了分析程序在工作负荷时的稳定性。我们将此分析程序部署到 Microsoft.com 的一些用户访问最频繁的站点,证明了其在工作负荷下的稳定性得到了很大提高。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=3476