HTML và XML đều sử dụng các thẻ nhưng các thẻ của HTML là một bộ dữ liệu được xây dựng và định nghĩa trước, nghĩa là người lập trình phải tuân thủ theo các thẻ đã định nghĩa của HTML,[r]
Trang 1ỦY BAN NHÂN DÂN THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG CAO ĐẲNG KINH TẾ KỸ THUẬT
THÀNH PHỐ HỒ CHÍ MINH
GIÁO TRÌNH MÔN HỌC : CÔNG NGHỆ XML NGHỀ: HỆ THỐNG THÔNG TIN TRÌNH ĐỘ: CAO ĐẲNG
(Ban hành kèm theo Quyết định số: /QĐ-CĐKTKT ngày tháng năm 20
của Hiệu trưởng Trường Cao đẳng Kinh tế - Kỹ thuật Thành phố Hồ Chí Minh)
Trang 2ỦY BAN NHÂN DÂN THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG CAO ĐẲNG KINH TẾ KỸ THUẬT
THÀNH PHỐ HỒ CHÍ MINH
GIÁO TRÌNH MÔN HỌC: CÔNG NGHỆ XML NGHỀ: HỆ THỐNG THÔNG TIN TRÌNH ĐỘ: CAO ĐẲNG
THÔNG TIN CHỦ NHIỆM ĐỀ TÀI
Họ tên: Huỳnh Khắc Duy
Học vị: Thạc sỹ
Đơn vị: Khoa Công Nghệ Thông Tin
Email: huynhkhacduy@gmail.com
BỘ MÔN CHỦ NHIỆM ĐỀ TÀI
Huỳnh Khắc Duy HIỆU TRƯỞNG
DUYỆT
Trang 3TUYÊN BỐ BẢN QUYỀN
Tài liệu này thuộc loại sách giáo trình nên các nguồn thông tin có thể được phép dùng nguyên bản hoặc trích dùng cho các mục đích về đào tạo và tham khảo
Mọi mục đích khác mang tính lệch lạc hoặc sử dụng với mục đích kinh doanh thiếu lành mạnh sẽ bị nghiêm cấm
Trang 4LỜI GIỚI THIỆU
Hiện nay việc ứng dụng Công nghệ thông tin vào các ngành nghề khác trở nên phổ biến, trong nhiều lĩnh vực Công nghệ thông tin đã góp phần làm cho công việc trở nên thuận lợi
Môn công nghệ XML là môn học giúp sinh viên có kiến thức nền tảng công nghệ XML các ứng dụng của XML để xây dựng các ứng dụng thực tế
Giáo trình này sẽ cung cấp cho người học các kiến thức từ cơ bản cho đến chuyên sâu
Trang 5MỤC LỤC
CHƯƠNG 1 GIỚI THIỆU XML 12
1.1 Thế giới XML 12
1.2 Trình soạn thảo 15
1.3 Cấu trúc tài liệu XML 15
1.4 Không gian tên XML 21
CHƯƠNG 2 SỰ HỢP LỆ 25
2.1 Document Type Definition (DTD) 25
2.2 Lược đồ XML (XML Schemas) 36
CHƯƠNG 3 XỬ LÝ TÀI LIỆU XML 52
3.1 Mô hình DOM 52
3.2 Ngôn ngữ Xpath 76
3.3 XSLT 85
CHƯƠNG 4 CƠ SỞ DỮ LIỆU 102
4.1 XQuery 102
4.2 XML và cơ sở dữ liệu 138
CHƯƠNG 5 LẬP TRÌNH 146
5.1 Lập trình hướng sự kiện 146
5.1.1 LINQ to XML 147
CHƯƠNG 6 GIAO TIẾP 158
6.1 RSS ATOM và CONTENT Syndication 158
6.2 Web service 171
6.3 SOAP và WSDL 173
6.4 AJAX 179
CHƯƠNG 7 HIỂN THỊ 184
7.1 XHTML và HTML 5 184
7.2 Scalable vector Graphics (SVG) 194
Trang 6GIÁO TRÌNH MÔN HỌC/MÔ ĐUN Tên môn học: Công nghệ XML
Mã môn học: MH3101343
Vị trí, tính chất, ý nghĩa và vai trò của môn học:
- Vị trí: là môn học chuyên ngành, học kỳ 4
- Tính chất: môn học lý thuyết, môn bắt buộc
- Ý nghĩa và vai trò của môn học:
Mục tiêu của môn học:
- Về kiến thức:
+ Phân tích được cấu trúc của một tài liệu XML
+ Phân biệt được DTDs và lược đồ XML
+ Liệt kê được các bước xử lý tài liệu XML bằng DOM, SAX, Xquery, Xpath
+ Xác định được các vần đề cần thiết cho một web service
+ Đưa ra được các bước suy luận giữa cơ sở dữ liệu với XML
- Về kỹ năng:
+ Tạo được tài liệu XML
+ Chuyển thể tài liệu XML với XSLT
+ Đặc tả cấu trúc XML với DTD và Schema
+ Phát triển được chương trình làm việc giữa cơ sở dữ liệu với XML
+ Xây dựng được web service
- Về năng lực tự chủ và trách nhiệm:
+ Rèn luyện thói quen tự giác nghiên cứu bài học trước khi đến lớp
+ Tạo thói quen làm bài tập thực hành thường xuyên
Trang 7III Nội dung môn học:
1 Nội dung tổng quát và phân bổ thời gian:
Kiể
m Tra
1
Chương 1 Giới thiệu XML
1.1 Thế giới XML
1.2 Trình soạn thảo
1.3 Cấu trúc tài liệu XML
1.4 Không gian tên XML
2 Nội dung chi tiết:
Mục tiêu:
- Phát biểu được sự hình thành và phát triển của XML
- Trình bày được cấu trúc của một tài liệu XML và kiểm tra được khuôn dạng của nó
- Khai báo được không gian tên trong trang XML
Trang 8- Vận dụng trình soạn thảo để tạo tập tin XML
Nội dung:
1.1 Thế giới XML
1.2 Trình soạn thảo
1.3 Cấu trúc tài liệu XML
1.4 Không gian tên XML
Mục tiêu:
- Trình bày khái niệm về DTD và XML Schemas và lợi ích của chúng
- Sử dụng được DTD và XML Schemas để đặc tả cấu trúc của tài liệu XML
- Truy xuất được tài liệu XML bằng mô hình DOM và ngôn ngữ Xpath
- Định dạng được tài liệu XML bằng XSLT
- Hiểu được tại sao cơ sở dữ liệu cần XML
- Sử dụng các cơ sở dữ liệu MySQL, SQL server, Exist với XML
Trang 9- Phát biểu được khái niệm lập trình hướng sự kiện
- Truy xuất được tài liệu XML bằng SAX và LINQ
- Phát biểu được các loại giao tiếp giữa các hệ thống thông tin
- Tạo được RSS, web service loại SOAP và WDSL
- Kết nối được AJAX và XML trên trang web
7.2 Scalable vector Graphics (SVG)
IV Điều kiện thực hiện môn học:
1 Phòng học chuyên môn hóa/nhà xưởng: Phòng học thực hành
2 Trang thiết bị máy móc: Máy chiếu, máy tính có phần mềm Dreamweaver,
Trình duyệt Web
3 Học liệu, dụng cụ, nguyên vật liệu: Bảng, bút viết bảng
4 Các điều kiện khác: máy tính có kết nối Internet
V Nội dung và phương pháp, đánh giá:
1 Nội dung:
Trang 10Đánh giá kỹ năng thực hành của sinh viên trong các bài thực hành:
+ Tạo được tập tin XML
+ Sử dụng được các công cụ kết nối XML
+ Tạo được ứng dụng sử dụng XML hoàn chỉnh dựa trên các kiến thức đã học
03 Thi kết thúc môn học Báo cáo tiểu luận
VI Hướng dẫn thực hiện môn học:
1 Phạm vi áp dụng môn học: Áp dụng cho khóa học trình độ cao đẳng
2 Hướng dẫn về phương pháp giảng dạy, học tập môn học:
- Đối với giáo viên, giảng viên:
+ Giáo viên có thể vận dụng phương pháp thuyết trình, giảng giải kết hợp phương pháp gợi mở, phát vấn để người học nghề có thể tham gia tích cực vào bài giảng
+ Phương tiện, dụng cụ giảng dạy: Ngoài phương tiện giảng dạy truyền thống giáo viên còn có thể sử dụng Máy chiếu Projector, Laptop, sơ đồ, tranh ảnh minh hoạ giúp làm rõ và sinh động nội dung bài học
+ Trong điều kiện có thể kết hợp giảng dạy lý thuyết và thực hành trong cùng một phòng học chuyên môn hoá có máy tính được nối mạng LAN và mạng Internet, có sử dụng các phương tiện dạy học bằng hình ảnh
- Đối với người học:
+ Thực hiện đầy đủ và nghiêm túc các qui định đối với môn học và của giáo viên
Trang 11- Trình độ giáo viên: ít nhất phải có bằng cử nhân hoặc bằng cấp tương
đương tính theo kinh nghiệm dạy học trước đó Có chứng chỉ dạy nghề
- Nguồn lực đào tạo: Những nguồn lực sau đây được khuyến khích sử dụng
để bổ trợ những phương pháp giảng dạy đề xuất
+ Cơ sở vật chất, trang thiết bị giảng dạy: Lớp học có đầy đủ máy vi tính cho học sinh thực tập
+ Sách, giáo trình và tài liệu tham khảo
+ Kế hoạch giảng dạy và giáo án chi tiết của giáo viên đóng vai trò tài liệu chính được sử dụng trong quá trình giảng dạy
- Phương pháp đào tạo: Giáo viên kết hợp nhiều chiến lược giảng dạy để
giúp tất cả người học thuộc mọi đối tượng có những tiến bộ nhất định nào đó
Trang 12Chương 1 Giới thiệu xml CHƯƠNG 1 GIỚI THIỆU XML 1.1 Thế giới XML
Hiện nay XML (eXtensible Markup Language) chiếm vị trí rất quan trọng trong việc chuyển tải, trao đổi dữ liệu và liên lạc giữa các ứng dụng Điều này càng được khẳng định khi các hệ điều hành từ WindowsXP trở đi và các hệ điều hành khác bên trong nó chứa rất nhiều tập tin XML Hơn nữa khi bộ Net ra đời càng làm cho XML trở nên thịnh hành và ngày càng được ứng dụng rộng rãi
Sử dụng kỹ thuật XML không chỉ có tập đoàn Microsoft mà ngay cả Sun, IBM, Oracles điều hỗ trợ XML sử dụng nó trong các hệ điều hành và các ứng dụng XML là ngôn ngữ xây dựng cấu trúc tài liệu văn bản, dựa theo chuẩn SGML (Standard Generalized Markup Language: siêu ngôn ngữ có khả năng sinh ngôn ngữ khác) SGML được phát triển cho việc định cấu trúc và nội dung tài liệu điện
tử, do tổ chức ISO (International Organization for Standards) chuẩn hóa năm
1986
SGML do IBM đưa ra, song không thể không kể đến những đóng góp của các công ty khác XML được W3C (World Wide Web Consortium - tổ chức độc lập định ra tiêu chuẩn cho trình duyệt Web, máy chủ và ngôn ngữ) phát triển, nhưng đặc tả XML lại do Netscape, Microsoft và các thành viên của dự án Text Encoding Initiative
(TEI) xây dựng Tổ chức W3C XML Special Interest Group có đại diện từ hơn
100 công ty cùng nhiều chuyên gia được mời khác
Lý do ra đời của XML vì SGML rất rắc rối khó sử dụng và HTML có nhiều giới hạn nên năm 1996 tổ chức W3C thiết kế XML XML version 1.0 được định nghĩa trong hồ sơ February 1998 W3C Recommendation
Điểm quan trọng của kỹ thuật XML là nó không thuộc riêng về một công ty? nào, nó là một sản phẩm mà trí tuệ của nó thuộc về cả thế giới, là một tiêu chuẩn được mọi người công nhận vì được soạn ra bởi W3C (World Wide Web Consortium)
Bản thân của XML rất đơn giản, nhưng các công cụ chuẩn được định ra để làm việc với XML như Document Object Model - DOM, XPath, XSL, thì lại rất hữu hiệu, và chính các chuẩn này được phát triển không ngừng
XML cũng giống như HTML đều là ngôn ngữ đánh dấu, nhưng điều cần nói ở đây là sự ra đời của XML nhằm để khắc phục một số mặt hạn chế của HTML HTML và XML đều sử dụng các thẻ nhưng các thẻ của HTML là một bộ dữ liệu được xây dựng và định nghĩa trước, nghĩa là người lập trình phải tuân thủ theo các thẻ đã định nghĩa của HTML, hiện HTML có khoản hơn 400 thẻ, để nhớ hết 400 thẻ này cũng không có gì khó khăn đối với người lập trình web chuyên nghiệp nhưng thật khó đối với những người không chuyên Hơn nữa, các thẻ của HTML không nói lên được mô tả dữ liệu trong đó Nhưng đối với XML thì hoàn toàn khác bởi vì tag trong XML là do người lập trình tự định nghĩa và mỗi thẻ là một mô tả dữ liệu mà người lập trình muốn truyền đạt
Ngôn ngữ định dạng
Ngôn ngữ định dạng (Markup Language ) là tất cả những gì dùng để mô tả nội dung một tài liệu, đó là cách mà nội dung của tài liệu được diễn dịch Tuy nhiên, ngôn ngữ định dạng chúng ta thường sử dụng trước đây là HTML
Trang 13Chương 1 Giới thiệu xml
Kết quả của tập tin document.html hiển thị trên trình duyệt:
HTML và XML có mối quan hệ rất gần với nhau Cả hai đều dựa trên chuẩn
ngôn ngữ định dạng tổng quát SGML Câu hỏi đặt ra là: XML sẽ được sử dụng
và nó hiển thị trên trình duyệt như thế nào?
Sau đây chúng ta sẽ chuyển nội dung tập tin document.html sang thành tập tin
document.xml như sau:
Trang 14Chương 1 Giới thiệu xml
Hai kết quả hoàn toàn khác nhau Đối với tập tin document.xml thì chúng sẽ hiển
thị đúng với tập tin gốc bởi vì trình duyệt không hiểu được các thẻ do ta tự định
nghĩa Chính vì vậy, để trình duyệt có thể hiểu được các thẻ do ta định nghĩa và
hiển thị chúng, ta phải dùng bảng định kiểu (Style Sheet)
Có 2 cách chỉ ra bảng định kiểu khi định dạng:
- Dùng CSS (Cascade Style Sheet)
- Dùng XSL (Extensible Style Language)
Ví dụ: Ta dùng bảng định kiểu CSS để hiển thị nội dung tập tin document.xml
MASSAGE {display:block; font-size:18pt; color:#000000;}
Bây giờ, kết quả khi chạy tập tin document.xml trên trình duyệt sẽ có hình dạng
sau và không còn hiển thị nội dung tập tin gốc nữa
Trang 15Chương 1 Giới thiệu xml
1.2 Trình soạn thảo
1.3 Cấu trúc tài liệu XML
Khái niệm về cấu trúc tài liệu XML và đặc tả cấu trúc tài liệu XML:
Về cấu trúc tài liệu XML":
– Chỉ tương ứng cấu trúc của nội dung chính
– Cách thức tổ chức, sắp xếp của các thẻ (có hay không có nội dung) trong nội dung chính
Về đặc tả cấu trúc tài liệu XML:
– Mô tả ngắn gọn, chính xác cấu trúc tài liệu XML
– Mô tả ngắn gọn, chính xác cách thức tổ chức, sắp xếp của các thẻ
Ngôn ngữ đặc tả cấu trúc:
Trang 16Chương 1 Giới thiệu xml
Có rất nhiều ngôn ngữ được đề xuất để mô tả tài liệu XML như DTD, XML Schema, XML-Data, Schematron, RELAX NG,… Trong số đó có 2 ngôn ngữ thông dụng là DTD và XML Schema
Đặc điểm của XML Schema:
– Được đề xuất bởi W3C
– Chỉ áp dụng cho tài liệu XML
<!ELEMENT PHAN_SO (Tu_so, Mau_so) >
<!ELEMENT Tu_so #PCDATA >
Trang 17Chương 1 Giới thiệu xml
Có 2 trường hợp chính cần thiết sử dụng các tài liệu đặc tả cấn trúc:
– Trường hợp 1: sử dụng cho việc trao đổi thông tin giữa người – người
– Trường hợp 2: sử dụng cho việc trao đổi thông tin giữa người – hệ thống xử lý Trường hợp 1 là trường hợp phổ biến nhất, với trường hợp này, tài liệu đặc tả cấu trúc + được sử dụng như phương tiện giao tiếp giữa chuyên viên tin học có liên quan đến tài liệu XML tương ứng
+ có thể được lưu trữ theo bất kì định dạng nào thích hợp cho việc sử dụng (trình bày, xem, báo cáo,…)
Trường hợp 2 chỉ được sử dụng khi
+ có hệ thống xử lý (phần mềm, hàm, đối tượng thư viện) “hiểu” và thực hiện các xử
lý tương ứng nào đó với tài liệu đặc tả cấu trúc (xứ lý thông dụng nhất là kiểm tra một tài liệu XML có theo đúng cấu trúc được mô tả trong tài liệu đặc tả cấu trúc hay không)
+ thật sự có nhu cầu cần đến các xử lý của hệ thống xử lý nói trên
Một số kĩ thuật đặc tả nội dung:
Có 4 dạng sử dụng chính của các thực thể:
– Tham chiếu đến một chuỗi giá trị bên trong tài liệu XML đang xét
– Tham chiếu đến các kí tự đặc biệt được định nghĩa trước
– Tham chiếu đến một tập hợp các giá trị bên ngoài tài liệu
– Tham chiếu đến một tài liệu XML khác
*Cách thức khai báo và sử dụng chung các thẻ khai báo thực thể (cho cả 4 dạng trên) như sau:
Khai báo:
Trang 18Chương 1 Giới thiệu xml
&X; <– Sử dụng tham chiếu của X –>
&Y; <– Sử dụng tham chiếu của Y –>
– Dạng 1: ý nghĩa
+ tăng cường tính dễ đọc của tài liệu XML
+ tăng cường tính dễ bảo trì của tài liệu XML
Dạng khai báo và sử dụng:
<?xml version=“1.0” encoding=“utf-8”?>
<!DOCTYPE Goc [
<!ENTITY Ten_1 “Chuoi_1”>
<!ENTITY Ten_2 “Chuoi_2”>
Tài liệu XML trên khai báo và sử dụng 2 thực thể:
Thực thể thứ nhất: Tên là Ten_1 và được sử dụng trong thuộc tính của 2 thẻ A, C Thực thể thứ hai: Tên là Ten_2 và được sử dụng trong nội dung của 3 thẻ B, C, D – Dạng 2: ý nghĩa là cho phép sử dụng một số kí tự đặc biệt
Sử dụng kí tự đặc biệt được định nghĩa trước
Trang 19Chương 1 Giới thiệu xml
Dạng khai báo thông dụng: <!ENTITY Ten_thuc_the SYSTEM Ten_tap_tin >
Thực thể Ten_thuc_the tham chiếu đến tập tin có vị trí được cho bởi Ten_tap_tin Ghi chú: + Ten_tap_tin bao hàm cả đường dẫn
+ Có thể dùng địa chỉ URL như Ten_tap_tin
Ví dụ: Giả sử đã có tập tin hinh.jpg lưu trữ hình ảnh của một nhân viên trong thư mục hiện hành
Dạng khai báo thông dụng: <!ENTITY Ten_thuc_the SYSTEM Ten_tap_tin >
Ví dụ: Giả sử đã có các tập tin Thu_tien_1.xml, Thu_tien_2.xml,… Thu_tien_12.xml lưu trữ thông tin về các phiếu thu tiền trong tháng 1, 2,… 12 của năm đang xét
Tập tin Thu_tien.xml lưu trữ thông tin về các phiếu thu trong năm đang xét như sau
<!DOCTYPE THU_TIEN [
<!ENTITY Thu_tien_1 SYSTEM “Thu_tien_1.xml” >
<!ENTITY Thu_tien_2 SYSTEM “Thu_tien_2.xml” >
Trang 20Chương 1 Giới thiệu xml
2 Sử dụng tên:
Tên thẻ, tên các thuộc tính trong tài liệu XML thuộc về 1 trong 2 loại sau:
– Tên không có tiền tố: mô tả đầy đủ các quy tắc đặt tên cho các tên thẻ, thuộc tính là công việc không đơn giản và đặc biệt là cũng không cần thiết Chẳng hạn, tên là chuỗi bao gồm các kí tự a-z, A-Z, kí số 0-9, một số kí tự như “-”, “_”, “.”,…
– Tên có tiền tố: có dạng 2 chuỗi kí tự cách nhau bởi kí tự “:” Chuoi_tien_to : Chuoi_ten
Xét tài liệu XML với việc sử dụng các tiền tố A tương ứng tên công ty A trong giao dịch thương mại điện tử
Trang 21Chương 1 Giới thiệu xml
và các tiền tố còn lại thì quá dài
1.4 Không gian tên XML
Không gian tên (namespace)
XML cho phép chúng ta tự do định nghĩa các thẻ, như nó cho chúng ta dùng cùng một tên nhưng lại nói đến nhiều loại dữ liệu khác nhau trong cùng một tài liệu XML Xem
Trang 22Chương 1 Giới thiệu xml
<Author>Robert Louis Stevenson</Author>
</Book>
</BookOrder>
Ta thấy trong ví dụ trên có phần tử Title nói đến hai loại dữ liệu khác nhau, một nói về tên tác giả một nói về tiêu đề sách, điều này làm cho ta nhầm lẫn giữa hai loại dữ liệu Hơn thế nữa nếu tài liệu của chúng ta được sử dụng chỉ cho một mục đ ích riêng rẻ thì không có vấn đề gì nh ưng khi tài liệu của chúng ta kết hợp với một tài liệu khác khác thì tài liệu kết hợp này sẽ có vấn đề vì chúng ta đâu chắc chắn rằng tài liệu khác mà chúng ta muốn kết hợp không có sử dụng thẻ trùng với thẻ của chúng ta định nghĩa hay không
Ví dụ như khi chúng ta tích hợp tài liệu XML của chúng ta với ứng dụng khác như VML hay MathML mà chẳng may giữa các tài liệu này có cùng định nghĩa thẻ NAME chẳng hạn Lúc này trình phân tích sẽ không biết nên hiểu thẻ NAME của tài liệu của bạn hay của VML hay của MathML
Vì vậy chúng ta cần phải khai báo không gian tên để khắc phục điều này
Khai báo không gian tên (namespace)
Để khai báo một không gian tên ta chỉ cần đưa thêm thuộc tính xmlns:prefix vào bên trong phần tử gốc, prefix là tên của không gian tên, mỗi không gian tên cần mang một định danh duy nhất Một không gian tên có thể là một địa chỉ internet hoặc một địa chỉ nào đó miễn là địa chỉ này phải duy nhất Ví dụ sau đây sẽ tạo ra một không gian tên
Trang 23Chương 1 Giới thiệu xml
Nếu tài liệu của chúng ta các phần tử chỉ sử dụng duy nhất một không gian tên thì chúng ta có thể khai báo không gian tên mặc định cho các phần tử con của một phần tử cha bằng cách chỉ ghi thuộc tính xmlns và bỏ đi prefix
Cách giải quyết tốt nhất là ta khai báo các không gian tên này ngay ở đầu tài liệu và mỗi không gian tên được phân biệt bởi các định danh
<?xml version="1.0"?>
Trang 24Chương 1 Giới thiệu xml
<BookOrder xmlns="http://www.northwindtraders.com/order" xmlns:cus="http://www.northwindtraders.com/customer" xmlns:bok
Ví dụ trên dùng 3 không gian tên, mộ t không gian tên mặc đị nh và hai không gian tên
có định danh là cus và bok Trong ví dụ trên nh ững phần tử không có định danh của không gian tên đi trước thì được hiểu là sử dụng không gian tên mặc định http://www.northwindtraders.com/order, như phần tử
<OrderDate>2001-01-01</OrderDate>
Trang 25Chương 2 Sự hợp lệ
CHƯƠNG 2 SỰ HỢP LỆ
2.1 Document Type Definition (DTD)
DTD (Document Type Definition) là kiểu tài liệu dùng để định nghĩa kiểu dữ liệu cho các phần tử trong tài liệu XML Khi chúng ta định nghĩa các phần tử trong XML là tùy thích, miễn sao cho nó hợp quy tắc của tài liệu XML Tuy nhiên để tường minh hơn thì ta nên định nghĩa kiểu dữ liệu cho từng phần tử trong tài liệu XML
Trong chương trước chúng ta đã học cách viết một tài liệu hợp khuôn dạng Tuy nhiên một tài liệu XML được xem là hợp khuôn dạng và có giá trị khi toàn bộ các phần tử trong tài liệu được được định nghĩa kiểu dữ liệu mà nó chứa Với cách định nghĩa kiểu tư liệu (DTD) khi chúng ta đọc một tài liệu XML nào thì chỉ cần đọc phần DTD thì chúng ta sẽ biết được cấu trúc của tài liệu XML
Trước khi đi vào phần chi tiết về cách tạo một tài liệu DTD, chúng ta hãy xem ví dụ sau:
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
Định nghĩa một tài liệu DTD
Để viết một tài liệu DTD cũng rất dễ, chỉ cần chúng ta tuân thủ đúng một số quy tắc của W3C là được Đầu tiên chúng ta hãy tìm hiểu về các phần tử (emlement), thuộc tính, thực thể của DTD
Phần tử <!DOCTYPE>
Phần tử này có chức năng dùng để khai báo bắt đầu định nghĩa kiểu tư liệu DTD
Định nghĩa kiểu tư liệu có 2 dạng, đó là DTD tham chiếu nội và DTD tham chiếu ngoại DTD tham chiếu nội là DTD được định nghĩa ngay trong tài liệu XML còn DTD tham chiếu ngoại là DTD được định nghĩa bên ngoài tài liệu XML Bây giờ chúng ta sẽ tìm hiểu từng cú pháp một
Định nghĩa DTD tham chiếu nội
Để bắt đầu định nghĩa kiểu tư liệu DTD tham chiếu nội chúng ta dùng cú pháp sau:
Trang 26Chương 2 Sự hợp lệ
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note body>
<!ELEMENT body (#PCDATA)>
]>
<note>
<body>Don't forget me this weekend</body>
</note>
Định nghĩa DTD tham chiếu ngoại
Sử dụng định nghĩa DTD tham chiếu ngoại sẽ làm cho các ứng dụng XML của chúng ta trở nên dẽ dàng chia sẽ và dùng chung với các ứng dụng khác Có hai cách để chỉ định một DTD tham chiếu ngoại: Tham chiếu ngoại riêng và tham chiếu ngoại chung
Những định nghĩa DTD tham chiếu ngoại riêng được sử dụng cho một nhóm người mang tính cá nhân, chúng không được dùng cho mục đích chung rộng lớn, mục đích phân phối Còn những định nghĩa DTD tham chiếu ngoại chung sẽ mang tính cộng đồng hơn
Để định nghĩa một DTD tham chiếu ngoại riêng chúng ta dùng cú pháp sau:
<!DOCTYPE root-element SYSTEM “filename”>
Trong đó root-element là tên của phần tử gốc trong tài liệu XML, filename là tên file định nghĩa kiểu tư liệu DTD
File note.dtd với nội dung như sau:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
Địa chỉ chứa file DTD có thể một URL/URI
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "http://www.w3schools.com/dtd/note.dtd"> <note>
<to>Tove</to>
<from>Jani</from>
Trang 27Chương 2 Sự hợp lệ
</note>
Để định nghĩa một DTD tham chiếu ngoại chung chúng ta dùng cú pháp sau:
<!DOCTYPE root-element PUBLIC “FPI” “URL”>
Trong đó FPI (Formal Public Identifier) là mộ t định danh chung hình thức, chúng ta cần tuân theo một số quy tắc áp dụng cho FPI sau:
Trường đầu tiên của một FPI là xác định kết nối của DTD đến chuẩn hình thức Đối với các DTD chúng ta tự định nghĩa thì trường này là một dấu chấm Đối với các chuẩn hình thức trường này sẽ tự tham chiếu đến chuẩn của nó
Trường thứ hai là tên nhóm hay tên người chịu trách nhiệm bảo trì và nâng cấp các định nghĩa DTD và tên này phải mang tính duy nhất
Trường thứ ba chỉ định kiểu của tài liệu được mô tả, thường thì trường này kèm theo một
số định danh duy nhất nào đó (chẳn hạn như version 1.0)
Trương thứ ba chỉ định ngôn ngữ mà bạn định nghĩa DTD (ví dụ như ngôn ngữ Tiếng Anh - EN)
Mỗi trường của FPI cách nhau bởi dấu //
element_name là tên của phần tử mà ta muốn định nghĩa
content_model là kiểu của phần tử này, có thể là EMPTY, ANY, #PCDATA, các phần tử con hay trộn lẫn nhiều thành phần
Bây giờ chúng ta tìm hiểu chi tiết hơn
Định nghĩa một phần tử rỗng
<!ELEMENT element_name EMPTY> Ví dụ: <!EMLEMENT note EMPTY>
Định nghĩa một phần tử có chứa nhiều kiểu dữ liệu
<!ELEMENT element_name ANY> Ví dụ: <!ELEMENT note ANY>
Định nghĩa một phần tử có kiểu văn bản
<!ELEMENT element_name (#PCDATA)> Ví dụ: <!ELEMENT note (#PCDATA)> Định nghĩa một phần tử có chứa một phần tử con
Trang 28<!ELEMENT note (to, from, heading, body)>
Tất nhiên với cách viết như thế này thì không tối ưu, chúng ta có thể dùng cách viết thứ hai cho những phần tử có nhiều phần tử con bằng cách dùng ký tự đại diện
Dưới đây là một số nguyên tắc sử dụng ký tự đại diện:
Giả sử chúng ta có phần tử ROOT, phần tử này có hai phần tử con là LIMB_A và LIMB_B, chúng ta có một số định nghĩa sau:
<!ELEMENT ROOT (LIMB_A*)>
Phần tử ROOT không có hoặc có nhiều phần tử LIMB_A
<!ELEMENT ROOT (LIMB_A+)>
Phần tử ROOT có một hoặc nhiều phần tử con LIMB_A
<!ELEMENT ROOT (LIMB_A?)>
Phần tử ROOT không có hoặc có một phần tử con LIMB_A
<!ELEMENT ROOT (LIMB_A, LIMB_B)>
Phần tử ROOT có 2 phần tử con, đầu tiên là phần tử LIMB_A tiếp đến là
LIMB_B
<!ELEMENT ROOT (LIMB_A | LIMB_B)>
Phần tử ROOT có một phần tử con hoặc là LIMB_A hoặc là LIMB_B
Định nghĩa một phần tử có chứa phần tử con hoặc chứa dữ liệu văn bản <!ELEMENT LIMB_A (LIMB_A1| #PCDATA)>
Trang 29Chương 2 Sự hợp lệ
CDATA Cho biết thuộc tính này chỉ có thể chứa kiểu dữ liệu ký tự
(en1|en2| ) Danh sách các giá trị mà thuộc tính có thể được gán
ID
Cho biết thuộc tính này là một ID, tức là các giá trị của thuộc tính này không được trùng nhau và phải bắt đầu bởi một chữ cái
“CNTT”)
#REQUIRED Chỉ định là không có giá trị mặc định cho thuộc tính này,
nhưng khi sử dụng là phải khởi tạo
#IMPLIED Chỉ định là không có giá trị mặc định cho thuộc tính này, và
thuộc tính này không cần dùng đến
#FIXED Chỉ định thuộc tính này chỉ mang duy nhất giá trị value này
Trang 30Chương 2 Sự hợp lệ
attribute-name_n attribute-type_n default-value_n>
Ví dụ 1:
Giả sử chúng ta có file att.dtd với nội dung sau:
<!ELEMENT attributes (#PCDATA)>
<!ATTLIST attributes aaa CDATA #REQUIRED bbb CDATA #IMPLIED> File XML chúng ta viết như sau:
<?xml version="1.0"?>
<!DOCTYPE attributes SYSTEM "att.dtd">
<attributes aaa="#d1" bbb="*~*">Text</attributes>
Ví dụ2:
Giả sử chúng ta có file att.dtd với nội dung sau:
<!ELEMENT attributes (#PCDATA)>
<!ATTLIST attributes aaa CDATA #IMPLIED
bbb NMTOKEN #REQUIRED
ccc NMTOKENS #REQUIRED>
File XML chúng ta viết như sau:
<?xml version="1.0"?>
<!DOCTYPE attributes SYSTEM "att.dtd">
<attributes aaa="#d1" bbb="a1:12" ccc=" 3.4 div -4"/>
Nếu chúng ta viết như sau sẽ không hợp quy tắc vì kiểu NMTOKEN và
<!ATTLIST AAA id ID #REQUIRED>
<!ATTLIST BBB code ID #IMPLIED
list NMTOKEN #IMPLIED>
Trang 31Chương 2 Sự hợp lệ
</XXX>
Nếu chúng ta viết như sau sẽ không hợp quy tắc vì phần tử AAA và CCC có thuộc tính
có kiểu là ID nên không được có giá trị giống nhau
ref IDREFS #REQUIRED>
File XML chúng ta viết như sau là hợp quy tắc:
<?xml version="1.0"?>
<!DOCTYPE XXX SYSTEM "att.dtd">
<XXX>
Trang 32<!ATTLIST AAA true ( yes | no ) #REQUIRED>
<!ATTLIST BBB month (1|2|3|4|5|6|7|8|9|10|11|12) #IMPLIED>
File XML chúng ta viết như sau là hợp quy tắc:
Trang 33Trong đ ó name _entity là tên thực thể tổng quát cần tham chiếu Lưu ý là bắt đầu bởi ký
tự & và kết thúc bởi dấu chấm phẩy
Để tham chiếu đến thực thể tham số chúng ta viết theo cú pháp:
%name_entity;
Trong đó name_entity là tên thực thể tham số cần tham chiếu Lưu ý là bắt đầu bởi ký tự
% và kết thúc bởi dấu chấp phẩy
<!ELEMENT attributes (#PCDATA)>
<!ATTLIST attribute aaa CDATA #REQUIRED>
<!ENTITY out-text “TT CN PM”>
]>
<attributes aaa="C" >&out-text;</attributes>
Đối với thực thể này chúng ta cũng có thể định nghĩa các thực thể tham chiếu lồng nhau
Ví dụ:
<!ENTITY name “Open source software”>
<!ENTITY name-group “&name; Group”>
Tuy nhiên chúng ta không thể đảo ngược lại
<!ENTITY name-group “&name; Group”>
<!ENTITY name “Open source software”>
Thực thể tổng quát ngoại
Thực thể tổng quát ngoại là thực thể được định nghĩa và tham chiếu từ một nguồn bên ngoài
Chúng ta định nghĩa định nghĩa theo 1 trong 2 cú pháp sau:
<!ENTITY entity-name SYSTEM "URI/URL">
<!ENTITY entity-name PUBLIC FPI "URI/URL">
Trong đó:
FPI đã được đề cập đến trong phần 1.2.1.2
URI/URL là địa chỉ đến nguồn dữ liệu cần gán cho entity-name
Ví dụ:
<?xml version="1.0"?>
<!DOCTYPE author [
Trang 34Chương 2 Sự hợp lệ
<!ATTLIST author CR CDATA #REQUIRED>
<!ENTITY writer SYSTEM "http://www.w3schools.com/entities/entities.xml">
<!ENTITY copyright SYSTEM "copyright.txt">
]>
<author CR="C" >& writer; ©right; </author>
Chú ý: Chúng ta không thể dùng tham chiếu thực thể tổng quát ngay trong bản thân các khai báo DTD
Thực thể tham số
Thực thể tham số khác với thực thể tổng quát ở chổ là nó cho phép tham chiếu đến nó ngay trong bản thân các khai báo DTD và vùng hoạt động của nó chỉ nằm trong vùng khai báo các DTD
Mục đích của đích của việc sử dụng thực thể tham số là để tránh các khai báo lặp lại khi định nghĩa DTD và giúp cho chúng ta dễ dàng thay đổi
Tương tự như thực thể tổng quát, thực thể tham số cũng có hai loại đó là thực thể tham số ngoại và thực thể tham số nội
Thực thể tham số nội
Thực thể tham số nội là thực thể được định nghĩa ngay trên DTD của tài liệu
XML Định nghĩa thực thể tham số chúng ta dùng cú pháp sau:
<!ENTITY % entity-name “entity-vale”>
Trang 35Giả sử chúng ta có file hocsinh.dtd như sau:
<!ELEMENT HOCSINH (HOTEN, NGAYSINH, LOP)>
<!ELEMENT HOTEN (#PCDATA)>
<!ELEMENT NGAYSINH (#PCDATA)>
<!ELEMENT LOP (#PCDATA)>
Bây giờ chúng ta viết file tài liệu XML có tên test.xml với thực thể tham số ngoại như sau:
Nếu file hocsinh.dtd đặt tại địa chỉ http://hs.com.vn/hocsinh.dtd thì chúng ta viết lại dòng
đó như sau: <!ENTITY % hs SYSTEM “http://hs.com.vn/hocsinh.dtd”>
Chú ý: Trước khi có được điều lưu ý thì chúng ta hãy xem ví dụ sau:
<!ENTITY % mathml-colon''>
<!ENTITY % mathml-prefix''>
<!ENTITY % mathml-exp '%mathml-prefix;%mathml-colon;exp' >
<!ENTITY % mathml-abs '%mathml-prefix;%mathml-colon;abs' >
<!ENTITY % mathml-arg '%mathml-prefix;%mathml-colon;arg' >
<!ENTITY % mathml-real '%mathml-prefix;%mathml-colon;real' >
<!ENTITY % mathml-imaginary '%mathml-prefix;%mathml-colon;imaginary'>
<!ELEMENT %mathml-imaginary; (#PCDATA)>
Đây là một DTD có định nghĩa các thực thể tham số, chúng ta thấy các thực thể tham số
có thể tham chiếu lẫn nhau theo một trình tự từ trên xuống và có thể được tham chiếu ngay trong một định nghĩa element Tuy nhiên để cho các cách tham chi ếu này có thể
Trang 36Tại sao chúng ta nên dùng XML Schema?
Xuất phát từ những hạn chế của DTD như: DTD sử dụng cú pháp khác so với
cú pháp dùng trong trang XML làm cho người dùng phải nhớ nhiều cú pháp; DTD chỉ
hỗ trợ được 10 kiểu dữ liệu Ngoài ra DTD còn hạn chế về khả năng định nghĩa các ràng buộc dữ liệu
- XML Schema sử dụng cùng cú pháp với trang XML làm cho người dùng dễ nhớ ngoài ra nó còn hỗ trợ được 44 kiểu dữ liệu XML schema cho phép người dùng tự định nghĩa kiểu dữ liệu mới, định nghĩa các ràng buộc dữ liệu XML schema bảo toàn
sự giao tiếp dữ liệu, ràng buộc các khóa và tham chiếu mạnh hơn so với DTD đồng
thời nó còn tích hợp được với không gian tên (namespace)
- Các thuộc tính có thể xuất hiện trong trang XML
- Định nghĩa các kiểu dữ liệu
Trang 37- Các thành phần và các kiểu dữ liệu trong schema như:
- schema, element, complexType, sequence, string nằm trong namespace: http:// /XML schema
- targetNamespace=http://www.books.org namespace của những thành phần định nghĩa trong schema
- Ví dụ như Book, Title, Author, date, ISBN, Publisher nằm trong
Trang 38Chương 2 Sự hợp lệ
* Chú ý:
- Thuộc tính targetNamespace là một tùy chọn có thể không cần chỉ ra
targetNamespace cho một schema
Tham chiếu đến schema từ trang XML
<?xml version =“1.0”?>
<BookStore xmlns=http://www.books.org
xmlns:xsl=http://www.w3.org/2001/XMLschema-instance
<book> xsl:schemaLocation=:http://www.books.org BookStore.xsd”
<title>My life and Times</title>
- Thông báo cho schema-validator biết rằng thuộc tính schemaLocation là nằm
trong XMLschema-instance namespce
- Với schemaLocation thông báo cho schema - validator biết rằng
http://www.books.org namespace là được định nghĩa trong BookStore.xsd
Quá trình kiểm tra tính hợp lệ của một trang XML
Đầu tiên trình duyệt sẽ kiểm tra tính hợp lệ của dữ liệu trong trang XML trước, căn cứ vào cấu trúc dữ liệu khai báo trong trang BookStore.xsd Sau đó tiếp tục kiểm tra tính hợp lệ của trang BookStore.xsd, căn cứ vào các luật mô tả trong
Trang 39<xsd:element name="to" type="xsd:string"/>
<xsd:element name="from" type="xsd:string"/>
<xsd:element name="heading" type="xsd:string"/>
<xsd:element name="body" type="xsd:string"/>
- http://www.w3.org/2001/XMLSchema: namespace của các từ khóa dùng trong
sự xác định lược đồ XML, ví dụ: schema, targetNamespace,…
- targetNamespace: định nghĩa namespace của lược đồ được xác định trong tài liệu <schema>…</schema> trên
Xây dựng lược đồ từ nhiều thành phần
<schema xmlns=http://www.w3.org/2001/XMLSchema
targetNamespace=“http://xyz.edu/Admin”>
<include schemaLocation=“http://xyz.edu/StudentTypes.xsd”>
Trang 40<include>: giống như #include trong ngôn ngữ C
schemaLocation: cho biết nơi để lấy thông tin
Khai báo phần tử trong XML Schema
Phần tử <schema> là phần tử gốc trong các tài liệu XML Schema
- Kiểu giản đơn (Simple type): là một phần tử XML chỉ có kiểu dữ liệu text,
mà không có thuộc tính hoặc không thể chứa các phần tử khác Kiểu text cũng có thể có nhiều loại: