AZCode.vn AZCode

Schema trong XML

Schema trong XML được biết đến rộng rãi với tên XML Schema Definition (XSD). Nó được sử dụng để miêu tả và xác nhận cấu trúc và nội dung của dữ liệu XML. Schema trong XML định nghĩa kiểu phần tử, thuộc tính và dữ liệu. Phần tử Schema hỗ trợ Namespace. Nó tương tự như một Schema trong cơ sở dữ liệu mà miêu tả dữ liệu trong một cơ sở dữ liệu.

Cú pháp

Bạn cần khai báo một Schema trong tài liệu XML của mình như sau:


<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

Ví dụ

Ví dụ sau minh họa cách sử dụng Schema:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="contact">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="name" type="xs:string" />
            <xs:element name="company" type="xs:string" />
            <xs:element name="phone" type="xs:int" />
        </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

Ý tưởng cơ bản đằng sau Schema là chúng miêu tả định dạng chính thống mà một tài liệu XML có thể nhận.

Các phần tử

Như đã trình bày trong chương Phần tử trong XML, các phần tử là các khối cấu thành tài liệu XML. Một phần tử có thể được định nghĩa bên trong một XSD như sau:

<xs:element name="x" type="y"/>

Kiểu định nghĩa

Bạn có thể định nghĩa các phần tử Schema trong XML theo các cách sau:

Kiểu đơn giản: Chỉ được sử dụng trong ngữ cảnh text. Một số kiểu đơn giản được định nghĩa trước là: xs:integer, xs:boolean, xs:string, xs:date. Ví dụ:

<xs:element name="phone_number" type="xs:int" />

Kiểu phức tạp: Một kiểu phức tạp là một Container cho các định nghĩa phần tử khác. Điều này cho phép bạn xác định các phần tử con nào mà một phần tử có thể chứa và để cung cấp một số cấu trúc bên trong tài liệu XML của bạn. Ví dụ:

<xs:element name="Address">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="name" type="xs:string" />
	    <xs:element name="company" type="xs:string" />
            <xs:element name="phone" type="xs:int" /> 
        </xs:sequence> 
    </xs:complexType>
</xs:element> 

Trong ví dụ trên, phần tử Address bao gồm các phần tử con. Nó là một Container cho các định nghĩa <xs:element> cho phép xây dựng một cấu trúc phần tử đơn giản trong tài liệu XML.

Kiểu tổng thể (global): Với kiểu global, bạn có thể định nghĩa một kiểu đơn trong tài liệu, mà có thể được sử dụng bởi tất cả tham chiếu khác. Ví dụ, giả sử bạn muốn phổ biến personcompany cho các địa chỉ khác nhau của công ty. Trong trường hợp này, bạn có thể định nghĩa một kiểu chung, như sau:

<xs:element name="AddressType">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="name" type="xs:string" />
	    <xs:element name="company" type="xs:string" />
        </xs:sequence> 
    </xs:complexType>
</xs:element> 

Bây giờ, sử dụng kiểu này trong ví dụ:

<xs:element name="Address1">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="address" type="AddressType" />
	    <xs:element name="phone1" type="xs:int" /> 
        </xs:sequence> 
    </xs:complexType>
</xs:element> 
<xs:element name="Address2">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="address" type="AddressType" />
	    <xs:element name="phone2" type="xs:int" /> 
        </xs:sequence> 
    </xs:complexType>
</xs:element> 

Thay vì có định nghĩa name và company hai lần (một cho Address1 và một cho Address2), giờ chúng ta chỉ cần một định nghĩa đơn. Điều này giúp việc duy trì đơn giản hơn, ví dụ, nếu bạn quyết định thêm các phần tử Postcode cho address, bạn chỉ cần thêm chúng ở một vị trí.

Thuộc tính

Thuộc tính trong XSD cung cấp thông tin bổ sung bên trong một tài liệu. Các thuộc tính có nametype như sau:

<xs:attribute name="x" type="y"/>