2011-03-02 8 views
6

Ho solo una comprensione elementare di XML Schema. Questa è fondamentalmente la mia prima interazione con loro in modo serio e sto avendo alcuni problemi. Ho letto su XSD su google e tutto sembra andare su e su con questo file.C'è qualcosa di radicalmente sbagliato in questo schema XML?

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="credits"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="property" maxOccurs="16" minOccurs="13" /> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

    <xs:element name="property" type="xs:string">  
    <xs:complexType>   
     <xs:sequence>    
      <xs:element ref="item" minOccurs="1" maxOccurs="unbounded" /> 
     </xs:sequence> 
     <xs:attribute ref="name" use="required"/> 
    </xs:complexType> 

    </xs:element> 

    <xs:element name="item" type="xs:string"/> 

    <xs:attribute name="name" type="xs:string"> 
     <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="example1"/> 
      <xs:enumeration value="example2"/> 
      <xs:enumeration value="example3"/> 
      <xs:enumeration value="example4"/> 
      <xs:enumeration value="example5"/> 
      <xs:enumeration value="example6"/> 
      <xs:enumeration value="example7"/> 
      <xs:enumeration value="example8"/> 
      <xs:enumeration value="example9"/> 
      <xs:enumeration value="example10"/> 
      <xs:enumeration value="example11"/> 
      <xs:enumeration value="example12"/> 
      <xs:enumeration value="example13"/> 
      <xs:enumeration value="example14"/> 
      <xs:enumeration value="example15"/> 
      <xs:enumeration value="example16"/> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:attribute> 

</xs:schema> 

Ecco come sto caricarlo:

SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
Schema schemaXSD = schemaFactory.newSchema(new File ("test.xsd")); 

sto diventando un'eccezione simile al seguente:

org.xml.sax.SAXParseException: src-element.3: l'elemento 'proprietà' ha un attributo 'tipo' e un ' ' anony mous type 'child. Solo uno di è consentito per un elemento.

Grazie per l'aiuto SO! È anche apprezzato qualsiasi consiglio generale sulla lettura/utilizzo di schemi creati da altri! : D

+0

Ci sono un certo numero di IDE che può individuare questo tipo di errore al momento dell'edizione (cioè prima di inviare l'XSD al tuo codice). [eclipse J2E] (http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/heliossr1) ad esempio mostrerà piccoli marcatori rossi nel margine destro con gli stessi messaggi di errore che hai citato)). –

risposta

5

Questo bit è il codice problema:

<xs:element name="property" type="xs:string">  
    <xs:complexType>   
     <xs:sequence>    
      <xs:element ref="item" minOccurs="1" maxOccurs="unbounded" /> 
     </xs:sequence> 
     <xs:attribute ref="name" use="required"/> 
    </xs:complexType> 

    </xs:element> 

rimuovere il tipo sull'elemento esterno (type="xs:string"), o rimuovere l'anonimo elemento complexType interno (<xs:complexType> ... </xs:complexType>)

+2

Questo probabilmente si presenterà anche nel prossimo bit di codice. . Hai due dichiarazioni di tipo e il sistema non saprà quale usare. – blueberryfields

+0

allora come dirai che l'elemento ha un attributo senza l'uso di completype? – Ashwin

6

Element 'proprieta' ha sia un attributo 'tipo' e un 'tipo anonimo' bambino

In altre parole, dire type="xs:string" e questo prescrive nodi come <property>foo</property>. Ma si inserisce anche un ComplexType item all'interno dello property e questo prescrive nodi come <property><item>...</item></property>. Questa è la contraddizione che il parser considera un errore.

Se si desidera memorizzare un certo numero di item s in ogni propertye una stringa separata per ogni property, conservare questa stringa come nodo separato, sia un bambino con un tag o un attributo di property. Per esempio. <property mystring="foo"><item>...</item></property>

+0

allora come dirai che l'elemento ha un attributo senza l'uso di completype? Ho pensato che un attributo ha un elemento deve essere entrato nel complexType. – Ashwin

Problemi correlati