的几项高级功能可以彻底消除“DLL Hell”现象。首先,它有一个非常强大的内部命名系统,能够有效地防止两个库因互相重名而被错当为对方的情况发生。除此之外,它还提供一项被称作“并行”配置的新功能。如果前例中新安装的应用程序确实重写了共享库,现有应用程序可对该库进行修复。等现有应用程序再次启动时,它会检查所有的共享文件。如果发现文件被更改,同时这些更改又是不兼容的,则它可以请求运行时提取一个它可以使个数组值表 示为反映这个数组的一系列元素,数组成员按升序出现。对多维数组来说,右边 的这一维变化最快。每个成员元素命名为一个独立元素。(见规则 2)SOAP 数 组可以是 single-reference 或 multi-reference 值, 因此可以表示为嵌入元素或独 立元素的内容。SOAP 数组必须包含一个"SOAP-ENC:arrayType"属性,它的值指 定了包含元素的类型和数组的维数。"SOAP-ENC:arrayType"属性的值定义如下: arrayTypeValue = atype asize atype = QName *( rank ) rank = "[" *( "," ) "]" asize = "[" #length "]" length = 1*DIGIT
"atype"结构是被包含元素的类型名, 它表示为 QName 并且作为类型限制 在 XML 元素声明的
"type"属性中出现(这意味着被包含元素的所有值都要与该类型一致,即 在 SOAP-ENC:a rrayType 中引用的类型必须是每个数组成员的类型或超 类型)。在 arrays of arrays or "jagged arrays"的情况下,类型组件编码 为"innermost"类型且在从第一层开始的嵌套数组的每一层中,类型名后 都跟随一个 rank 结构。多维数组编码时从第一维起,每一维之间用逗号 隔开。
"asize"结构包含一个以逗号分隔的
列表,数值 0,1 或其它整数表示数组 每一维的长度。 整数 0 表示没有指定详细的大小, 但是可能在检查数组实 际成员的大小后确定
。 例如, 一个 5 个成员的整型数组的 arrayTypeValue 值为"int[][5]",它的 atype 值是 int[]",asize 值是"[5]"。同样,一个 3 个成员的两维整型数组的 arrayTypeValue 值为"int[,][3]",它的 atype 值 是 int[,]",asize 值是"[3]"。
一个 SOAP 数组成员可能包含一个"SOAP-ENC:offset"属性表示这一项在整个数 组中的位置偏移值。这被用来指示一个部分储值数组(见 5.4.2.1 节)的位置偏 移值。同样,一个数组成员可能包含一个"SOAP-ENC:position"属性表示这一项 在整个数组中的位置,这被用来描述稀疏数组(见 5.4.2.2 节)的成员。 "SOAP-ENC:offset" 和"SOAP-ENC:position"属性值的定义如下: arrayPoint = "[" #length "]" 偏移值和位置从 0 开始 NULL 值或缺省值可能通过省略 accssor 元素来表示。 NULL 值也可能通过一个包 含值为'1'的 xsi:null 属性的 accssor 元素来表示,其它的依赖于应用程序的属性 和值也可能用来表示 NULL 值。注意,规则 2 允许独立的元素和数组成员名不同 于值类型的元素。 5.2 简单类型 SOAP 采用了"XML Schema Part 2: Datatypes"规范[11]"Built-in datatypes"节中 的所有类型作为简单类型,包括值和取值范围。例如: 类型 int float 举例 58502 314E+1
negativeInteger -32768 Louis "Satchmo" string Armstrong 在 XML Schema 规范中声明的数据类型可以直接用在元素 schema 中, 也可以使 用从这些类型衍生的新类型。 一个 schema 和对应的具有这些类型的元素的数据 实例的例子如下所示: