XSD将元素名称验证为变量

时间:2015-08-19 08:02:27

标签: xml xsd xsd-validation xml-validation

我有一个列表XML元素,我试图编写一个XSD来验证它。我的目标是双重的。首先,我想要的元素' name是一个变量(这样我就不会强迫用户输入特定值)。但是,应该在可能的值池之后检查此变量(元素名称)。

  <List>
    <Elem name="this_should_be_a_variable">
            <SomeProperty name="X"></Property>
    </Elem>
    <Elem name="this_should_be_a_variable">
            <SomeProperty name="X"></Property>
    </Elem>
</List>

因此,例如我希望能够,给出一个&lt; ELEM&GT;检查它的名称是否为[蓝色,红色,白色],否则拒绝XML。

修改

到目前为止,我的xsd看起来像这样:

<xsd:complexType name="List">
    <xsd:sequence>
            <xsd:element name="here_i_dont_want_to_force_the_name" type="elem" />
    </xsd:sequence>
</xsd:complexType>

我的问题是如何验证名称而不在xsd:element上明确设置它?

1 个答案:

答案 0 :(得分:-1)

您可以使用xsd:choice element。由于您已经为内部元素定义了可重用类型,因此可以在xsd:choice元素中声明多个元素(其中xsd:choice表示需要显示其中一个包含的元素)具有不同的名称,始终引用相同的类型(如果这是他们想要的):

<xsd:complexType name="List">
    <xsd:sequence>
        <xsd:choice>
            <xsd:element name="Blue" type="elem" />
            <xsd:element name="Red" type="elem" />
            <xsd:element name="White" type="elem" />
        </xsd:choice>
    </xsd:sequence>
</xsd:complexType>

由于xsd:choice元素包含在xsd:sequence元素中,因此可以重复选择。