<xs:any>和匹配的通配符错误

Jef*_*pia 1 xml eclipse xsd xml-validation

目标:创建一个complexType,允许元素"skip"以任意顺序包含任意元素,并且无误地验证我的xml.

架构:skip.xsd

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema
  xmlns="http://www.example.com/main"
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  targetNamespace="http://www.example.com/main" 
  attributeFormDefault="unqualified" 
  elementFormDefault="qualified"
  >

  <xs:complexType name="skip">
    <xs:sequence>
      <xs:any minOccurs="1" 
              maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>

</xs:schema>
Run Code Online (Sandbox Code Playgroud)

我将skip.xsd导入到我的main.xsd中

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema
  xmlns:esc="http://www.escmatrix.com/main"
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  targetNamespace="http://www.example.com/main" 
  attributeFormDefault="unqualified" 
  elementFormDefault="qualified"
  >

    <xs:include 
      schemaLocation="http://www.example/skip" />

    <xs:element name="tasks">
      <xs:complexType>
        <xs:choice minOccurs="0" 
                   maxOccurs="unbounded" >
          <xs:element name="skip" 
                      type="esc:skip" />
        </xs:choice>
      </xs:complexType>
    </xs:element>
<xs:schema>
Run Code Online (Sandbox Code Playgroud)

我需要验证可以具有以下形式的xml:

<skip>
   <anyelement1></anyelement1>
   <anyelement2></anyelement2>
   <anyelementN></anyelementN>
</skip>
Run Code Online (Sandbox Code Playgroud)

问题:验证时出错; "cvc-complex-type.2.4.c:匹配的通配符是严格的,但是找不到元素'anyelement1'的声明"

C. *_*een 6

如果您显示的架构文档产生了您引用的错误消息,那将是令人惊讶的; 我希望您的第一个问题是您的架构文档(您说)名为skip.xsd,但相关xs上的schemaLocation属性包括指向http://example.com/skip的点,而您的第二个问题是您的跳过类型位于名称空间http://www.example.com/main中,但skip元素的声明是指名称空间http://escmatrix.com/main中的类型.但我想这些只是在减少问题的示例代码时出现的文书错误.

错误消息非常清楚:您的通配符被解释为严格通配符,因此与其匹配的元素应具有声明,如果不符合,则文档无效.你通配符是一个严格的一个,因为你没有指定processContents为它的属性,和默认值processContents是strict.如果要允许未声明的元素,则需要指定processContents="lax"或者processContents="skip"- 如果要存在声明的元素应该针对这些声明进行验证,则使用宽松通配符,如果不希望在以下位置验证它们,请使用跳过通配符所有,在这种情况下skip只要孩子的形成良好,元素就会有效.你说你想要一个"无错误地验证我的xml"的模式,我猜你的意思是"在所有情况下都接受我的XML有效"(处理器已经正确并成功地检查输入的有效性而没有失败,所以它是已经验证了你的XML而没有错误),所以它看起来好像你想要一个跳过通配符.