模式作用域:初级读本和最佳实践
2010-10-22 17:18:49 来源:WEB开发网在 清单 4 中,address 元素是根元素。zipCode 元素不能充当实例中的根元素,因为它不是在模式模块中的根层次被全局定义的。局部定义的元素只能出现在定义它们的元素定义上下文中。
在局部作用域内引用全局元素和属性
除了充当根元素之外,任何全局定义的元素也可以在任何需要它们的局部作用域内被引用和出现。在 清单 5 的例子中,全局定义的 zipCode 元素被用于局部作用域上下文中的 address 元素的定义中:
清单 5. 局部作用域内引用的全局元素
<xs:schema>
<xs:element name="address">
<xs:complexType>
<xs:sequence>
<xs:element name='street' type='xs:string'/>
<xs:element name='city' type='xs:string'/>
<xs:element ref='zipCode'/> <!-- reference to globally defined element -->
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Globally defined element that is referenced in element above -->
<xs:element name='zipCode' type='xs:string'/>
</xs:schema>
您可以看到,全局暴露的元素声明支持模块化和重用。您可以在该模式的其他部分和会导入该模式的父模式中引用 zipCode 元素。
属性定义与此类似。例如,在 清单 6 中,全局定义的 state 被引用在局部作用域上下文中的 address 元素中:
清单 6. 局部作用域中引用的全局属性
<xs:schema>
<xs:element name='address'>
<xs:complexType>
<!--[.. elements removed for readability..]-->
<xs:attribute ref="state"/> <!-- referencing globally defined attribute -->
</xs:complexType>
</xs:element>
<xs:attribute name="state" type="xs:string"/> <!--globally defined attribute -->
</xs:schema>
更多精彩
赞助商链接