我有一个列表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上明确设置它?
答案 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
元素中,因此可以重复选择。