代码之家  ›  专栏  ›  技术社区  ›  Markus

XSD:如何正确使用从抽象类型派生的类型元素?

  •  1
  • Markus  · 技术社区  · 7 年前

    List 类型。

    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    
      <xs:complexType name="BaseListContent" abstract="true" />
    
      <xs:complexType name="BaseList" abstract="true">
        <xs:sequence>
          <xs:element name="id" type="xs:int" />
          <xs:element name="content" type="BaseListContent" />
        </xs:sequence>
      </xs:complexType>
    
      <xs:complexType name="ListContent">
        <xs:complexContent>
          <xs:extension base="BaseListContent">
            <xs:sequence>
              <xs:element name="id" type="xs:int" minOccurs="0" maxOccurs="10" />
            </xs:sequence>
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
    
      <xs:complexType name="List">
        <xs:complexContent>
          <xs:extension base="BaseList">
            <xs:sequence>
              <xs:element name="content" type="ListContent" />
            </xs:sequence>
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
    
      <xs:element name="list" type="List" />
    
    </xs:schema>
    

    现在,我尝试根据架构验证以下XML文档:

    <list>
      <id>1</id>
      <content>
        <id>1</id>
        <id>2</id>
      </content>
    </list>
    

    但是 告诉我文档无效:

    > xmllint --noout --schema ~/test.xsd ~/test.xml
    test.xml:1: element list: Schemas validity error : Element 'list': Missing child element(s). Expected is ( content ).
    test.xml fails to validate
    

    content ?

    更新:更新版本的 xmllint公司 (使用libxml版本20904)显示架构中的错误。

    $ xmllint --noout --schema test.xsd test.xml
    test.xml:3: element content: Schemas validity error : Element 'content': The type definition is abstract.
    test.xml:1: element list: Schemas validity error : Element 'list': Missing child element(s). Expected is ( content ).
    test.xml fails to validate
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   kjhughes    7 年前

    即使在验证XML文档之前,XSD本身也有问题:

    [错误]测试。xsd:23:31:cos元素一致:类型错误 List . content ,具有不同的类型,出现在 模型组。

    的内容模型 列表 BaseList 添加 元素,而不是修改现有元素。也, 同名但类型不同的元素不能共享父元素 :

    另请参见: