我的实际项目中有多个XML描述符文件,而且我在创建相应的XSD时遇到了麻烦。
我在XML中使用自定义类型,例如:
<A>
<B>
...
</B>
</A>
我需要在XML文件中创建模板块。这些块可能包含我的自定义类型的任何元素。但是,模板中的元素与其他元素之间存在细微差别:它们可能具有Parameter
元素
<Template>
<Parameter />
<A>
<Parameter />
<B>
<Parameter />
...
</B>
</A>
</Template>
据我所知,不可能声明<Parameter>
元素可以出现在<Template>
内的任何位置(包括子节点)。但我可以通过将<Parameter>
定义为我所有类型定义的元素来实现此目的。
但是我想限制<Parameter>
,以便它只能在其父级位于<Template>
元素内时才会出现。是否可以将<Parameter>
置于类型定义中,但在其父级位于<Template>
标记的范围内时将其外观限制为?
如何在XSD中写这个?
答案 0 :(得分:0)
经过调查,我不相信这是可能的。关于SO的一些相关问题与此有关,一般的建议是XSD的元素不能依赖于XSD的其他元素。
相反,您可能需要考虑一些替代方法或解决方法。
在不了解您的要求的情况下,很难考虑其他可能对您有用的东西,但也许您可以将Template
和Parameter
更紧密地联系在一起,而不是与其他元素紧密联系在一起。例如,Template
可能有一个Parameter
,另一个Template
和一个元素(A
,B
等):
像这样定义Template
:
<Template>
<xsd:Sequence>
<Parameter />
<xsd:ComplexType />
<Template />
</xsd:Sequence>
</Template>
然后不需要修改每个元素,而是Template
类型存储结构。
<Template>
<Parameter />
<A>
<Template>
<Parameter />
<B>
<Template>
<Parameter />
< .. anything else .. />
</Template>
</Template>
</Template>