课程表

Schema 教程

简单的类型

复杂的类型

数据类型

参考手册

工具箱
速查手册

XSD 元素替换

当前位置:免费教程 » XML相关 » Schema

通过 XML Schema,一个元素可对另一个元素进行替换。

元素替换

让我们举例说明:我们的用户来自英国和挪威。我们希望有能力让用户选择在 XML 文档中使用挪威语的元素名称还是英语的元素名称。

为了解决这个问题,我们可以在 XML schema 中定义一个 substitutionGroup。首先,我们声明主元素,然后我们会声明次元素,这些次元素可声明它们能够替换主元素。

  1. <xs:element name="name" type="xs:string"/>
  2. <xs:element name="navn" substitutionGroup="name"/>

在上面的例子中,"name" 元素是主元素,而 "navn" 元素可替代 "name" 元素。

请看一个 XML schema 的片段:

  1. <xs:element name="name" type="xs:string"/>
  2. <xs:element name="navn" substitutionGroup="name"/>
  3.  
  4. <xs:complexType name="custinfo">
  5. <xs:sequence>
  6. <xs:element ref="name"/>
  7. </xs:sequence>
  8. </xs:complexType>
  9.  
  10. <xs:element name="customer" type="custinfo"/>
  11. <xs:element name="kunde" substitutionGroup="customer"/>

有效的 XML 文档类似这样(根据上面的 schema):

  1. <customer>
  2. <name>John Smith</name>
  3. </customer>

或类似这样:

  1. <kunde>
  2. <navn>John Smith</navn>
  3. </kunde>

阻止元素替换

为防止其他的元素替换某个指定的元素,请使用 block 属性:

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

请看某个 XML schema 的片段:

  1. <xs:element name="name" type="xs:string" block="substitution"/>
  2. <xs:element name="navn" substitutionGroup="name"/>
  3.  
  4. <xs:complexType name="custinfo">
  5. <xs:sequence>
  6. <xs:element ref="name"/>
  7. </xs:sequence>
  8. </xs:complexType>
  9.  
  10. <xs:element name="customer" type="custinfo" block="substitution"/>
  11. <xs:element name="kunde" substitutionGroup="customer"/>

合法的 XML 文档应该类似这样(根据上面的 schema):

  1. <customer>
  2. <name>John Smith</name>
  3. </customer>

但是下面的文档不再合法:

  1. <kunde>
  2. <navn>John Smith</navn>
  3. </kunde>

使用 substitutionGroup

可替换元素的类型必须和主元素相同,或者从主元素衍生而来。假如可替换元素的类型与主元素的类型相同,那么您就不必规定可替换元素的类型了。

请注意,substitutionGroup 中的所有元素(主元素和可替换元素)必须被声明为全局元素,否则就无法工作!

什么是全局元素(Global Elements)?

全局元素指 "schema" 元素的直接子元素!本地元素(Local elements)指嵌套在其他元素中的元素。

转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号