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。 |