xml - 我如何重用复杂类型来定义自身的序列(XML 模式)
问题描述
我是 xml 架构的新手。我必须手动转换一个 dtd 文件。这是其中两条线
<!ENTITY % field "a|b|c">
<!ELEMENT article (%field;)*>
我想定义与 (a|b|c) 等效的复杂类型,以及与 (a|b|c)* 等效的复杂类型,而无需重写代码。我定义 (a|b|c) 的方式是
<xs:complexType name="abc">
<xs:choice>
<xs:element ref="a"/>
<xs:element ref="b"/>
<xs:element ref="c"/>
</xs:choice>
</xs:complexType>
但是我不知道如何使用前面的定义来定义 (a|b|c)* 并且不添加像下面这样的子元素
<xs:element name="article">
<xs:complexType name="abc*">
<xs:sequence>
<xs:element name="abcelement" type="abc" minOccur="0" maxOccur="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="article>
<xs:complexType name="abc*">
<xs:choice minOccur="0" maxOccur="unbounded">
<xs:element ref="a"/>
<xs:element ref="b"/>
<xs:element ref="c"/>
</xs:choice>
</xs:complexType>
</xs:element>
谢谢
解决方案
将 abc 定义为一个命名的 xs:group,它是 a|b|c 的选择,然后您可以在一个复杂类型中直接引用这个命名组 (a),以及 (b) 在另一个允许重复的复杂类型中引用这个命名组
<xs:group name="abc">
<xs:choice>
<xs:element ref="a"/>
<xs:element ref="b"/>
<xs:element ref="c"/>
</xs:choice>
</xs:group>
<xs:complexType name="abc">
<xs:group ref="abc"/>
</xs:complexType>
<xs:complexType name="abc-repeated">
<xs:sequence>
<xs:group ref="abc" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
未经测试 - 可能有错别字。
推荐阅读
- salesforce - 当事件和处理程序在不同的组件中时,如何测试组件事件?
- python - 如何通过 Python API 获取数据集信息
- python - spyder plotly:绘制条形图的问题
- javascript - Rewriting function using arrow function to fix IE compatibility
- php - 在 laravel 中与视图作曲家共享后未定义的变量
- javascript - 注销反应时未呈现登录路线
- flask - 上传功能的烧瓶自定义错误处理
- r - 无法追加到表
- php - 单选按钮在php中给出错误的值
- php - 仅从 CSS 中提取路径并排除路径后的任何内容