2017-10-05 122 views
0

我是XSD的新手,无法弄清楚为什么我的XSD无法验证。我收到以下错误:XSD不针对xml进行验证

s4s-elt-invalid-content.1:'parametersInfo'的内容无效。元素“complexType”无效,错位或发生频率过高。

cvc-complex-type.2.4.d:从元素'exception'开始找到无效内容。预计在这一点上不会有子元素。

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<service id="IServiceREST"> 
      <inherit> 
       <parent>Remote</parent> 
      </inherit> 
      <package>com.module</package> 
      <include>java.rmi.Remote</include> 
      <include>java.net.*</include> 
      <include>java.io.*</include> 
      <abstract_method id="getContent"> 
       <visibility>public</visibility> 
       <parameters> 
        <argument type="URL">url</argument> 
        <argument type="int">timeout</argument> 
       </parameters> 
       <throw> 
        <exception>MalformedURLException</exception> 
        <exception>IOException</exception> 
       </throw> 
       <return>String</return> 
      </abstract_method> 
      <abstract_method id="deleteUser"> 
       <visibility>public</visibility> 
       <parameters> 
        <argument type="String">username</argument> 
       </parameters> 
       <return>void</return> 
      </abstract_method> 
</service> 

XSD:

<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:complexType name="serviceInfo"> 
     <xs:sequence> 
      <xs:element name="inherit" type="inheritInfo" minOccurs="1" maxOccurs="unbounded"/> 
      <xs:element name="package" type="xs:string" /> 
      <xs:element name="include" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> 
      <xs:element name="abstract_method" type="abstract_methodInfo" minOccurs="0" maxOccurs="unbounded" /> 
     </xs:sequence> 
     <xs:attribute type="xs:string" name="id" /> 
    </xs:complexType> 

    <xs:complexType name="inheritInfo"> 
     <xs:sequence> 
      <xs:element type="xs:string" name="parent" /> 
     </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="abstract_methodInfo"> 
     <xs:sequence> 
      <xs:element type="xs:string" name="visibility" minOccurs="0" maxOccurs="1"/> 
      <xs:element type="parametersInfo" name="parameters" />  
      <xs:element type="throwInfo" name="throw" minOccurs="0" maxOccurs="unbounded"/> 
      <xs:element type="xs:string" name="return" minOccurs="1" /> 
     </xs:sequence> 
     <xs:attribute type="xs:string" name="id" /> 
    </xs:complexType> 


    <xs:complexType name="throwInfo"> 
     <xs:sequence> 
      <xs:element type="xs:string" name ="exception" /> 
     </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="parametersInfo"> 
      <xs:complexType type="xs:string" name="argument"> 
      <xs:sequence> 
       <xs:element name="URL" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 
       <xs:element name="timeout" type="xs:integer" minOccurs="0" maxOccurs="unbounded"/> 
      </xs:sequence> 
      </xs:complexType> 
    </xs:complexType> 
    <xs:element name="service" type="serviceInfo"/> 
</xs:schema>  

我这么想吗?我想让它更容易使用复杂的类型和引用它们进行分解...

回答

0

parametersInfo类型的声明指出

<xs:complexType name="parametersInfo"> 
    <xs:complexType type="xs:string" name="argument"> 
    <xs:sequence> 
     <xs:element name="URL" type="xs:string" 
        minOccurs="0" maxOccurs="unbounded"/> 
     <xs:element name="timeout" type="xs:integer" 
        minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:complexType> 

的XSD complexType元素不能显示为complexType一个孩子。我不知道你在做什么,但这不是做到这一点的方法。

您可能需要完成一个或两个XSD教程。