在XSD中放置XML属性声明的位置?

时间:2017-05-17 12:02:35

标签: xml xsd xsd-validation xml-validation

我有一个带孩子的复杂元素,那些孩子有属性。一切正常,但现在我需要为复杂的主元素添加一个属性。

这是我运行良好的代码:

<xs:element name="route">
<xs:complexType>
  <xs:sequence>
    <xs:element name="origin">
      <xs:complexType>
        <xs:attribute name="name"/>
        <xs:attribute name="category">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="1sub1sub1"/>
              <xs:enumeration value="2sub1sub1"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:complexType>
    </xs:element>
  </xs:sequence>
</xs:complexType>

那么如何在路由元素中添加属性?如果我这样做,它会输出一个错误,即在他的上下文中不允许该属性:

<xs:element name="route">
<xs:complexType>
 <xs:attribute name="foobar"/>
  <xs:sequence>
    <xs:element name="origin">
      <xs:complexType>
        <xs:attribute name="name"/>
        <xs:attribute name="category">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="1sub1sub1"/>
              <xs:enumeration value="2sub1sub1"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:complexType>
    </xs:element>
  </xs:sequence>
</xs:complexType>

1 个答案:

答案 0 :(得分:0)

xs:complexType中添加属性声明作为 最后 声明

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="route">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="origin">
          <xs:complexType>

            <!-- WITHOUT child elements-->
            <!-- Add attribute declarations here -->
            <xs:attribute name="name"/>
            <xs:attribute name="category">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:enumeration value="1sub1sub1"/>
                  <xs:enumeration value="2sub1sub1"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>

          </xs:complexType>
        </xs:element>
      </xs:sequence>

      <!-- WITH child elements-->
      <!-- Add attribute declarations here -->
      <xs:attribute name="foobar"/>

    </xs:complexType>
  </xs:element>
</xs:schema>