2011-07-06 32 views
6

Có thể làm điều gì đó như thế này trong một lược đồ XML không?Lược đồ XML có thể có nhiều lựa chọn trong một complexType đơn?

<xsd:complexType name="ItemsType"> 
    <xsd:choice minOccurs="0" maxOccurs="unbounded"> 
    <xsd:element ref="shirt"/> 
    <xsd:element ref="hat"/> 
    <xsd:element ref="umbrella"/> 
    </xsd:choice> 
    <xsd:choice minOccurs="1" maxOccurs="3"> 
    <xsd:element ref="apple"/> 
    <xsd:element ref="banana"/> 
    <xsd:element ref="strawberry"/> 
    </xsd:choice> 
</xsd:complexType> 

điều này rõ ràng là không hợp lệ. Điều tôi muốn là để có thể có 0 hoặc nhiều lựa chọn đầu tiên .. Ví dụ: có thể có một yếu tố áo sơ mi và một yếu tố mũ, hoặc có lẽ không có yếu tố quần áo nào cả (kể từ minOccurs = "0"), tiếp theo là ít nhất 1 yếu tố trái cây (tôi muốn làm cho nó vì vậy phải có ít nhất một, vì minOccurs = "1").

có cách nào để làm điều đó không?

Cảm ơn bạn đã được trợ giúp.

+1

Hình hợp lệ đối với tôi; bạn đã đơn giản hóa ví dụ và ẩn một vấn đề do nhầm lẫn? Điều này sẽ trở thành không hợp lệ nếu lựa chọn thứ hai chứa một phần tử cũng xuất hiện trong lựa chọn đầu tiên ... – xcut

Trả lời

11

<xsd:complexType> dự kiến ​​chỉ có một phần tử con. Bao gồm hai lựa chọn của bạn bên trong một đơn <xsd:sequence>.

Ví dụ

<xsd:complexType name="ItemsType"> 
    <xsd:sequence> 
    <xsd:choice minOccurs="0" maxOccurs="unbounded"> 
     ... clothes ... 
    </xsd:choice> 
    <xsd:choice minOccurs="1" maxOccurs="3"> 
     ... fruits ... 
    </xsd:choice> 
    </xsd:sequence> 
</xsd:complexType> 
+0

Ồ tôi hiểu rồi, cảm ơn bạn rất nhiều! – Jimmy

+0

@jasso Nhưng điều đó đòi hỏi rằng sự lựa chọn quần áo được chỉ định trước khi lựa chọn trái cây trong xml, phải không? Có cách nào để không yêu cầu đặt hàng đó không? –

+0

@DavidDoria Giải pháp đầu tiên đến với tâm trí của tôi là tạo một bản sao của chuỗi chỉ có thứ tự của các nội dung được hoán đổi, sau đó quấn hai chuỗi đó vào một phần tử lựa chọn. Nói chung trong trường hợp này, bạn nên sử dụng các nhóm để đơn giản hóa mã. Cũng trong trường hợp này, bạn nên cẩn thận không làm cho cấu trúc không xác định được, vì lựa chọn quần áo là tùy chọn. Điều này có thể được giải quyết bằng cách làm cho sự lựa chọn quần áo bắt buộc nếu chúng xuất hiện đầu tiên và tùy chọn trong trình tự đổi chỗ, nơi trái cây xuất hiện đầu tiên. – jasso

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