首页 > 解决方案 > xml 替换组 - 子组中包含哪些元素?

问题描述

我正在处理一组复杂的 xsd 文件,深度嵌套,类型之间具有深度关系/扩展。

其中一个 xsds 定义了一个抽象元素,并且可以使用一个替换组

<xsd:element name="myElem" type="MyAbstractType" abstract="true"/> 

<xsd:element name="aaa" substitutionGroup="myElem">  

<xsd:element name="bbb" substitutionGroup="myElem">  

<!--... more elements follow, some are extending aaa,bbb,myElem...etc -->

我检查了所有导入的 xsd,没有其他元素包含,substitutionGroup="myElem"仅包含它。aaabbb

所以,据我了解,只有aaa并且bbb可以替代myElem. 时期。没有其他元素。

然而,令我惊讶的是,我得到了一个 xml,其中包含与 , 相关的元素aaabbb通过多层扩展)并且这个 xml 似乎是有效的(我检查了多个验证器)。

所以看来我还没有完全理解替代机制。除了并且可能以这种方式使该xml有效的替代机制之外aaa,还有哪些元素bbb可能会干扰替换机制?

我的问题:

如何确定允许替换的详尽集合?

也许 xsd 扩展以某种方式参与了替换机制?

谢谢

标签: xmlxsdxsd-validationxsd.exexsd-1.1

解决方案


同上。这里:原来我错过了一些传递替换,例如

<xsd:element name="ccc" substitutionGroup="aaa">  

意思就是

元素ccc也是“根”的有效替换myElem


推荐阅读