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