2017-10-05 123 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教程。