xmllint是否正确处理了一个nillable compexType?

时间:2013-08-23 18:19:49

标签: xml xsd xmllint

我们有在.NET下创建的XSD和示例XML(并且可能通过验证),但它们无法在xmllint下验证。我们试图确定一方或另一方是否“不正确”,或者这是否在规范中有些含糊不清。我试过在这里和谷歌搜索,但找不到任何描述同样问题的东西。而不是发布原始XSD和& XML,我创建了一个较小的测试来重现问题。

XSD是:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           elementFormDefault="qualified" 
           attributeFormDefault="unqualified">
  <xs:complexType name="A">
    <xs:sequence>
      <xs:element name="B" nillable="true" type="B" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="A" nillable="true" type="A" />
  <xs:complexType name="B">
    <xs:sequence>
      <xs:element name="date" 
                  minOccurs="1" 
                  maxOccurs="50" 
                  nillable="true" 
                  type="xs:date" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="B" nillable="true" type="B" />
</xs:schema>

XML是:

<?xml version="1.0" encoding="UTF-8"?>
<A xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xsi:noNamespaceSchemaLocation="test.xsd">
  <B xsi:nil="true"></B>
</A>

xmllint命令运行是:

xmllint --schema test.xsd --noout test.xml

xmllint的输出是:

test.xml:3: element B: Schemas validity error : Element 'B': Missing child element(s). Expected is ( date ).
test.xml fails to validate

我几乎是初学者XSD / XML'开发者',所以请随意撕掉。 :)

1 个答案:

答案 0 :(得分:1)

您显示的XML实例对您显示的XSD架构是架构有效的。所以Xerces J说,MSV说,所以撒克逊说,并且(因为它值得)所以说我。

xmllint中的XSD支持已知不完整;看起来这是一个不完整的领域。

(顺便说一下,把问题简化为一个小的测试用例。很好的工作!)