2011-03-02 29 views
6

Tôi chỉ có một sự hiểu biết cơ bản về Lược đồ XML. Đây là cơ bản tương tác đầu tiên của tôi với họ trong bất kỳ cách nghiêm túc và tôi đang gặp một số vấn đề. Tôi đã đọc lên trên XSD trên google và tất cả mọi thứ trông lên và lên với tập tin này.Có điều gì đó hoàn toàn sai với Lược đồ XML này không?

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

Đây là cách tôi đang tải nó:

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

tôi nhận được một ngoại lệ như sau:

org.xml.sax.SAXParseException: src-element.3: Element 'property' có cả thuộc tính 'type' và anna 'anony loại trẻ em '. Chỉ một trong số chúng được phép cho một phần tử.

Cảm ơn sự giúp đỡ SO! Bất kỳ lời khuyên chung về đọc/sử dụng lược đồ được tạo ra bởi những người khác cũng được đánh giá cao! : D

+0

Có một số IDE có thể phát hiện loại lỗi này tại thời điểm xuất bản (nghĩa là trước khi bạn gửi XSD vào mã của riêng bạn). [eclipse J2E] (http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/heliossr1) chẳng hạn sẽ hiển thị các dấu nhỏ màu đỏ ở lề phải với cùng các thông báo lỗi mà bạn trích dẫn)). –

Trả lời

5

chút Đây là mã vấn đề của bạn:

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

hoặc loại bỏ các loại trên các yếu tố bên ngoài (type="xs:string"), hoặc loại bỏ các yếu tố complexType bên trong vô danh (<xs:complexType> ... </xs:complexType>)

+2

Điều này có thể sẽ xuất hiện trong đoạn mã tiếp theo. . Bạn đã có hai loại khai báo và hệ thống sẽ không biết sử dụng loại nào. – blueberryfields

+0

sau đó làm thế nào bạn sẽ nói rằng phần tử có một thuộc tính mà không sử dụng completype? – Ashwin

6

tử 'sở hữu' có cả một 'loại' thuộc tính và một 'loại vô danh' con

Nói cách khác, bạn nói type="xs:string" và điều này quy định các nút như <property>foo</property>. Nhưng bạn cũng đặt một loại phức tạp item bên trong property và điều này quy định các nút như <property><item>...</item></property>. Đây là mâu thuẫn mà trình phân tích cú pháp xem xét là một lỗi.

Nếu bạn muốn lưu trữ một số item s trong mỗi property một chuỗi riêng biệt cho mỗi property, lưu trữ chuỗi này như nút riêng biệt, hoặc là một đứa trẻ với một thẻ, hoặc một thuộc tính của property. Ví dụ. <property mystring="foo"><item>...</item></property>

+0

sau đó làm thế nào bạn sẽ nói rằng phần tử có một thuộc tính mà không sử dụng completype? Tôi nghĩ rằng một thuộc tính có phần tử phải nằm bên trong complexType. – Ashwin

Các vấn đề liên quan