问题描述
我正在处理一组复杂的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 -->
我检查了所有导入的xsds,没有其他元素包含substitutionGroup="myElem"
,只有aaa
和bbb
包含它。
据我所知,只有aaa
和bbb
可以代替myElem
。期。没有其他元素。
但是,令我惊讶的是,我得到了一个xml,其中包含与aaa
,bbb
(通过多层扩展)相关的元素,并且该xml似乎有效(我与多个验证程序进行了核对)
因此,我似乎不太了解替代机制。
除了aaa
和bbb
之外,还有哪些元素可能以这种使XML有效的方式干扰替代机制?
我的问题:
如何确定详尽的允许替换集?
也许xsd扩展某种程度上参与了替换机制?
谢谢
解决方法
op。此处:原来我错过了一些传递替换,例如
<xsd:element name="ccc" substitutionGroup="aaa">
这意味着
元素ccc
也是'root'myElem