L−ợc đồ XML (XML Schema)

Một phần của tài liệu Nghiên cứu xây dựng hệ thống trợ giúp bài giảng theo công nghệ hướng đối tượng và ngôn ngữ XML (Trang 42)

Do tính phức tạp của khai báo DTD mà ng−ời ta đã tìm ra giải pháp khai báo và định nghĩa các phần tử trong tài liệu XML theo l−ợc đồ XML (XML Schema). Tuy không đơn giản hơn định nghĩa DTD nh−ng l−ợc đồ XML tỏ ra mạnh mẽ và chính xác hơn.

Trong phần này ta tìm hiểu về l−ợc đồ XML theo mô hình cài đặt của W3C. (Thực tế, XML là đặc tả mới phát triển sau này nên cài đặt l−ợc đồ đầy đủ nhất là IE của Microsoft. Tuy nhiên IE mới chỉ cài đặt một số đặc tả do W3C qui định)

L−ợc đồ là tài liệu XML thuần văn bản với phần mở rộng .xsd theo cấu trúc sau:

<?xml version=”1.0”?>

<xsd:schema xmlns:xsd="http://www.w3.org/1999/XMLSchema"> ...

</ xsd:schema>

Để có thể sử dụng file l−ợc đồ cho tài liệu XML trong IE, ta tham chiếu đến file l−ợc đồ (filename.xsd) nh− sau:

<? xml version=”1.0”?>

<rootName xmlns=”x-schema: filename.xsd”> ....

</rootName>

Còn W3C cho phép khai báo không gian tên cho tài liệu XML tham chiếu đến file l−ợc đồ (filename.xsd):

<? xml version=”1.0”?> <rootName xmlns=”URL”> ...

a. Khai báo phần tử và kiểu dữ liệu

Có hai kiểu phần tử trong l−ợc đồ XML: kiểu đơn giản (simple types) chỉ chứa dữ liệu đơn giản (chuỗi, số, ngày tháng) và kiểu phức hợp (complex types) chứa phần tử con và thuộc tính.

a1. Tạo kiểu đơn giản

Cú pháp tạo kiểu đơn giản nh− sau:

<xsd:simpleType name=”typeName” base=”xsd:type”> </xsd:simpleType>

Trong đó typeName là tên phần tử có kiểu đơn giản, type là kiểu dữ liệu của phần tử.

Tên kiểu Mô tả

Binary Kiểu dữ liệu nhị phân

Boolean Kiểu logic

Byte Kiểu byte

Century Kiểu thế kỷ

Date Kiểu ngày

Demical Kiểu thập phân Double Kiểu số thực 64 bit ENTITY Kiểu thực thể ENTITIES Kiểu đa thực thể

ID Kiểu định danh

Int, Integer Kiểu số nguyên

IDREF Kiểu tham chiếu định danh NOTATION Kiểu ghi chú

NMTOKEN Kiểu token đơn NMTOKENS Kiểu đa token

Month Kiểu tháng

String Kiểu chuỗi (adsbygoogle = window.adsbygoogle || []).push({});

Bảng 2.4: Các kiểu dữ liệu đơn giản nội tại

a2. Tạo kiểu phức hợp

Kiểu phức hợp trong l−ợc đồ XML đ−ợc chia thành 4 loại:

Phần tử rỗng: phần tử không có nội dung nh−ng có thể chứa thuộc tính. Khai

báo chúng trong l−ợc đồ XML theo cú pháp:

<xsd:element name=”eName”>

<xsd:complexType content=”empty”>

<xsd:element name=”Name” type=”xsd:type”/> ...

</xsd: complexType> </ xsd:element >

Phần tử chứa các phần tử khác và thuộc tính: đây là loại phần tử kiểu phức

hợp cơ bản nhất. Cú pháp khai báo loại phần tử này nh− sau:

<xsd:element name=”eName”> < xsd:complexType>

< xsd:element name=”subName” type=”xsd:type”/. ...

<xsd:attribute name=”attName” type=”xsd:type”/> ...

</ xsd:complexType> </xsd:element>

Phần tử có nội dung hỗn hợp: phần tử này có thể chứa cả văn bản và các

phần tử con. Ví dụ tài liệu XML có nội dung:

<?xml version=”1.0”?> <danhsachCBCNV>

Sau đây lμ danh sách CBCNV trong cơ quan <hoten> Nguyễn Văn A </hoten>

<ngaysinh> 21-10-1954 </ngaysinh> <gioitinh> Nam </gioitinh>

