xml - 用于不同元素名称的 XSD

标签 xml xsd xsd-validation

我想为 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 的子级名称限制为以 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,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31024492/

相关文章:

java - 如何使用java将xml文件数据插入mongodb数据库?

c# XmlElment 更改派生类中的顺序

java - 膨胀 View 时 WebCachedImageView 解析 XML 时出错

java - 文件路径中的特殊字符导致 XML XSD 验证失败

php - 针对相同的 XML 模式 (XSD) 加速一批 XML 文件的 XML 模式验证

java - 在 mypackage.R 中找不到 Android gradle src/androidTest/res/layout/mylayout.xml

java - 如何使用 XJC 为属性添加 @XmlTransient 注释

xml - 转换 xs :Enumerations in XSD to dropdown lists in Excel

sql-server - 创建 xml 模式集合的fractionDigits 限制的最大值

xml - 无效正则表达式 : Pattern value '(?:Y|N)' is not a valid regular expression.