2016-11-20 2 views
1

と属性XSD拡張子を持つタイプのために、私持っている次のXMLの可能性:XML /制限

  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を受け入れるように変更されています:それは私が追加する場所、である@IsSubscriptionPlatformのあなたの宣言は、それが空にすることができます

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

注意。必要がない場合は、?を削除するか、列挙型を使用してください。 XMLデザインを自由に変更できる場合は、代わりにtruefalseとし、宣言を次のように簡略化してください。