空可选元素错误?

Empty optional element error?

我有一个元素 labels,其 minoccurs="0"minLength="1"

<xs:element name="labels" type="x2x:labels" minOccurs="0" />

<xs:simpleType name="labels">
        <xs:restriction> 
            <xs:simpleType> 
                <xs:list itemType="xs:token" />
            </xs:simpleType>    
            <xs:minLength value="1" /> 
        </xs:restriction> 
    </xs:simpleType>

未设置 labels 时出现以下错误:

Caused by: org.xml.sax.SAXParseException; lineNumber: 0; columnNumber: 0; cvc-minLength-valid: Value '' with length = '0' is not facet-valid with respect to minLength '1' for type 'labels'.

据我所知,如果 minOccurs=0 而我没有设置该元素,则不应给出任何错误,因为它是可选的。

minLength '1' for type 'labels'.

这是逻辑,如果你没有使用labels,它得到值0,在<xs:minLength value="1" />,是你的问题。更改它或设置一个值。 如果是字符串,请将 <xs:restriction> 更改为 <xs:restriction base="xs:string">

XSD

以下XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:x2x="http://www.example.com/x2x"
           targetNamespace="http://www.example.com/x2x">

  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="labels" type="x2x:labels" minOccurs="0" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:simpleType name="labels">
    <xs:restriction> 
      <xs:simpleType> 
        <xs:list itemType="xs:token" />
      </xs:simpleType>    
      <xs:minLength value="0" /> 
    </xs:restriction> 
  </xs:simpleType>
</xs:schema>

成功验证了以下两个 XML 文档,因为它允许

  1. labels 根据 minOccurs="0" 缺席,
  2. labels 根据 minLength="0" 显示空内容(不是 1,这会导致您收到错误)。

XML,没有labels

<x2x:root/>

XML,空labels

<x2x:root>
  <labels/>
</x2x:root>

问题是我发送了 empty 元素,即默认情况下它们被设置为空列表。因此存在异常,因为 minLen="1" 不接受空元素,并且 minoccurs="0" 在设置元素时得到满足(occurenece 为真)。