2011-03-02 17 views
6

Sadece XML şemasıyla ilgili temel bir anlayışa sahibim. Bu temelde onlarla herhangi bir ciddi şekilde ilk etkileşimim ve bazı sorunlar yaşıyorum. Google'da XSD'leri okudum ve her şey bu dosyada yukarı ve yukarı görünüyor. İşte Bu XML şemasında kökten bir sorun var mı?

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

bunu yükleme ediyorum nasıl:

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

aşağıdaki gibi bir istisna alıyorum:

eşleşmelidir.org.XML.sax.SAXParseException: src-element.3: Element 'property', 'type' özelliği ve 'anony öğesinin her ikisi de içeriyor mous türü 'çocuk. Bir eleman için bunlardan sadece 'a izin verilir.

Yardımlarınız için teşekkürler SO! Başkaları tarafından oluşturulan şema okuma/kullanma ile ilgili genel tavsiyeler de takdir edilmektedir! : D

+0

IDE vardır Bu tür bir hatayı baskı zamanında tespit edebilirsiniz (yani XSD'yi kendi kodunuza göndermeden önce). [eclipse J2E] (http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/heliossr1), örneğin, belirttiğiniz aynı hata mesajlarıyla sağ kenar boşluğunda küçük kırmızı işaretler gösterecektir.). –

cevap

5

Bu biraz senin sorunun kodudur:

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

ya dış elemana (type="xs:string") türü kaldırabilir veya anonim iç complexType elemanını kaldırmak (<xs:complexType> ... </xs:complexType>)

+2

Bu, muhtemelen bir sonraki kodda da ortaya çıkacaktır. . İki tip beyanınız var ve sistem hangisinin kullanılacağını bilmeyecek. – blueberryfields

+0

o zaman öğenin completeype kullanmadan bir niteliğe sahip olduğunu nasıl anlatacaksınız? – Ashwin

6

Elemanı 'mülkiyet' a 'türü' özelliği ile diğer bir deyişle bir 'anonim tip' çocuğu

hem sahiptir, sen type="xs:string" demek ve bu <property>foo</property> gibi düğümleri belirler. Ancak, property'un içinde bir ComplexType item koyarsınız ve bu, <property><item>...</item></property> gibi düğümleri belirler. Bu, ayrıştırıcının bir hata olarak gördüğü çelişkidir.

Eğer bir etiketi olan bir çocuk veya property bir niteliğini ya property başına her propertyve bir ayrı dizede item s bir dizi depolamak ayrı düğüm olarak bu dizeyi saklamak istiyorsanız

. Örneğin. <property mystring="foo"><item>...</item></property>

+0

o zaman öğenin completeype kullanmadan bir niteliğe sahip olduğunu nasıl anlatacaksınız? Bir özniteliğin, complexType'ın içine gelmesi gerektiğini düşündüm. – Ashwin

İlgili konular