1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình XML tiếng việt

69 399 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 69
Dung lượng 1,08 MB

Nội dung

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 1

Mụ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 2

I.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 4

Chươ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 5

Xé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 6

II.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 7

III 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 11

III.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 13

Cá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 14

Trong 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 15

Vd : <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 &lt; 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 16

II.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 17

Don'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 18

hoặ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 19

IV.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 20

Bộ 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 21

Cá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 22

Ví dụ : một tài liệu XML có nhúng ngôn ngữ XSLT với namespace là xsl:

Trang 23

Chươ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 26

minOccurs="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 31

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 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 32

Dạ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 34

Ghi 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ự

Ngày đăng: 24/06/2017, 11:16

TỪ KHÓA LIÊN QUAN

w