我正在尝试像这样验证一些xml:
<Rpms>
<Rpm>path/file.rpm</Rpm>
<SlImport>path/file.xml</SlImport>
<Rpms>
标签 Rpm 和 SlImport 遵循以下规则:
我写了这个xsd:
<xs:element name="Rpms">
<xs:complexType>
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element name="SlImport" type="SlElement" minOccurs="0" />
<xs:element name="Rpm" type="rpmElement" maxOccurs="unbounded">
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
它工作正常,除非在这种情况下:如果 Rpms 标记为空,它不会抛出错误。
答案 0 :(得分:1)
我会在“SlImport”定义中省略“minOccurs”属性,比如
<xs:element name="Rpms">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="SlImport" type="xs:string"/>
<xs:element name="Rpm" type="xs:string" />
</xs:choice>
</xs:complexType>
</xs:element>
因为空“Rpms”是有效的,因为可能存在SlImport的“零发生”。
IMO包装“xs:sequence”也是多余的,可以删除。