2012-12-21 27 views
11

Trong ví dụ dưới đây,XML: sự lựa chọn và minOccurs

 <xs:complexType> 
     <xs:choice minOccurs="3" maxOccurs="unbounded"> 
      <xs:element ref="Start"/> 
      <xs:element ref="Center"/> 
      <xs:element ref="End"/> 
      <xs:element ref="PI" minOccurs="0"/> 
      <xs:element ref="Feature" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:choice> 
     </xs:complexType> 

gì xảy ra khi lựa chọn có minOccurs> 1? Điều này có nghĩa là yếu tố "Bắt đầu" có thể xảy ra 3 lần?

+0

+1 cho câu hỏi duy nhất và hợp lệ! –

Trả lời

12

Điều gì xảy ra khi lựa chọn có minOccurs> 1? Điều này có nghĩa là yếu tố "Bắt đầu" có thể xảy ra 3 lần?

<Start> có thể xảy ra 3 lần hoặc nhiều hơn! Có minOccurs của sự lựa chọn là nhiều hơn 1 cho phép thiết lập các yếu tố xuất hiện nhiều hơn một lần hoặc các yếu tố khác nhau xuất hiện nhiều lần.

Chi tiết giải thích: Trong ví dụ trên bạn đã áp dụng minOccurs như 3 cho <Choice> và maxOccurs là vô biên! Điều đó có nghĩa là .. Các phần tử con được liệt kê dưới <Choice>, bất kỳ ba thẻ nào trong số chúng hoặc bất kỳ thẻ nào được lặp lại ba lần sẽ xuất hiện bên dưới bố mẹ chúng! XML mẫu được liệt kê dưới đây:

Chúng ta hãy giả định rằng các thiết lập của thẻ xuất hiện dưới một nút gọi là <parent> thì:

<parent> 
    <Start>Start1</Start> 
    <Center>Center1</Center> 
    <End>End1</End> 
    </parent> 

-------- HOẶC --------

<parent> 
    <Center>Start1</Center> 
    <Center>Center1</Center> 
    <Feature>End1</Feature> 
    </parent> 

-------- HOẶC --------

<parent> 
    <Start>Start1</Start> 
    <Start>Start1</Start> 
    <Start>Start1</Start> 
    <Start>Start1</Start> 
    </parent> 

tất cả các kết hợp trên là hợp lệ!

NHƯNG bạn cũng đã xác định minOccurs = "0" cho 'PI' và 'Feature' ..

Ngoài Điều này gây Validator để vượt qua cha mẹ không có phần tử con là tốt. ví dụ:

<parent> 
    </parent> 

Nếu bạn loại bỏ minOccurs từ hai yếu tố sau đó lực lượng xác nhận bạn bao gồm tối thiểu 3 thẻ được đưa dưới mẹ.

Cũng có maxOccurs="unbounded" cho Feature Yếu tố không được sử dụng! Các hành vi sẽ không thay đổi nếu bạn thêm nó hoặc cởi nó ra ..

+0

Nếu bạn muốn cho phép các phần tử con (nếu chúng xuất hiện) chỉ xuất hiện một lần thì sao? – peco

+0

@peco, chỉnh sửa điều này trong giản đồ trong câu hỏi: ''. 0 hoặc 1 đứa trẻ có thể xuất hiện –

+0

Nhưng sau đó chỉ có một đứa trẻ có thể xảy ra đúng không? Không phải là '

'và' '. Tôi muốn ít nhất một trong số họ được chọn. – peco

4

Trong cú pháp regexp giống như có thể đọc được chứ không phải là quần chúng tiết của dấu ngoặc nhọn, bạn có

(Start | Center | End | PI? | Tính năng *) {3,}

có nghĩa là mọi thứ bên trong dấu ngoặc đơn từ 3 lần trở lên và mỗi lần không cần phải là cùng một mục. Cho rằng có những lựa chọn thay thế nullable - PI? và Tính năng * - trong số các lựa chọn, toàn bộ biểu thức cũng không có giá trị, có nghĩa là bất kỳ số lượng null nào, bao gồm số không, cũng sẽ thỏa mãn các ràng buộc.

Để trả lời câu hỏi cụ thể của bạn, có, 'Bắt ​​đầu' có thể xảy ra ba (hoặc nhiều lần). Nó có thể xảy ra bất kỳ số lần, như một vấn đề của thực tế.

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