【问题标题】:<xs:any> and matching wildcard error<xs:any> 和匹配的通配符错误
【发布时间】:2013-06-13 20:35:19
【问题描述】:

目标:创建一个 complexType,它允许元素“跳过”以任何顺序包含任何元素、任意次数、并无错误地验证我的 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>

我将 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>

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

<skip>
   <anyelement1></anyelement1>
   <anyelement2></anyelement2>
   <anyelementN></anyelementN>
</skip>

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

【问题讨论】:

    标签: xml eclipse xsd xml-validation


    【解决方案1】:

    如果您显示的架构文档产生了您引用的错误消息,那将是令人惊讶的;我希望您的第一个问题是您的架构文档(您说)名为 skip.xsd,但相关 xs:include 上的 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 没有错误),所以看起来你想要一个跳过通配符。

    【讨论】:

    • 这是这个问题的正确答案。后来我在尝试优化架构时遇到了同样的错误。我即将发布我的解决方案,可以在这里找到讨论:stackoverflow.com/questions/17173766/…Thanks
    猜你喜欢
    • 1970-01-01
    • 2017-07-04
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多