XML Schema được ra mắt từ năm 2001 bởi tổ chức W3C như là một dạng tài liệu theo chuẩn XML. XML Schema được sử dụng để mô tả cấu trúc và các kiểu dữ liệu của một tài liệu XML thay thế cho chuẩn DTD. Việc này khiến cho các metadata cần thiết có thể sử dụng trong nhiều loại ứng dụng và công nghệ hiện nay như XAML, ADO.NET, WebService,…
Chúng tôi chỉ muốn đưa ra cho các bạn những khái niệm tổng quát nhất về XML Schema, nếu muốn tìm hiểu chi tiết về XML Schema, vui lòng truy cập vào đây: http://www.w3schools.com/Schema/schema_intro.asp
Các tài liệu XML có thể sử dụng cùng một tên thẻ để định nghĩa nhiều loại dữ liệu. Điều này khiến cho việc nhận diện dữ liệu có thể sai lệch trong quá trình sử dụng. Vì vậy, một thẻ định danh toàn cụ là rất cần thiết để xác định tính duy nhất của một tài liệu XML, và định danh này gọi là Namespace.
Một XML Namespace được đặt tên bằng một chuôi URL. Ví dụ, tên của một XML Namespace thông thường sẽ là “http://www.w3.org/2001/XMLSchema”. Để thêm một XML Namespace vào tài liệu, bạn cần dùng thuộc tính xmlns. Thuộc tính này thường được theo sau bởi dấu “:” và sau đó là tên được gán cho Namespace. Ví dụ: xmlns:xs="http://www.w3.org/2001/XMLSchema”
Vậy sự khác biệt giữa XML và XML Schema là gì?
Với mỗi tài liệu XML
1 2 3 4 5 | <? xml version = "1.0" ?> < Blog > < Title >Let me know what you think</ Title > < Author >Yin Yang</ Author > </ Blog > |
Sẽ có một XML Schema tương ứng:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <? xml version = "1.0" ?> < xsd:schema elementFormDefault = "qualified" < xsd:element name = "Blog" > < xsd:complexType > < xsd:sequence > < xsd:element name = "Title" type = "xsd:string" /> < xsd:element name = "Author" type = "xsd:string" /> </ xsd:sequence > </ xsd:complexType > </ xsd:element > </ xsd:schema > |
Các phần tử được định nghĩa trong XML Schema trên gồm có “Blog”, “Title” và “Author”. Trong đó “Blog” là một kiểu dữ liệu phức (complex type) do chứa các phần tử con bên trong. Các phần tử “Title” và “Author” được gọi là simple type.
Tham chiếu tới Schema trong tài liệu XML
Một tài liệu XML cần tham chiếu đến Schema tương ứng của nó. Để tham chiếu bạn sử dụng thuộc tính trong phần tử gốc như sau:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=”http://yinyangit.wordpress.com/test.xsd”
Và tài liệu XML trong ví dụ đầu trở thành:
1 2 3 4 5 6 7 | <? xml version = "1.0" ?> < Title >Let me know what you think</ Title > < Author >Yin Yang</ Author > </ Blog > |
Tài liệu XML Schema được lưu trữ theo dạng plaint text với phần mở rộng xsd.
Một tài liệu XML Schema tương tự như một tài liệu XML, dòng mở đầu của tài liệu là câu khai báo: <?xml version="1.0"?>, theo sau đó luôn là phần tử gốc <schema>. Ví dụ một tài liệu XML Schema thông thường sẽ có dạng sau:
1 2 3 4 5 6 7 8 | <? xml version = "1.0" ?> elementFormDefault = "qualified" > ... </ xs:schema > |
Các phần tử trong tài liệu XML Schema đều sử dụng một prefix để khai báo. Prefix này được khai báo ngay từ phần tử gốc của tài liệu. Tên prefix có thể đặt bất kì những thông thường hai tên prefix thường được sử dụng là xs và xsd.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
Phần tử gốc <schema>
Bạn có thể xem ví dụ trên để biết phần tử <schema> dùng để làm gì và chứa những thứ gì.
targetNamespace="http://www.w3schools.com"
Định nghĩa rằng các phần tử được định nghĩa trong schema hiện tại (ví dụ: Blog, Title, Author) đều thuộc namespace “http://www.w3schools.com”.
Và thuộc tính dùng để định nghĩa namespace mặc định (không bao gồm prefix):
xmlns="http://www.w3schools.com"
Thuộc tính sau:
elementFormDefault="qualified"
Được dùng để xác định rằng các phần tử con của phần tử gốc <schema> có cần phải được định nghĩa rõ ràng với namspace không. Theo cách hiểu đơn giản là các phần tử con cũng phải được dùng prefix để định nghĩa nếu như elementFormDefault là “qualified”, ngược lại bạn có thể đặt giá trị này là “unqualified”.
Simple Element
Simple element là các phần tử chỉ chứa kiểu dữ liệu đơn giản như: string, boolean, integer, date,…hoặc các kiểu tự định nghĩa. Định nghĩa một Simple Element rất đơn giản:
<xs:element name="xxx" type="yyy"/>
Các kiểu dữ liệu thông dụng:
Ví dụ với các phần tử XML sau:
<lastname>YinYang</lastname>
<dateborn>1970-03-27</dateborn>
Ta sẽ có các Simple Element tương ứng:
<xs:element name="lastname" type="xs:string"/>
<xs:element name="dateborn" type="xs:date"/>
Thuộc tính
Các Simple Element không thể chứa thuộc tính. Định nghĩa một thuộc tính:
<xs:thuộc tính name="xxx" type="yyy"/>
Ví dụ một phần tử XML:
<lastname lang="EN">Smith</lastname>
Có định nghĩa thuộc tính tương ứng:
<xs:thuộc tính name=”lang” type=”xs:string”/>
Complex Element
Complex Element là các phần tử thuộc dạng sau:
- Phần tử rỗng
- Phần tử chứa văn bản và cả các phần tử khác
- Phần tử chỉ chứa văn bản
- Phần tử chỉ chứa các phần tử khác
Để định nghĩa một Complex Element bạn cần sử dụng các phần tử <complexType> và <sequence>, có hai cách dùng. Ví dụ, với đoạn XML sau:
1 2 3 4 | < employee > < firstname >John</ firstname > < lastname >Smith</ lastname > </ employee > |
Cách 1: Định nghĩa phần tử trực tiếp với các phần tử con bên trong:
1 2 3 4 5 6 7 8 | < xs:element name = "employee" > < xs:complexType > < xs:sequence > < xs:element name = "firstname" type = "xs:string" /> < xs:element name = "lastname" type = "xs:string" /> </ xs:sequence > </ xs:complexType > </ xs:element > |
Cách 2: Tách riêng Complex Element:
1 2 3 4 5 6 7 8 | < xs:element name = "employee" type = "personinfo" /> < xs:complexType name = "personinfo" > < xs:sequence > < xs:element name = "firstname" type = "xs:string" /> < xs:element name = "lastname" type = "xs:string" /> </ xs:sequence > </ xs:complexType > |
Phần kết
Bài viết chỉ mang tính chất giới thiệu sơ qua. Nếu bạn thật sự có hứng thú và muốn tìm hiểu sâu hơn thì nên tham khảo tại trang mà tôi đã giới thiệu lúc đầu.
Trước khi rời đi, bạn có thể xem qua bài viết: Series 5 file reset css cực kì quan trọng dành cho thiết kế web (Phần II) để biết thêm những phương pháp reset css phổ biến và chọn lấy cho mình phương pháp phù hợp nhất
Ý kiến bạn đọc