2012-02-18 12 views
14

Sto lavorando alle mie competenze xml, ma errori di validazione mio XSD in determinati luoghi con radici profonde. I erorrs sono:Il contenuto non valido è stato trovato a partire dall'elemento 'elemento'. A questo punto non è previsto alcun elemento figlio

  • 18: 11 CVC-complesso-type.2.4.d: Contenuto non valido è stato trovato che iniziano con elemento 'aktor'. A questo punto non è previsto alcun elemento figlio.
  • 37: 11 cvc-complex-type.2.4.d: è stato trovato contenuto non valido a partire da
    con l'elemento 'utwor'. A questo punto non è previsto alcun elemento figlio.

Ecco XSD:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<xs:element name="filmy"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="film"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="tytul"/> 
         <xs:element name="gatunek"/> 
         <xs:element name="czasTrwania"/> 
         <xs:element name="premiera"/> 
         <xs:element name="produkcja"/> 
         <xs:element name="rezyser"/> 
         <xs:element name="scenariusz"/> 

         <xs:element name="obsada"> 
          <xs:complexType> 
           <xs:sequence> 
            <xs:element name="aktor"> 
             <xs:complexType> 
              <xs:sequence> 
               <xs:element name="imie"/> 
               <xs:element name="nazwisko"/> 
               <xs:element name="dataUrodzenia"/> 
               <xs:element name="postac"/> 
              </xs:sequence> 
             </xs:complexType> 
            </xs:element> 
           </xs:sequence> 
          </xs:complexType> 
         </xs:element> 

         <xs:element name="soundtrack"> 
          <xs:complexType> 
           <xs:sequence> 
            <xs:element name="utwor"> 
             <xs:complexType> 
              <xs:sequence> 
               <xs:element name="wykonawca"/> 
               <xs:element name="tytulUtworu"/> 
               <xs:element name="gatunekMuzyczny"/> 
              </xs:sequence> 
             </xs:complexType> 
            </xs:element> 
           </xs:sequence> 
          </xs:complexType> 
         </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

</xs:schema> 

Ecco XML:

<?xml version="1.0" encoding="utf-8"?> 
<filmy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <film> 
     <tytul>Fight Club</tytul> 
     <gatunek>Thriller, Psychologiczny</gatunek> 
     <czasTrwania>2h11m</czasTrwania> 
     <premiera>11 luty 1999</premiera> 
     <produkcja>Niemcy, USA</produkcja> 
     <rezyser>David Fincher</rezyser> 
     <scenariusz>Jim Uhls</scenariusz> 
     <obsada> 
      <aktor> 
       <imie>Edward</imie> 
       <nazwisko>Norton</nazwisko> 
       <dataUrodzenia>1969</dataUrodzenia> 
       <postac>Narrator</postac> 
      </aktor> 
      <aktor> 
       <imie>Brad</imie> 
       <nazwisko>Pitt</nazwisko> 
       <dataUrodzenia>1963</dataUrodzenia> 
       <postac>Tyler Durden</postac> 
      </aktor> 
      <aktor> 
       <imie>Helena</imie> 
       <nazwisko>Boham Carter</nazwisko> 
       <dataUrodzenia>1966</dataUrodzenia> 
       <postac>Marla Singer</postac> 
      </aktor> 
     </obsada> 
     <soundtrack> 
      <utwor> 
       <wykonawca>The Pixies</wykonawca> 
       <tytulUtworu>Where is my mind</tytulUtworu> 
       <gatunekMuzyczny>Rock</gatunekMuzyczny> 
      </utwor> 
      <utwor> 
       <wykonawca>The Pixies</wykonawca> 
       <tytulUtworu>Where is my mind</tytulUtworu> 
       <gatunekMuzyczny>Rock</gatunekMuzyczny> 
      </utwor> 
      <utwor> 
       <wykonawca>The Pixies</wykonawca> 
       <tytulUtworu>Where is my mind</tytulUtworu> 
       <gatunekMuzyczny>Rock</gatunekMuzyczny> 
      </utwor> 
     </soundtrack> 
    </film> 
</filmy> 

non capisco il problema, si dice di no elemento secondario è previsto, c'è un limite per il numero di bambino? Posso espanderlo?

Ho trovato risposta alla mia domanda, elementi che potrebbero essere moltiplicati, deve avere attributo maxOccurs = "illimitato".

+1

È necessario pubblicare la soluzione come risposta, quindi attendere 48 ore e "accettare" la propria risposta. Questo segnerà la domanda risposta, con la soluzione corretta, per i futuri utenti. Non otterrete punti, ma renderete il sito migliore –

+0

In realtà otterrete 2 punti per contrassegnare una risposta. –

risposta

14

Ho trovato risposta alla mia domanda, elementi che potrebbero essere moltiplicati, deve avere attributo maxOccurs = "illimitato".

2

Solo aggiungendo un'altra risposta qui come quella accettata non mi ha completamente aiutato.

Quindi se si dispone di una struttura come il richiedente domanda qui, non è possibile inserire maxOccurs="unbounded" nel wrapper dell'elemento più esterno poiché verrà considerato un elemento globale.

Devi mettere invece su tutti gli elementi possibili in questo modo:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<xs:element name="filmy"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="film"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element maxOccurs="unbounded" name="tytul"/> 
         <xs:element maxOccurs="unbounded" name="gatunek"/> 
         <xs:element maxOccurs="unbounded" name="czasTrwania"/> 
         <xs:element maxOccurs="unbounded" name="premiera"/> 
         <xs:element maxOccurs="unbounded" name="produkcja"/> 
         <xs:element maxOccurs="unbounded" name="rezyser"/> 
         <xs:element maxOccurs="unbounded" name="scenariusz"/> 

... ecc

2

La risposta accettata per questa domanda, sarà effettivamente risolvere il problema, ma non la è soluzione "giusta".

La ragione, aggiungendo illimitato, funziona, è che il XSD ora consentono più sequenze, cioè

<filmy> 
    <sequence> 
     <element_3> 
    </sequence> 
    <sequence> 
     <element_2> 
    <sequence> 
    <sequence> 
     <element_1> 
    <sequence> 
    </filmy> 

che cosa si dovrebbe fare per risolvere il problema, è aggiungere gli elementi della sequenza, per il contenuto, nell'ordine corretto, vale a dire qualcosa di simile:

filmy.getContent().add(element1) 
    filmy.getContent().add(element2) 
    filmy.getContent().add(element3) 

che vi darà:

<filmy> 
    <sequence> 
     <element_1> 
     <element_2> 
     <element_3> 
    <sequence> 
    </filmy> 

cioè solo una sequenza, e quindi nessuna necessità di illimitato.

Problemi correlati