模式作用域:初级读本和最佳实践
2010-10-22 17:18:49 来源:WEB开发网Venetian blinds 范式
在 Venetian blinds 范式中,不是全局地定义所有元素,您首先是全局地定义所有类型,如 清单 11 中的例子所示:
清单 11. Venetian blinds 范式
<xs:schema>
<xs:complexType name="section.type">
<xs:sequence>
<xs:element name="Title" type="xs:string"/>
<xs:element name="Body" type="xs:string"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string"/>
</xs:complexType>
<xs:complexType name="helpdocs.type">
<xs:sequence>
<xs:element name="Section" type="section.type"/>
</xs:sequence>
</xs:complexType>
<xs:element name="HelpDocs" type="helpdocs.type">
</xs:schema>
Venetian blinds 风格使用全局类型定义来增加重用能力。由于所有子元素都是局部的,所以它额外的优势是能够隐藏名称空间。该方法允许您在使用 elementFormDefault 属性作为隐藏或暴露名称空间的一个切换开关的同时,暴露您的结构定义以便重用。您做到了两全其美!
Garden of Eden 范式
在 Garden of Eden 设计范式中,您让元素声明和类型声明都是全局的,将全局化发挥到了极致。清单 12 展示了一个 Garden of Eden 风格的模式:
清单 12. Garden of Eden 范式
<xs:schema>
<xs:attribute name="name" type="xs:string"/>
<xs:element name="Title" type="xs:string"/>
<xs:element name="Body" type="xs:string"/>
<xs:element name="Section" type="section.type"/>
<xs:element name="HelpDocs" type="helpdocs.type">
<xs:complexType name="section.type">
<xs:sequence>
<xs:element ref="Title"/>
<xs:element ref="Body"/>
</xs:sequence>
<xs:attribute ref="name"/>
</xs:complexType>
<xs:complexType name="helpdocs.type">
<xs:sequence>
<xs:element ref="Section"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
更多精彩
赞助商链接