2012-06-20 32 views
5

Tôi đang xác định simpleTyperestriction hoặc là giá trị từ enumeration hoặc giá trị khớp với pattern. Tôi nhận ra rằng tôi có thể làm tất cả từ số pattern nhưng tôi muốn có danh sách lựa chọn mà enumeration cung cấp.Cách xác định hạn chế lược đồ cho phép giá trị hoặc mẫu khớp với nhau?

Đây là những gì tôi mong đợi để có thể làm:

<xs:simpleType name="both"> 
    <xs:restriction base="xs:string"> 
    <xs:enumeration value="one" /> 
    <xs:enumeration value="two" /> 
    <xs:pattern value="[0..9]+" /> 
    </xs:restriction> 
<xs:simpleType> 

Nhưng thất bại vì một giá trị không thể phù hợp với cả hai trở ngại. Nếu tôi sửa đổi mẫu để cho phép bất kỳ giá trị được liệt kê nào thì nó sẽ thất bại nếu chỉ khớp với mẫu đó.

Trả lời

8

Hóa ra tôi cần số union. Xác định kiểu liệt kê như là một loại riêng biệt:

<xs:simpleType name="enumeration"> 
    <xs:restriction base="xs:string"> 
    <xs:enumeration value="one" /> 
    <xs:enumeration value="two" /> 

    </xs:restriction> 
<xs:simpleType> 

Sau đó tạo các loại mục tiêu như một đếm:

<xs:simpleType name="both"> 
    <xs:union memberTypes="enumeration"> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"> 
     <xs:pattern value="[0..9]+" /> 
     </xs:restriction> 
    </xs:simpleType> 
    </xs:union> 
</xs:simpleType> 

Vì vậy, bây giờ tôi có được danh sách lựa chọn, hoặc phù hợp với mô hình. Chính xác những gì tôi muốn!

Cập nhật: thực sự có thể xác định cả hai loại đơn giản như con cái của union hoặc thông qua các thuộc tính memberTypes.

+0

Cảm ơn bạn đã tip! Tôi muốn đề cập rằng nó cũng làm việc với cả hai phần tử '' được liệt kê trong ''. BTW bạn nên đánh dấu câu trả lời (ngay cả của riêng bạn) như được chấp nhận để làm cho rõ ràng đó là giải pháp chính xác. – Melebius

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