星期日, 十一月 26, 2006

substitutionGroup 研究

用于元素替换的schema扩展

有时候我们需要让某个位置的元素的名字可以换成另外一个,这个时候用元素替换,看下例instance文件:

<customer>

<name>John Smith</name>

</customer>

有个需求想把上面这个换成下面这样

<kunde>

<navn>John Smith</navn>

</kunde>

instance文件仍然为合法, 那么需要扩展现有的schema定义, 假如现有schema定义如下:

<xs:complexType name="custinfo">

<xs:sequence>

<xs:element ref="name"/>

</xs:sequence>

</xs:complexType>

<xs:element name="customer" type="custinfo"/>

<xs:element name="name" type="xs:string"/>

<xs:element name="name" type="xs:string"/>

在shema定义中添加如下:

<xs:element name="navn" substitutionGroup="name"/>

<xs:element name="kunde" substitutionGroup="customer"/>

这样使用 subsitutionGroup 以及要替换的元素的名字,那么就可以使得下面的 xml 的改写是合法的:

<customer>

<name>John Smith</name>

</customer>

改写成

<kunde>

<navn>John Smith</navn>

</kunde>

如果你确认某个元素绝对不想被替换,也可以声明这一点,用 block

<xs:element name="name" type="xs:string" block="substitution"/>

<xs:element name="customer" type="custinfo" block="substitution"/>

上面的声明将使得:

<customer>

<name>John Smith</name>

</customer>

改写成

<kunde>

<navn>John Smith</navn>

</kunde>

会是非法的。

没有评论: