Trao đổi thông tin nội bộ bên trong hệ thống tin học Sự phát triển về quy mô, độ phức tạp, phạm vi sử dụng của các hệ thống tin học dẫn đến sự phân rã hệ thống chính thành các hệ thống
Trang 1Mục Lục
Mục Lục 1
Chương 1 TỔNG QUAN CÔNG NGHỆ XML 4
I Khái niệm về tài liệu XML 4
I.1 Khái niệm về XML 4
I.2 Phân biệt XML & HTML 4
I.3 Điều XML không làm 4
I.4 Mở rộng các thẻ XML của chính người dùng 5
I.5 XML không phải là chuẩn thay thế HTML 5
II Quy định về chuẩn XML 5
II.1 Quy định 1 : Hệ thống các thẻ đánh dấu 5
II.2 Quy định 2 : Quan hệ lồng nhau (chứa trong) giữa các thẻ nội dung 6
II.3 Quy định 3 : Thẻ đánh dấu gốc 6
III Tổng quan công nghệ XML 7
III.1 Khái niệm công nghệ XML 7
III.2 Một số ứng dụng của công nghệ XML 9
Chương 2 CẤU TRÚC TÀI LIỆU XML 12
I Cấu trúc cây XML (XML Tree Syntax) 12
I.1 Cây XML (XML Tree) 12
I.2 Các quy định về cấu trúc cây XML 14
II Các thành phần XML (XML Elements) 15
II.1 Khái niệm 16
II.2 Quy định đặt tên 16
II.3 Mở rộng các thành phần XML 17
III Thuộc tính của thành phần XML (Attribute) 17
III.1 Giá trị của thuộc tính phải được đặt trong dấu nháy 17
III.2 Thành phần XML và Thuộc Tính 18
III.3 Thuộc tính được dùng cho metadata (siêu dữ liệu) 18
IV XML Namespace 19
IV.1 Vấn đề xung đột tên thành phần XML 19
IV.2 Giải quyết xung đột 20
IV.3 XML Namespace 20
IV.4 Namespace mặc định 21
IV.5 Ứng dụng 22
Trang 2I.1 Nội dung tài liệu XML 23
I.2 Cấu trúc tài liệu XML 24
II Đặc tả nội dung tài liệu XML 27
II.1 Sử dụng thẻ thực thể 27
II.2 Sử dụng tên 29
III Đặc tả cấu trúc tài liệu XML 31
III.1 Ngôn ngữ đặc tả DTD 31
III.2 Ngôn ngữ đặc tả XML Schemas 39
Chương 4 TRUY XUẤT TÀI LIỆU VỚI DOM (DOCUMENT OBJECT MODEL) 51
I Mô hình đối tượng DOM 51
I.1 Mô hình đối tượng DOM 51
I.2 Khái niệm về DOM 53
I.3 Hệ thống các đối tượng của DOM 53
II Các kỹ thuật lập trình với DOM 56
II.1 Đọc tài liệu XML 56
II.2 Ghi tài liệu XML 57
II.3 Đọc đối tượng từ tập tin XML 58
II.4 Ghi đối tượng vào tập tin XML 60
II.5 Thể hiện cây đối tượng 62
III Ngôn ngữ XPath 62
Chương 5 BIẾN ĐỔI TÀI LIỆU XML VỚI XSLT 69
I Giới thiệu về XSLT 69
I.1 Cấu trúc chương trình XSLT 69
I.2 Thực thi chương trình XSLT 69
I.3 Các ví dụ minh hoạ 69
II Các thao tác xử lý cơ bản 69
II.1 Rút trích và kết xuất thông tin 69
II.2 Rẽ nhánh 69
II.3 Vòng lặp 69
II.4 Hàm 69
III Các kỹ thuật xử lý 69
III.1 XML HTML 69
III.2 XML XML 69
Trang 4Chương 1 TỔNG QUAN CÔNG NGHỆ XML
I Khái niệm về tài liệu XML
I.1 Khái niệm về XML
XML là viết tắt của eXtensible Markup Language, là một ngôn ngữ đánh dấu mở rộng
(giống HTML)
XML được thiết kế để mang và lưu trữ dữ liệu, không trình bày dữ liệu
Các thẻ của XML không được định nghĩa trước Người sử dụng tự định nghĩa các thẻ của chính mình
XML được thiết kế để tự miêu tả chính nó
Văn bản có cấu trúc theo định dạng chuẩn XML cho phép biểu diễn thông tin về các đối tượng trong thực tế
o Đối tượng x thuộc loại X trong thực tế => thẻ X trong tài liệu XML
o Thuộc tính của đỗi tượng x thuộc loại X trong thực tế => thuộc tính a của thẻ X trong tài liệu XML
o Ví dụ 1: phân số 4/5 trong thực tế
thẻ <Phan_So tu_so="4" mau_so="5" />
o Ví dụ 2: dãy số nguyên bao gồm các số 1, 4, 5, -3
I.2 Phân biệt XML & HTML
XML không phải là một sự thay thế cho HTML
XML và HTML được thiết kế với 2 mục đích khác nhau :
XML được thiết kế để vận chuyển và lưu trữ dữ liệu, tập trung vào việc xác định dữ liệu là cái gì XML có thể được ứng dụng trong mọi loại ứng dụng như : Winform, webform, mobile, service
HTML được thiết kế để trình bày dữ liệu, tập trung việc dữ liệu được trình bày, trông như thế nào HTML chỉ được dùng trong các ứng dụng web và để trình bày, định dạng dữ liệu, thông tin trong các ứng dụng web
HTML là về thể hiện thông tin, XML là về mang và chứa thông tin
I.3 Điều XML không làm
Có một chút khó khăn để hiểu XML không làm điều điều gì XML được tạo để xây dựng cấu trúc, lưu trữ và vận chuyển dữ liệu
Trang 5Xét ví dụ về một ghi chú gửi cho Tove từ Jani được lưu trữ bằng XML như sau:
I.4 Mở rộng các thẻ XML của chính người dùng
Các thẻ trong ví dụ note ở trên như <to>, <from> không được định nghĩa trong chuẩn của XML Những thẻ này được tạo bởi chính tác giả của văn XML đó Chính vì ngôn ngữ XML không định nghĩa các thẻ trước, do đó người sử dụng có thể tự định nghĩa các thẻ riêng của minh
Trong khi đó, các thẻ của ngôn ngữ HTML được định nghĩa trước Trong các văn bản HTML chỉ được sử dụng các thẻ được định nghĩa trong chuẩn của HTML
Vd : thẻ <p>, <h1>
I.5 XML không phải là chuẩn thay thế HTML
XML là một sử bổ sung cho HTML Điều quan trọng phải hiểu là XML không phải là một
sự thay thế HTML Trong hầu hết các ứng dụng (đặc biệt là ứng dụng web), XML được sử dụng để mang chuyển và lưu trữ dữ liệu, trong khi đó HTML được sử dụng trong các ứng dụng web để định dạng và trình bày, thể hiện dữ liệu
Một phát biểu miêu tả tốt nhất cho XML là : “XML là một công cụ độc lập với phần cứng
và phần mềm để mang dữ liệu.”
Ngày nay, ngôn ngữ XML được sử dụng ở đầu hết các ứng dụng đặc biệt là các ứng dụng website
II Quy định về chuẩn XML
II.1 Quy định 1 : Hệ thống các thẻ đánh dấu
Các thẻ đánh dấu trong ngôn ngữ theo định dạng chuẩn XML chỉ bao gồm 2 loại thẻ: thẻ
Trang 6II.2 Quy định 2 : Quan hệ lồng nhau (chứa trong) giữa các thẻ nội dung
Nội dung bên trong thẻ có nội dung có thể là các thẻ khác (có nội dung hay rỗng) Khi thẻ
A có nội dung là thẻ B ta gọi :
Thẻ A là cha của thẻ B, thẻ A chứa thẻ B Thẻ B là con của thẻ A, thẻ B được chứa trong thẻ A Quy định 2 yêu cầu các thẻ với quan hệ lồng nhau hoàn toàn Khi thẻ A là thẻ cha của thẻ
B, A phải chứa phần bắt đầu và phần kết thúc của thẻ B
II.3 Quy định 3 : Thẻ đánh dấu gốc
Quy định 3 yêu cầu tài liêu XML phải có duy nhất (một và chỉ một) thẻ chứa (trực tiếp hay gián tiếp) tất cả các thẻ còn lại (nếu có)
Ví dụ : tài liệu XML biểu diễn thông tin 2 đường tròn là không hợp lệ vì không có thẻ gốc
Trang 7III Tổng quan công nghệ XML
III.1 Khái niệm công nghệ XML
III.1.1 Công nghệ thông tin
Ngành khoa học nghiên cứu về việc xây dựng các hệ thống tin học tương ứng với hệ thống thực tế
Ngành khoa học nghiên cứu về việc biểu diễn và xử lý thông tin của hệ thống tin học tương ứng với các thông tin và nghiệp vụ của hệ thống thực tế
Hai hướng nghiên cứu chính trong Công Nghệ Thông Tin
o Công nghệ phần cứng
o Công nghệ phần mềm
Công nghệ xử lý thông tin
Một trong các hướng nghiên cứu chính của công nghệ phần mềm
Ngành khoa học nghiên cứu về các mô hình, phương pháp, kỹ thuật xử lý thông tin
Các mô hình xử lý chính trong công nghệ thông tin :
Công nghệ biểu diễn thông tin
Một trong các hướng nghiên cứu chính của công nghệ phần mềm
Ngành khoa học nghiên cứu về các mô hình, phương pháp, kỹ thuật biểu diễn thông tin
Các mô hình biểu diễn chính trong công nghệ thông tin :
Tập tin (file) : thông tin lưu giữ trên bộ nhớ phụ
Cơ sở dữ liệu (Database) : Thông tin lưu giữ trên bộ nhớ phụ
Cấu trúc dữ liệu (Data structure) : thông tin xử lý trong bộ nhớ chính
Trang web (web page) : thông tin thể hiện
Luồng dữ liệu (Data stream) : thông tin trao đổi nội bộ bên trong một hệ thống tin học hay giữa các hệ thống tin học
III.1.2 Công nghệ XML
Thuộc loại công nghệ biểu diễn thông tin
Hình thành từ nhu cầu và vấn đề cần giải quyết của việc trao đổi thông tin
Có phạm vi nghiên cứu và ứng dụng trên tất cả các mô hình biểu diễn của công nghệ biểu diễn thông tin
Trang 8 Có hướng nghiên cứu cho phép ứng dụng một mô hình xử lý thông tin mới thuộc về công nghệ xử lý thông tin
Nhu cầu trao đổi thông tin
a Trao đổi thông tin nội bộ bên trong hệ thống tin học
Sự phát triển về quy mô, độ phức tạp, phạm vi sử dụng của các hệ thống tin học dẫn đến sự phân rã hệ thống chính thành các hệ thống con (kiến trúc đa tầng là một ví dụ điển hình về sự phân rã)
nhu cầu trao đổi thông tin bên trong các hệ thống con
b Trao đổi thông tin giữa các hệ thống tin học
Sự ra đời và phát triển của Internet và các ứng dụng web, đặc biệt là các ứng dụng trong thương mại điện tử
nhu cầu trao đổi thông tin giữa các ứng dụng này
Các yêu cầu cao về chất lượng phần mềm (tiện dụng, tương thích, bảo mật ) khả năng đáp ứng cao, chuyên biệt của một số hệ thống có sẵn (web browser, excel, word, fax )
nhu cầu trao đổi thông tin giữa các hệ thống đang xây dựng và các hệ thống có sẵn
Mô hình trao đổi thông tin
Mô hình trao đổi thông tin trước khi XML ra đời chủ yếu là dựa trên công nghệ về luồng dữ liệu (Data Stream) với 2 dạng chính :
Dạng nhị phân : dữ liệu trao đổi là các chuỗi byte theo cấu trúc và ngữ nghĩa riêng biệt của từng ứng dụng
Dạng văn bản : dữ liệu trao đổi là chuỗi các ký tự theo cách mã hoá chung nhưng cấu trúc và ngữ nghĩa vãn là riêng biệt cho từng ứng dụng
Cả 2 dạng trao đổi trên đều không thích hợp với các nhu cầu phía trên với cùng
khuyết điểm “Thông tin trao đổi có cấu trúc và ngữ nghĩa riêng biệt cho từng ứng
dụng”
Nhu cầu về một định dạng chuẩn chung khi trao đổi thông tin
Sự ra đời của công nghệ XML
Công nghệ XML ra đời là kết quả của các nghiên cứu về dạng biểu diễn thông tin khi cần trao đổi giữa các hệ thống tin học Dạng biểu diễn cần thoả mãn các yêu cầu sau:
Cho phép trao đổi trên phạm vi rộng (internet)
Dễ dàng trong việc kết xuất và tiếp nhận khi trao đổi
Tuân theo một định dạng chuẩn chung được chấp nhận và hỗ trợ của nhiều môi trường phát triển phần mềm
Công nghệ XML đã ra đời và đề xuất một dạng biểu diễn thích hợp cho các hợp các yêu cầu trên (tài liệu XML) Tuy nhiên, với bản chất hình thành của mình, phạm vi ứng dụng của XML không chỉ dừng ở việc trao đổi thông tin mà bao hàm cả các vấn
Trang 9đề biểu diễn thông tin khác như : lưu trữ thông tin, cấu trúc dữ liệu, thể hiện thông tin, v.v (chi tiết trong phần ứng dụng XML)
III.2 Một số ứng dụng của công nghệ XML
III.2.1 Trao đổi thông tin
Trao đổi thông tin là xuất phát điểm cho sự hình thành của công nghệ XML
Trao đổi thông tin là ứng dụng chủ yếu nhất của XML
Có 2 dạng trao đổi thông tin chính :
Dạng 1 : trao đổi thông tin nội bộ giữa các thành phần của hệ thống tin học
Dạng 2 : trao đổi thông tin giữa các hệ thống tin học khác nhau
XML có thể ứng dụng tốt cho cả 2 dạng trao đổi thông tin trên
Khi A có nhu cầu trao đổi thông tin với B
A là hệ thống tin học đang xem xét
B là hệ thống đã có trước với khả năng chuyên biệt nào đó
A phải xử dụng tài liệu XML có cấu trúc do B đề xuất
Sử dụng XML trao đổi thông tin giữa hệ thống lưu trữ (thông thường là hệ quản trị
cơ sở dữ liệu, hay tập tin) và tầng xử lý dữ liệu
Sử dụng XML trao đổi thông tin giữ tầng dữ liệu và tầng xử lý nghiệp vụ
Sử dụng XML trao đổi thông tin giữa tầng xử lý nghiệp vụ và tầng thể hiện
Sử dụng XML trao đổi thông tin giữa các tầng xử lý nghiệp vụ (khi hệ thống có nhiều tầng xử lý nghiệp vụ)
III.2.2 Lưu trữ thông tin
Có 3 cách ứng dụng chính của XML để lưu trữ dữ liệu bên trong hệ thống tin học
Cách 1 : chỉ sử dụng một tập tin XML để lưu trữ dữ liệu
Cách 2 : một số dữ liệu lưu trữ dưới dạng tập tin XML, một số khách lưu trữ bên
trong cơ sở dữ liệu
Cách 3 : Lưu toàn bộ bên trong cơ sở dữ liệu, tài liệu XML được nhúng vào trong các
bảng dữ liệu
Trang 10Ưu khuyết điểm của các cách ứng dụng XML
Cách 1 :
Ưu điểm chính : không cần sự hỗ trợ của các hệ quả trị cơ sở dữ liệu
dễ cài đặt, triển khai
Khuyết điểm chính : tính hiệu quả không cao khi khối lượng dữ liệu lớn
Nhận xét : các phần mềm trò chơi là ứng viên tốt nhất cho ứng dụng XML theo cách này Các phần mềm quản lý không thích hợp cho cách ứng dụng này Rất thích hợp cho các ứng dụng trên môi trường không có (hoặc chưa có) hệ quản trị CSDL như : điện thoại di động, máy công cụ
III.2.3 Cấu trúc dữ liệu
Với mô hình DOM (sẽ được giới thiệu trong phần sau), ta có thể sử dụng ngôn ngữ XML như một cấu trúc dữ liệu động lưu trữ trong bộ nhớ chính với nhiều ưu điểm :
Đọc / ghi dễ dàng
Các cấu trúc dữ liệu như mảng động (array), danh sách (list), ngăn xếp (stack), hàng đợi (queue), cây (tree) có nhiều tính năng tốt trong việc biểu diễn và xử lý thông tin trong bộ nhớ chính Trong việc đọc/ghi thông tin của các cấu trúc dữ liệu này từ/vào bộ nhớ phụ (thông thường thông qua tập tin) là không đơn giản và thường phải thực hiện gián tiếp với một bộ đọc ghi Tài liệu XML có thể sử dụng để cài đặt hầu hết các cấu trúc dữ liệu động trên (với một số chức năng bổ sung vào DOM qua cơ chế kế thừa hay bao bọc của hướng đối tượng) và đặc biệt là đọc ghi dễ dàng
Vd : với ngôn ngữ C#
Đọc tài liệu XML : tai_lieu.Load(Ten_tap_tin_XML);
Ghi tài liệu XML : tai_lieu.Save(Ten_tap_tin_XML);
Khả năng truy vấn cao
Việc truy vấn các thành phần hay tập hợp thành phần của các cấu trúc dữ liệu động phía trên thông thường phải thông qua các vòng lặp duyệt đến từng phần tử Với tài liệu XML, có thể sử dụng ngôn ngữ truy vấn XPath để truy vấn đến thành phần hay tập hợp thành phần một cách dễ dàng (và thông thường cũng chỉ thông qua một lệnh đơn giản)
Vd : với ngôn ngữ C#, giả sử có Tai_lieu tương ứng về cây các số nguyên Để lập danh sách các nút (thành phần của cây) có giá trị dương
Trang 11III.2.4 Xử lý thông tin
Như đã trình bày ở trên, công nghệ XML được xếp vào loại công nghệ biểu diễn thông tin,
và như thế các hướng ứng dụng chính của XML đều nhằm vào giải quyết và cải tiến vấn đề về biểu diễn thông tin trên các trên các loại hình biểu diễn khác nhau
Tuy nhiên, một trong các khả năng ứng dụng khá thú vị và có nhiều hứa hẹn sẽ phát triển mạnh trong tương lai lại liên quan đến công nghệ xử lý thông tin với việc đề xuất một mô hình xử
lý thông tin mới theo hướng đặc tả thay vì lập trình (chi tiết về hướng ứng dung này sẽ được trình bày chi tiết trong chương sau)
Ý tưởng xuất phát từ việc tài liệu XML cho phép biểu diễn rất tốt các văn bản có cấu trúc
Và chương trình nguồn trong các ngôn ngữ lập trình cũng là các văn bản có cấu trúc Có nên hay không ? Tạo ra một ngôn ngữ lập trình mới tương tự như ngôn ngữ lập trình hiện nay nhưng với các khoá là các thẻ đánh dấu (ví dụ <for> </for>)
Câu trả lời là rất tiếc không, vì lập trình trên một ngôn ngữ như thế là rất khó khăn, không
tự nhiên theo các giải thuật đã đề xuất
Ý tưởng về một ngôn ngữ lập trình mới theo định dạng chuẩn XML là không thành công, nhưng nếu thay vì sử dụng ngôn ngữ lập trình mà lại sử dụng ngôn ngữ đặc tả (chỉ mô tả không đi vào chi tiết thuật giải) thì kết quả có được rất khả quan Ngôn ngữ đặc tả XSLT đã ra đời trong bối cảnh như thế
Với XSLT có thể xây dựng một chương trình theo hướng đặc tả với các thẻ xử lý có ngữ nghĩa rất cao (mà đặc biệt là một cơ chế vòng lặp mới) và tính dễ mang chuyển tốt nhất có thể có (vì đây là một ngôn ngữ theo định dạng chuẩn XML) XSLT còn có nhiều đặc tính thú vị khác sẽ được trình bày trong chương sau
Trang 12
Chương 2 CẤU TRÚC TÀI LIỆU XML
I Cấu trúc cây XML (XML Tree Syntax)
I.1 Cây XML (XML Tree)
Tài liệu XML có định dạng chuẩn là một cấu trúc cây được bắt đầu tại một gốc (root) Gốc sẽ
có nhiều nhánh và cuối cùng là các nút lá
I.1.1 Ví dụ tài liệu XML
Tài liệu XML sử dụng một cấu trúc đơn giản và tự miêu tả chính nó
Xét một ví dụ một tài liệu XML như sau :
Dòng tiếp theo là thành phần gốc (root element) của tài liệu XML (có thể phát biểu “văn bản
I.1.2 Cấu trúc cây của tài liệu XML
Tài liệu XML phải bao gồm một thành phần gốc, thành phần này là cha của tất cả các thành phần khác
Các thành phần trong tài liệu XML có dạng chuẩn cây văn bản Cây được bắt đầu tại một thành phần gốc và theo các nhánh đến các thành phần thấp nhất của cây
Tất cả các thành phần đều có thể có các thành phần con (child element)
Trang 13Các khái niệm nút cha (parent), nút con (child) và nút anh em (sibling) được sử dụng để miêu
tả mối quan hệ giữa các thành phần Mỗi nút cha có nhiều nút con Các nút cùng cấp được gọi là nút anh em
Mỗi thành phần đều có thể có thể chứa nội dung văn bản (text) và các thuộc tính - attributes (giống HTML)
Ví dụ : một cây văn bản thể hiện một bookstore (nhà sách)
Trang 14Trong ví dụ trên, thành phần root (gốc) là <bookstore> Tất cả các thành phần <book> được chứa trong <bookstore> Thành phần book có 4 thành phần con : <title>,
<author>, <year>, <price>
I.2 Các quy định về cấu trúc cây XML
Các thẻ XML phân biệt kiểu chữ hoa – thường
Các thẻ XML có phân biệt kiểu chữ Thẻ <letter> thì khác với thẻ <Letter>
Thẻ mở và thẻ đóng phải cùng kiểu chữ
<message>Một ví dụ lỗi </Message>
<message>Một ví dụ đúng </message>
Các thẻ XML phải được lồng nhau (chứa trong) một cách hoàn toàn
Trong XML, tất cả các thành phần phải nằm hoàn toàn trong các thành phần khác
<b><i>Một văn bản được định bởi 2 thẻ lồng nhau</i></b>
Trong ví dụ trên, thẻ <i></i> được chứa hoàn toàn bên trong thẻ <b></b>
Các tài liệu XML phải có một thành phần Root (gốc)
Tài liệu XML phải có một thành phần là cha của tất cả các thành phần khác Thành phần này được gọi là thành phần gốc (root)
Các giá trị thuộc tính phải có dấu nháy
Các thành phần XML có thể chứa nhiều thuộc tính với một cặp tên và giá trị của nó Trong XML, giá trị của thuộc tính phải được đặt trong dấu nháy kép (") hoặc nháy đơn (')
Hãy xem 2 ví dụ sau, ví dụ 1 là một ví dụ sai, ví dụ 2 là một ví dụ đúng
Trang 15Vd : <message>if salary < 1000 then</message>
Để tránh được lỗi này, ta phải thay thế ˈ<ˈ bằng một tham chiếu đến một thực thể :
Vd : <message>if salary < 1000 then</message>
Có 5 tham chiếu thực thể được định nghĩa trước trong XML :
Ghi chú : Chỉ duy nhất kí tự ˈ<ˈ và kí tự ˈ&ˈ là nguy hiểm nhất khi sử dụng trong XML,
dấu ˈ>ˈ vẫn có thể sử dụng bình thường, tuy nhiên, nên tập thói quen thay thế các kí tự đặc biệt đó
Chú thích trong XML
Trong XML, cấu trúc để tạo các chú thích giống như trong HTML
<!— Đây là dòng chú thích >
Giới hạn khoảng trắng trong XML
Trong ngôn ngữ HTML, các kí tự trắng giữa các từ bị giới hạn với 1 khoảng trắng
Ví dụ :
HTML Hello world Ouput Hello world Không giống như HTML, XML lưu các nội dung văn bản của nó như là một văn bản thô, chính vì vậy, các kí tự trắng không bị giới hạn
Trang 16II.1 Khái niệm
Một tài liệu XML chứa nhiều thành phần XML Một thành phần XML là tất cả những gì nằm giữa thẻ mở và thẻ đóng Một thành phần XML có thể chứa các thành phần khác, các văn bản đơn giản, hoặc cả hai Các thành phần có thể có thuộc tính
<book> là thành phần duy nhất có thuộc tính
II.2 Quy định đặt tên
Thành phần XML phải được đặt tên theo các quy định sau :
Tên có thể bao gồm các kí tự, kí số và các loại kí tự khác
Tên không được bắt đầu bằng kí số hay kí tự nối
Tên không được bắt đầu bằng từ xml (hay Xml, XML )
Tên không được có khoảng trắng
Một vài thao tác đặt tên :
Đặt tên có thể miêu tả nội dung Tên có kí tự gạch nối là tốt và dễ hiểu :
<first_name>, <last_name>,
Đặt tên nên ngắn gọn và đơn giản : <book_title> không nên đặt
<the_title_of_the_book>
Tránh đặt tên với kí tự ˈˈ, vì dễ gây hiểu lầm với phép toán trừ
Tránh đặt tên với kí tự ˈ.ˈ, vì dễ gây hiểu lầm với toán tử truy xuất thuộc tính trong các ngôn ngữ lập trình
Tránh đặt tên với kí tự ˈ:ˈ, vì dễ gây hiểu lầm với toán tử truy xuất namespace trong XML
Tránh dùng các kí tự có dấu trong tiếng việt để đặt tên, nên dùng chuẩn tiếng Anh hoặc Tiếng việt không dấu
Trang 17Don't forget me this weekend!
Giả sử, ta thêm vào tài liệu XML một vài thông tin như sau :
III Thuộc tính của thành phần XML (Attribute)
Các thành phần XML có thể có các thuộc tính (giống như HTML) Các thuộc tính cung cấp thêm thông tin về một thành phần
Ví dụ :
<file type="gif">computer.gif</file>
III.1 Giá trị của thuộc tính phải được đặt trong dấu nháy
Như đã trình bày ở trên, các giá trị của thuộc tính phải được đặt trong dấu nháy đơn (') hoặc nháy kép (")
Ví dụ : <person sex='female'> </person>
Trang 18hoặc <person sex="female"> </person>
Vậy nên chọn thuộc tính hay thành phần XML để thể hiện thông tin ? Điều này tuỳ thuộc vào
sự chọn lựa của người thiết kế tài liệu XML Một khuyến cáo chung cho việc thiết kế tài liệu XML
là nên sử dụng thành phần thay cho thuộc tính
Trong tài liệu XML, thuộc tính thường được tránh sử dụng bởi một số lý do sau :
Thuộc tính không thể chứa đa giá trị (thành phần thì có thể)
Thuộc tính không thể chứa dữ liệu cấu trúc cây (thành phần thì có thể)
Thuộc tính không dễ để mở rộng
Chính vì thuộc tính khó đọc và duy trì nên thường thành phần XML được xử dụng để thể hiện
dữ liệu Thuộc tính được dùng cho các thông tin không liên quan đến dữ liệu
Ví dụ về một tài liệu XML không nên dùng :
<note day="10" month="01" year="2008"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note>
III.3 Thuộc tính được dùng cho metadata (siêu dữ liệu)
Thỉnh thoảng, các thành phần XML được gán các tham chiếu id Các id này được gán cho các thành phần XML bằng các thuộc tính tương tự như ngôn ngữ HTML
Ví dụ :
<messages>
<note id="501">
Trang 19IV.1 Vấn đề xung đột tên thành phần XML
Trong một tài liệu XML, các thành phần được tạo có thể có cùng tên nhưng lại có cấu trúc (nội dung) khác nhau Điều có thể gây nhầm lẫn hoặc lỗi cho các bộ phân tích tài liệu XML Chính
vì vậy, khái niệm namespace được sử dụng để phân biệt các thành phần có cùng tên nhưng khác cấu trúc (nội dung) với nhau
XML Namespace cung cấp một phương thức để tránh sự xung đột tên của các thành phần XML
Xét đoạn XML thể hiện thông tin một bảng trong HTML như sau
Nếu hai đoạn dữ liệu XML này được để chung với nhau trong cùng một tài liệu XML sẽ xảy
ra một lỗi xung đột, bởi vì hai thành phần XML <table> có hai cấu trúc nội dung khác nhau và
có ý nghĩa khác nhau
Trang 20Bộ phân tích sẽ không thể nắm bắt sự khác nhau của hai thành phần <table> này
IV.2 Giải quyết xung đột
Việc xung đột tên thành phần XML có thể dễ dàng được tránh được bằng cách xử dụng một tiền tố phía trước tên thành phần Với cách xử dụng này, tài liệu XML có thể chứa các thành phần
có cấu trúc và nội dung khác nhau Xét lại ví dụ trên, ta có thể có một tài liệu XML chứa cả 2 thành phần <table> ở trên
Công thức định nghĩa một namespace như sau :
xmlns:prefix="tên không gian"
Trang 21Các namespace có thể được định nghĩa ngay trong thành phần mà sử dụng nó hoặc định nghĩa trong thành phần gốc (root)
Chú ý : bộ phân tích XML không sử dụng thông tin trong "tên không gian" Mục đích
của "tên không gian" chỉ đặt một tên riêng cho một không gian nào đó mà người sử muốn
Tuy nhiên, các công ty thường sử dụng chính trang website của họ làm các namespace
Trang 22Ví dụ : một tài liệu XML có nhúng ngôn ngữ XSLT với namespace là xsl:
Trang 23Chương 3 ĐẶC TẢ NỘI DUNG & CẤU TRÚC
TÀI LIỆU XML
I Nội dung và cấu trúc tài liệu XML
I.1 Nội dung tài liệu XML
Nội dung của tài liệu XML gồm 2 phần :
Nội dung chính : gồm hệ thống các thẻ đán dấu (có hay không có nội dung) tương ứng với các thông tin cần biểu diễn
Nội dung phụ : Hệ thống các thẻ khác co ý nghĩa bổ sung, tăng cường một số thông tin
về tài liệu XML Các thẻ này có tác dụng giúp cho việc sử dụng, xử lý trên tài liệu tốt hơn trong một số trường hợp nhất định
Các thẻ bên trong nội dung phục bao gồm :
Thẻ khai báo tham số
Thẻ khai báo tham số
Thẻ khai báo tham số cho phép mô tả thêm một số thông tin chung (tham số) về tài liệu XML ngoài các thông tin đã biểu diễn trong nội dung chính
Dạng khai báo chung như sau :
<?xml Ten_1="gia_tri_1" Ten_2="gia_tri_2" ?>
Ten_1, Ten_2, là các tên của các tham số và gia_tri_1, gia_tri_2, là các giá tị tương ứng Cho đến hiện nay có 3 tham số được dùng là version, encoding và standalone Tham số version bắt buộc phải có nếu các tham số khác được sử dụng
Tham số version : khai báo về phiên bản của định dạng XML được sử dụng
Ví dụ : tài liệu XML thuộc chuẩn 1.0
Trang 24Ý nghĩa chung của thẻ chỉ thị xử lý là cho phép mô tả thêm một số thông tin (liên quan
xử lý) về tài liệu XML có ý nghĩa riêng với một công cụ xử lý nào đó Đây chính là một phương pháp mở rộng, bổ xung các xử lý riêng vào một lớp tài liệu XML cùng thuộc một hệ thống phân lớp nào đó
Dạng khai báo chung như sau :
<?bộ_xử_lý dữ_liệu ?>
Bộ_xử_lý là ký hiệu của bộ xử lý sẽ tiến hành một số xử lý nào đó trên tài liệu XML Dữ_liệu là thông tin đưỡ gởi đến bộ_xử_lý
Ví dụ :
<?xml-stylesheet type="text/css" href="Dinh_dang.css" ?>
Ví dụ trên là thẻ chỉ thị xử lý định dạng thể hiện tài liệu XML với chương trình định dạng theo ngôn ngữ CSS được lưu trữ bên trong định tập tin Dinh_dang.css Thẻ này chỉ có ý nghĩa với một số trình duyệt như IE (phiên bản 5.0 trở lên), Nescape (phiên bản 6.0), Firefox, Google Chrome
Dạng khai báo chung như sau :
<![CDATA[Nội dung]]>
I.2 Cấu trúc tài liệu XML
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
Trang 25Đặ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ẻ
I.2.1 Ngôn ngữ đặc tả cấu trúc
Có rất nhiều ngôn ngữ đặc tả cấu trúc được đề xuất để mô tả cấu trúc của tài liệu XML như DTD (Document Type Definition), XML Schema, XML-Data, Schematron, RELAX NG, Trong
đó 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 >
<! Tu_so : Sô nguyên // >0 >
<!ELEMENT Mau_so #PCDATA>
<! Mau_so : Sô nguyên // >0 >
Trang 26minOccurs="1"maxOccurs="1"/>
<xs:elementname="Mau_so"type=" SO_NGUYEN_DUONG " minOccurs="1"maxOccurs="1” />
Có 2 trường hợp cần thiết sử dụng các tài liệu đặc tả cấu trúc
Trường hợp 1 : sử dụng trao đổi thông tin giữa người – người
Trường hợp 2 : Sử dụng 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 thông dụng nhất, với trường hợp này tài liệu đặc tả cấu
Ví dụ : có thể xử dụng các tài liệu đặc tả (DTD hay XML Schema) trong
Hồ sơ thiết kế phần mềm hay giáo trình này (theo dạng tập tin Word)
Tài liệu mô tả cách thức trao đổi thông tin giữa các chuyên viên tin học cùng xây dựng ứng dụng, phần mềm
Ghi chú :
Đây là trường hợp sử dụng chính và thông dụng nhất
Đây là trường hợp dễ sử dụng nhất, vì không yêu cầu thật chặt chẽ về cú pháp Nếu trong tài liệu đặc tả cấu trúc có sai sót một ít về cú pháp thì người sử dụng cùng có thể hiểu hay cũng có thể phát hiện và trao đổi lại với người tạo lập
Với trường hợp này, tuỳ vào từng trường hợp cụ thể với một số quy ước riêng mang tính cục bộ trong một nhóm người nào đó, có thể mở rộng các ngôn ngữ đặc
tả cấu trúc hiện có để bổ sung thêm các từ vựng, cú pháp và ngôn ngữ riêng
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 tài liệu XML có theo đúng cấu trúc được mô tả trong tài liệu 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
Ví dụ :
Có thể sử dụng các tài liệu đặc tả cấu trúc (DTD / XML Schema) với bộ phân tích XmlTextReader trong VB.NET hay C# (XMLDOM hay document trong javascript) để yêu cầu bộ phân tích này kiểm tra tính hợp lệ của tài liệu XML
Trang 27 Với các ứng dụng thương mại điện tử việc trao đổi các tài liệu XML liên quan đến các nghiệp vụ thương mại (thông tin về các mặt hàng, đơn đặt hàng, phiếu giao hàng, ) đặt ra nhu cầu thật sự về việc kiểm tra một tài liệu XML có đúng theo cấu trúc mong đợi hay không Với ngữ cảnh này, nhất thiết phải tạo lập và sử dụng các bộ phân tích cú pháp thích hợp để tiến hành kiểm tra tính hợp lệ và xử lý tương ứng
Ghi chú :
Trường hợp này yêu cầu tài liệu đặc tả cấu trúc phải tuân thử hoàn toàn theo ngôn ngữ đặc tả cấu trúc ương ứng, mọi sai sót sẽ không được bộ phân tích cú pháp chấp nhận
Cần cân nhắc khi sử dụng tài liệu đặc tả cấu trúc trong trường hợp này vì một trong các đặc điểm quan trọng trong tiếp cận của XML là “Cho phép đặc tả nội dung mà không nhất thiết đặc tả cấu trúc”
II Đặc tả nội dung tài liệu XML
Dạng 1: tham chiếu đến một chuỗi giá trị bên trong tài liệu XML đang xem xét
Dạng 2 : tham chiếu đến các kí tự đặc biệt được định nghĩa trước
Dạng 3 : tham chiếu đến một tập hợp các giá trị bên ngoài tài liệu
Dạng 4 : 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 :
<!DOCTYPE Ten_goc [
Khai báo thực thể X Khai báo thực thể Y ]>
Sử dụng :
&X; < sử dụng tham chiếu của X >
&Y; < sử dụng tham chiếu của Y >
Dạng 1 : Tham chiếu đến một chuỗi giá trị bên trong tài liệu XML đang xem xét
Ý 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 Khai báo & sử dụng :
<?xml version="1.0" encoding="utf-8"?>
Trang 28<!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ể 1 : Tên là Ten_1 và được sử dụng trong thuộc tính của 2 thẻ A, C
Thực thể 2 : Tên là Ten_2 và được sử dụng trong nội dung của 3 thẻ B, C, D Việc sử dụng thực thể trong trường hợp này giúp :
Tài liệu dễ đọc hơn : dùng gián tiếp các tên Ten_1, Ten_2 với ngữ nghĩa cụ thể nào đó thay vì dùng nội dung Chuoi_1, Chuoi_2
Tài liệu dễ bảo trì hơn khi cần thay đổi nội dung của Chuoi_1, Chuoi_2 (chỉ cần thay đổi trong khai báo)
Dạng 2 : Tham chiếu đến các kí tự được định nghĩa trước
Ý nghĩa :
Cho phép sử dụng một số ký tự đặc biệt Các ký tự được định nghĩa trước :
Trang 29 Cho phép tham chiếu đến tập tin chứa giá trị cần sử dụng nào đó Các giá trị này không nhất thiết phải theo định chuẩn XML
Cách sử dụng này của thực thể thông thường để bổ sung vào nội dung của hình ảnh, âm thanh,
Dạng khai báo thông dụng :
<!ENTITY Ten_thuc_the SYSEM 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 một nhân viên trong thư mục hiện hành
Dạng khai báo thông dụng : tương tự dạng trên
<!ENTITY Ten_thuc_the SYSEM Ten_tap_tin >
Ví dụ : giả sử đã 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 các 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 tiền trong năm đang xét như sau :
<!DOC_TYPE THU_TIEN [
<!ENTITY Thu_tien_1 SYSTEM “Thu_tien_1.xml” >
<!ENTITY Thu_tien_2 SYSTEM “Thu_tien_2.xml” >
Tên thẻ, tên các thuộc tính trong tài liệu XML thuộc về 1trong 2 loại sau :
Loại 1 : tên không tiền tố
Trang 30 Loại 2 : tên có tiền tố
Tên không tiền tố :
Mô tả đầy đủ các quy tắc đặt tên cho các 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
Một cách tóm tắt (và tất nhiên chưa đầy đủ) tên là chuỗi bao gồm các kí tự chữ (a-z, A-Z), ký số (0-9) và một số ký tự khác như "-", "_", "."
Ứng dụng sử dụng tên có tiền tố :
o Nếu chỉ sử dụng tài liệu XML đơn lẻ, riêng cho ứng dụng cục bộ thì không cần thiết dùng tiền tố trong tên Tuy nhiên, nếu cần thiết tiếp nhận, kết xuất toàn bộ, một phần tài liệu XML từ/đến một ứng dụng khác (rất thông dụng trong thương mại điện tử) việc sử dụng tên với tiền tố là rất cần thiết
o Tiền tố của tên sẽ được dùng để phân biệt được nguồn gốc của một thẻ trong tài liệu XML được tạo thành từ nhiều tài liệu XML khác có các thẻ trùng phần tên không tiền tố
Trang 31Khai báo trên có ý nghĩa rằng tất cả các tên bên trong thẻ đang xét (bao hàm chính thẻ này) nếu không có tiền tố, thì tiền tố chính là Chuoi_tien_to
Dạng 2 :
<Ten_the xmlns:Chuoi_tien_to_1=”Chuoi_tien_to_2”>
… </Ten_the>
Khai báo trên có ý nghĩa rằng tất cả các tên bên trong thẻ đang xét (bao hàm chính thẻ này) nếu có tiền tố là Chuoi_tien_to_1 thì tiền tố thực sự là Chuoi_tien_to_2
Khai báo trên thông thường được dùng khi trong tài liệu XML có sử dụng đồng thời nhiều tiền tố khác nhau và khai báo dạng 1 chỉ có thể áp dụng được với một trong số các tiền
tố đó và các tiền tố còn lại thì lại quá dài (do thường sư dụng URL của các website)
Lưu ý :
o Khi sử dụng thuộc tính xmlns là ta đang định nghĩa ra các XML Namespace (không gian tên) Các chuoi_tien_to được gán cho không gian tên phải là duy nhất trên toàn cầu
o Đặc điểm này nhằm đảm bảo rằng khi một đơn vị (hay một ứng dụng) sử dụng các tài liệu XML của mình với chuoi_tien_to thì không có tài liệu nào của các đơn vị (hay ứng dụng) khác trên phạm vi toàn cầu xử dụng chuoi_tien_to đó
o Với đặc điểm này, các chuoi_tien_to được gán cho không gian tên thường ứng với URL (địa chỉ) của một tên miền trong định vị Internet
o Cách dùn này cũng ký giải vì sao các chuoi_tien_to thường rất dài
III Đặc tả cấu trúc tài liệu XML
III.1 Ngôn ngữ đặc tả DTD
Có nhiều dạng khác nhau cho phép khai báo (đặc tả) cấu trúc của một tài liệu XML
Dạng 1 : khai báo cấu trúc tài liệu XML được lưu trữ ngay bên trong chính tài liệu XML đó
<!DOCTYPE Ten_the_goc [ Đặc tả cấu trúc nội dung các thẻ Đặc tả thuộc tính các thẻ
]>
Trang 32Dạng 2 : khai báo cấu trúc tài liệu XML được lưu trữ bên ngoài dưới dạng một tập tin chứa đặc tả cấu trúc nội dung các thẻ, đặc tả thuộc tính các thẻ
<!DOCTYPE Ten_the_goc SYSTEM Ten_tap_tin >
Ví dụ
<!DOCTYPE DUONG_TRON SYSTEM “DUONG_TRON.dtd” >
Dạng 3 : khai báo cấu trúc tài liệu XML đã được chuẩn hoá, có phạm vi sử dụng rộng rãi, dạng này thường được dùng với các ngôn ngữ XML chung có phạm vi áp dụng toàn cầu như MathML, VML, XHTML,
<!DOCTYPE Ten_the_goc PUBLIC Chuoi_nhan_dang >
III.1.1 Đặc tả cấu trúc nội dung các thẻ
Cú pháp đặc tả cấu trúc nội dung của một thẻ như sau :
<!ELEMENT Ten_the Bieu_thuc_dac_ta_cau_truc_noi_dung>
Bieu_thuc_dac_ta cau_truc_noi_dung có thể chỉ là một từ khoá
Bieu_thuc_dac_ta cau_truc_noi_dung cũng có thể bao gồm nhiều từ khoá mô tả cách bố trí, sắp xếp các thành phần con bên trong thẻ
Với A,B là 2 thẻ con của X
A,B A và B sắp xếp theo thứ tự tuần tự A đến B A* A có thể lặp lại ít nhất không lần
B+ B có thể lặp lại ít nhất 1 lần A? A có thể có hoặc không A|B có thể chọn sử dụng A hay B
Từ khoá EMPTY : thẻ không có nội dung
Ví dụ : <!ELEMENT PHAN_SO EMPTY >
Phần tử PHAN_SO không thể có nội dung mà chỉ có thể có thuộc tính
Từ khoá #PCDATA : Thẻ có nội dung là chuỗi văn bản, và có thể được đọc bởi bộ phân tích
Ví dụ : <!ELEMENT Ho_ten (#PCDATA) >
Phần tử Ho_ten chỉ có thể chứa nội dung là chuỗi, không chứa các thẻ khác Đây là một trong các giới hạn chính của DTD vì không cho phép mô tả chi tiết về kiểu hay loại của chuỗi văn bản
Với DTD muốn mô tả chi tiết hơn, có thể dùng thẻ ghi chú
Ví dụ :
<!ELEMENT He_so (#PCDATA) >
<! He_so : A_Float >
Trang 33 Dạng 2 : nhiều từ khoá mô tả cách bố trí, sắp xếp các thành phần con bên trong thẻ
Ví dụ :
<!ELEMENT TAM_GIAC (DIEM,DIEM,DIEM) >
Thẻ TAM_GIAC phải bao hàm bên trong đúng 3 thẻ con có tên là DIEM
Có thể sử dụng từ khoá #PCDATA trong biểu thức tuần tự (và các loại biểu thức khác)
Ví dụ :
<!ELEMENT X (#PCDATA,A,#PCDATA)>
Thẻ X phải bao gồm 3 thành phần :
Thành phần thứ 1 là chuỗi văn bản Thành phần thứ 2 là thẻ có tên A Thành phần thứ 3 là chuỗi văn bản
Tuỳ chọn :
Dạng tuỳ chọn : thẻ con có thể được sử dụng hay không sử dụng
Cú pháp (dạng đơn giản) :
<!ELEMETNT Ten_the (Ten_the_con ?) >
Thẻ đang xét có thể chứa 1 hay 0 lần thẻ có tên là Ten_the_con
Ví dụ :
<!ELEMETNT DON_THUC (Ten?) >
Thẻ DON_THUC có thể chứa hay không chứa thẻ Ten Ghi chú : có thể kết hợp với biểu thức tuần tự
<!ELEMENT X (A,B?,C) >
Thành phần đầu tiên của thẻ X phải là thẻ A, kế đến là có hay không có thẻ B và thành phần cuối cùng phải là thẻ C
Có thể cho phép tuỳ chọn một tập hợp các thẻ
Trang 34Ghi chú : có thể kết hợp với biểu thức tuần tự
<!ELENEMT Ten_the (Ten_the_con*) >
Ý nghĩa : Thẻ đang xét có thể bao hàm bên trong nhiều thẻ có tên là Ten_the_con hay cũng có thể là thẻ rỗng (không có nội dung)
Ví dụ :
<!ELEMENT LOP (HOC_SINH*) >
Thẻ LOP có thể chứa nhiều thẻ HOC_SINH hay không có thẻ HOC_SINH nào Ghi chú :
Có thể mô tả lặp đồng thời nhiều thẻ con
<!ELEMENT X (A,B,C)* >
Các thẻ A, B, C theo thứ tự trên có thể lặp lại ít nhất 0 lần trong thẻ X
Có thể kết hợp với biểu thức tuần tự