我正在处理一组复杂的xsd文件,这些文件嵌套很深,类型之间有很深的关系/扩展。
其中一个xsd定义了一个抽象元素,并为其提供了一个替换组
<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"
,只有aaa
和bbb
包含它。
所以,据我所知,只有aaa
和bbb
可以代替myElem
。时期没有其他元素。
然而,令我惊讶的是,我得到了一个xml,它包含了与aaa
、bbb
(通过多层扩展(相关的元素,并且这个xml似乎是有效的(我用多个验证器进行了检查(。
因此,我似乎并不完全理解替代机制。除了aaa
和bbb
之外,还有哪些元素可能以这种方式干扰替换机制,从而使xml有效?
我的问题:
如何确定允许替换的详尽集合?
xsd扩展是否以某种方式参与了替换机制?
感谢
op。这里:原来我错过了一些可传递的替换,例如
<xsd:element name="ccc" substitutionGroup="aaa">
这意味着
元素ccc
也是"根"myElem
的有效替代