错误根据xsd验证xml文件

时间:2014-03-08 11:59:48

标签: xml xsd

我尝试针对xsd文件验证xml文件 但我得到一个错误,我不知道为什么 有没有人有想法?

我的xsd文件:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
      <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:element ref="call"/>
            </xs:choice>
      </xs:complexType>
  </xs:element>

  <xs:element name="cl">
      <xs:complexType>
           <xs:choice minOccurs="1" maxOccurs="1">
                   <xs:element ref="arguments"/>
                   <xs:element ref="outputs"/>
           </xs:choice>
           <xs:attribute name="name" type="xs:string" use="required"/>
           <xs:attribute name="module" type="xs:string" use="required"/>
           <xs:attribute name="title" type="xs:string" use="optional"/>
      </xs:complexType> 
  </xs:element>

  <xs:element name="">
       <xs:complexType>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
                 <xs:element ref=""/>
          </xs:choice>
      </xs:complexType> 
  </xs:element>

  <xs:element name="">
   <xs:complexType>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
          xs:element ref=""/>
    </xs:choice>
   </xs:complexType>    
  </xs:element>


  <xs:element name="">
    <xs:complexType>
        <xs:attribute name="name" type="xs:string" use="required"/>
        <xs:attribute name="value" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="">
    <xs:complexType>
        <xs:attribute name="name" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>

</xs:schema> 

我收到了无效的文件&#39;而且我不知道问题出在哪里,任何人都可以帮助我吗? 谢谢

1 个答案:

答案 0 :(得分:1)

您的实例无效,因为根据您的架构,您的choice元素中只能有argumentsoptions call<xs:choice minOccurs="1" maxOccurs="1"> <xs:element ref="arguments"/> <xs:element ref="outputs"/> </xs:choice>

<call name="name" module="module" title="title">
    <outputs>
        <output name="name"/>
    </outputs>
</call>

所以,这是有效的:

<call name="name" module="module" title="title">
    <arguments>
        <argument name="NAME" value="value"/>
    </arguments>
</call>

这是有效的:

<call name="name" module="module" title="title">
    <arguments>
        <argument name="NAME" value="value"/>
    </arguments>
    <outputs>
        <output name="name"/>
    </outputs>
</call>

但事实并非如此,因为对一个元素的最大值和最小值存在约束:

choice

您可能希望将sequence替换为maxOccurs或增加minOccurs / {{1}}值(取决于您希望拥有的结构)。