XML for Microsoft Windows 2000 的新增功能

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:fooxml:space 属性的 namespaceURI 特性时,会分别得到“http://www.w3.org/XML/1998/namespace”和“”。现在此变化是一个错误,表现为随 Internet Explorer 5 发布的 Microsoft XML 分析程序会发生异常行为。在将来发布的版本中会修正该错误。

在工作负荷和性能方面的提高

在自动化程度方面的一个引起争论的问题已得到解决,从而使得分析程序在用于“活动服务器页 (ASP)”时能够进行实质性地缩放。这意味着在多处理器计算机上,使用 XML 的 .asp 文件的吞吐量将显著提高。下面的图表显示了这些提高的情况,其中 x 轴表示处理器的数量,y 轴表示每秒钟 ASP 请求的数量:


图表

这是根据使用执行一些 DOM 树操作的简单 XML .asp 页而测出的。

此外,还改正了一些工作负荷所导致的错误,因而大大提高了分析程序在工作负荷时的稳定性。我们将此分析程序部署到 Microsoft.com 的一些用户访问最频繁的站点,证明了其在工作负荷下的稳定性得到了很大提高。


Charlie Heinemann 是 Microsoft 的 XML 小组的策划经理。他来自德克萨斯州,擅长高屋建瓴地思考问题。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值