2016-11-20 117 views
1

屬性我有以下XML可能性:XML/XSD與擴展類型和限制

  1. <Platform>iTunes</Platform>
  2. <Platform IsSubscriptionPlatform="True">Netflix</Platform>

什麼是這個正確的XSD元素?到目前爲止,我有:

<xs:element name="Platform"> 
    <xs:complexType> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
     <xs:attribute name="IsSubscriptionPlatform" use="optional"> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
        <xs:pattern value="(True|False)?" /> 
       </xs:restriction> 
      </xs:simpleType> 
     </xs:attribute> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

我將如何進一步增加平臺的價值的限制可能是「iTunes的」或「Netflix的」。也就是說,在那裏我會補充:

<xs:restriction base="xs:string"> 
    <xs:enumeration value="iTunes" /> 
    <xs:enumeration value="Netflix" /> 
</xs:restriction> 

回答

1

這裏是你的XSD修改,以接受你的XML是有效的:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified"> 

    <xs:simpleType name="PlatformCompany"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="iTunes" /> 
     <xs:enumeration value="Netflix" /> 
    </xs:restriction>  
    </xs:simpleType> 

    <xs:element name="Platform"> 
    <xs:complexType> 
     <xs:simpleContent> 
     <xs:extension base="PlatformCompany"> 
      <xs:attribute name="IsSubscriptionPlatform" use="optional"> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
       <xs:pattern value="(True|False)?" /> 
       </xs:restriction> 
      </xs:simpleType> 
      </xs:attribute> 
     </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
    </xs:element> 

</xs:schema> 

請注意,您的@IsSubscriptionPlatform聲明允許它是空的。如果你不想這樣做,請刪除?或使用枚舉。或者,如果您可以自由更改XML設計,請使用truefalse來代替,並簡化您的聲明:

<xs:attribute name="IsSubscriptionPlatform" use="optional" type="xs:boolean"/>