KHOA CÔNG NGHỆ THÔNG TIN-TTBỘ MÔN HỆ THỐNG THÔNG TIN VÀ TOÁN ỨNG DỤNG ---LUẬN VĂN TỐT NGHIỆP THAO TÁC DỮ LIỆU XML VỚI JAVA VÀ API JDOM ỨNG DỤNG QUẢN LÝ CÁC TÀI LIỆU THAM KHẢO CỦA GIÁO TR
Trang 1KHOA CÔNG NGHỆ THÔNG TIN-TT
BỘ MÔN HỆ THỐNG THÔNG TIN VÀ TOÁN ỨNG DỤNG
-LUẬN VĂN TỐT NGHIỆP
THAO TÁC DỮ LIỆU XML VỚI JAVA VÀ API JDOM
ỨNG DỤNG QUẢN LÝ CÁC TÀI LIỆU THAM KHẢO
CỦA GIÁO TRÌNH
Họ và tên: Lê Hoàng Minh Nhẫn Họ và tên: TS.Phạm Thị Xuân Lộc
Lớp: Tin học 2 (DI0656A2)
Khóa: 32
CẦN THƠ, 05/2010
Trang 2LỜI CẢM ƠN
Đầu tiên, em xin gởi lời cảm ơn chân thành và sâu sắc nhất tới Cô Phạm Thị XuânLộc – người đã tận tụy hướng dẫn, động viên và giúp đỡ em rất nhiều trong quá trình thựchiện đề tài luận văn
Thứ hai, em xin cảm chân thành cảm ơn quý Thầy Cô trong Khoa Công Nghệ ThôngTin và Truyền Thông – Trường Đại Học Cần Thơ đã truyền đạt những kiến thức quý báucho em trong những năm học qua
Thứ ba, em xin chân thành cảm ơn bè bạn và các anh chị khóa trước đã ủng hộ, độngviên và giúp đỡ em trong quá trình học tập và nghiên cứu
Thứ tư, em xin gởi lời cảm ơn chân thành và biết ơn sâu sắc tới các Chú Bảo Vệtrong Khoa Công Nghệ Thông Tin và Truyền Thông – Trường Đại Học Cần Thơ đã tạo điềukiện tốt nhất cho em vừa học vừa làm để kiếm thêm thu nhập phụ giúp gia đình trong nhữngnăm tháng ở trường đại học
Và cuối cùng, em không thể bước chân đến trường đại học cũng như hoàn thànhchương trình học đại học mà không có sự quan tâm, chăm sóc, an ủi, khuyến khích, độngviên vô cùng đặc biệt và sâu sắc của ÔNG BÀ, CHA MẸ và ANH CHỊ EM trong gia đình
Em xin phép nói lên lời tri ân tốt đẹp nhất, cao quý nhất với lòng biết ơn thành kính dànhcho họ
Mặc dù em đã cố gắng hoàn thành luận văn với khả năng và trong phạm vi cho phépnhưng chắc chắn sẽ không tránh khỏi những thiếu sót Em kính mong nhận được sự cảmthông và tận tình chỉ bảo của quý Thầy Cô
Cần Thơ, ngày 5 tháng 5 năm 2010
Sinh viên thực hiện
Lê Hoàng Minh Nhẫn
Trang 3NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Cần Thơ, ngày tháng năm 2010 Giáo viên hướng dẫn
TS Phạm Thị Xuân Lộc
Trang 4NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN
Cần Thơ, ngày tháng năm 2010
Giáo viên phản biện
Trang 5TRƯỜNG ÐẠI HỌC CẦN THƠ CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAMKHOA CÔNG NGHỆ THÔNG TIN Ðộc Lập - Tự Do - Hạnh Phúc
PHIẾU ĐÁNH GIÁ LUẬN VĂN TỐT NGHIỆP
(Dùng cho giáo viên hướng dẫn và phản biện LVTN)
TÊN ĐỀ TÀI: Thao tác dữ liệu XML với Java và API JDOM.
Họ và tên sinh viên thực hiện: Lê Hoàng Minh Nhẫn MSSV: 1063292
Họ và tên người hướng dẫn/ phản biện: Phạm Thị Xuân Lộc MSCB: 514
Văn phong rất đặc biệt, gây sự chú ý nơi người đọc và làm nổi bật ý tác giả muốn đềcập
Về cơ sở lý thuyết- nội dung và kết quả nghiên cứu
Do đặc thù của ĐT là về lý thuyết, nên trong phần cơ sở lý thuyết, tác giả chú ý đếncác khái niệm liên quan XM, Java và JDOM
Về XML, LV đã tìm hiểu định nghĩa, tầm quan trọng của XML, cấu trúc một tài liệuXML và các qui tắc trên đó
Java được chú trọng ở sự kết hợp với XML nên SAX và JDOM được đề cập sau khinói qua DOM
Kết quả nghiên cứu được trình bày với ưu khuyết điểm trên cả hai việc nghiên cứu
lý thuyết và ứng dụng
Hướng phát triển hợp lý
Trang 6Về sản phẩm/ chương trình demo
Demo đơn giản trên một hệ thống đơn giản vì chỉ dùng minh họa cho lý thuyết.Tuy thế, tác giả cũng hoàn thành một HTTT hoàn chỉnh, nghiêm túc với đầy đủ ràngbuộc toàn vẹn, các gợi ý nhắc nhở, thông báo sai và thao tác nhanh gọn, kết quả chính xác
Về buổi báo cáo và trả lời chất vấn
Slides theo hình thức chuẩn của trường ĐHCT, đôi chỗ ôm đồm nhiều thông tin quánhư khi giới thiệu các package của JDOM Phong cách báo cáo do đặc thù của LV nên lúcđấu còn chưa thật sinh động, nhưng về sau lôi cuốn được khán giả ở kiến thức của tác giả
Phản ứng khi trình bày và chất vấn có linh động, có chính kiến
Về tinh thần thái độ làm việc
Ham học hỏi, thông minh, có tinh thần vượt khó Chủ động đề xuất ý kiến vớiGVHD Tuy nhiên, mạnh dạn trong suy nghĩ mà còn rụt rè trong giao tiếp
Phần chấm điểm: Người đánh giá dựa vào các nhận xét trên để chấm điểm theo thang điểm
sau:
Nội dung đánh giá Điểm tối đa Điểm thực chấm
Chức năng của sản phẩm đáp ứng yêu cầu đặt ra 2
Sản phẩm có khả năng ứng dụng trong thực tiễn 1
BÁO CÁO VÀ TRẢ LỜI CHẤT VẤN 2
TINH THẦN THÁI ĐỘ LÀM VIỆC 1
TỔNG CỘNG 9.75 (Xuất sắc)
Trang 7Xếp loại: Căn cứ vào điểm chấm trên mà đánh giá xếp loại, theo quy định xếp loại:
Giỏi: Từ 8 đến 8.5 điểm
Khá: Từ 7 đến 7.5 điểm
Trung bình khá: Từ 6 đến 6.5 điểmTrung bình: Từ 5 đến 5.5 điểm
Cần Thơ, ngày 10 tháng 05 năm 2010
NGƯỜI ĐÁNH GIÁ
TS PHẠM THỊ XUÂN LỘC
Trang 8TÓM TẮT, ABSTRACT VÀ TỪ KHÓA I.TÓM TẮT
JDOM là một API miễn phí (giao diện lập trình ứng dụng – mã nguồn mở) được tạo bởiBrett MacLaughlin and Jason Hunter JDOM là một API đặc biệt dành cho Java trái vớiSAX (API đơn giản cho Java) và DOM (mô hình đối tượng tài liệu) là những API độc lậpngôn ngữ
JDOM thì dễ dàng, là một đại diện Java của một tài liệu XML JDOM đưa ra cách trìnhbày tài liệu sao cho dễ dàng, đọc, thao tác, ghi hiệu quả Nó có một API không phức tạp,nhẹ, nhanh và tối ưu hóa cho lập trình viên Java Nó khác với DOM và SAX mặc dù nó tíchhợp tốt cả DOM và SAX
Bây giờ, JDOM vẫn còn trẻ và đang nâng cao Phiên bản mới nhất là JDOM 1.1.1 hỗ trợ
cả ngôn ngữ XPath (thông qua gói phần mềm Jaxen)
Luận văn này sẽ cho chúng ta thấy làm thế nào để đặt Java và XML cùng nhau, xây dựngnhững phần mềm thế giới thực trong đó cả hai mã và dữ liệu đều di chuyển đích thực
II.ABSTRACT
JDOM is a free API (Application Programming Interface – open source) created by BrettMcLaughlin and Jason Hunter JDOM is a specific API for Java contrary to SAX (SimpleAPI for XML) and DOM (Document Object Model), APIs are independent languages.JDOM is, quite simply, a Java representation of an XML document JDOM provides away to represent that document for easy and efficient reading, manipulation, and writing Ithas a straightforward API, is a lightweight and fast, and is optimized for the Javaprogrammer It's an alternative to DOM and SAX, although it integrates well with bothDOM and SAX
Now, JDOM is still young and improving Newest version is JDOM 1.1.1 that supportsXPath language (through package Jaxen software)
This thesis shows us how to put Java and XML together, building real-world applications
in which both the code and the data are truly portable
III.TỪ KHÓA
Java and XML, XML, JDOM, XPath,…
Trang 9MỤC LỤC
LỜI CẢM ƠN i
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN ii
NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN iii
PHIẾU ĐÁNH GIÁ LUẬN VĂN TỐT NGHIỆP iv
TÓM TẮT, ABSTRACT VÀ TỪ KHÓA vii
I.TÓM TẮT vii
II.ABSTRACT vii
III.TỪ KHÓA vii
MỤC LỤC viii
DANH MỤC THUẬT NGỮ VÀ TỪ VIẾT TẮT xii
DANH MỤC HÌNH xiv
DANH MỤC BẢNG xv
Chương I GIỚI THIỆU 1
I.1 ĐẶT VẤN ĐỀ 1
I.2 MỤC TIÊU CẦN ĐẠT ĐƯỢC 2
I.3 PHẠM VI CỦA ĐỀ TÀI 2
I.4 HƯỚNG GIẢI QUYẾT 2
I.4.1 Lý thuyết 2
I.4.2 Chương trình 2
I.5 BỐ CỤC CỦA QUYỂN LUẬN VĂN 2
Chương II CƠ SỞ LÝ THUYẾT 3
II.1 GIỚI THIỆU TỔNG QUAN 3
II.1.1 Giới thiệu về XML 3
II.1.1.1 XML là gì? 3
II.1.1.2 Cách hiển thị tài liệu XML 6
II.1.1.3 XML được dùng ở đâu? 6
II.1.1.4 Tại sao XML quan trọng? 7
II.1.1.4.2 Dữ liệu có cấu trúc và tích hợp 7
II.1.1.4.3 XML đơn giản hóa việc trao đổi dữ liệu 7
II.1.1.4.4 Tùy biến ngôn ngữ định dạng 8
II.1.1.4.5 Dữ liệu tự mô tả 8
Trang 10II.1.1.4.6 XML cho phép mã hóa thông minh 8
II.1.1.4.7 XML cho phép tìm kiếm thông minh 9
II.1.1.5 Cấu trúc của một tài liệu XML 9
II.1.1.5.1 Khai báo XML (XML declaration) 9
II.1.1.5.2 Chú thích (Comments) 10
II.1.1.5.3 Phần tử gốc (root element) 11
II.1.1.5.4 Thẻ và các phần tử (Elements) 11
II.1.1.5.5 Phần tử rỗng (Empty Element) 12
II.1.1.5.6 Thuộc tính (Attribute) 12
II.1.1.5.7 PCDATA (Parsed Chacracter DATA) 13
II.1.1.5.8 CDATA (Character DATA) 13
II.1.1.5.9 Chỉ thị tiền xử lý (Processing Instructions) 14
II.1.1.5.10 Bộ phân tích (Parser) 14
II.1.1.6 Không gian tên (Namespace) 14
II.1.2 Các quy tắc tài liệu của XML 17
II.1.2.1 Tạo tài liệu XML đúng cú pháp (well-formed) 17
II.1.2.2 Tài liệu XML hợp lệ (valid) 20
II.1.3 Lược đồ XML (XML Schema) 24
II.1.3.1 Vì sao có XML Schema 24
II.1.3.2 XML schema là gì? 24
II.2 TỔNG QUAN NGÔN NGỮ LẬP TRÌNH JAVA 28
II.2.1 Giới thiệu 28
II.2.2 Java là gì? 28
II.2.3 Các đặc trưng của Java 28
II.2.4 Nguyên lý hoạt động 29
II.2.5 Cấu trúc của một chương trình Java 30
II.2.6 Các phần mềm cài đặt 30
II.2.6.1 Bộ phần mềm phát triển Java 30
II.2.6.2 IDE 31
II.2.7 Thiết kế giao diện với Swing 31
II.2.7.1 Swing là gì? 31
II.2.7.2 Các thành phần của Swing 32
II.3 CÔNG NGHỆ JAVA VÀ XML 32
Trang 11II.3.1 DOM (Document Object Model) 33
II.3.1.1 Vì sao có DOM? 33
II.3.1.2 DOM là gì? 33
II.3.1.3 Chức năng của DOM 34
II.3.1.4 Cơ chế thực hiện 34
II.3.1.5 Cấu trúc DOM tree 35
II.3.1.6 Các thành phần của DOM 35
II.3.1.7 Khuyết điểm của DOM 35
II.3.1.8 Cách thức thực hiện 36
II.3.1.9 Ví dụ về sử dụng Java DOM để phân tích tài liệu XML 36
II.3.2 SAX (Simple API for XML) 37
II.3.2.1 Vì sao có SAX? 37
II.3.2.2 SAX là gì? 38
II.3.2.3 Chức năng chính của SAX 39
II.3.2.4 Ưu – nhược điểm của SAX 39
II.3.2.5 Một ví dụ về Java SAX phân tích tài liệu XML 40
II.3.3 JDOM (Java Document Object Model) 41
II.3.3.1 Vì sao có JDOM? 41
II.3.3.2 JDOM là gì? 41
II.3.3.3 Sứ mệnh của JDOM 42
II.3.3.4 Tại sao ta cần JDOM? 42
II.3.3.5 API JDOM 44
II.3.3.6 Luồng chương trình tổng quát 53
II.3.3.7 Tạo một file XML với JDOM 54
II.3.3.8 Download và cài đặt JDOM 54
II.3.3.9 Tạo một cây đơn giản 55
II.3.3.10 Hiển thị và lưu tập tin 56
II.3.3.11 Duyệt một file XML 57
II.3.3.11.1 Phân tích một file XML 57
II.3.3.11.2 Duyệt cây 59
II.3.3.11.3 Lọc những phần tử 59
II.3.3.12 Sửa đổi một cây JDOM 61
II.3.3.12.1 Sửa đổi những phần tử 61
Trang 12II.3.3.12.2 Phân tích DOM thành JDOM và ngược lại 65
II.3.3.13 Kết Luận 66
II.3.4 Duyệt tập tin XML với XPath 66
II.3.4.1 XPath là gì? 66
II.3.4.2 Giải pháp Java với XPath 67
II.3.4.3 Môi trường thích hợp 67
II.3.4.4 Nguyên tắc hoạt động 68
II.3.4.5 Cú pháp XPath 68
II.3.4.6 XPath áp dụng cho Java 70
II.3.4.7 Kết luận 71
Chương III CHƯƠNG TRÌNH ỨNG DỤNG 72
III.1 QUẢN LÝ CÁC TÀI LIỆU THAM KHẢO CỦA GIÁO TRÌNH 72
III.1.1 Những thông tin cần quản lý 72
III.1.2 Mô hình MCD (Modèle conceptuel des données) 72
III.1.3 Mô hình tổ chức file XML 73
III.2 MÔ TẢ CHỨC NĂNG CÁC MODULE CHÍNH 74
III.2.1 Giao diện chính 74
III.2.2 Menu File 75
III.2.3 Những thao tác cơ bản giữa Java và JDOM với file XML (Book.xml) 75
III.2.3.1 Thêm 75
III.2.3.2 Sửa 86
III.2.3.3 Xóa 88
III.2.3.4 Tìm kiếm 90
III.2.3.5 Thống kê 92
Chương IV KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN 95
IV.1 KẾT QUẢ ĐẠT ĐƯỢC 95
IV.2 ƯU VÀ KHUYẾT ĐIỂM 95
IV.2.1 Ưu điểm 95
IV.2.2 Khuyết điểm 95
IV.3 HƯỚNG PHÁT TRIỂN 96
TÀI LIỆU THAM KHẢO 97
Trang 13DANH MỤC THUẬT NGỮ VÀ TỪ VIẾT TẮT
Ký hiệu – Tên
viết tắt
Diễn giải
API Application Programming Interface – Giao diện lập trình ứng dụng
ANSI American National Standards Institute – Viện tiêu chuẩn quốc gia Hoa
Kỳ
B2B Business To Business - Mô hình kinh doanh thương mại điện tử trong
đó giao dịch xảy ra trực tiếp giữa các doanh nghiệp với nhau
B2C
Business To Customer - Mô hình kinh doanh thương mại điện tử trong
đó giao dịch xảy ra trực tiếp giữa các doanh nghiệp với người tiêudùng
BITS Banking Industry Technology - Ngôn ngữ văn phòng về kỹ thuật
Chemical Markup Language - Ngôn ngữ định dạng hóa học
CSS Cascading Style Sheet – Bảng định kiểu
DOM Document Object Model – Mô hình đối tượng tài liệu DOM cho phép
xử lý đến từng nút dữ liệu XML theo cấu trúc cây
DTD Document Type Definition – định nghĩa kiểu tài liệu
ebXML electronic business XML - Khởi đầu XML kinh doanh điện tử
eCommerce electronic Commerce – Thương mại điện tử
GUI Graphics User Interface – Giao diện người dùng
HTML
HyperText Markup Language – Ngôn ngữ đánh dấu siêu văn bản Nó
là ngôn ngữ dùng các phần tử thẻ để đánh dấu qui định các định dạngvăn bản Tài liệu HTML thường được hiển thị bởi trình duyệt
IDE Integrated Development Environment – Môi trường phát triển tích hợp.ISO International Organization for Standardization – Tổ chức quốc tế về
tiêu chuẩn hóa
JDK Java Development Kit – Bộ công cụ phát triển Java
JDOM Java Document Object Model – Mô hình đối tượng tài liệu Java
Trang 14JVM Java Virtual Machine – Máy ảo Java.
Multi-platform Đa nền
OOP Oriented Object Programming – Lập trình hướng đối tượng
RPC Remote Procedure Call – Phương thức gọi hàm từ xa
SAX Simple API for XML – Giao diện lập trình ứng dụng đơn giản xử lý tài
liệu XML theo mô hình hướng sự kiện
SGML Standard Generalized Markup Language – Ngôn ngữ đánh dấu tổng
quát chuẩn
Swing Một tập hợp các thành phần của giao diện người dùng của Java
SOAP Simple Object Acess Protocol – Giao thức truy cập đối tượng đơn giản.URI Universal Resource Identifier – Địa chỉ định danh tài nguyên toàn cầu.URL Universal Resource Locator – Địa chỉ định vị tài nguyên toàn cầu.Valid XML Tài Liệu XML hợp lệ
VML Vector Markup Language – Ngôn ngữ định dạng dùng vẽ ảnh véc tơ
WML Wireless Markup Language – Ngôn ngữ định dạng mạng không dây
XHTML Extension HyperText Markup Language – Ngôn ngữ mở rộng của
HTML dựa trên XML
XLink Tạo liên kết trong tài liệu XML
XML Extensible Markup Language – Ngôn ngữ đánh dấu mở rộng
XML Namespace Không gian tên XML
XML Schema Lược đồ XML
XML Parser Bộ phân tích XML
XPath Ngôn ngữ qui định đường dẫn đến một nút dữ liệu XML
XPointer Trỏ đến mục dữ liệu trong XML
XSL Extension Style Language – Ngôn ngữ định kiểu mở rộng
Trang 15DANH MỤC HÌNH
Hình 1 XML là gì? 3
Hình 2 Cấu trúc một tài liệu XML 9
Hình 3 Các thành phần mà ngôn ngữ Java hỗ trợ 28
Hình 4 IDE NetBeans 31
Hình 5 Các gói trong Swing 32
Hình 6 Vai trò của DOM 34
Hình 7 Cơ chế thực hiện của DOM 34
Hình 8 Cấu trúc DOM tree 35
Hình 9 Cơ chế của SAX 39
Hình 10 Mô tả các thành phần của API JDOM 43
Hình 11 Các gói trong API JDOM 44
Hình 12 Cấu trúc gói API JDOM 45
Hình 13 Các thành phần của gói org.jdom 45
Hình 14 Các thành phần trong gói org.jdom.adapters 47
Hình 15 Các thành phần của gói org.jdom.filter 49
Hình 16 Các thành phần trong gói org.jdom.input 50
Hình 17 Các thành phần trong gói org.jdom.output 51
Hình 18 Các thành phần trong gói org.jdom.transform 52
Hình 19 Các thành phần trong gói org.jdom.xpath 53
Hình 20 Luồng chương trình tổng quát của JDOM 54
Bảng 8 Các thành phần của một phần tử được hỗ trợ trong JDOM 61
Hình 21 Những phương thức của Java hỗ trợ XPath trong gói org.jdom.xpath 67
Hình 22 Giải thích cú pháp của XPath 70
Hình 23 Mô hình MCD 72
Hình 24 Giao diện chính của chương trình ứng dụng 74
Hình 25 Giao diện cây của tài liệu Book.xml 75
Hình 26 Giao diện thao tác thêm giáo trình 86
Hình 27 Giao diện thao tác sửa giáo trình 87
Hình 28 Giao diện thao tác xóa giáo trình 90
Hình 29 Giao diện tìm kiếm thông tin giáo trình theo chuyên ngành 92
Hình 30 Giao diện thống kê giáo trình 94
Trang 16DANH MỤC BẢNG
Bảng 1 Mô tả các thành phần trong gói org.jdom 46
Bảng 2 Mô tả các thành phần trong gói org.jdom.adapter 48
Bảng 3 Mô tả các thành phần trong gói org.jdom.filter 49
Bảng 4 Mô tả các thành phần trong gói org.jdom.input 50
Bảng 5 Mô tả các thành phần trong gói org.jdom.output 51
Bảng 6 Mô tả các thành phần trong gói org.jdom.transform 52
Bảng 7 Mô tả các thành phần trong gói org.jdom.xpath 53
Bảng 8 Các thành phần của một phần tử được hỗ trợ trong JDOM 61
Trang 17Chương I GIỚI THIỆU I.1 ĐẶT VẤN ĐỀ:
Trong thời đại công nghệ thông tin hiện nay XML (Extensible Markup Language) chiếm
vị trí số một và 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 ứngdụng Điều này càng được khẳng định khi trong các hệ điều hành từ WindowsXP trở đi, bêntrong nó chứa đầy XML Hơn nữa, khi bộ NET ra đời thì càng làm cho XML trở nên thịnhhành Sử dụng kỹ thuật XML không chỉ có tập đoàn Microsoft mà ngay cả Sun, IBM,Oracle đều hỗ trợ XML và dùng nó trong các ứng dụng
Bên cạnh đó, Java đã cách mạng hóa thế giới lập trình bởi việc cung cấp một nền tảngngôn ngữ lập trình độc lập Java là một ngôn ngữ lập trình hướng đối tượng, Java là ngôn
ngữ đa nền (multi-platform) , nổi tiếng với slogan (khẩu hiệu) “write once, run anywhere” –
“viết một lần, chạy mọi nơi” và biểu tượng tách cà phê bóc khói! Nó có thể thực thi trên
các hệ điều hành khác nhau (MS Windows, Linux, Unix,…) mà không phải biên dịch lạichương trình Java là một ngôn ngữ đơn giản, dễ học, kiến trúc chương trình đơn giản, trongsáng Với những ưu điểm vượt trội ấy, Java đã phát triển rất nhanh chóng và trở nên phổdụng ở mọi lĩnh vực Vì thế, ngày nay mọi ứng dụng đa nền đều hướng về Java
XML đã trở thành từ thông dụng nhất trên Internet trong những gần đây Nếu Java đãcách mạng hóa thế giới lập trình bởi việc cung cấp một ngôn ngữ lập trình độc lập nền tảng,thì XML đưa cuộc cách mạng tiến xa thêm một bước bằng việc cung cấp một nền tảng ngônngữ độc lập cho việc trao đổi dữ liệu Java và XML chia sẻ nhiều đặc tính lý tưởng để xâydựng những ứng dụng xí nghiệp trên nền Web, như sự độc lập nền tảng, tính mở rộng, khảnăng sử dụng lại, hỗ trợ của ngôn ngữ toàn cầu (Unicode), và cả hai đều dựa vào tiêu chuẩncông nghiệp Cùng nhau, Java và XML cho phép những xí nghiệp đơn giản hóa và giảm giáthành của việc chia sẽ thông tin và trao đổi dữ liệu
Từ lâu, chúng ta đã nghe nói đến mã Java là “portable code” (mã di động), thì nay dữliệu XML là “portable data” (dữ liệu di động) Một sự kết hợp tự nhiên của hai ngôn ngữ đểtạo nên những ứng dụng “portable code, portable data” Một cặp bài trùng vô cùng xứngđôi! Nhận thấy mối quan hệ đặc biệt đó cho nên Jason Hunter và Brett McLaughlin đã đưa
ra một biểu thức: JAVA + XML = JDOM Tại sao hai ông lại đưa ra biểu thức ấy? JDOM
là gì? JDOM có phải là một kết quả hoàn hảo cho mối “lương duyên” giữa Java và XML?Vậy, làm thế nào để đặt Java và XML cùng nhau, xây dựng những ứng dụng thế giới
Trang 18thựctrong đó cả hai mã và dữ liệu đều có thể “di động” thật sự? Cho nên, đề tài luận văn
“Thao tác dữ liệu XML với Java và API JDOM” được thực hiện vì mục đích đó.
I.2 MỤC TIÊU CẦN ĐẠT ĐƯỢC
Từ những ý đã nêu trên, mục tiêu của đề tài cần trình bày được những vấn đề liên quan
giữa Java và XML Từ đó, chúng ta sẽ đi sâu vào vấn đề cần tìm hiểu là API JDOM Bên cạnh đó, chúng ta cũng xây dựng chương trình ứng dụng “quản lý các tài liệu tham khảo của giáo trình” để minh họa sinh động hơn về sự kết hợp của Java và XML hay nói đúng
hơn là API JDOM
I.3 PHẠM VI CỦA ĐỀ TÀI
Phạm vi của đề tài chủ yếu là tìm hiểu thiên về lý thuyết mối quan hệ giữa Java và XML
Vì thế, chúng ta có thể khảo sát những APIs để điều khiển XML từ mã Java như:
SAX
DOM
JDOM
I.4 HƯỚNG GIẢI QUYẾT
Để giải quyết vấn đề trên, chúng ta cần phải nghiên cứu về:
I.4.1 Lý thuyết
Tìm hiểu về ngôn ngữ XML
Tìm hiểu về ngôn ngữ Java
Tìm hiều về công nghệ Java và XML
Đi sâu vào công nghệ JDOM để thao tác dữ liệu XML với Java
I.4.2 Chương trình
Ngôn ngữ lập trình: dĩ nhiên là Java và XML
Công cụ hỗ trợ biên dịch Java: NetBean 6.8, JDK 1.6
Các gói thư viện hỗ trợ XML và Java: xml4j.jar, xerces.jar, jdom.jar, jaxen.jar
I.5 BỐ CỤC CỦA QUYỂN LUẬN VĂN
Bố cục chính của quyển luận văn gồm 4 chương sau:
Chương I: Giới thiệu tổng quan về đề tài, phương hướng giải quyết vấn đề
Chương II: Tìm hiểu về cơ sở lý thuyết liên quan đến đề tài
Chương III: Giới thiệu demo để minh họa cho vấn đề tìm hiểu
Chương IV: Nhận xét về kết quả đạt được và hướng phát triển của đề tài
Trên đây, giới thiệu một cách tổng quan nhất về đề tài Chúng ta sẽ đi sâu vào tìm hiểunhững cơ sở lý thuyết ở chương kế tiếp
Trang 19Chương II.CƠ SỞ LÝ THUYẾT
Như đã giới thiệu ở chương I, ở chương này chúng ta sẽ đi sâu vào nghiên cứu những cơ
sở lý thuyết có liên quan để giải quyết vấn đề gồm …
II.1 GIỚI THIỆU TỔNG QUAN
II.1.1 Giới thiệu về XML
Nếu phải tiên đoán kỹ thuật tin học nào sẽ thịnh hành trong tương lai, nhất là tương laigần chúng ta không cần phải học chiêm tinh cũng đoán được là XML Vì ngay cảMircrosoft lẫn Sun, Oracle, IBM đều nhất quyết dấn thân vào con đường này với mọi ứngdụng của mình
XML là một ngôn ngữ đánh dấu tương đối mới vì nó là một subset (một tập con) của và đến
từ (derived from) một ngôn ngữ đánh dấu già dặn tên là Standard Generalized Markup
Trang 20Language (SGML) – Ngôn ngữ đánh dấu tổng quát chuẩn SGML được phát minh bởi Ed
Mosher, Ray Lorie và Charles F Goldfarb của nhóm IBM Research vào năm 1969, khi con
người đặt chân lên mặt trăng Lúc đầu nó có tên là Generalized Markup Language (GML), và được thiết kế để dùng làm meta-language, một ngôn ngữ được dùng để diễn tả
các ngôn ngữ khác - văn phạm, ngữ vựng của chúng , SGML là một tiêu chuẩn quốc tếcho việc định nghĩa những sự mô tả cấu trúc và nội dung trong những tài liệu văn bản Nó
độc lập thiết bị và độc lập hệ thống Nó sử dụng DTD (Document Type Definiton – định
nghĩa kiểu tài liệu) để kiểm tra cấu trúc của tài liệu Những thẻ trong SGML không đượcđịnh nghĩa trước Nó lớn, mạnh và rất phức tạp.Nó được sử dụng một cách nặng nề trongcông nhiệp và thương mại hơn một thập kỷ
SGML là một ngôn ngữ đánh dấu tiêu chuẩn mở rộng dùng để thêm đuôi vào văn bảnnhằm báo hiệu rằng văn bản đã được định dạng Thuật ngữ “markup” mang tính chất lịch sửdựa vào những đánh dấu của người biên soạn lên các trang để chỉ ra cách định dạng chúng.Trong giai đoạn đầu của việc đánh máy bằng máy vi tính, có rất nhiều hệ thống đánh máykhác nhau, mỗi hệ thống dùng một ngôn ngữ đánh dấu riêng Những ngôn ngữ này bao gồmnhững ký tự kiểm soát đặc biệt để chỉ ra điểm bắt đầu và điểm cuối của một định dạng.Những dấu hiệu đánh dấu này khó hiểu và không thống nhất cho nên người sử dụng nhanhchóng nhận ra việc cần một ngôn ngữ đánh dấu chuẩn để tránh nhầm lẫn
Có hai tổ chức - Graphics Communication Association và ANSI (American NationalStandards Institute) - thực hiện vấn đề này từ những năm 1980 Cuối cùng, họ kết hợp lạivới nhau và trong năm 1986, ISO (International Standard Organisation - Tổ chức quốc tế vềtiêu chuẩn hóa) giới thiệu SGML Phần quan trọng nhất của SGML là các file chứa các ký
tự tiêu chuẩn ASCII có nghĩa là chúng có thể được mang từ hệ thống này sang hệ thốngkhác SGML đã tạo ra những cách định dạng văn bản rất đơn giản bằng cách định nghĩa cấutrúc và mối quan hệ trong văn bản Những phần văn bản được định nghĩa ở dạng cây theocấp và việc định dạng dựa trên cây này Thông tin trong văn bản sẽ được dịch và thi hànhcác lệnh hay định dạng trên những hệ thống khác
Một văn bản SGML gồm có phần văn bản thực và một file riêng rẽ DTD (DocumentType Definition - Định nghĩa dạng tài liệu) DTD xác định luật thêm đuôi cho văn bản.DTD định nghĩa mọi cách trình bày phần văn bản thực Bởi vì DTD định nghĩa cách thứckết hợp văn bản cho nên DTD có thể được thay đổi để thay đổi hình thức của văn bản.SGML là do IBM đưa ra, song không thể không kể đến những đóng góp của các công tykhác
Trang 21HTML (HyperText Markup Language - Ngôn ngữ đánh dấu siêu văn bản) - được dùng
cho các trang Web - cũng liên quan đến SGML, ngoại trừ các tập tin văn bản được lưu ởdạng đơn Ngôn ngữ HTML cũng dựa vào SGML, thật ra nó là một áp dụng của SGML
Khi Tim Berners - Lee triển khai HTML để dùng cho các trang Web hồi đầu thập niên 1990,
ông ta cứ nhắc nhở rằng HTML là một áp dụng của SGML
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ứcW3C 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, 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 1998W3C Recommendation”
XML đơn giản hơn SGML nhưng nó vẫn giữ lại những thứ hữu ích của SGML Nó đượcthiết kể để SGML có thể được phân phát qua Web
Đ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, nó là một tiêu chuẩn được mọi ngườicông nhận vì được soạn ra bởi W3C (một ban soạn thảo với sự hiện diện của tất cả cácchuyên gia tin học) và những ý kiến đóng góp bằng cách trao đổi qua email
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, Extension Style Language - XSL, thì
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 để khắc phục cho một số yếu kém của HTML HTML và XML đều sửdụng các thẻ (tag) nhưng các tag của HTML là một bộ dữ liệu tag được xây dựng và địnhnghĩa trước, tức là người lập trình phải tuân thủ theo các thẻ đã định nghĩa của HTML, hiệnHTML có khoản hơn 400 tag, để nhớ hết 400 tag này cũng không có gì khó khăn đối vớingườ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ơnnữa các tag 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 định nghĩa và mỗi tag là một mô
tả dữ liệu mà người lập trình muốn truyền đạt Nói chung, nó mềm dẻo và thích ứng hơn
HTML Một ứng dụng quan trọng của XML với HTML là XHTML (Extension HyperText
Markup Language) XHTML dùng mở rộng và định nghĩa lại HTML một cách có trật tự và
Trang 22cấu trúc hơn Nói chung, XHTML hoàn toàn sử dụng lại các thẻ định dạng của HTML (và
do đó, các trình duyệt đều có khả năng hiểu được XHTML như là trang HTML thôngthường) nhưng theo một định nghĩa và khuôn dạng thống nhất Điểm đặc biệt đó là tất cảcác thẻ trong XHTML phải chữ thường Các phần thẻ phải tuân theo cú pháp và nguyên tắccủa XML
II.1.1.2 Cách hiển thị tài liệu XML
Thông thường tài liệu XML sẽ được trình duyệt đưa toàn bộ nội dung ra màn hình Vậy
là cách nào để trình duyệt hiểu được thẻ XML do ta định nghĩa?
Có 2 cách để trình duyệt hiểu các thẻ do ta định nghĩa:
Dùng bảng định kiểu CSS (Cascading Style Sheet) hoặc XSL (Extension StyleLanguage – ngôn ngữ định kiểu mở rộng) để chỉ định những thẻ dữ liệu nào mà tamuốn lấy trong tài liệu XML và hiển thị chúng với các định dạng tương tự HTML.Dùng ngôn ngữ lập trình như Java, ASP, PHP, Javascript,… để xử lý rút trích ra dữliệu của các thẻ XML ngay trong mã lệnh
CSS: là mô hình định nghĩa kiểu định dạng dùng cho việc hiển thị tài liệu CSS cho phéptách rời định dạng với nội dung dữ liệu
XSL: là ngôn ngữ định kiểu mở rộng dựa trên cú pháp và nguyên tắc cấu thành củaXML XSL có khả năng điều khiển động các phần tử thẻ và dữ liệu cần định dạng XSL cóthể sắp xếp lại các thẻ trong tài liệu, thay đổi cả nội dung thẻ, hiển thị một phần hay toàn bộnội dung dữ liệu
II.1.1.3 XML được dùng ở đâu?
XML được sử dụng trong những trường hợp sau:
XML độc lập với các platform (Windows, Unix,…) và ngôn ngữ (Visual Basic,Java,…)
XML sử dụng để trao đổi dữ liệu giữa những ứng dụng với nhau
Ứng dụng web: giảm thời gian load trang web.
Chứa nội dung trang web : sử dụng XSL (Extension Style Language – Ngôn ngữ
định kiểu mở rộng) hay CSS (Cascading Style Sheet – Bảng định kiểu) để chuyển đổi
và hiển thị trang web
Remote Procedure Call (RPC): đối tượng ở máy này gọi đối tượng ở máy khác Sử
dụng XML và HTTP
Simple Object Access Protocol (SOAP): tương tự như RPC cho phép thông qua
firewall
Trang 23Thương mại điện tử - eCommerce (electronic Commerce): B2B (Business To
Business), B2C (Business To Costomer),…
II.1.1.4 Tại sao XML quan trọng?
II.1.1.4.1 Khả năng liên kết (Linkability) thông qua XLink và XPointer:
XLink hỗ trợ các liên kết tài liệu XML một cách rất tổng quát Trong HTML chúng taphải sử dụng phần tử như <A>, <MG> để tạo liên kết XLink không qui định phần tử nào
cả, thay vào đó liên kết được chỉ ra bởi thuộc tính của phần tử Vì lý do này mà chúng ta cóthể tự định nghĩa mọi phần tử XML có thuộc tính liên kết tạo nên XLink
XPointer dùng để trỏ đến mục thông tin dữ liệu trong tài liệu XML XPointer được xâydựng trên cơ sở XPath Khi học XPath chúng ta sẽ biết cách tạo đường dẫn đến từng nút cụthể trong cây tài liệu XML Tuy XPath có khả năng định vị nhưng nó không có khả năng chỉ
ra chính xác dữ liệu cần lấy Để làm được điều này chúng ta cần nhờ vào Xpointer
Sử dụng XLink và XPointer XML có thể tạo nên:
Những siêu liên kết đơn giản theo một hướng duy nhất
Những mối liên kết 2 chiều
Những liên kết đa đích đến
Những liên kết mở rộng
II.1.1.4.2 Dữ liệu có cấu trúc và tích hợp
Một khía cạnh mạnh mẽ của XML là không chỉ cho phép chúng ta lưu trữ vào file XMLdựa trên thẻ mà còn tổ chức dữ liệu theo cấu trúc XML cho phép các phần tử thẻ tích hợpvới nhau tạo nên một cấu trúc dữ liệu phân cấp (hierarchical) hoàn chỉnh
Dữ liệu XML phân cấp theo cấu trúc cây và vì thế ta có thể:
Truy cập nhanh hơn
Sắp xếp lại dễ dàng hơn
II.1.1.4.3 XML đơn giản hóa việc trao đổi dữ liệu
XML độc lập ngôn ngữ và nền tảng Có nghĩa là đối với nó, một máy tính có thể đangdùng, chẳng hạn, C# trên hệ điều hành Windows, và máy kia là một máy Unix với mã Java;điều đó không thành vấn đề Thực tế, mỗi khi một chương trình máy tính cần liên lạc vớimột chương trình khác, XML là một tiềm năng thích hợp cho dạng thức trao đổi Bởi vìnhững tổ chức khác (hoặc thậm chí là các phần khác nhau trong cùng tổ chức) hiếm khi làmchuẩn hóa trên một bộ công cụ duy nhất, chúng sẽ phải làm một số lượng đáng kể công việc
để trao đổi thông tin Sử dụng XML, mỗi nhóm sẽ tạo nên một lợi ích riêng mà có thểchuyển đổi những định dạng dữ liệu bên trong trở thành XML và ngược lại Trên hết, đây là
Trang 24cơ hội tốt để nhà cung cấp phần mềm có thể đưa ra các công cụ chuyển đổi những ghi chép
cơ sở dữ liệu của họ thành XML và ngược lại
II.1.1.4.4 Tùy biến ngôn ngữ định dạng
Nghĩa là chúng ta có thể tạo các ngôn ngữ định dạng dựa trên XML, đây là một trongnhững khả năng mạnh nhất của XML Chẳng hạn, khi chúng ta và một tập thể nhóm thỏathuận một ngôn ngữ định dạng nào đó (theo một tập thẻ qui ước), chúng ta có thể tùy biếnhoặc ứng dụng nó xử lý theo ngôn ngữ định dạng của chúng ta Hàng trăm ngôn ngữ địnhdạng chuyên dụng dựa trên XML ra đời như:
Ngôn ngữ văn phòng về kỹ thuật nghiệp vụ ngân hàng (BITS – Banking IndustryTechnology Secretariat)
Thư viện kinh doanh thông dụng (CBL – Common Bussiness Library)
Khởi đầu XML kinh doanh điện tử (ebXML – electronic business XML)
Ngôn ngữ định dạng mạng không dây (WML – Wireless Markup Language)
Ngôn ngữ định dạng hóa học (CML – Chemical Markup Language)
Ngôn ngữ định dạng dùng vẽ ảnh véc tơ trong trình duyệt (VML – Vector MarkupLanguage)
II.1.1.4.5 Dữ liệu tự mô tả
Dữ liệu trong tài liệu XML tự mô tả ý nghĩa của nó
dù mấy năm sau mở lại tài liệu này chúng ta vẫn có thể hiểu nội dung của nó
II.1.1.4.6 XML cho phép mã hóa thông minh
Bởi vì, những văn bản XML được tổ chức để nhận dạng từng thông tin quan trọng (cũngnhư mối quan hệ giữa các thông tin), có thể viết mã để xử lí văn bản XML mà không cần
Trang 25con người tác động Những nhà cung cấp phần mềm đã dành rất nhiều thời gian và tiền bạc
để xây dựng các công cụ phát triển XML, làm cho việc viết ngôn ngữ này thành một quátrình tương đối đơn giản
II.1.1.4.7 XML cho phép tìm kiếm thông minh
Mặc dù công cụ tìm kiếm đã cải thiện dần trong nhiều năm qua, tuy nhiên nhận đượcnhững kết quả không chính xác vẫn phổ biến xảy ra Nếu bạn đang tìm kiếm một ai đómang tên “Chip” trong những trang HTML, bạn sẽ tìm thấy một loạt các trang web về chipsô-cô-la, chip máy tính, chip gỗ, và nhiều thứ vô dụng khác Tìm kiếm văn bản XML cho
<first_name> các yếu tố chứa từ Chip sẽ mang lại cho bạn những kết quả tốt hơn rất nhiều
II.1.1.5 Cấu trúc của một tài liệu XML
Một tài liệu XML cơ bản thường có những phần sau:
Hình 2 Cấu trúc một tài liệu XML.
Ta thấy cấu trúc tài liệu XML có những phần cơ bản: khai báo, phần tử gốc, chú thích,thẻ và phần tử, thuộc tính
II.1.1.5.1 Khai báo XML (XML declaration)
Hầu hết các văn bản XML đều bắt đầu với một khai báo XML phần sẽ đưa ra cho bộ
phân tích (parser) những thông tin cơ bản có trong văn bản Khai báo XML có thể có, nhưngkhông bắt buộc Nếu có, nó phải là phần đầu tiên trong văn bản
Khai báo có thể chứa tới ba cặp giá trị – tên (nhiều người gọi đó là những thuộc tính, dùthực chất về kỹ thuật thì không phải vậy) Phiên bản là phiên bản XML được sử dụng; giá
Trang 26trị lúc này phải là 1.0, encoding là chỉ bảng mã chữ cái được sử dụng trong văn bản này,ISO-8859-1 Chữ cái tham khảo trong khai báo trên bao gồm những chữ cái rất phổ biếntrong hầu hết các ngôn ngữ Tây Âu Nếu không có encoding nào được chỉ ra, bộ phân tíchXML sẽ cho là những chữ cái trong bộ UTF-8, một tiêu chuẩn Unicode phù hợp với từngchữ cái và chữ tượng hình của các ngôn ngữ trên thế giới.
<?xml version= "1.0" encoding="ISO-8859-1" standalone= "no"?>
Cuối cùng, standalone, có thể là có hoặc không, xác định tài liệu này có thể được xử lýcùng với hay không với bất cứ tập tin nào khác Chẳng hạn, nếu văn bản XML không thamkhảo các tập tin khác, chúng ta nên chỉ rõ standalone= "yes" Nếu văn bản XML tham khảonhững tập tin khác mà mô tả nội dung văn bản, chúng ta nên chỉ rõ standalone= "no" Bởi vìstandalone= "no" là một mặc định, chúng ta sẽ hiếm khi thấy standalone trong các tuyên bốXML
Nói chung ý nghĩa của phần khai báo XML là:
– Cung cấp thông tin cho bộ phân tích (parser)
– Không nhất thiết phải có
Ví dụ:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Và quy định:
– Bắt đầu bằng “<?xml”, kết thúc bằng “?>”
– Bắt buộc phải có thuộc tính version
– Tùy chọn đối với 2 thuộc tính encoding, standalone
– Nếu sử dụng cả 3 thuộc tính thì phải theo thứ tự như ở ví dụ trên
– Phiên bản đặc tả của XML parser phải giống với phiên bản đặc tả của tài liệuXML
– Cú pháp: <! nội dung ghi chú >
Trình ứng dụng không thể lấy được nội dung ghi chú
Ví dụ :
Trang 27<TacGia></TacGia><! Sách này không biết tác giả > > (Sai)
<! Sách này không biết tác giả > (Sai)
II.1.1.5.3 Phần tử gốc (root element)
Một văn bản XML phải được chứa trong một phần tử tố đơn Phần tử đơn đó được gọi là
phần tử gốc, và nó chứa tất cả các từ ngữ và bất cứ phần tử nào trong văn bản Tất cả các
tài liệu XML được coi là đúng cú pháp (well-formed) nếu chứa đựng duy nhất một phần tửgốc Phần tử gốc được xem là rất quan trọng trong cấu trúc XML nhất là khi chúng ta nhìn
nó ở khía cạnh lập trình Khi chúng ta bắt đầu phân tích nội dung tài liệu XML, chúng taphải khởi đầu từ một phần tử gốc, sau đó tiếp tục lần ra các phần tử chứa dữ liệu khác.Trong
ví dụ trên, văn bản XML được chứa đựng trong một phần tử gốc duy nhất <Sach>
II.1.1.5.4 Thẻ và các phần tử (Elements)
Chúng ta tạo cấu trúc cho tài liệu XML dựa trên các thành phần định dạng (markup).Những thành phần này thường bao gồm các phần tử (elements) Mỗi phần tử thường baogồm một cặp thẻ: thẻ bắt đầu (start-tag) và thẻ kết thúc (end-tag) Ngoại trừ các phần tửrỗng sẽ được định nghĩa chỉ bằng một thẻ
Kí tự bắt đầu có thể là kí tự (bao gồm các ngôn ngữ không thuộc Latin), kí tự “_”
Kí tự bắt đầu không thể là kí số hoặc những kí hiệu khác
Sau kí tự đầu tiên có thể là kí số, “-”, “.”
Tên không được có khoảng trắng
Phân biệt chữ hoa chữ thường
Tên không được chứa kí tự “:” Trừ khi có sử dụng namespaces.
Không thể có khoảng trắng ngay sau kí tự “<” Nhưng có thể khoảng trắng trước kí
tự “>”
Tên không thể bắt đầu bằng từ “xml” trong bất kỳ định dạng nào kể cả kết hợp vớinhững kí tự khác
Ví dụ: “xml”, “XML”, “XmL”, …
Trang 28Chú ý: Đối với, XML parser kèm theo Internet Explorer không bắt buộc quy địnhkhông sử dụng “xml”, nhưng đối với những parser thì xem quy định này là bắt buộc.
Vì vậy, chúng ta không nên sử dụng “xml” trong mọi trường hợp
II.1.1.5.5 Phần tử rỗng (Empty Element)
Phần tử rỗng: thường thì một phần tử bao gồm một thẻ mở và một thẻ đóng Giữa thẻ mở
và thẻ đóng có thẻ chứa dữ liệu ký tự hoặc các cặp thẻ khác Tuy nhiên, phần tử có thể chỉ
có duy nhất một thẻ Đây là trường hợp phần tử rỗng không kèm theo dữ liệu và do đó chỉ
có duy nhất một thẻ Thẻ thể hiện phần tử không phải thẻ đóng cũng không phải thẻ mở.Chẳng hạn, trong HTML thì các thẻ <IMG>, <LI>, <BR> là những thẻ rỗng bởi chúng
không có thể đóng tương ứng Nó là phần tử không có nội dung (PCDATA) như ví dụ sau
II.1.1.5.6 Thuộc tính (Attribute)
Có thể thêm thuộc tính vào start-tags hay elements
Cú pháp: <tên thuộc tính>=“<giá trị>”.
Tên attributes theo những quy tắc đặt tên như elements : case-sensitive, không bắt đầubằng từ “xml”, …
Parser (bộ phân tích) không quan tâm đến thứ tự xuất hiện của những attribute trongelement
Ví dụ:
<name first="John" middle="Fitzgerald Johansen" last="Doe"></name>
Vì vậy, nếu cần quan tâm đến thứ tự của thông tin thì ta nên đặt thông tin vào trongelement hơn là attribute
Lý do sử dụng thuộc tính:
Sử dụng element cho phép linh hoạt hơn Có thể thêm element khác để chianhỏ thông tin
Trang 29Attributes dùng để mô tả, hay định dạng những dữ liệu trong element đó Nói
cách khác, attribute dùng để chứa meta data.
Sử dụng attribute không có thứ tự
II.1.1.5.7 PCDATA (Parsed Chacracter DATA)
Tài liệu giữa một thẻ bắt đầu (start-tag) và một thẻ kết thúc (end-tag) của một thành phầnđược gọi là nội dung thành phần Nội dung giữa các thẻ thường đơn thuần là dữ liệu (trái
với các thành phần khác) Trong trường hợp này, nội dung thành phần được gọi là Parsed Chacracter DATA và hầu như được tham chiếu bằng tên gọi tắt là PCDATA.
Những qui định của PCDATA:
– Không cho phép sử dụng kí tự ‘<’ và ‘&’
Ví dụ:
o Sai : <comparison>6 is < 7 & 7 > 6</comparison>
o Giải quyết: dùng các thực thể định nghĩa sẵn, sử dụng bảng mã, hay đánhdấu trong đoạn CDATA
– Trong ngôn ngữ định dạng XML có sử dụng một số ký tự định dạng đặc biệt:
<, >, ‘, “, & Vì vậy, để giúp cho chúng ta thể hiện tài liệu đúng theo nguyên mẫubằng cách định nghĩa 5 thực thể này như sau:
o < cho kí hiệu nhỏ hơn (less than)
o > cho kí hiệu lớn hơn (greater)
o " cho dấu trích dẫn kép (quote)
o ' cho dấu trích dẫn đơn hoặc dấu lược (apostrophe)
o & cho một ký hiệu và & (ampersand)
– Sử dụng bảng mã:
o &#nnn; với ‘nnn’ là Unicode number ở hệ thập phân
o &#xnnn; với ‘nnn’ là Unicode number ở hệ thập lục phân
o kí tự ‘©’ được thay bằng © hay ©
II.1.1.5.8 CDATA (Character DATA)
Nếu có khá nhiều ký tự “<” và “&” cần thoát, chúng ta sẽ thấy tư liệu nhanh chóng trởnên rất xấu xí và khó đọc may thay, ta còn có các đoạn CDATA CDATA là một thuật ngữ
được thừa kế từ SGML Nó viết tắt từ Character DATA.
Parser sẽ không phân tích nội dung văn bản trong CDATA
Cú pháp: <![CDATA[nội dung trong CDATA]]>
Ví dụ:
Trang 30<script language='JavaScript'><![CDATA[
function myFunc() {
if(0 < 1 && 1 < 2)alert("Hello");
}]]></script>
II.1.1.5.9 Chỉ thị tiền xử lý (Processing Instructions)
Thường dùng để chứa script (kịch bản)
Cú pháp: <?PITarget PI?>
Ví dụ:
<?xml version='1.0' encoding='UTF-16' standalone='yes'?>
<name nickname='Shiny John'>
II.1.1.5.10 Bộ phân tích (Parser)
Một bộ xử lý XML (XML processor) thường được gọi là bộ phân tích (parser) bởi nóđơn giản phân tích XML và cung cấp cho ứng dụng mọi thông tin cần thiết
Parser có nhiệm vụ phân tích (parse) tài liệu XML và cung cấp bất kỳ dữ liệu nào có trongXML cho chương trình ứng dụng
Một số parser nổi tiếng:
MSXML:
http://msdn.microsoft.com/downloads/webtechnology/xml/msxml.asp
Apache Xerces: http://xml.apache.org/
XML4J (XML for Java): http://www.alphawork.ibm.com
II.1.1.6 Không gian tên (Namespace)
XML cho phép tự định nghĩa và đặt tên cho các thẻ Nếu tài liệu chỉ sử dụng riêng chomột mục đích nào đó và không cần kết hợp với các tài liệu XML khác thì điều này khôngthành vấn đề Tuy nhiên, một khi các ứng dụng phát triển, tập định nghĩa thẻ XML cầnsống chung và kết hợp với nhau thì điều này là một vấn đề Chẳng hạn, nếu tài liệu của
Trang 31chúng ta tự định nghĩa thẻ mang tên <DATA> (một tên rất thông dụng) chứa dữ liệu phục
vụ riêng cho ứng dụng của mình Sau này chúng ta cần tích hợp tài liệu XML của mình vớicác ứng dụng khác như VML, chẳng may nếu các ứng dụng này cũng khai báo một phần tửmang tên <DATA> thì sao? Trình phân tích (parser) nên hiểu thẻ <DATA> của chươngtrình của chúng ta hay của các ngôn ngữ VML? Vì vậy, cần phải có sự phân biệt về phạm vihay không gian tên (namespace) mà thẻ có ý nghĩa Sức mạnh XML nằm ở chính tính linhhoạt của nó, điều này chúng ta và hàng triệu người khác dễ dàng nhận thấy trong các thẻ
miêu tả dữ liệu của XML Namespace là một ý niệm rất quan trọng trong XML Nó cho ta
cách cùng một tên của Element để nói đến hai thứ dữ liệu khác nhau trong cùng một tài liệu
XML Giống như có hai học sinh trùng tên Tuấn trong lớp học, ta phải dùng thêm họ của
chúng để phân biệt, ta gọi Tuấn Trần hay Tuấn Lê Ở đây chúng ta vẫn có thể kết hợp cả haithẻ <DATA> vào một tài liệu XML duy nhất nhưng phân biệt chúng bằng không gian tên.Chúng ta sẽ dùng một định vị tài nguyên duy nhất (URI) để dặt không gian tên cần truyxuất Tất cả các thẻ đi theo không gian tên phải đặt theo tên miền (định nghĩa bởi định danhtài nguyên) và dấu hai chấm Do URI chưa phổ biến nên hiện nay ta vẫn thường dùng địachỉ URL làm định danh duy nhất cho một không gian tên nào đó
Đặc tả XML đã mở rộng khái niệm URL - Uniform Resource Locator - địa chỉ định vị tàinguyên đồng nhất sử dụng trên Internet và các trang web HTML thành khái niệm định danhtài nguyên đồng nhất (URI - Uniform Resource Indentifier) URL là địa chỉ liên kết đượcdùng rất phổ biển trong Internet hiện nay URI cho phép diễn đạt cách truy tìm tài nguyêntrên Internet URI tập trung nhiều vào khái niệm tài nguyên hơn là vị trí thật sự nơi tàinguyên đặt để Ý tưởng này về mặt lý thuyết, URI có thể định vị thông tin về tài nguyên ở
cả những website phụ và thậm chí có thể theo dõi sự di chuyển của tài liệu từ nơi này đếnnơi khác Chẳng hạn, ta xét ví dụ sau đây:
Trang 32nhất đối với mọi tài nguyên trên Internet Ở đây ta thêm vào không gian tên minhkhai được
tạo ra cho thư viện như sau:
Trang 33Điểm cuối cùng: Chuỗi trong xác định không gian tên chỉ là một chuỗi Đúng thế,
những chuỗi này trông giống như các URL, nhưng lại không phải Bạn có thể xácđịnh xmlns:addr= “mike” Điều quan trọng duy nhất của chuỗi không gian tên là nó chính làduy nhất; điều này giải thích tại sao hầu hết các xác định không gian tên trông giống nhưcác URL Bộ kiểm ngữ XML không tìm một DTD hay một lược đồ ởhttp://www.zyx.com/books/, mà nó sẽ sử dụng các ký tự chữ cái như một chuỗi Điều này
có vẻ phức tạp, nhưng đó chính là cách các không gian tên vận hành
II.1.2 Các quy tắc tài liệu của XML
II.1.2.1 Tạo tài liệu XML đúng cú pháp (well-formed)
Đầu tiên, khi xây dựng tài liệu XML là chúng ta phải biết qui tắc cũng như cú pháp địnhnghĩa các thành phần của tài liệu XML Các trình diễn dịch XML thường yêu cầu rấtnghiêm ngặt về kiểm tra lỗi cú pháp Tài liệu XML được xem là đúng đắn khi nó đúng cúpháp (well-formed) và hợp lệ (valid)
Để well-formed, một tài liệu XML phải theo đúng các luật cơ bản sau đây:
Phải có một phần tử gốc (root Element) duy nhất, gọi là Document Element, nó
chứa tất cả các Elements khác trong tài liệu
Mỗi thẻ mở (opening tag) phải có một thẻ đóng (closing tag) giống như nó
Tags trong XML thì case sensitive, tức là opening tag và closing tag phải được
đánh vần y như nhau, phân biệt chữ hoa hay chữ thường
Mỗi phần tử con (Child Element) phải nằm trọn bên trong phần tử cha (ParentElement) của nó, tức là những phần tử không thể đan chéo
Giá trị thuộc tính (Attribute value) trong XML phải được gói giữa một cặp nháykép hay một cặp apostrophe (dấu nháy đơn)
Luật thứ nhất đòi hỏi một phần tử gốc duy nhất, nên tài liệu dưới đây không
well-formed vì nó không có top level Element:
<last_name>Terry</last_name>
<first_name>John</first_name>
Trang 34Một tài liệu XML không có root Element gọi là XML fragment (mảnh), để làm cho nówell-formed ta cần thêm vào một phần tử gốc:
<name>
<last_name>Terry</last_name>
<first_name>John</first_name>
</name>
Luật thứ hai nói rằng một thẻ đóng mở có một thẻ đóng giống như nó Tức là mỗi thẻ
mở ra thì phải được đóng lại Phần tử rỗng gọi là Empty Element thì có cách viết gọn là
<MiddleInitial/> được gọi là thẻ tự đóng lại Các thẻ khác phải có thẻ đóng Vì vậy, trường
hợp sau đây sẽ không hợp khuôn dạng vì có thẻ mở <birthday> mà thiếu thẻ đóng
Vì vậy, để tài liệu XML trên ví dụ trên well-formed ta chỉ cần thêm vào thẻ đóng
</birthday> như sau là xong:
Luật thứ ba nói rằng các thẻ phân biệt chữ hoa, chữ thường Như thế thì <name> khác
<Name> ta không thể dùng thẻ </Name> để đóng thẻ <name> Ví dụ sau đây cho thấy điều
đó:
<Student>
<name>Lê Hoàng Thắng</name>
<birthday>22/5/1988</birthday>
Trang 35Luật thứ tư lại bảo rằng các phần tử con phải nằm trong một phần tử cha tức là các
phần tử không được đan chéo, không được bắt đầu phần tử mới khi phần tử này chưa kết
thúc Chẳng hạn như ví dụ sau đây:
Ta thấy thẻ <name> chưa được đóng lại thì thẻ <birthday> đã xuất hiện Điều này làm
cho ví dụ trên chưa đúng cú pháp Và ta chỉ cần sửa lại như ví dụ trước là xong.
Luật cuối cùng về tài liệu XML well-formed đòi hỏi giá trị (value) của thuộc tính
(attribute) trong thẻ phải được đặt trong dấu trích dẫn (dấu nháy kép hoặc nháy đơn) Tài
liệu XML dưới đây là không well-formed vì các attribute không được đặt trong dấu trích
dẫn đàng hoàng:
<Document>
<Student Major = IT>
<name>Lê Hoàng Thắng</name>
<code>1063392</code>
</Student>
Trang 36<Student Major = “IT”>
<name>Lê Hoàng Thắng</name>
II.1.2.2 Tài liệu XML hợp lệ (valid)
Một tài liệu XML được gọi là hợp lệ khi nó là tài liệu được kết hợp định nghĩa kiểu tàiliệu (Document Type Definition - DTD) và tuân theo chuẩn DTD Mục đích của DTD làlàm sau cho nhiều người hay chương trình khác nhau có thể đọc file lẫn nhau
Một DTD xác định các phần tử có thể xuất hiện trong văn bản, thứ tự chúng xuất hiện,cách chúng được sắp xếp trong cái khác, và các chi tiết cơ bản trong cấu trúc văn bản XML.Các DTD là bộ phận của chi tiết kỹ thuật XML gốc, và chúng rất giống với các DTDSGML
Một DTD cho phép chỉ ra cấu trúc của một văn bản XML Hai phần tiếp theo sẽ bàn tớinhững đoạn của các DTD Trước hết, đây là một DTD xác định cấu trúc cơ bản của văn bảnsách
Ví dụ, tài liệu Book.xml sau đây được định nghĩa kiểu tài liệu.
<?xml version = “1.0” endcoding = “UTF-8”?>
<!DOCTYPE DOCUMENT [
<!ELEMENT DOCUMENT (SACH) *>
<!ELEMENT SACH (TUA, ANH, NGONNGU, NAMXB, LANXUATBAN, KHO,
Trang 37GIA, SOTRANG, CHUYENNGANH, DSTACGIA, NHAXB,
DSTAILIEUTHAMKHAO) >
<!ELEMENT TUA (#PCDATA) >
<!ELEMENT ANH (#PCDATA) >
<!ELEMENT NAMXB (#PCDATA) >
<!ELEMENT LANXB (#PCDATA) >
<!ELEMENT KHO (#PCDATA) >
<!ELEMENT GIA (#PCDATA) >
<!ELEMENT SOTRANG (#PCDATA) >
<!ELEMENT CHUYENNGANH (#PCDATA) >
<!ELEMENT DSTACGIA (TACGIA)* >
<!ELEMENT TACGIA (HOTEN,VAITRO) >
<!ELEMENT HOTEN (#PCDATA) >
<!ELEMENT VAITRO (#PCDATA) >
<!ELEMENT NHAXUATBAN (TEN, DIACHI, SODT, FAX, EMAIL, WEBSITE) >
<!ELEMENT TEN (#PCDATA) >
<!ELEMENT DIACHI (#PCDATA) >
<!ELEMENT SODT (#PCDATA) >
<!ELEMENT FAX (#PCDATA) >
<!ELEMENT EMAIL (#PCDATA) >
<!ELEMENT WEBSITE (#PCDATA) >
<!ELEMENT DSTAILIEUTHAMKHAO (TENSACH) >
<!ELEMENT TENSACH (#PCDATA) >
]>
<DOCUMENT>
<SACH>
<TUA>Windows Server 2003</TUA>
<ANH>Windows Server 2003.jpg</ANH>
<NGONNGU>Anh</NGONNGU>
<NAMXUATBAN>2002</NAMXUATBAN>
<LANXUATBAN>1</LANXUATBAN>
<KHO>20X28</KHO>
Trang 38#PCDATA là gì? Giả sử chúng ta muốn phần tử <SACH> chứa dữ liệu văn bản (ví dụ nhưtựa sách) ta có thể khai báo định nghĩa #PCDATA Tất cả các dữ liệu không thuộc phầnđịnh dạng (non-markup) được tham chiếu đến bởi định nghĩa #PCDATA #PCADATA chỉ
có nghĩa là dữ liệu thô, không phụ thuộc thành phần định dạng Dữ liệu văn bản thô khôngcho biết thêm thông tin gì khác ngoài tính chất văn bản (text) của nó Chúng ta có thể chứa
số nguyên, số chấm động nhưng chúng phải ở dạng text
Trang 39Trong ví dụ trên, chúng ta dùng thẻ <!DOCTYPE> để bắt đầu định nghĩa kiểu tài liệucho các phần tử XML Và phần khai báo định nghĩa kiểu tài liệu thì thường đặt ở phần khởiđầu của tài liệu sau phần khai báo Tiếp đến, chúng ta có thể định nghĩa các kiểu tài liệu chophần tử bên trong cặp móc vuông [] Mỗi phần tử được bắt đầu định nghĩa bằng thẻ khai báo
<!ELEMENT> Trước hết, chúng ta hãy tìm hiểu về khai báo này
Khai báo <!ELEMENT> được dùng để bắt đầu định nghĩa kiểu tài liệu DTD cho mộtphần tử Chúng ta sử dụng khai báo này theo cú pháp: <! ELEMENT NAMECONTEN_MODEL>
Trong đó, NAME là tên của phần tử muốn định nghĩa; CONTENT_MODEL có thể đượcđặt là EMPTY hay ANY hoặc trộn lẫn cả hai nội dung (bao gồm dữ liệu có thể dùng để
phân tích hoặc các phần tử con khác) ANY có nghĩa là phần tử khai báo có thể chứa nội
dung bất kỳ nào mà chúng ta định nghĩa kể cả mọi phần tử khác
Trong ví dụ trên ta khai báo phần tử DTD mà nội dung có thể chứa những phần tử conkhác bằng cách định tên các phần tử con trong dấu ngoặc đơn () Khi khai báo một phần tử
có khả năng chứa nhiều phần tử con khác, thông thường chúng ta phải lặp đi lặp lại khai báo
<!ELEMENT>
Ví dụ:
<?xml version = “1.0” endcoding = “UTF-8”?>
<!DOCTYPE DOCUMENT [
<!ELEMENT DOCUMENT (SACH, SACH) >
<!ELEMENT SACH (#PCDATA)
Giả sử a và b là hai phần tử con muốn khai báo và định nghĩa ta có cú pháp :
a*: không có hoặc có nhiều phần tử giống nhau
a+: Có ít nhất là một hoặc nhiều phần tử con giống nhau
Trang 40a?: Phần tử a hoặc không có phần tử a nào cả.
a, b: phần tử a tiếp đến là b
a|b: Phần tử a hoặc phần tử b nhưng không được cả hai
(expression): Tập các phần tử expression trong cặp ngoặc sẽ ảnh hưởng bởi ký tự đại
diện*, +, hoặc ?
II.1.3 Lược đồ XML (XML Schema)
II.1.3.1 Vì sao có XML Schema
Tuy DTD tạo điều kiện thuận lợi cho việc xác thực cấu trúc tài liệu XML, nhưng khôngnhiều về cách thức ngữ nghĩa Nó cũng sử dụng cú pháp khá rắc rối để định nghĩa tài liệuXML hơp lệ XML Schema là một sự thay thế cho DTD vì:
Hỗ trợ nhiều loại dữ liệu
Sử dụng cú pháp XML
Bảo toàn sự giao tiếp dữ liệu
Ràng buộc khóa và tham chiếu mạnh hơn DTD
XML Schema là một tài liệu XML được viết dưới dạng thức thuần văn bản với phần mởrộng xsd (XML Schema Definition) Tài liệu này mở đầu bằng khai báo chuẩn XML, tiếptheo dùng tiếp đầu ngữ xsd: để khai báo không gian tên XML Schema, theo cú pháp sau:
đồ theo địa chỉ URL như sau :
<?xml version = “1.0” ?>