用于元素替换的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>
会是非法的。
没有评论:
发表评论