XML / XSD用于带扩展名和带限制属性的类型

时间:2016-11-20 08:43:22

标签: xml xsd lxml

我有以下XML可能性:

  1. <Platform>iTunes</Platform>
  2. <Platform IsSubscriptionPlatform="True">Netflix</Platform>
  3. 这对于正确的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 个答案:

答案 0 :(得分: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"/>