XSD 用于不同的元素名称
XSD for varying element names
我想为 XMl 构建一个 xsd 架构,其元素范围为 z1-zx。是否可以在 xml 模式中定义它而不必写出声明每个元素。
请看下面:
<?xml version="1.0"?>
<Zones>
<Z1>Asset00</Z1>
<Z2>Asset00</Z2>
</Zones>
我希望区域能够升级到 Zxxx,而不必在 XSD 中声明每个区域,是否可以这样做?
请注意,我无法更改 xml 的结构,因为我将其用于只能采用这种格式的其他软件。
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
的 children 的名称以 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
前缀后的字符串是一个数字,甚至可能还施加一个排序约束,但这应该让您指向正确的方向。
我想为 XMl 构建一个 xsd 架构,其元素范围为 z1-zx。是否可以在 xml 模式中定义它而不必写出声明每个元素。
请看下面:
<?xml version="1.0"?>
<Zones>
<Z1>Asset00</Z1>
<Z2>Asset00</Z2>
</Zones>
我希望区域能够升级到 Zxxx,而不必在 XSD 中声明每个区域,是否可以这样做?
请注意,我无法更改 xml 的结构,因为我将其用于只能采用这种格式的其他软件。
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
的 children 的名称以 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
前缀后的字符串是一个数字,甚至可能还施加一个排序约束,但这应该让您指向正确的方向。