2009-05-01 32 views
6

Tôi muốn khả năng để có một mức độ độc đoán của trẻ em làm tổ của cùng một nguyên tố cha mẹ, ví dụ:Tôi làm cách nào để tạo thành phần tử con của chính nó trong Lược đồ XML?

<path expr="/"> 
    <path expr="usr"> 
    <path expr="bin"> 
     <path expr="X11" /> 
    </path> 
    </path> 
    <path expr="var" /> 
</path> 

Tôi đang viết các tập tin XML Schema, và tôi đang ở một mất mát như thế nào để đại diện cho mối quan hệ cha/con này trong lược đồ: đây là những gì tôi có, nhưng nó không phải là một định nghĩa schema hợp lệ:

  <xs:element name="path"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element ref="path" minOccurs="0" /> 
       </xs:sequence> 
       <xs:attribute name="expr" type="xs:string" use="required" /> 
      </xs:complexType> 
      </xs:element> 

cập nhật: Cảm ơn câu trả lời. Tôi đã thử điều đó và tôi nhận được lỗi sau: Phần tử 'w3.org/2001/XMLSchema:complexType' không được hỗ trợ trong ngữ cảnh này. Tôi nên đề cập đến hệ thống phân cấp đường dẫn như tôi đã mô tả chính nó là con của một phần tử được gọi là ứng dụng, vì vậy toàn bộ cấu trúc tương tự như sau:

<application name="test"> 
    <path expr="/"> 
    <path expr="usr"> 
     <path expr="bin"> 
     <path expr="X11" /> 
     </path> 
    </path> 
    <path expr="var" /> 
    </path> 
</application> 

Trả lời

5

Sau đây nên thực hiện thủ thuật. Chuẩn XSD khá khó làm việc trực tiếp, tôi luôn sử dụng trình soạn thảo như Liquid XML Studio.

<?xml version="1.0" encoding="utf-8" ?> 
<!--Created with Liquid XML Studio - Developer Pro Edition 7.1.1.1206 (http://www.liquid-technologies.com)--> 
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Path" type="PathType" /> 
    <xs:complexType name="PathType"> 
    <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="unbounded" name="Path" type="PathType" /> 
    </xs:sequence> 
    <xs:attribute name="expr" type="xs:string" use="required" /> 
    </xs:complexType> 
</xs:schema> 

alt text http://www.liquid-technologies.com/images/blogs/stackoverflow/PathExample.png

Các XSD là hợp lệ. Đối với XML mới bạn mô tả, bạn sẽ cần phải thay đổi nó để trông như thế này.

<?xml version="1.0" encoding="utf-8" ?> 
<!--Created with Liquid XML Studio - Developer Pro Edition 7.1.0.1135 (http://www.liquid-technologies.com)--> 
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Application"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="path" type="PathType" /> 
     </xs:sequence> 
     <xs:attribute name="name" type="xs:string" /> 
    </xs:complexType> 
    </xs:element> 
    <xs:complexType name="PathType"> 
    <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="unbounded" name="path" type="PathType" /> 
    </xs:sequence> 
    <xs:attribute name="expr" type="xs:string" use="required" /> 
    </xs:complexType> 
</xs:schema> 
+0

Cảm ơn bạn đã trả lời. Tôi đã thử điều đó và tôi nhận được lỗi sau: Phần tử 'http://www.w3.org/2001/XMLSchema:complexType' không được hỗ trợ trong ngữ cảnh này. \t Tôi nên đề cập đến hệ thống phân cấp đường dẫn như tôi đã mô tả chính nó là con của một phần tử được gọi là ứng dụng, vì vậy toàn bộ cấu trúc tương tự như sau:

+0

@Nick Davis: Tốt nhất bạn nên thêm các giải thích như thế này vào câu hỏi (bạn luôn có thể chỉnh sửa câu hỏi). Trong nhận xét bạn không có định dạng và các chi tiết có khả năng quan trọng sẽ không được xem. – Tomalak

+0

Cảm ơn lời khuyên - Tôi đã chỉnh sửa câu hỏi gốc với nhận xét của mình. –

0

Cá nhân tôi thích RelaxNG trên lược đồ XML. Có thể đáng để bạn dành thời gian dùng thử.

+0

Tại sao? Bạn có thể xây dựng? – ChrisFletcher

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