XSD:使用属性和其他子元素定义复杂元素

时间:2016-03-18 08:31:21

标签: xml xsd xsd-validation xml-validation

我想定义一个这样的元素:

<A id='1'>
  <name>jack</name>
</A>

下面我可以定义元素A的属性id

<xs:complexType name="A">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute type="xs:int" name="id"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

实际上它不正确,上面的XSD定义了一个元素<A id="1">hi</A>。我不知道如何丢弃<xs:extension>元素的基本属性。

使用下面的XSD,我可以定义内部元素<name>

<xs:element name = "A">
    <xs:complexType>
        <xs:sequence>

            <xs:element name = "name" type="xs:string"/>

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

我可以将这两者结合在一起,如下所示吗?我无法正确理解语法。

    <xs:element name = "A">
        <xs:complexType>
            <xs:sequence>
                <xs:element name = "name" type="xs:string"/>                       
            </xs:sequence>
        </xs:complexType>
        <xs:simpleContent>
          <xs:extension>
            <xs:attribute type="xs:int" name="id"/>
          </xs:extension>
        </xs:simpleContent>
    </xs:element>

1 个答案:

答案 0 :(得分:3)

您的XML或陈述的约束中没有任何内容表明此处需要xs:extension

以下简单的XSD,

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="A">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="name" type="xs:string"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:int"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

将验证您的XML

<A id='1'>
  <name>jack</name>
</A>
根据要求