XSD中的混合类型

时间:2011-10-05 12:04:40

标签: types xsd mixed

如何验证混合内容的XML元素?元素可以包含字符串“未定义”或浮点值。 我认为可以通过字符串Restriction with pattern来完成,但是可能存在更好的方法吗?

1 个答案:

答案 0 :(得分:0)

由Union元素使用。

解决

请考虑以下示例:示例XML定义日历日期。

<Calender>
  <Date>
    <Date>01</Date>
    <Month>Jan</Month>
    <Year>2013</Year>
  </Date>
  <Date>
    <Date>31</Date>
    <Month>01</Month>
    <Year>2013</Year>
  </Date>
</Calender>

由于Month元素具有Int和String两种类型..它可以像下面的XSD编写方式一样解析:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Calender" type="Calender"/>
  <xs:complexType name="Calender">
    <xs:sequence>
      <xs:element maxOccurs="unbounded" name="Date" type="Date"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Date">
    <xs:sequence>
      <xs:element name="Date" type="xs:unsignedByte" />
      <xs:element name="Month" type="Month" />
      <xs:element name="Year" type="xs:unsignedShort" />
    </xs:sequence>
  </xs:complexType>

  <xs:simpleType name="Month">
    <xs:union memberTypes="MonthNum MonthVal" />
  </xs:simpleType>
  <xs:simpleType name="MonthNum">
    <xs:restriction base="xs:int">
      <xs:minInclusive value="01"/>
      <xs:maxInclusive value="31"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="MonthVal">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Jan"/>
      <xs:enumeration value="Feb"/>
      <xs:enumeration value="Mar"/>
      <xs:enumeration value="Dec"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>