<khoa> CNTT </khoa> </danhsachCBCNV>

Phần tử <danhsachCBCNV> chứa nội dung hỗn hợp bao gồm cả văn bản lẫn phần tử con. Trong t−ờng hợp này ta dùng cú pháp sau để khai báo:

<xsd:element name=”eName”>

< xsd:complexType content=”mixed”>

< xsd:element name=”subName” type=”xsd:type”/. ...

<xsd:attribute name=”attName” type=”xsd:type”/> ...

</ xsd:complexType> </xsd:element>

Phần tử chứa văn bản thuần text phi định dạng: các phần tử có nội dung kiểu

đơn giản th−ờng là kiểu phần tử này.

b. Tạo sự lựa chọn và khai báo tuần tự (adsbygoogle = window.adsbygoogle || []).push({});

Trong khai báo DTD ta thấy xuất hiện ký tự ⏐ cho sự lựa chọn và sự xuất hiện tuần tự cùng các ký tự đại diện *, ?, + cho số l−ợng xuất hiện các phần tử. Vậy chúng đ−ợc thay thể nh− thế nào trong l−ợc đồ?

b1. Tạo sự lựa chọn

Trong l−ợc đồ XML, để tạo sự lựa chọn ta dùng khai báo:

<xsd:choice>

<xsd:element name=”eName” type=”xsd:type”/> < xsd:element name=”eName” type=”xsd:type”/> ...

</ xsd:choice>

b2. Tạo khai báo tuần tự

Giả sử a, b, c, d là các phần tử trong tài liệu XML. Sự xuất hiện của chúng cũng nh− số l−ợng xuất hiện trong biểu thức DTD là (a, b?, (c⏐d)+) đ−ợc diễn đạt trong l−ợc đồ nh− sau:

<xsd:sequence>

<xsd:element name=”a”/>

<xsd:element name=”b” minOccurs=”0” maxOccurs=”1”/> <xsd:choice minOccurs=”1”>

<xsd:element name=”c”/> <xsd:element name=”d”/> </ xsd:choice>

Bây giờ quay lại file data.dtd và file danhsach.xml tại mục 3.2. Khi đó ta xây dựng file data.xsd t−ơng ứng với data.dtd nh− sau:

<?xml version=”1.0”?> <xsd:schema xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <xsd:element name=”danhsachCBCNV” <xsd:complexType> <xsd:sequence minOccurs=”0”>

<xsd:element name=”canbo” type=”canbo”/> </xsd:sequence>

</xsd:complexType> </xsd:element>

<xsd:complexType name=”canbo”> <xsd:sequence>

<xsd:element name=”hoten” type=”xsd:String”/> <xsd:element name=”ngaysinh” type=”xsd:Date”/> <xsd:element name=”gioitinh” type=”xsd:String”/> <xsd:choice>

<xsd:element name=”khoa” type=”xsd:String”/> <xsd:element name=”phong” type=”xsd:String”/> </xsd:choice>

</xsd:sequence> </xsd:complexType> </xsd:schema>

So sánh DTD và XML Schema:

ắ Cả DTD và XML Schema đều thực hiện nhiều vai trò khác nhau trong một ứng dụng XML nh−: làm tài liệu, kiểm tra tính hợp lệ, soạn thảo và sinh mã.

ắ Đặc tả DTD gần nh− là một tập con của chuẩn SGML tr−ớc đó, bao gồm cả những giới hạn của nó. Các DTD không thể dễ dàng kết hợp với không gian tên và tiềm năng kiểu dữ liệu bị hạn chế. Mặt khác, các DTD dễ dàng để phát triển các ứng dụng nhỏ và đ−ợc trợ giúp bởi nhiều công cụ phần mềm.

ắ XML Schema bao gồm ngôn ngữ định nghĩa kiểu dữ liệu phong phú, cải thiện sự chính xác của định nghĩa từ vựng và tính hợp lệ của tài liệu. Cả giá trị thuộc tính và nội dung phần tử XML đều có thể đ−ợc kiểm tra tính hợp lệ theo cùng một kiểu định nghĩa kiểu dữ liệu.

ắ XML Schema cho phép định nghĩa kiểu đơn giản và kiểu phức hợp. Khả năng này cung cấp sự phù hợp khái niệm với tính kế thừa của các lớp trong UML tốt hơn khả năng của DTD.

Một phần của tài liệu Nghiên cứu xây dựng hệ thống trợ giúp bài giảng theo công nghệ hướng đối tượng và ngôn ngữ XML (Trang 42)