具有属性和子元素的元素的XSD表示是什么?

时间:2013-02-08 18:39:01

标签: xml xsd

我的XML看起来像这样:

<root>
  <elt att1="bla" att2="ble">
    <subelt satt1="bli" satt2="1" />
    <subelt satt1="blo" satt2="18" />
    <subelt satt1="blu" satt2="4" />
  </elt>
</root>

任何elt都可能有1个。 elt可能有1到任何subelt。 我尝试针对此实用程序验证我的架构:http://www.utilities-online.info/xsdvalidation。这是我的xsd:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="elt" minOccurs="1" maxOccurs="unbounded">
          <xs:complexType>
            <xs:attribute name="att1" type="xs:string" use="required"/>
            <xs:attribute name="att2" type="xs:string" use="required"/>
            <xs:sequence>
              <xs:element name="subelt" minOccurs="1" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:attribute name="subatt1" type="xs:string" use="required"/>
                  <xs:attribute name="subatt2" type="xs:integer"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

问题来自具有属性和子元素(序列)的元素。我尝试在序列周围放置一个xs:complexType,但仍然会得到不同的错误。我是XML模式的初学者,因此我很难理解我应该如何格式化它。你能给我一些建议吗?感谢。

(我的文件中可能存在一些拼写错误,因为我更改了元素和属性名称)

1 个答案:

答案 0 :(得分:1)

由于历史原因,XSD复杂类型首先指定元素的内容模型,然后指定属性。因此elt元素的复杂类型应该类似于:

<xs:complexType>
  <xs:sequence>
    <xs:element name="subelt" minOccurs="1" maxOccurs="unbounded">
      <xs:complexType>
        <xs:attribute name="subatt1" type="xs:string" use="required"/>
        <xs:attribute name="subatt2" type="xs:integer"/>
      </xs:complexType>
    </xs:element>
  </xs:sequence>
  <xs:attribute name="att1" type="xs:string" use="required"/>
  <xs:attribute name="att2" type="xs:string" use="required"/>
</xs:complexType>