验证XSD文件时出现问题:派生类型的内容类型及其基类的内容类型必须是混合的,或者两者都是仅元素的

时间:2011-01-14 19:16:59

标签: xml eclipse validation xsd

我有以下XML架构:

<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns:netconf="urn:ietf:params:xml:ns:netconf:base:1.0"
targetNamespace="urn:ietf:params:xml:ns:netconf:base:1.0"
...

  <complexType name="dataInlineType">
    <xs:complexContent>
      <xs:extension base="xs:anyType"/>
 </xs:complexContent>
   </complexType>

<complexType name="get-config_output_type__" >
  <complexContent>
     <extension base="netconf:dataInlineType">
        <sequence>
           <element name="data">
              <complexType>
                 <sequence>
                    <element name="__.get-config.output.data.A__"
                       minOccurs="0" maxOccurs="unbounded"
                       />
                 </sequence>
              </complexType>
           </element>
           <element name="__.get-config.A__" minOccurs="0"
              maxOccurs="unbounded"/>
        </sequence>
     </extension>
  </complexContent>

我得到了愚蠢的错误:

  

cos-ct-extends.1.4.3.2.2.1.a:派生类型的内容类型及其基类的内容类型必须混合或两者都是仅元素。类型'get-config_output_type__'仅为元素,但其基本类型不是。

如果我放置两个元素mixed="true",我会收到另一个错误:

  

cos-nonambig:WC [## any]和“urn:ietf:params:xml:ns:netconf:base:1.0”:data(或elements)    来自他们的替代组)违反了“独特粒子归因”。在针对此模式进行验证期间,将为这两个粒子创建歧义。

我使用Eclipse来验证我的架构,那么我该怎么办?

1 个答案:

答案 0 :(得分:0)

最好在修复后描述您的问题,但我认为您所做的仍然是Schema 1.1中的冲突:http://en.wikipedia.org/wiki/Unique_Particle_Attribution

首先,你的定义没有以xs:别名作为前缀,这可能导致混淆并将验证规则重定向到netconf?因此,请尝试将该前缀添加到所有架构元素中。

即使这似乎在MSVS中干净利落地验证,我认为你应该在大多数验证器中得到这个错误,几乎所有的定义都来自添加额外元素的“anyType”类型。这是因为你的基类型已经包含了所有其他可能的组合,我不认为通配符匹配在派生类中会像通常会发生的那样弱。相反,您可以定义一个根类型,其中包含anyType元素并从中派生。如果Eclipse使用模式1.1规则进行验证,那么由于弱通配符匹配属性,这些规则应该可以正常工作。如果失败,则定义一个简单混合的根类型,只需使用其中一个类型是xs:any元素和mixed =“true”的类型。这使您可以选择创建可以限制有效元素的ant子类型。在使用“dataInlineType”的其余模式中,您可以通过声明substitutionGroup来替换它。我猜这可能是一个更好的解决方案,对于你的模式描述片段的意图。