2011-10-05 82 views
-1

如何驗證混合內容的XML元素?元素可以包含字符串「未定義」或浮點值。 我認爲它可以通過字符串限制與模式,但也許有更好的方式存在?XSD中的混合類型

回答

0

使用聯合元素解決。

請考慮以下示例:示例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> 

自本月元素具有類型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>