2011-03-02 11 views
6

Mam tylko elementarne zrozumienie schematu XML. Jest to w zasadzie moja pierwsza interakcja z nimi w jakikolwiek poważny sposób i mam pewne problemy. Czytałem na XSD na google i wszystko wygląda na ten plik w górę iw górę.Czy jest coś radykalnie niewłaściwego w tym schemacie 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> 

Oto jak ja ładuje go:

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

Dostaję wyjątek jak poniżej:

org.xml.sax.SAXParseException: src-element.3: Element "właściwość" ma zarówno atrybut "typ" i "anony" dziecko typu mous. Tylko jeden z jest dozwolony dla elementu.

Dzięki za pomoc TAK! Zalecane są także ogólne porady dotyczące czytania/używania schematów stworzonych przez innych! : D

+0

Istnieje szereg IDE który może wykryć tego rodzaju błąd w czasie edycji (tj. przed przesłaniem XSD do własnego kodu). [Eclipse J2E] (http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/heliossr1) na przykład pokaże małe czerwone znaczniki na prawym marginesie z tymi samymi komunikatami o błędach, o których wspomniałeś)). –

Odpowiedz

5

Ten bit jest kod Problem:

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

albo usunąć typ na elemencie zewnętrznym (type="xs:string") lub usunąć anonimowego wewnętrzny element complexType (<xs:complexType> ... </xs:complexType>)

+2

To prawdopodobnie pojawi się również w następnym bicie kodu. . Masz dwa deklaracje typów, a system nie będzie wiedział, którego użyć. – blueberryfields

+0

, a następnie w jaki sposób można powiedzieć, że element ma atrybut bez użycia completoint? – Ashwin

6

elementu „nieruchomość” ma zarówno atrybut „Typ” i „typ” anonimowy dziecko

Innymi słowy, można powiedzieć type="xs:string" a to nakazuje węzły jak <property>foo</property>. Ale także wstawiasz ComplexType item do wnętrza property, a to nakazuje węzły takie jak <property><item>...</item></property>. Jest to sprzeczność, którą parser uważa za błąd.

Jeśli chcesz zapisać liczbę item s w każdym propertyi jeden oddzielny ciąg za property, przechowywać ten ciąg jako osobny węzeł, albo dziecko z tagu lub atrybut property. Na przykład. <property mystring="foo"><item>...</item></property>

+0

, a następnie w jaki sposób można stwierdzić, że element ma atrybut bez użycia typu kompletnego? Myślałem, że atrybut musi mieć element wewnątrz typu complexType. – Ashwin