关于嵌套xs:choice的XML Schema结构疑问及解析请求
拆解你的嵌套XSD Choice结构逻辑
先把这段XSD的层级约束拆透,核心是搞懂嵌套<xs:choice>的实际规则:
外层Choice(maxOccurs="unbounded")
这个外层选择器允许无限次重复选择以下三个选项中的任意一个(每次仅能选一个选项,可循环选不同选项):
- 内层嵌套的
<xs:choice> - 元素C(可出现0到无限次)
- 元素D(可出现0到无限次)
内层Choice(默认minOccurs="1"、maxOccurs="1")
这是你疑惑的核心,它的规则是必须从A和B中二选一(选其中一组符合约束的元素),子元素的minOccurs是针对该元素在当前选项内的出现次数:
- 选A选项:
<xs:element ref="A" minOccurs="0"/>→ 可以写1个<A/>,或者完全不写A(因为minOccurs="0"允许该元素出现0次) - 选B选项:
<xs:element ref="B"/>→ 必须恰好写1个<B/>(默认min/maxOccurs都是1)
关于你问的「如何选择A」
当外层Choice选中内层这个选项时,你有两种符合规则的方式对应“选A”:
- 直接在XML中写一个
<A/>元素 - 完全不写A(此时相当于选择了A的0次出现,且不能同时写B)
合法XML示例
<!-- 仅出现一次B --> <B/> <!-- 仅出现一次A --> <A/> <!-- 内层选A的0次(空),加多次C、D --> <C/> <C/> <D/> <!-- 混合重复外层选项 --> <B/> <C/> <A/> <D/> <B/>
非法XML示例
<!-- 错误:同时写A和B,违反内层Choice的二选一规则 --> <A/> <B/>
内容的提问来源于stack exchange,提问作者Neralem
相关产品推荐
相关产品推荐

