1

我们有在 .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 '开发者',所以请随意扯掉。:)

4

1 回答 1

1

您显示的 XML 实例对于您显示的 XSD 模式是模式有效的。Xerces J 这么说,MSV 这么说,Saxon 这么说,而且(就它的价值而言)我这么说。

已知 xmllint 中的 XSD 支持是不完整的。看起来这是不完整的区域之一。

(顺便说一句,将问题简化为一个小测试用例,做得很好。干得好!)

于 2013-08-23T18:38:29.370 回答