2009-06-29 27 views
8

Hãy nói rằng tôi muốn thiết lập một complexType chung chung như vậy:Lược đồ XML: Đặt giá trị mặc định cho một complexType?

<xs:complexType name="button"> 
    <xs:sequence> 
     <xs:element name="id" type="xs:string" minOccurs="0" maxOccurs="1"/> 
     <xs:element name="href" type="xs:string" minOccurs="0" maxOccurs="1"/> 
     <xs:element name="label" type="xs:string" minOccurs="0" maxOccurs="1"/> 
    </xs:sequence> 
</xs:complexType> 

Và tôi muốn tham chiếu đến complexType ở những nơi khác nhau trong tập tin giản đồ của tôi như vậy:

<xs:element name="someButton" type="button" /> 

Có thể cho cách nào để đặt giá trị mặc định cho các phần tử con nút thông qua phần tử someButton? (Ví dụ nếu tôi muốn someButton để có một nhãn mặc định của "Go" hay a href mặc định của "index.html")

Về cơ bản ... ngay bây giờ tôi có một cái gì đó giống như

<Field Name="State" DataSourceField="State" /> 

và tôi m cố gắng loại bỏ sự dư thừa theo cách đơn giản nhất có thể.

Trả lời

18

Không, chỉ cho các giá trị đơn giản. Nhưng có thể bạn có thể sử dụng chúng để làm những gì bạn muốn, bằng cách đưa ra các giá trị mặc định cho tất cả các phần đơn giản của Type phức tạp của bạn. Tuy nhiên, nó hoạt động tốt hơn cho các thuộc tính hơn cho các phần tử bạn có (bởi vì "Các giá trị thuộc tính mặc định áp dụng khi các thuộc tính bị thiếu, và các giá trị phần tử mặc định được áp dụng khi các phần tử trống" - xem bên dưới). Thuộc tính này là tự tùy chọn theo mặc định:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="button" type="button"/> 
    <xs:complexType name="button"> 
    <xs:attribute name="id" type="xs:string"/> 
    <xs:attribute name="href" type="xs:string" default="index.html"/> 
    <xs:attribute name="label" type="xs:string" default="Go"/> 
    </xs:complexType> 
</xs:schema> 

<button id="1"/> 

Giá trị mặc định của cả hai thuộc tính và các yếu tố được khai báo sử dụng thuộc tính mặc định, mặc dù thuộc tính này có một hậu quả hơi khác nhau trong từng trường hợp. Khi một thuộc tính được khai báo với một giá trị mặc định, giá trị của thuộc tính là bất kỳ giá trị nào xuất hiện dưới dạng giá trị của thuộc tính trong một tài liệu cá thể; nếu thuộc tính không xuất hiện trong tài liệu cá thể, bộ xử lý lược đồ cung cấp thuộc tính có giá trị bằng với thuộc tính mặc định. Lưu ý rằng các giá trị mặc định cho các thuộc tính chỉ có ý nghĩa nếu các thuộc tính là tùy chọn và do đó, nó là một lỗi để chỉ định cả giá trị mặc định và bất kỳ giá trị nào khác ngoài giá trị tùy chọn để sử dụng.

Bộ xử lý lược đồ xử lý các phần tử mặc định hơi khác nhau. Khi một phần tử được khai báo với một giá trị mặc định, giá trị của phần tử là bất kỳ giá trị nào xuất hiện dưới dạng nội dung của phần tử trong tài liệu cá thể; nếu phần tử xuất hiện mà không có bất kỳ nội dung nào, bộ xử lý lược đồ cung cấp phần tử có giá trị bằng với giá trị của thuộc tính mặc định. Tuy nhiên, nếu phần tử không xuất hiện trong tài liệu cá thể, thì bộ xử lý lược đồ không cung cấp phần tử nào cả. Tóm lại, sự khác biệt giữa giá trị mặc định của thuộc tính và phần tử có thể được ghi là: Giá trị thuộc tính mặc định sẽ áp dụng khi thuộc tính bị thiếu và giá trị phần tử mặc định sẽ áp dụng khi các phần tử trống. [nhấn mạnh thêm]

http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints

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