XSD用于不同的元素名称

时间:2015-06-24 10:45:32

标签: xml xsd xsd-validation

我想为XMl形成一个xsd架构,其元素的范围是z1-zx。是否可以在xml架构中定义它,而不必写出声明每个元素。

请参阅以下内容:

<?xml version="1.0"?>
<Zones>
    <Z1>Asset00</Z1>
    <Z2>Asset00</Z2>
</Zones>

我希望区域能够达到Zxxx而不必在XSD中声明每个区域,是否可以这样做?

请注意,我无法更改xml的结构,因为我将其用于另一种只能使用此格式的软件。

1 个答案:

答案 0 :(得分:1)

XSD 1.0

您在XSD 1.0中可以做的最好的事情是允许Zones下的所有元素:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Zones">
    <xs:complexType>
      <xs:sequence>
        <xs:any processContents="skip" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
   </xs:element>
</xs:schema>

XSD 1.1

在XSD 1.1中,您可以进一步限制Zones子项的名称,以Z开头:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
  vc:minVersion="1.1">
  <xs:element name="Zones">
    <xs:complexType>
      <xs:sequence>
        <xs:any processContents="skip" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:assert test="every $e in * satisfies starts-with(local-name($e), 'Z')"/>
    </xs:complexType>
   </xs:element>
</xs:schema>

你可以更进一步,并要求Z前缀之后的字符串是一个数字,甚至可能强加一个排序的约束,但这应该让你指向正确的方向。