xml - 如何使用条件类型分配使类型取决于属性值

标签 xml xsd xsd-validation xsd-1.1

我有一个这样的 XML 文件

<listOfA>
  <a type="1">
    <name></name>
    <surname></surname>
  </a>
  <a type="2">
    <name></name>
    <id></id>
  </a>
</listOfA>

我想制作一个 XSD,这样如果属性“type”的值为 1,则 name 和 surname 元素必须存在,而当它为 2 时,name 和 id 必须存在。我试图在 XSD schema generator 中生成 XSD ,但它使姓氏和 ID 元素 minOccurs=0。我怎样才能让它发挥作用?

最佳答案

您可以使用 XSD 1.1 的 Conditional Type Assignment 执行此操作:

<?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"
           elementFormDefault="qualified"
           vc:minVersion="1.1"> 
  <xs:element name="listOfA">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="a" maxOccurs="unbounded">
          <xs:alternative test="@type = 1" type="a1Type"/>        
          <xs:alternative test="@type = 2" type="a2Type"/>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="a1Type">
    <xs:sequence>
      <xs:element name="name"/>
      <xs:element name="surname"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="a2Type">
    <xs:sequence>
      <xs:element name="name"/>
      <xs:element name="id"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

关于xml - 如何使用条件类型分配使类型取决于属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27878402/

相关文章:

xml - XSD - 扩展 XSD 然后添加自定义嵌套元素

java - 奇怪的 XML 结构的验证

java - 如何使用 jaxb 从 java 对象创建 xml

android - 在Android右上角的RelativeLayout上绘制三角形

Java:将 XML 模式本身绑定(bind)到类

xsd - 如何对xsd :dateTime?施加分钟限制

java - 用于 XML 验证的 XSD 创建

java - 将 XML 映射到 Java 中的对象

android - Eclipse Android XML 布局页眉和页脚

java - 如何通过 xsd 验证 org.w3.dom.Document?