XML Schema - 限制元素的外观

时间:2011-11-12 17:56:07

标签: xml xsd

我的实际项目中有多个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中写这个?

1 个答案:

答案 0 :(得分:0)

经过调查,我不相信这是可能的。关于SO的一些相关问题与此有关,一般的建议是XSD的元素不能依赖于XSD的其他元素。

相反,您可能需要考虑一些替代方法或解决方法。

在不了解您的要求的情况下,很难考虑其他可能对您有用的东西,但也许您可以将TemplateParameter更紧密地联系在一起,而不是与其他元素紧密联系在一起。例如,Template可能有一个Parameter,另一个Template和一个元素(AB等):

像这样定义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>