Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSD:如何正确使用从抽象类型派生的类型元素?_Xml_Xsd_Xsd Validation_Xml Validation - Fatal编程技术网

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

Xml XSD:如何正确使用从抽象类型派生的类型元素?,xml,xsd,xsd-validation,xml-validation,Xml,Xsd,Xsd Validation,Xml Validation,我有以下模式,其中包含抽象列表类型的定义和具体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" abstr

我有以下模式,其中包含抽象列表类型的定义和具体
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>
这里的问题是什么,因为显然有一个子元素
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

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

[错误]test.xsd:23:31:cos元素一致性:类型
列表的错误
。 多个名为
内容
且类型不同的元素出现在
模型组

列表
的内容模型是
基本列表
的扩展,因此只能添加元素,不能修改现有元素。另外,相同名称但不同类型的元素不能共享父元素:

另请参见:


谢谢。我尝试了xmllint的最新版本,现在它表明模式中存在错误。我想并没有简单的方法可以获得一个有效的模式?很明显,若你们修改(或完全放弃)XML的继承结构,你们可以编写一个XSD来验证XML。当然,但我的模式的要点是获得一个基本列表和内容类型,然后很容易地创建一组具有不同内容的具体列表类型。哦,好吧。。。回到绘图板。我添加了几个链接,这些链接可能有助于您探索其他选择。再次感谢。在这种情况下,小组似乎可以对我有所帮助。
> 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
$ 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