如何使类型使用条件类型分配取决于属性值如何使类型使用条件类型分配取决于属性值(How to make

2019-05-10 10:32发布

我有一个这样的XML文件

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

我想提出的XSD,因此,如果属性“类型”的值为1,姓名元素必须存在,并且当它是2,名称和ID必须在那里。 我试图生成在XSD XSD模式发生器 ,但它使姓和id元件的minOccurs = 0。 我怎样才能使它发挥作用?

Answer 1:

您可以使用XSD 1.1的做这个条件类型分配

<?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>


文章来源: How to make type depend on attribute value using Conditional Type Assignment