WMHelp XMLPad校验异常:满足XSD基数要求的奇数个level元素被拒
问题:WMHelp XMLPad校验XSD时仅允许偶数个
<level>元素通过 需求是确保每个<levels>列表包含至少2个<level>元素,编写的XSD如下:
<?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="ItemType"> <xs:sequence> <xs:element name="levels"> <xs:complexType> <xs:sequence> <xs:element name="level" type="xs:string" minOccurs="2" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="id" type="xs:string"/> </xs:complexType> <xs:element name="root"> <xs:complexType> <xs:all> <xs:element name="items" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="item" type="ItemType" minOccurs="1" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:all> </xs:complexType> </xs:element> </xs:schema>
对应的XML文件:
<?xml version="1.0" encoding="UTF-8"?> <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="mySchema.xsd"> <items> <item id="1"> <levels> <level>one</level> </levels> </item> <item id="2"> <levels> <level>one</level> <level>two</level> </levels> </item> <item id="3"> <levels> <level>one</level> <level>two</level> <level>three</level> </levels> </item> <item id="4"> <levels> <level>one</level> <level>two</level> <level>three</level> <level>four</level> </levels> </item> <item id="5"> <levels> <level>one</level> <level>two</level> <level>three</level> <level>four</level> <level>five</level> </levels> </item> </items> </root>
使用WMHelp XMLPad校验时,<item id="1">(仅1个<level>)被警告符合预期,但<item id="3">(3个<level>)和<item id="5">(5个<level>)也被意外警告,提示信息:
Element levels {} has invalid structure for schema definition: (level{2..unbounded})
仅含偶数个<level>的<item>(id=2、4)校验通过,奇数个的全部被拒绝。
原因分析
这是WMHelp XMLPad的XSD校验引擎存在Bug,你的XSD写法完全符合W3C XML Schema规范:minOccurs="2" maxOccurs="unbounded"明确允许2个及任意多个(包括奇数个)<level>元素。
这种只允许偶数个元素通过的错误,属于工具自身的实现缺陷,和你的XSD、XML内容无关。
换用其他标准的XSD校验工具(比如XMLSpy、Oxygen XML Editor)验证,这些工具会正确判定只有id=1的元素不符合要求,id=3、5的元素均会校验通过。
内容的提问来源于stack exchange,提问作者Leszek Pachura
相关产品推荐
相关产品推荐

