xsd:complexType 具有 children、属性和限制

xsd:complexType with children, attributes, and restrictions

我正在努力创建一个架构,但由于将其定义为具有 children、属性、 限制的复杂类型而卡在了我的根元素附近在这些属性上

这是我迄今为止尝试过的....(百叶窗格式)

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsd:element name="foos">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="foo" type="FooType" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:sequence>         
    </xsd:complexType>
</xsd:element>
<xsd:complexType name="FooType">
    <xsd:attribute name="exchangeType" type="xsd:string" use="required">
        <xsd:simpleType>
            <xsd:restriction base="xsd:string">
                <xsd:enumeration value="S" />
                <xsd:enumeration value="T" />
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:attribute>
    <xsd:sequence>
        <xsd:element name="thing1" type="Thing1Type" />
        <xsd:element name="thing2" type="Thing2Type" />
    </xsd:sequence>
</xsd:complexType>
</xsd:schema>

我一直无法找到合并此属性及其限制的方法

有什么想法吗?

两个主要更正:

  1. xsd:attribute 声明不能同时具有本地 xsd:simpleType 和一个 @type 属性;删除了 @type 属性。
  2. xsd:attribute声明不能出现在xsd:sequence之前; 移到后面。

XSD 已应用更正:

此 XSD 进行了上述更正并应用了一些其他小修复,现在有效:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <xsd:element name="foos">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="foo" type="FooType" 
                     minOccurs="1" maxOccurs="unbounded"/>
      </xsd:sequence>         
    </xsd:complexType>
  </xsd:element>
  <xsd:complexType name="FooType">
    <xsd:sequence>
      <xsd:element name="thing1" type="Thing1Type" />
      <xsd:element name="thing2" type="Thing2Type" />
    </xsd:sequence>
    <xsd:attribute name="exchangeType" use="required">
      <xsd:simpleType>
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="S" />
          <xsd:enumeration value="T" />
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
  </xsd:complexType>
  <xsd:complexType name="Thing1Type"/>
  <xsd:complexType name="Thing2Type"/>
</xsd:schema>