【问题标题】:How do you nest complexType elements in an xsd?如何在 xsd 中嵌套 complexType 元素?
【发布时间】:2012-06-24 07:18:34
【问题描述】:

我有一个正确验证的 xml 和 xsd 文件(在 http://xsdvalidation.utilities-online.info/ 测试)。

但是,xml 不会针对 xsd 进行验证。我认为这是因为与 xml 相比,我在 xsd 中错误地嵌套了 complexType 元素。 people 的外部元素似乎导致了问题......

这是xml:

<?xml version = "1.0"?>

<people>
    <person>
        <firstname>Joe</firstname>
        <lastname>Schmoe</lastname>
    </person>

    <person>
        <firstname>Cletus</firstname>
        <lastname>Jenkins</lastname>
    </person>
</people>

...这里是xsd:

<?xml version = "1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

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

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

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

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

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

</xs:schema>

【问题讨论】:

    标签: xml validation xsd complextype


    【解决方案1】:

    将maxOccurs="unbounded" 添加到名为“person”的元素中。它是一个或多个 person 元素的序列。

    注意:maxOccurs 用 lowerCamelCase 写而不是小写

    【讨论】:

      【解决方案2】:

      为您的 XSD 试试这个:

      <?xml version = "1.0"?>
      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
      
          <xs:element name="people" type="people"/>
      
          <xs:complexType name="people">
              <xs:sequence>
                  <xs:element name="person" type="person" maxOccurs="unbounded" minOccurs="0"/>
              </xs:sequence>
          </xs:complexType>
      
          <xs:complexType name="person">
              <xs:sequence>
                  <xs:element name="firstname" type="xs:string" maxOccurs="1" minOccurs="1"/>
                  <xs:element name="lastname" type="xs:string" maxOccurs="1" minOccurs="1"/>
             </xs:sequence>
          </xs:complexType>
      
      </xs:schema>
      

      【讨论】:

      • 顺便说一句,我已经为某些元素的出现次数添加了一些示例限制,但是当然可以根据您的要求更改或省略这些限制。
      • 这是一个有趣的解决方案@JonoB... 将限制添加为元素的属性而不是使用&lt;xs:restriction base = "xs:string"&gt;...&lt;/xs:restriction&gt; 标签总是更好的做法吗?
      猜你喜欢
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-28
      • 1970-01-01
      • 2013-10-10
      相关资源
      最近更新 更多