2017-10-05 3 views
0

Je suis nouveau à XSD et ne peux pas comprendre pourquoi mon XSD ne valide pas. J'obtiens les erreurs suivantes:XSD ne valide pas contre xml

s4s-elt-invalid-content.1: Le contenu de 'parametersInfo' n'est pas valide. L'élément 'complexType' est invalide, mal placé ou se produit trop souvent.

cvc-complex-type.2.4.d: Un contenu non valide a été trouvé en commençant par l'élément 'exception'. Aucun élément enfant n'est attendu à ce stade.

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>  

Suis-je manque quelque chose? Je voulais le rendre plus facile à l'aide des types complexes et les références pour le décomposer ...

Répondre

0

Votre déclaration de type parametersInfo lit

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

L'élément XSD complexType ne peut pas apparaître comme un enfant de complexType. Je ne sais pas ce que vous essayiez de faire, mais ce n'est pas la façon de le faire.

Vous devrez peut-être suivre un tutoriel ou deux sur XSD.