Chỉ báo XSD
Chúng ta có thể kiểm soát các phần tử CÁCH được sử dụng trong tài liệu bằng các chỉ báo.
Các chỉ số
Có bảy chỉ số:
Chỉ số đặt hàng:
- Tất cả
- Sự lựa chọn
- Sự liên tiếp
Các chỉ số xảy ra:
- maxXảy ra
- phútXảy ra
Nhóm chỉ số:
- Tên nhóm
- tên nhóm thuộc tính
Chỉ số đặt hàng
Chỉ báo thứ tự được sử dụng để xác định thứ tự của các phần tử.
Tất cả chỉ báo
Chỉ báo <all> chỉ định rằng các phần tử con có thể xuất hiện theo bất kỳ thứ tự nào và mỗi phần tử con chỉ được xuất hiện một lần:
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
Lưu ý: Khi sử dụng chỉ báo <all>, bạn có thể đặt chỉ báo <minOccurs> thành 0 hoặc 1 và chỉ báo <maxOccurs> chỉ có thể được đặt thành 1 (<minOccurs> và <maxOccurs> sẽ được mô tả sau).
Chỉ báo lựa chọn
Chỉ báo <choice> chỉ định rằng phần tử con này hoặc phần tử con khác có thể xảy ra:
<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element name="employee" type="employee"/>
<xs:element name="member" type="member"/>
</xs:choice>
</xs:complexType>
</xs:element>
Chỉ báo trình tự
Chỉ báo <sequence> chỉ định rằng các phần tử con phải xuất hiện theo một thứ tự cụ thể:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Chỉ số xuất hiện
Chỉ báo sự xuất hiện được sử dụng để xác định tần suất một phần tử có thể xảy ra.
Lưu ý: Đối với tất cả chỉ báo "Thứ tự" và "Nhóm" (bất kỳ, tất cả, lựa chọn, trình tự, tên nhóm và tham chiếu nhóm), giá trị mặc định cho maxOccurs và minOccurs là 1.
Chỉ báo maxOccurs
Chỉ báo <maxOccurs> chỉ định số lần tối đa một phần tử có thể xảy ra:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string" maxOccurs="10"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Ví dụ trên chỉ ra rằng phần tử "child_name" có thể xuất hiện tối thiểu một lần (giá trị mặc định cho minOccurs là 1) và tối đa mười lần trong phần tử "person".
Chỉ báo minXảy ra
Chỉ báo <minOccurs> chỉ định số lần tối thiểu một phần tử có thể xảy ra:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
maxOccurs="10" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Ví dụ trên chỉ ra rằng phần tử "child_name" có thể xuất hiện tối thiểu 0 lần và tối đa 10 lần trong phần tử "người".
Mẹo: Để cho phép một phần tử xuất hiện với số lần không giới hạn, hãy sử dụng câu lệnh maxOccurs="unbounded":
Một ví dụ hoạt động:
Tệp XML có tên "Myfamily.xml":
<?xml version="1.0" encoding="UTF-8"?>
<persons xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="family.xsd">
<person>
<full_name>Hege Refsnes</full_name>
<child_name>Cecilie</child_name>
</person>
<person>
<full_name>Tove Refsnes</full_name>
<child_name>Hege</child_name>
<child_name>Stale</child_name>
<child_name>Jim</child_name>
<child_name>Borge</child_name>
</person>
<person>
<full_name>Stale Refsnes</full_name>
</person>
</persons>
Tệp XML ở trên chứa phần tử gốc có tên là "persons". Bên trong phần tử gốc này, chúng ta đã xác định ba phần tử "người". Mỗi phần tử "người" phải chứa phần tử "full_name" và có thể chứa tối đa năm phần tử "child_name".
Đây là tệp lược đồ "family.xsd":
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="https://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="persons">
<xs:complexType>
<xs:sequence>
<xs:element name="person" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
minOccurs="0" maxOccurs="5"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Chỉ số nhóm
Các chỉ báo nhóm được sử dụng để xác định các tập hợp phần tử có liên quan.
Nhóm phần tử
Các nhóm phần tử được xác định bằng cách khai báo nhóm, như sau:
<xs:group name="groupname">
...
</xs:group>
Bạn phải xác định phần tử tất cả, lựa chọn hoặc chuỗi bên trong khai báo nhóm. Ví dụ sau định nghĩa một nhóm có tên là "persongroup", xác định một nhóm các phần tử phải xuất hiện theo một trình tự chính xác:
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
Sau khi bạn đã xác định một nhóm, bạn có thể tham chiếu nó theo một định nghĩa khác, như sau:
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
<xs:element name="person" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:group ref="persongroup"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Nhóm thuộc tính
Các nhóm thuộc tính được xác định bằng khai báo attributeGroup, như sau:
<xs:attributeGroup name="groupname">
...
</xs:attributeGroup>
Ví dụ sau định nghĩa một nhóm thuộc tính có tên là "personattrgroup":
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
Sau khi bạn đã xác định một nhóm thuộc tính, bạn có thể tham chiếu nó theo một định nghĩa khác, như sau:
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
<xs:element name="person">
<xs:complexType>
<xs:attributeGroup ref="personattrgroup"/>
</xs:complexType>
</xs:element>