Hình 2.2: Quá trình truyền dữ liệu XML mà không có quá trình nén XML [17] Hình 2.3: Quá trình truyền dữ liệu XML có sử dụng quá trình nén XML [17] Có hai cách phân loại bộ nén XML Phân
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
ĐẶNG THỊ HOÀNG ANH
TÌM HIỂU VÀ SO SÁNH MỘT SỐ KỸ THUẬT NÉN XML
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
Hà nội - 2014
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐẶNG THỊ HOÀNG ANH
TÌM HIỂU VÀ SO SÁNH MỘT SỐ KỸ THUẬT NÉN XML
Ngành : Công nghệ thông tin Chuyên ngành : Kỹ thuật phần mềm
Mã số : 60480103
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
NGƯỜI HƯỚNG DẪN KHOA HỌC: TS VÕ ĐÌNH HIẾU
Hà nội - 2014
Trang 3Lời cam đoan
Tôi xin cam đoan kết quả đạt được trong luận văn là sản phẩm của riêng cá nhân tôi Trong toàn bộ nội dung của luận văn, những điều được trình bày hoặc là của cá nhân hoặc là được tổng hợp từ nhiều nguồn tài liệu Tất cả các tài liệu tham khảo đều có xuất xứ rõ ràng
và được trích dẫn hợp pháp
Tôi xin hoàn toàn chịu trách nhiệm và chịu mọi hình thức kỷ luật theo quy định cho lời cam đoan của mình
Hà nội, ngày 30 tháng 9 năm 2014
Người cam đoan
Đặng Thị Hoàng Anh
Trang 4Lời cảm ơn
Trong quá trình học tập và hoàn thành luận văn tốt nghiệp, tôi đã nhận được rẩt nhiều
sự giúp đỡ, động viên từ thầy cô, gia đình và bạn bè Tôi muốn bày tỏ sự cảm ơn sâu sắc của mình tới tất cả mọi người
Tôi xin bày tỏ sự cám ơn đặc biệt tới TS Võ Đình Hiếu, người đã định hướng cho tôi trong lựa chọn đề tài, đưa ra những nhận xét quý giá và trực tiếp hướng dẫn tôi trong suốt quá trình nghiên cứu và hoàn thành luận văn tốt nghiệp
Tôi xin cảm ơn các thầy cô trong khoa CNTT - Trường Đại học Công nghệ - ĐHQG Hà Nội đã dạy bảo tận tình cho tôi trong suốt khoảng thời gian học tập tại trường
Tôi xin cảm ơn toàn thể bạn bè đồng nghiệp tại Công ty IFI Solution, đơn vị mà tôi đang công tác, đã chia sẻ, giúp đỡ tạo điều kiện cho tôi tham gia khoá học và hoàn thành khoá luận này Xin cảm ơn tất cả những bạn bè đã giúp đỡ tôi trong suốt quá trình học tập và công tác
Cuối cùng, tôi xin gửi lời cảm ơn sâu sắc nhất tới gia đình của mình, nguồn động viên
và cổ vũ lớn lao và là động lực giúp tôi thành công trong công việc và trong cuộc sống
Hà Nội, ngày 30 tháng 9 năm 2014
Đặng Thị Hoàng Anh
Trang 5Mục lục
Lời cam đoan
Lời cảm ơn
Mục lục
Danh mục các ký hiệu và chữ viết tắt
Danh mục các bảng
Danh mục các hình vẽ
Danh mục các biểu đồ
Mở đầu 1
Chương 1: TỔNG QUAN XML 2
1.1 Tổng quan XML 2
1.2 Ưu điểm của XML 2
1.3 So sánh XML và HTML 2
1.3.1 Sự giống nhau giữa XML và HTML 2
1.3.2 Sự khác nhau giữa XML và HTML 2
1.4 Cấu trúc tài liệu XML 3
1.5 Cú pháp 4
1.5.1 Khai báo XML 4
1.5.2 Thể hiện tài liệu (Document Instance) 4
1.5.3 Thuộc tính (Attribute) 4
1.5.4 Khai báo kiểu tài liệu 4
1.6 Định nghĩa kiểu tài liệu 5
1.7 Ngôn ngữ định nghĩa lược đồ XML 5
1.8 XSLT 6
Chương 2 TỔNG QUAN NÉN DỮ LIỆU 9
2.1 Nén dữ liệu 9
2.1.1 Định nghĩa 9
2.1.2 Phân loại 9
2.1.2.1 Nén tổn hao (lossy compression) 9
2.1.2.2 Nén không tổn hao (lossess compression) 9
2.1.3 Một số khái niệm 10
2.1.3.1 Tỷ lệ nén (compression ratio) 10
2.1.3.2 Hiệu suất nén 10
2.1.3.3 Độ dư thừa dữ liệu 10
2.2 Các kỹ thuật nén XML 11
2.2.1 Tính năng và phân loại 11
2.2.1.1 Các kỹ thuật nén văn bản tổng quát 13
2.2.1.2 Các kỹ thuật nén XML không truy vấn 14
2.2.1.3 Các kỹ thuật nén XML truy vấn 15
Trang 6Chương 3 MỘT SỐ KỸ THUẬT NÉN XML 17
3.1 XMill 17
3.1.1 Tổng quan về XMill 17
3.1.2 Kiến trúc của XMill 18
3.1.2.1 Phân chia cấu trúc từ nội dung 18
3.1.2.2 Nhóm các giá trị dữ liệu dựa trên ngữ nghĩa 19
3.1.2.3 Các bộ nén ngữ nghĩa 22
3.2 XGrind 24
3.2.1 Tổng quan về XGrind 24
3.2.2 Các kỹ thuật nén được sử dụng trong XGrind 24
3.2.2.1 Quá trình nén siêu dữ liệu 24
3.2.2.2 Quá trình nén giá trị của thuộc tính kiểu liệt kê 25
3.2.2.3 Quá trình nén giá trị của phần tử hoặc thuộc tính tổng quát 25
3.2.3 Nén đồng cấu (Homomorphic Compression) 25
3.2.4 Kiến trúc của XGrind 26
3.3 XAUST 28
3.3.1 Tổng quan về XAUST 28
3.3.2 Mã hóa số học và mô hình ngữ cảnh hữu hạn 29
3.3.2.1 Mã hóa số học (Arithmetic Coding) 29
3.3.2.2 Mô hình ngữ cảnh hữu hạn (Finite Context Modeling) 29
3.3.3 Máy tự động hữu hạn xác định 29
3.3.4 Quá trình nén và giải nén sử dụng XAUST 31
3.4 XSAQCT 33
3.4.1 Tổng quan về XSAQCT 33
3.4.2 Kiến trúc của XSAQCT 34
3.4.3 Quá trình xử lý thuộc tính và nội dung tài liệu được trộn 36
3.4.4 Quá trình cài đặt XSAQCT 37
3.4.4.1 Quá trình xây dựng cây chú thích TA,D 37
3.4.4.1.1 Đặc điểm của cây chú thích TA,D 37
3.4.4.1.2 Cài đặt cây chú thích TA,D 37
3.4.4.2 Quá trình giải nén của XSAQCT 44
3.4.4.2.1 Bộ chú thích lại (Reannotator) 44
3.4.4.2.2 Bộ phục hồi (Restorer) 45
3.5 EXI 46
3.5.1 Tổng quan về EXI 46
3.5.2 EXI Header 47
3.5.2.1 EXI Cookie 47
3.5.2.2 Các bit phân biệt 47
3.5.2.3 Bit hiện diện cho tùy chọn EXI 47
3.5.2.4 Phiên bản định dạng EXI 47
Trang 73.5.2.5 EXI Options 48
3.5.2.6 Padding bits 49
3.5.3 EXI Body 49
3.5.3.1 Event Code 51
3.5.3.2 Event Content 53
3.5.4 String Table 54
3.5.5 EXI Grammar 57
3.5.5.1 Built-In Grammar 58
3.5.5.2 Schema-informed Grammar 58
3.5.6 Quá trình nén EXI 58
3.5.6.1 Block 59
3.5.6.2 Channel 59
3.5.6.2.1 Kênh cấu trúc (Structure Channel) 60
3.5.6.2.2 Kênh giá trị (Value Channel) 60
3.5.6.3 Dòng nén (Compressed Stream) 61
Chương 4 CÀI ĐẶT THỰC NGHIỆM VÀ SO SÁNH MỘT SỐ KỸ THUẬT NÉN 63
4.1 Dữ liệu thử nghiệm 63
4.2 Môi trường cài đặt 64
4.3 Đo hiệu năng thực hiện 64
4.3.1 Tỷ lệ nén Compression ratio 64
4.3.2 Hiệu suất nén (Compression Performance) 64
4.3.3 Thời gian nén (Compression Time) 64
4.3.4 Thời gian giải nén Decompression Time 64
4.4 Kết quả thực nghiệm 64
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 70
TÀI LIỆU THAM KHẢO 71
Trang 8Danh mục các ký hiệu và chữ viết tắt
DFA Deterministic Finite Automata Máy tự động hữu hạn xác
định
DTD Document Type Definition Định nghĩa kiểu tài liệu
GPS Global Positioning System Hệ thống định vị toàn cầu
HTML HyperText Markup Language Ngôn ngữ đánh dấu siêu văn
XML Extensible Markup Language Ngôn ngữ đánh dấu mở rộng
XSD XML Schema Definition Language Ngôn ngữ định nghĩa lược đồ
XSLT
Extensible Stylesheet Language Transformations Ngôn ngữ định dạng chuyển
đổi mở rộng.
Trang 9Danh mục các bảng
Bảng 1.1: So sánh XML và HTML 2
Bảng 1.2: Các thành phần cơ bản của một tài liệu XML 3
Bảng 2.1: Danh sách các bộ nén không truy vấn [16] 14
Bảng 2.2: Danh sách các bộ nén có khả năng truy vấn [16] 15
Bảng 3.1: Định nghĩa hàm Match c, p [11] 21
Bảng 3.2: Các bộ xử lý ngữ nghĩa nguyên tử (Atomic Semantic Compressors) [11] 22
Bảng 3.3: Mô tả các bước thực hiện thuật toán 3.1 khi tạo mới cây chú thích của tài liệu D trong hình 3.13 [20] 41
Bảng 3.4: Một số phiên bản định dạng EXI 48
Bảng 3.5: Các tuỳ chọn EXI [6] 48
Bảng 3.6: EXI Events [7] 50
Bảng 3.7: Quá trình mã hóa mã sự kiện khi EXI compression không được thiết lập và tùy chọn bit-packed aligment được sử dụng [6] 52
Bảng 3.8: Quá trình mã hóa mã sự kiện khi EXI compression được thiết lập bằng true và giá trị pre-compression của tùy chọn byte-aligment được sử dụng [6] 52
Bảng 3.9: Các kiểu dữ liệu đã được xây dựng sẵn trong EXI [6] 53
Bảng 3.10: Quá trình thiết lập phân vùng của String Table [7] 54
Bảng 4.1: Tập dữ liệu thử nghiệm 63
Bảng 4.2: Môi trường cài đặt thực nghiệm 64
Bảng 4.3: Trình bày kết quả thực nghiệm khi sử dụng bộ nén gzip 65
Bảng 4.4: Trình bày kết quả thực nghiệm khi sử dụng bộ nén XMill 65
Bảng 4.5: Trình bày kết quả thực nghiệm khi sử dụng bộ nén XGrind 65
Bảng 4.6: Trình bày kết quả thực nghiệm khi sử dụng bộ nén XAUST 66
Bảng 4.7: Trình bày kết quả thực nghiệm khi sử dụng bộ nén EXI (Exificient) 66
Trang 10Danh mục các hình vẽ
Hình 1.1: XSLT style sheets được sử dụng để chuyển đổi giữa các tài liệu XML [18] 6
Hình 1.2: XSLT style sheets được sử dụng để chuyển đổi một tài liệu XML sang các cách biểu diễn khác nhau [18] 7
Hình 2.1: Quá trình nén/giải nén dữ liệu 9
Hình 2.2: Quá trình truyền dữ liệu XML mà không có quá trình nén XML [17] 11
Hình 2.3: Quá trình truyền dữ liệu XML có sử dụng quá trình nén XML [17] 11
Hình 2.4: Phân loại các bộ nén XML dựa vào sự nhận biết cấu trúc của các tài liệu XML [17] 12
Hình 2.5: Phân loại bộ nén XML dựa vào sự hỗ trợ khả năng truy vấn [17] 13
Hình 3.1: Kiến trúc của XMill [11] 18
Hình 3.2: Mô tả quá trình XMill phân tách cấu trúc và dữ liệu 19
Hình 3.3: Kiến trúc của bộ nén XGrind [15] 27
Hình 3.4: DFA của phần tử card trong ví dụ 3.14 30
Hình 3.5: Kiến trúc của XSAQCT [20] 34
Hình 3.6: Minh họa một tài liệu D đơn giản [20] 35
Hình 3.7: Cây chú thích TA,D của tài liệu D trong hình 3.6 [20] 35
Hình 3.8: Quá trình xử lý nội dung tài liệu được trộn [20] 36
Hình 3.9: Cây chú thích TA,D và các bộ chứa văn bản [20] 36
Hình 3.10: Biểu diễn một tài liệu D có chứa chu trình đơn giản [20] 38
Hình 3.11: Biểu diễn cây chú thích của tài liệu D có thêm các node giả “$” [20] 39
Hình 3.12: Khôi phục lại cây tài liệu D với các node giả “$” [20] 39
Hình 3.13: Biểu diễn một tài liệu D sẽ được áp dụng thuật toán 3.1 [20] 40
Hình 3.14: Biểu diễn cây chú thích của tài liệu D trong hình 3.13 [20] 42
Hình 3.15: Biểu diễn cây chú thích hoàn chỉnh của tài liệu D trong hình 3.13 [20] 43
Hình 3.16: Khôi phục lại cây tài liệu D từ cây chú thích TA,D trong hình 3.15 [20] 44
Hình 3.17: Cấu trúc cơ bản của EXI Stream [7] 46
Hình 3.18: Định dạng EXI Header [6] 47
Hình 3.19: EXI Cookie [6] 47
Hình 3.20: Các bit phân biệt (Distinguishing Bits) [6] 47
Hình 3.21: Minh họa EXI Stream Body của tài liệu Notebook trong ví dụ 3.23 [7] 51
Hình 3.22: Các đầu vào khởi tạo trong phân vùng URI [7] 56
Hình 3.23: Các đầu vào khởi tạo trong phân vùng Prefix [7] 56
Hình 3.24: Các đầu vào khởi tạo trong phân vùng LocalName [7] 56
Hình 3.25: Các đầu vào được khởi tạo trong phân vùng Value [7] 57
Hình 3.26: Tổng quan quá trình nén EXI [6] 59
Hình 3.27: Quá trình dồn kênh các sự kiện EXI [6] 60
Hình 3.28: Minh họa quá trình nén của EXI Body Stream trong hình 3.21 [7] 61
Trang 11Danh mục các biểu đ
Biểu đồ 4.1: So sánh tỷ lệ nén của các bộ nén gzip, XMill, XGrind, XAUST và EXI 66Biểu đồ 4.2: So sánh hiệu suất nén của các bộ nén gzip, XMill, XGrind, XAUST và EXI 67Biểu đồ 4.3: So sánh thời gian nén của các bộ nén gzip, XMill, XGrind, XAUST và EXI 67Biểu đồ 4.4: So sánh thời gian giải nén của các bộ nén gzip, XMill, XGrind, XAUST và EXI 68
Trang 12mà kết quả là kích thước tập tin rất lớn Kích thước lớn dẫn đến lượng thông tin được truyền tải, xử lý, lưu trữ, truy vấn thường lớn hơn các định dạng dữ liệu khác Để giải quyết vấn đề này, một số kỹ thuật nén đã được giới thiệu như: XMill, XGrind, XAUST, EXI, XSAQCT Việc sử dụng các công cụ nén XML có nhiều lợi thế như làm giảm băng thông mạng, giảm không gian lưu trữ đĩa cũng như giảm bộ nhớ trong việc xử lý và truy vấn các tài liệu XML
Luận văn sẽ tập trung nghiên cứu bốn nội dung chính: tìm hiểu chung về XML, tìm hiểu về nén dữ liệu và nén dữ liệu XML, trong đó tìm hiểu chi tiết năm kỹ thuật nén XML bao gồm: XMill [11,23], XGrind [15,22], XAUST [10,21], XSAQCT [19-20], EXI [6-8,13] Luận văn tiến hành thực nghiệm, so sánh các kỹ thuật nén với nhau, đưa ra một số hướng dẫn, khuyến nghị hữu ích giúp cho người sử dụng có thể đưa ra các quyết định hiệu quả, đúng đắn khi lựa chọn các công cụ nén XML phù hợp nhất với yêu cầu của họ Lý do luận văn lựa chọn, tìm hiểu năm bộ nén XML trên bởi vì đây là các bộ nén mới, phổ biến, một số
bộ nén chưa được so sánh, đánh giá bằng thực nghiệm
Nội dung chính của luận văn được tổng hợp, trình bày trong 4 chương
Chương 1: Giới thiệu về XML, so sánh XML với HTML, cấu trúc và cú pháp khai
báo một tài liệu XML Chương này cũng trình bày các khái niệm và đưa ra ví dụ về định nghĩa kiểu tài liệu Document Type Definition - DTD , ngôn ngữ định nghĩa lược đồ XML Schema Definition Language - XSD và ngôn ngữ định dạng chuyển đổi mở rộng
(Extensible Stylesheet Language Transformations - XSLT).
Chương 2: Tập trung vào tìm hiểu và phân loại các kỹ thuật nén dữ liệu nói chung
bao gồm nén tổn hao, nén không tổn hao và nén XML nói riêng bao gồm các kỹ thuật nén văn bản tổng quát, kỹ thuật nén XML không truy vấn, kỹ thuật nén XML hỗ trợ truy vấn
Chương 3: Giới thiệu chi tiết năm kỹ thuật nén XML bao gồm XMill, XGrind,
XAUST, XSAQCT và EXI Kiến trúc cũng như chi tiết quá trình cài đặt bộ nén, bộ giải nén của từng công cụ được trình bày chi tiết trong chương này
Chương 4: Cài đặt thực nghiệm và so sánh các kỹ thuật nén XMill, XGrind,
XAUST, EXI trên các tập dữ liệu XML chuẩn Từ các kết quả thu được luận văn sẽ đưa ra một số hướng dẫn, khuyến nghị hữu ích giúp người dùng lựa chọn các công cụ nén phù hợp nhất với yêu cầu sử dụng
Trang 13Chương 1: TỔNG QUAN XML
Chương này giới thiệu về XML, so sánh XML với HTML, cấu trúc và cú pháp khai báo một tài liệu XML Chương này cũng trình bày khái quát các khái niệm định nghĩa kiểu tài liệu, ngôn ngữ định nghĩa lược đồ và ngôn ngữ định dạng chuyển đổi mở rộng XSLT
1.1 Tổng quan XML
XML Extensible Markup Language là một ngôn ngữ đánh dấu được dùng để lưu trữ và định nghĩa cấu trúc của dữ liệu thông qua các thẻ có nghĩa XML được chuẩn hoá bởi liên minh mạng toàn cầu World Wide Web Consortium với mục đích đơn giản hoá quá trình trao đổi dữ liệu giữa các hệ thống khác nhau khác nhau, đặc biệt là các hệ thống được kết nối qua Internet Giống như HTML, XML cũng là một tập con của SGML Standard Generalized Markup Language) - ngôn ngữ đánh dấu tổng quát hóa tiêu chuẩn
1.2 Ưu điểm của XML
Dữ liệu độc lập được mô tả dưới dạng text thông qua các thẻ với cấu trúc và sự phân cấp rõ ràng rõ ràng giúp XML dễ dàng đọc và phân tích bởi con người hay chương trình máy tính XML cho phép dễ dàng xử lý, chuyển tải, trao đổi dữ liệu giữa nhiều ứng dụng và tài liệu với các định dạng khác nhau XML c n cung cấp nhiều cách để kiểm tra chất lượng của một tài liệu với các quy tắc cú pháp, kiểm tra liên kết bên trong, so sánh các mô hình tài liệu và các kiểu dữ liệu với nhau Với Unicode là bộ ký tự chuẩn, XML hỗ trợ hầu hết các hệ thống văn bản, biểu tượng, ký tự của hầu hết quốc gia trên thế giới Ngoài
ra, XML c n được lưu trữ làm cấu hình cho website hay sử dụng cho phương thức Remote Procedure Calls RPC phục vụ web service Vì là một chuẩn mở nên XML không gắn liền với bất kỳ công ty hay phần mềm cụ thể nào
1.3 So sánh XML và HTML
1.3.1 Sự giống nhau giữa XML và HTML
XML và HTML đều dựa trên SGML Standard Generalized Markup Language
1.3.2 Sự khác nhau giữa XML và HTML
ảng 1.1: So sánh XML và HTML
XML được thiết kế cho mục đích lưu trữ
và chuyển đổi dữ liệu giữa các hệ thống
khác nhau
HTML được thiết kế cho mục đích trình bày dữ liệu
XML dùng để mô tả dữ liệu và chú trọng
vào nội dung dữ liệu
HTML được dùng để hiển thị dữ liệu và chú trọng vào việc dữ liệu được hiển thị
Trang 14như thế nào
Cho phép người dùng định nghĩa các
phần tử
Các phần tử đã được định nghĩa trước
Kiểm tra tính hợp lệ Hầu như không bắt lỗi
Được định nghĩa một cách chặt chẽ Không bắt buộc
Các phần từ phải được đóng Các phần tử rỗng không cần phải đóng
1.4 Cấu trúc tài liệu XML
Một tài liệu XML gồm có hai phần: phần thứ nhất là prolog của tài liệu prolog document Phần này là tùy chọn, lưu trữ thông tin của tài liệu XML bao gồm khai báo XML, định nghĩa kiểu tài liệu DTD, chú thích, các chỉ dẫn xử lý Phần thứ hai là phần tử gốc root element hay c n gọi là phần tử tài liệu document element) Phần này chứa tất cả các phần tử con và nội dung của nó, đây là phần bắt buộc phải có trong một tài liệu XML
ảng 1.2: Các thành phần cơ bản của một tài liệu XML
Ví dụ 1.1: Biểu diễn một tài liệu XML đơn giản [25]
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE document system "tutorials.dtd">
<! Here is a comment >
<?xml-stylesheet type="text/css" href="myStyles.css"?>
<tutorials>
Trang 151.5.2 Thể hiện tài liệu (Document Instance)
Phần của một tài liệu mà bên trong đó dữ liệu được biểu diễn được gọi là một thể hiện tài liệu document instance Mỗi document instance sắp xếp thứ tự các thông tin của
nó theo cấu trúc phân cấp, được định nghĩa bởi các mối quan hệ giữa các phần tử cha-con Thông thường các phần từ cha thiết lập một ngữ cảnh và nó được kế thừa bởi các phần tử con
Ví dụ 1.3: Mối quan hệ cha con đơn giản giữa các phần tử trong XML
1.5.4 Khai báo kiểu tài liệu
Để kết hợp một tài liệu với một lược đồ, một câu lệnh khai báo riêng được yêu cầu
Ví dụ khai báo liên kết đến một DTD trong tài liệu XML
Ví dụ 1.5: Khai báo kiểu tài liệu
Trang 16<!DOCTYPE book SYSTEM "book.dtd">
1.6 Định nghĩa kiểu tài liệu
Trong XML, DTD Document Type Definition được sử dụng để định nghĩa cấu trúc tài liệu XML các loại phần tử và mối quan hệ cha-con và tất cả các quy tắc điều khiển, thao tác nội dung tài liệu Tuy nhiên, không như HTML sử dụng một DTD đã được định nghĩa trước với một tập hợp các loại phần tử cố định, DTD trong XML có thể được tùy chỉnh
Ví dụ 1.6: Mô tả quá trình khai báo một DTD hoàn chỉnh
<!DOCTYPE book [
<!ELEMENT book(title,author)>
<!ATTLIST book CATEGORY (Fiction | Non-Fiction)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
]>
1.7 Ngôn ngữ định nghĩa lược đ XML
XSD XML Schema Definition Language là một ngôn ngữ mô hình dữ liệu toàn diện cho các tài liệu XML Không như DTD, XSD là một cài đặt thực sự của ngôn ngữ XML, các lược đồ bản thân nó chính là tài liệu XML Một trong những tính năng quan trọng nhất của XSD là hỗ trợ nhiều kiểu dữ liệu Nó cải thiện chất lượng biểu diễn dữ liệu XML
và đóng vai tr như là một chuẩn vận chuyển dữ liệu doanh nghiệp Các lược đồ XSD hỗ trợ không gian tên (namespace) Điều này cho phép thiết lập các miền logic, trong đó một số hay toàn bộ các phần của lược đồ được áp dụng
XSD cung cấp một số tính năng nâng cao bao gồm hỗ trợ nhiều kiểu dữ liệu, nâng cao cú pháp kiểm tra tính hợp lệ, mô phỏng các mô hình lược đồ quan hệ thông qua việc sử
dụng khóa (key và ràng buộc constraint , có khả năng mở rộng qua phần tử any và module hóa bằng cách sử dụng phần tử include, import.
Ví dụ 1.7: Mô tả quá trình định nghĩa một lược đồ XSD hoàn chỉnh
Trang 17XSLT thực hiện 2 nhiệm vụ chính là chuyển đổi cấu trúc và chuyển đổi mỹ học.
Chuyển đổi cấu trúc
XSLT cho phép thực hiện quá trình chuyển đổi một loại tài liệu XML từ dạng này sang dạng khác
Hình 1.1: XSLT style sheets được sử dụng để chuyển đổi giữa các tài liệu XML [18] Chuyển đổi mỹ học
XSLT cho phép chuyển đổi hiệu quả tài liệu XML thành một số định dạng khác nhau Tập hợp tính năng XSLT tạo điều kiện thuận lợi cho quá trình thao tác, sử dụng, sắp xếp hay lọc dữ liệu, cung cấp những khung nhìn để lưạ chọn thay thế và biểu diễn thông tin cho các kịch bản chuyển đổi tài liệu
Trang 18Hình 1.2: XSLT style sheets được sử dụng để chuyển đổi một tài liệu XML sang các
cách biểu diễn khác nhau [18]
Ví dụ 1.8, 1.9 minh họa sử dụng một mẫu XSLT đơn giản, chuyển đổi tài liệu XML thành một bảng HTML
Ví dụ 1.8: Biểu diễn một tài liệu XML có chứa khai báo đến XSLT
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="book.xsl"?>
<inventory>
<book category="Fiction">
<title> Anna Karenina</title>
<author>Leo Tolstoy</author>
Trang 19Trong chương này, chúng ta đã tìm hiểu về XML là một ngôn ngữ đánh dấu được dùng
để lưu trữ và định nghĩa cấu trúc của dữ liệu thông qua các thẻ có nghĩa Một tài liệu XML gồm có hai phần: prolog của tài liệu và phần tử tài liệu Prolog của tài liệu là phần tùy chọn, chứa thông tin của tài liệu XML như khai báo XML, định nghĩa DTD, chú thích và các chỉ dẫn xử lý Phần tử tài liệu hay phần tử gốc là phần bắt buộc, chứa tất cả các phần tử con Trong XML, DTD được dùng để định nghĩa cấu trúc tài liệu XML và các quy tắc điều khiển thao tác nội dung tài liệu Bên cạnh đó, XSD được dùng để hỗ trợ kiểu dữ liệu, không gian tên và cung cấp một số tính năng nâng cao cú pháp kiểm tra tính hợp lệ, khả năng mở rộng
và module hóa Dữ liệu XML có thể được chuyển đổi từ dạng này sang dạng khác một cách
tự dộng dựa trên chuẩn XSLT Chương tiếp theo sẽ giới thiệu tổng quan về nén dữ liệu và các kỹ thuật nén XML
Trang 20Chương 2 TỔNG QUAN NÉN DỮ LIỆU
Chương này tập trung vào tìm hiểu và phân loại nén dữ liệu bao gồm nén tổn hao, nén không tổn hao và nén XML bao gồm các kỹ thuật nén văn bản tổng quát, kỹ thuật nén XML không truy vấn, kỹ thuật nén XML hỗ trợ truy vấn Bên cạnh đó, chương này cũng trình bày một số khái niệm liên quan đến nén dữ liệu như tỷ lệ nén, hiệu suất nén và độ dư thừa dữ liệu
2.1.2.1 Nén tổn hao (lossy compression)
Nén tổn hao c n gọi là nén có mất mát thông tin Kỹ thuật nén này chấp nhận mất mát một lượng thông tin nhất định để thu được hiệu suất nén cao hơn, do vậy, sau khi giải nén, ta sẽ không thu được dữ liệu gốc Nén tổn hao thường được áp dụng cho các tập tin hình ảnh hay âm thanh được số hóa bởi vì đối với các tập tin thuộc loại này thì việc mất mát một ít thông tin là điều có thể chấp nhận được Một số thuật toán nén tổn hao điển hình là JPEG [4], MPEG-4 [4]
2.1.2.2 Nén không tổn hao (lossess compression)
Nén không tổn hao c n gọi là nén chính xác hay nén không mất thông tin Trong phương pháp nén không tổn hao, dữ liệu được nén sau khi giải nén sẽ giống y như dữ liệu gốc ban đầu Các thuật toán nén không tổn hao được dùng để nén các file như exe, word, excel Một số thuật toán nén không tổn hao là:Shannon-Fano [4], LZW [4]
Trang 212.1.3.3 Độ dư thừa dữ liệu
Nguyên tắc chung của các phương pháp nén dữ liệu là loại bỏ thông tin trùng lặp, dữ liệu dư thừa đến mức tối thiểu có thể được Việc xác định bản chất kiểu dư thừa dữ liệu rất
có ích trong việc xây dựng các phương pháp nén phù hợp Nhìn chung, có bốn kiểu dư thừa chính trong dữ liệu
Sự phân bố ký tự
Trong một chuỗi ký tự, có một số ký tự có tần suất xuất hiện nhiều hơn những ký tự khác Do vậy, có thể giảm bớt lượng dữ liệu bằng cách mã hóa các dãy ký tự có tần xuất cao được thay thế bởi một từ mã nhị phân với số bít nhỏ Ngược lại, các dãy ký tự có tần xuất thấp sẽ được mã hoá bởi từ mã có số bít nhiều hơn Kiểu dư thừa này đặc biệt phù hợp với phương pháp mã hóa Huffman [3]
Sự lặp lại của các ký tự
Trong các tập tin ảnh, thường có những kí tự và chuỗi kí tự lặp lại nhiều lần liên tiếp nhau Khi đó, dữ liệu có thể được giảm bớt bằng cách thay thế những dãy kí tự đó bằng mã của chúng và số kí tự lặp lại Phương pháp nén với mô hình từ điển khai thác rất hiệu quả loại dư thừa này
Có nhiều trường hợp, dữ liệu trong một nguồn số liệu có sự phụ thuộc lẫn nhau, do
đó nếu biết được kí hiệu xuất hiện tại một vị trí nào đó, ta có thể phỏng đoán trước một cách hợp lý sự xuất hiện của các kí hiệu khác ở những vị trí khác nhau Ví dụ, ảnh biểu diễn trong một lưới hai chiều, một số điểm ở hàng dọc lại xuất hiện trong cùng vị trí ở các hàng
Trang 22khác nhau Như vậy, thay vì lưu trữ dữ liệu ta chỉ lưu lại vị trí hàng và cột Phương pháp nén khai thác kiểu dư thừa này gọi là phương pháp mã hóa dự đoán.
Để đánh giá một thuật toán nén có hiệu quả hay không, người ta sẽ dựa vào cách mà thuật toán xử lý các kiểu dư thừa dữ liệu Thực tế cho thấy rằng, hầu hết các kỹ thuật nén đều không đủ mềm dẻo để xử lý tất cả các kiểu dư thừa dữ liệu Mỗi phương pháp nén thường được áp dụng cho từng kiểu số liệu
2.2 Các kỹ thuật nén XML
2.2.1 Tính năng và phân loại
Việc sử dụng công cụ nén XML có nhiều lợi thế hơn so với các công cụ nén thông thường như là làm giảm băng thông mạng, giảm không gian lưu trữ đĩa cũng như giảm bộ nhớ trong việc xử lý và truy vấn tài liệu XML Chính vì vậy mà bộ nén XML thường được
sử dụng để giảm chi phí của quá trình truyền tải dữ liệu XML qua mạng
Hình 2.2: Quá trình truyền dữ liệu XML mà không có quá trình nén XML [17]
Hình 2.3: Quá trình truyền dữ liệu XML có sử dụng quá trình nén XML [17]
Có hai cách phân loại bộ nén XML
Phân loại dựa vào sự nhận biết cấu trúc tài liệu XML
Theo cách phân loại này, các bộ nén XML được chia làm hai nhóm chính: các bộ nén văn bản tổng quát (general text compressors) và các bộ nén có sự nhận biết XML (XML-conscious compressors)
Trang 23Trong bộ nén văn bản tổng quát, dữ liệu XML được lưu trữ dưới dạng văn bản cho nên cách tiếp cận logic đầu tiên của quá trình nén tài liệu XML đó là sử dụng các công cụ nén văn bản mục đích chung general-purpose text compression tool như là: gzip [9], bzip2 [2] Nhóm các công cụ nén XML này c n gọi là XML - blind XML mù vì nó coi tài liệu XML như là văn bản thông thường và áp dụng những kỹ thuật nén văn bản truyền thống.
Nhóm các bộ nén có sự nhận biết XML XML-conscious compressors) được thiết kế
để tận dụng lợi thế của sự nhận biết về cấu trúc tài liệu XML để đạt được tỷ lệ nén tốt hơn
so với bộ nén văn bản tổng quát Nhóm các bộ nén này có thể được phân loại thêm dựa vào thông tin lược đồ của tài liệu gồm có bộ nén phụ thuộc lược đồ schema-dependent compressors và các bộ nén không phụ thuộc lược đồ schema-independent compressors)
Trong quá trình xử lý nén của bộ nén phụ thuộc lược đồ (schema-dependent compressors), quá trình mã hóa và giải mã phải có quyền truy cập vào thông tin lược đồ Ví
dụ cho nhóm này là rngzip [17]
Trong quá trình nén của các bộ nén không phụ thuộc lược đồ schema-independent compressors , quá trình mã hóa và giải mã không cần thiết phải sử dụng thông tin lược đồ
Ví dụ cho nhóm là XMill
Hình 2.4: Phân loại các bộ nén XML dựa vào sự nhận biết cấu trúc của các tài liệu
XML [17]
Phân loại dựa vào sự hỗ trợ khả năng truy vấn
Theo cách phân loại này, các bộ nén XML cũng được chia làm hai nhóm chính: bộ nén không có khả năng truy vấn và bộ nén có khả năng truy vấn
Nhóm các bộ nén không có khả năng truy vấn non-queriable XML compressors) không hỗ trợ bất kỳ truy vấn nào trong quá trình nén dữ liệu ví dụ gzip, bzip2, XMill Mục
Trang 24đích chung của nhóm này là tập trung đạt được tỉ lệ nén tốt nhất Mặc định các bộ nén văn bản tổng quát là thuộc nhóm không hỗ trợ truy vấn.
Nhóm các bộ nén có khả năng truy vấn queriable XML compressors cho phép truy vấn dữ liệu ngay trong định dạng nén Tỉ lệ nén của nhóm này không tốt bằng nhóm các bộ nén không có khả năng truy vấn Mục đích chung của nhóm này là tránh giải nén đầy đủ tài liệu trong quá trình thực hiện truy vấn Trong thực tế, khả năng thực hiện truy vấn trực tiếp các định dạng XML nén là quan trọng đối với nhiều ứng dụng được lưu trữ trên thiết bị máy tính nguồn lực hạn chế, chẳng hạn như các thiết bị di động và hệ thống GPS Mặc định nhóm các bộ nén có khả năng truy vấn đều thuộc nhóm bộ nén có sự nhận biết XML Có thể phân loại thêm nhóm này dựa vào cách mà bộ nén mã hóa cấu trúc và các phần dữ liệu của tài liệu XML bao gồm bộ nén đồng cấu và bộ nén không đồng cấu
Trong nhóm bộ nén đồng cấu homomorphic compressors , cấu trúc của tài liệu nén
và tài liệu gốc là giống nhau và có thể truy cập, phân tích các định dạng nén trong cùng một cách như là định dạng ban đầu Ví dụ cho nhóm này là XGrind
Trong nhóm bộ nén không đồng cấu non-homomorphic compressors), quá trình mã hóa tài liệu XML sẽ tách riêng cấu trúc và dữ liệu Do đó, cấu trúc của tài liệu được nén sẽ khác so với cấu trúc của tài liệu gốc ban đầu Ví dụ cho nhóm này là XQueC [16]
Hình 2.5: Phân loại bộ nén XML dựa vào sự hỗ trợ khả năng truy vấn [17]
2.2.1.1 Các kỹ thuật nén văn bản tổng quát
XML biểu diễn dữ liệu dưới dạng cấu trúc hình cây và dữ liệu được lưu trữ dưới dạng văn bản Do đó một cách tiếp cận đơn giản để nén dữ liệu XML là sử dụng các bộ nén văn bản truyền thống Trong đó, đại diện phổ biến nhất và hiệu quả của nhóm này là: gzip, bzip2 và PPM [4]
Trang 25ộ nén gzip dựa trên thuật toán nén dữ liệu không tổn hao DEFLATE [14] Thuật
toán này sử dụng kết hợp thuật toán LZ77 [4] và mã hóa Huffman
ộ nén bzip2 sử dụng biển đổi Burrows-Wheeler (Burrows-Wheeler transform để
chuyển đổi những chuỗi ký tự tuần hoàn thường xuyên vào các chuỗi chữ cái giống nhau, và sau đó áp dụng chuyển đổi move-to-font (move-to-front transformation và cuối cùng là mã hóa Huffman Các tập tin sử dụng bzip2 đạt được tỉ lệ nén cao hơn so với gzip nhưng hiệu suất lại chậm hơn gzip
PPM là một kỹ thuật nén dữ liệu thống kê có khả năng thích ứng dựa trên mô hình
ngữ cảnh và sự phỏng đoán Nó sử dụng một phương pháp mô hình thống kê ngữ cảnh hữu hạn để dự đoán sự xuất hiện của ký tự tiếp theo trong chuỗi đầu vào và sau đó sử dụng mã hóa số học cho sự phân bố đã được dự đoán của các biểu tượng Mặc dù, PPM đơn giản và
là phương pháp hiệu quả nhất so với gzip, bzip2 nhưng nó cũng là bộ nén có tính toán đắt nhất
Trong thực tế, bộ nén văn bản tổng quát được sử dụng cho mục đích lưu trữ hoặc giảm băng thông mạng trong quá trình trao đổi dữ liệu Nói chung, có một sự đổi lập giữa các bộ nén về tỉ lệ nén và thời gian nén/ giải nén PPM đạt được tỉ lệ nén tốt nhất, gzip là thấp nhất Tuy nhiên, gzip lại đạt được hiệu suất tốt nhất về thời gian nén và giải nén trong khi PPM lại chậm hơn nhiều trong khi bzip2 là ở giữa về tỉ lệ nén và thời gian nén/giải nén
Vì vậy, việc lựa chọn bộ nén nào để sử dụng chủ yếu phụ thuộc vào yêu cầu của người sử dụng
2.2.1.2 Các kỹ thuật nén XML không truy vấn
Các bộ nén trong nhóm này không cho phép bất kỳ truy vấn nào được xử lý trong định dạng nén Mục đích chính của nhóm này là đạt được tỉ lệ nén cao nhất Nhóm này có hai lớp chính làcác bộ nén phụ thuộc lược đồ các bộ nén không phụ thuộc lược đồ
Trong nhóm các bộ nén phụ thuộc lược đồ, quá trình xử lý mã hóa và giải mã yêu cầu phải có thông tin lược đồ Đối với nhóm các bộ nén không phụ thuộc lược đồ thì quá trình xử lý mã hóa và giải mã không cần thiết phải có thông tin lược đồ
ảng 2.1: Danh sách các bộ nén không truy vấn [16]
XMLPPM No Multiplexed Hierarchical PPM PPM
Trang 26bộ nén đồng cấu và bộ nén không đồng cấu.
Bộ nén đồng cấu (homomorphic compressors) là loại bộ nén giữ lại cấu trúc ban đầu của tài liệu XML trong định dạng nén, vì vậy nó có thể truy cập và phân tích trong cùng một cách như là định dạng gốc ban đầu
Bộ nén không đồng cấu non-homomorphic compressors) là loại bộ nén tách phần cấu trúc và phần dữ liệu riêng rẽ nhau trong quá trình mã hóa tài liệu XML Vì vậy, cấu trúc của định dạng nén khác với tài liệu gốc và nó cần phải được phân tích theo một cách khác trong quá trình giải nén
ảng 2.2: Danh sách các bộ nén c khả năng truy vấn [16]
Encoding
XSeq No Context-Free Grammars Arithmetic Encoding
TREECHOP No Prefixed Dictionary-Based No
Trang 27Kết luận
Trong chương này, chúng ta đã tìm hiểu một số khái niệm về nén dữ liệu như tỷ lệ nén, hiệu suất nén, độ dư thừa dữ liệu và phân loại nén dữ liệu bao gồm nén tổn hao và nén không tổn hao Nén dữ liệu XML cũng được giới thiệu trong chương này bao gồm các kỹ thuật nén văn bản tổng quát, kỹ thuật nén có sự nhận biết XML, kỹ thuật nén XML không truy vấn và kỹ thuật nén XML hỗ trợ truy vấn Chương tiếp theo sẽ giới thiệu năm kỹ thuật nén XML bao gồm XMill, XGrind, XAUST, XSAQCT và EXI
Trang 28XMill áp dụng ba nguyên tắc cơ bản để nén dữ liệu XML.
Nguyên tắc thứ nhất: phân tách cấu trúc từ dữ liệu Cấu trúc structure bao gồm các thẻ tag và các thuộc tính attribute Dữ liệu data chứa một chuỗi các phần tử dữ liệu data item biểu diễn nội dung của phần tử và giá trị của thuộc tính
Nguyên tắc thứ hai: nhóm các phần tử có liên quan với nhau Các phần tử dữ liệu data item được nhóm vào trong các bộ chứa container , mỗi container được nén riêng rẽ nhau Ví dụ: các mục dữ liệu <name> được nén vào trong một container, trong khi các mục
dữ liệu <phone> được nén vào container thứ hai
Nguyên tắc thứ ba: áp dụng những bộ nén khác nhau cho những bộ chứa container khác nhau Một vài phần tử dữ liệu là ký tự hay số trong khi một số khác lại chuỗi DNA XMill áp dụng các bộ nén có tính chuyên môn hóa specialized compressors hay c n gọi là các bộ nén ngữ nghĩa semantic compressors cho từng bộ chứa
iểu thức bộ chứa (container expression) là thành phần cơ bản của XMill Đây là
một ngôn ngữ ngắn gọn được dùng cho việc nhóm phần tử dữ liệu vào trong các bộ chứa container và lựa chọn chính xác sự kết hợp giữa các bộ nén ngữ nghĩa với nhau Mỗi biểu thức xác định một bộ chứa container duy nhất hay là một tập các bộ chứa container phụ thuộc vào số lượng thẻ của tài liệu XML Sự lựa chọn bộ nén ngữ nghĩa được xác định bằng cách kết hợp các máy nén nguyên tử atomic compressor để tạo thành các bộ nén phức tạp hơn Điều này khá hữu ích khi dữ liệu XML có kiểu dữ liệu phức tạp, chẳng hạn như dấu phẩy tách các số nguyên Người dùng gõ các biểu thức bộ chứa trên d ng lệnh của XMill, hoặc lưu trữ chúng trong một tập tin d ng lệnh riêng biệt.XMill có hai hạn chế
Thứ nhất, XMill không được thiết kế để làm việc cùng với bộ xử lý truy vấn query processor Mục đích của nó là chuyển đổi và nén dữ liệu để giảm băng thông mạng, giảm không gian bộ nhớ Hạn chế thứ hai của XMill đó là nó chỉ đạt được kết quả tốt cho những tập tin lớn, thường lớn hơn 20KB
Trang 293.1.2 Kiến trúc của XMill
Hình 3.1: Kiến trúc của XMill [11]
Kiến trúc của XMill dựa trên ba nguyên tắc đã được miêu tả trong phần 3.1.1 và được minh họa trong hình 3.1 Tập tin XML được phân tách bởi bộ phân tích SAX-Parser Sau đó các thẻ bài token được đưa đến bộ xử lý đường dẫn Path Processor) Mỗi thẻ bài XML được đưa vào trong một bộ chứa container Các thẻ và thuộc tính được gửi đến các bộ chứa cấu trúc Structure Container) Giá trị dữ liệu được gửi đến bộ chứa dữ liệu Data Container) khác nhau và các container được nén độc lập Trước khi vào bộ chứa dữ liệu, giá trị dữ liệu phải được nén với một bộ nén ngữ nghĩa Semantic Compressor)
Thành phần quan trọng nhất của XMill là bộ xử lý đường dẫn Path Processor) Nó xác định cách ánh xạ dữ liệu vào trong các bộ chứa khác nhau Người dùng có thể điều khiển quá trình ánh xạ bằng cách sử dụng các biểu thức chứa để xác định giá trị phải được lưu trong một bộ chứa đã tồn tại hay là một bộ chứa mới Cuối cùng, các bộ chứa được nén bằng cách sử dụng gzip và sau đó được lưu trữ trong tập tin đầu ra
3.1.2.1 Phân chia cấu trúc từ nội dung
Cấu trúc của một tập tin XML bao gồm các thẻ tag và các thuộc tính attribute Cấu trúc này được thẻ hóa tokenized trong XMill như sau: các thẻ bắt đầu được mã hóa từ
Trang 30điển tức là được gán bởi một giá trị số nguyên trong khi tất cả các thẻ kết thúc được thay thế bằng ký tự “/”, các giá trị dữ liệu được thay thế với chỉ số bộ chứa container number của chúng
Hình 3.2: Mô tả quá trình XMill phân tách cấu trúc và dữ liệu
Ví dụ 3.1: Minh họa cấu trúc một tập tin XML đơn giản như sau:
3.1.2.2 Nh m các giá trị dữ liệu dựa trên ngữ nghĩa
Mỗi giá trị dữ liệu được gán cho một container duy nhất Quá trình ánh xạ từ giá trị dữ liệu đến container được xác định bởi đường dẫn của giá trị dữ liệu và các biểu thức chứa (container expression) được chỉ định bởi người sử dụng
Đường d n: đường dẫn đến một giá trị dữ liệu là chuỗi các thẻ từ gốc tới giá trị Trong
ví dụ 3.1, đường dẫn của text1 là /a/b/c, text3 là /a/c; text4 là /a/d
Trang 31iểu thức chứa (container expression): tạo ra một bộ chứa cho mỗi thẻ hoặc mỗi một
thuộc tính Bộ chứa được quyết định bởi thẻ hoặc thuộc tính cuối cùng trong đường dẫn Quá trình ánh xạ từ đường dẫn đến biểu thức bộ chứa được mô tả qua các biểu thức chính quy (regular expression Xem xét các biểu thức chính quy được dẫn xuất từ XPath:
c::=label|*|#|e1/e2|e1//e2|(e1|e2)|(e)+
Trong đó:
label: thẻ hoặc thuộc tính.
*: biểu thị bất kỳ thẻ hoặc thuộc tính.
e1/e2: phép ghép nối e1 đến e2, giữa e1 và e2 không có bất kỳ đường dẫn nào ở giữa e1//e2: phép ghép nối e1 đến e2 với bất kỳ đường dẫn ở giữa.
(e1|e2 : e1 hoặc e2.
(e +: e xuất hiện một hay nhiều lần.
#: viết tắt cho bất kỳ thẻ hoặc thuộc tính giống như *, nhưng mỗi sự xuất hiện của #
sẽ quyết định một container mới
Một container expression có dạng c::=/e|e// Trong đó, e khớp với e đầu tiên bắt đầu từ gốc cây XML, //e khớp với e ở bất kỳ độ sâu tùy ý Ở dây //* được viết tắt bởi //
Các biểu thức chứa container expression) c1 , cn được đưa ra trong d ng lệnh với tham số p:
xmill -p cl -p c2 -p cn file.xml file.xmi
Trang 32Mỗi một giá trị dữ liệu, Path Processor sẽ khớp các đường dẫn của nó dựa vào c1, c2 theo thứ tự Giả sử tìm thấy sự phù hợp match đầu tiên tại ci: bộ xử lý tính toán “các giá trị” của # trong ci Các giá trị này xác định duy nhất bộ chứa của giá trị dữ liệu.
Ví dụ 3.5: Xét hai d ng lệnh sau:
xmill -p //# file.xml file.xmi
xmill -p //Person/Title -p //Person/(Name|Child) -p //# file.xml file.xmi
Nhóm đầu tiên nhóm và nén các giá trị dữ liệu dựa vào thẻ kết thúc Nhóm thứ hai nén tất cả các title của Person với nhau, tất cả name của Person và child của nó được nén chung nhau,
và tất cả các giá trị dữ liệu khác được nén dựa vào thẻ kết thúc của nó Trong thực tế, Doc/Book/Title và /Doc/Conference/Paper/Title được nén cùng nhau và riêng rẽ từ /Doc/Person/Title
Ví dụ 3.6: Xem xét d ng lệnh sau:
xmill file.xml file.xmi
bằng d ng lệnh:
xmill -p //# file.xml file.xmi
“-p //#” mặc định luôn luôn được chèn vào cuối d ng lệnh Điều này đảm bào rằng tất cả cả giá trị dữ liệu được lưu trữ ít nhất trong một container, và cung cấp một hành vi mặc định phù hợp khi người dùng không chỉ định bất kỳ một container expression nào
Ngữ nghĩa hình thức (formal semantic): bảng 3.1 đưa ra một biểu thức chứa c và
một đường dẫn p, hàm Match c, p tính toán một tập hợp các chuỗi ký hiệu các phép gán có thể từ # Có một sự phù hợp match khi và chỉ khi hàm Match c, p # Match(c, p) có thể trả về nhiều hơn một kết quả Trong bảng 3.1, ký hiệu cho chuỗi rỗng, / ký hiệu cho quá trình ghép nối chuỗi Nếu ci với i=1… n, là container expression đầu tiên khớp match với
p, thì giá trị dữ liệu với đường dẫn p sẽ được lưu trữ trong một container duy nhất được định nghĩa bởi i, Match c, p
ảng 3.1: Định nghĩa hàm Match(c, p) [11]
Match(|e,p) = Match(e,p) Match(#,l) = {l}
Match(||e,p) = q/p1=pMatch(e,p1) Match(e1/e2,p)=p1/p2=pMatch(e1,p1)/ Match(e2,p2)Match(l,l) = {} Match(e1/e2,p)= p1/q/p2=pMatch(e1,p1)/
Match(e2,p2)
Match(l1,l2) = if l1 # l2 Match(e1|e2,p)=Match(e1,p)Match(e2,p)
Match(*,l) = {} Match((e)+,p)= p1/p2…/pn=pMatch(e,p1 / …/
Match(e,pn)
Trang 33Ví dụ 3.7: Xem xét đường dẫn p=/Doc/Conf/Paper/Title cho ra kết quả như sau:
Match(/Doc/Title,p) = {} Match(//#/#,p) = {Paper/Title}
Match /Doc//Title,p = {ε} Match(/(#),p) = {Doc/Conf/Paper/Title}
Match(//#,p) = {Title} Match(//#//Title,p) = {Doc,Conf,Paper}
3.1.2.3 Các bộ nén ngữ nghĩa
XML thường được dùng để biểu diễn các loại dữ liệu như số nguyên, ngày tháng, mã sân bay… mà được nén tốt nhất bởi các bộ nén ngữ nghĩa có tính chuyên môn hóa (specialized semantic compressor)
Có 3 loại bộ nén ngữ nghĩa bao gồm bộ nén ngữ nghĩa nguyên tử, bộ nén ngữ nghĩa kết hợp và bộ nén ngữ nghĩa do người dùng tự định nghĩa
ộ nén ngữ nghĩa nguyên tử (automic semantic compressor): có tám bộ nén ngữ
nghĩa nguyên tử được mô tả trong bảng 3.2
ảng 3.2: Các bộ xử lý ngữ nghĩa nguyên tử (Atomic Semantic Compressors) [11]
mã hóa liệt kê e enumeration encoder sẽ gán một số nguyên dương cho mỗi giá trị dữ liệu mới và giữ một từ điển của tất cả các giá trị trước đó Bộ nén hằng constant compressor không tạo ra bất kỳ đầu ra nào nhưng kiểm tra đầu vào là hằng số, điều này đặc biệt hữu ích trong các bộ nén kết hợp combined compressor
Các bộ nén ngữ nghĩa thường được xác định trong các d ng lệnh như sau:
C ::= c | c=>s
Trang 34Trong đó, c là một biểu thức chứa container expression và s là một bộ nén ngữ nghĩa Khi
bị thiếu bộ nén mặc định là bộ nén ngữ nghĩa văn bản
Ví dụ 3.8: Xét d ng lệnh sau:
xmill -p //price=>i -p //state=>e -p //description// file.xml file.xmi
Dữ liệu price được nén như các số nguyên, state như các giá trị liệt kê, và text nằm dưới description bất kể độ sâu nào được đặt trong bộ chứa riêng sử dụng bộ nén ngữ nghĩa Tất
cả dữ liệu c n lại được nhóm dựa trên các thẻ của cuối cùng và không sử dụng nén ngữ nghĩa
Bộ nén được kết hợp (Combined compressor): XMill có ba sự kết hợp bộ nén như
sau:
Bộ nén tuần tự Sequence Compressor : seq s1 s2 hoặc một biến thể khác là seqcomb s1 s2 Ví dụ u8 “.”u8“.”u8“.”u8 nén một địa chỉ IP như 4 số nguyên
Bộ nén luân phiên Alternate Compressor or s1 s2 Một bộ nén kết hợp là
or seq u u u hoặc một biến thể khác là orcomb s1 s2
Bộ nén lặp Repetition Compressor hoặc rep d s Ở đây d là dấu phân cách delimiter , và s là một bộ nén ngữ nghĩa khác Ví dụ, một chuỗi dấu phẩy được tách ra từ các từ khóa có thể được nén bởi rep "," e
Ví dụ 3.9: Minh họa việc sử dụng các bộ nén ngữ nghĩa kết hợp cho dữ liệu Weblog.
ộ nén ngữ nghĩa do người dùng tự định nghĩa (User-defined Compressor): một số
ứng dụng đ i hỏi các bộ nén có tính chuyên môn hóa cao như các chuỗi DNA, người dùng
có thể viết ra các bộ nén/ giải nén của riêng mình và liên kết chúng vào trong XMill và XDemill bằng cách cài dặt sử dụng SCAPI Semantic Compressor API API yêu cầu người dùng cài đặt một số phương thức C++ và định nghĩa bộ nén với tên duy nhất
Ví dụ 3.10: Giao diện SCAPI cho quá trình cài đặt các bộ nén ngữ nghĩa
class UserCompressorFactory {
virtual char *GetName()=0;
virtual UserCompressor *InstantiateCompressor (char
*paramstr, int len)=0;
virtual UserDecompressor *InstantiateDecompressor(char
*paramstr, int len)=0;
Trang 35};
class UserCompressor {
virtual unsigned GetContainerNum()=0;
virtual bool IsRejecting()=0;
virtual bool ParseString (char *
virtual void CompressString(char *str, int len,
virtual void FinishCompress(Container *contarray, void
*state)=0;
};
class UserDecompressor {
virtual void DecompressItem(DecomprCont *contarray,
XMLOutput *output, void *state)=0;
Một điểm đặc trưng và đặc biệt của XGrind là tài liệu nén giữ lại cấu trúc ban đầu của tài liệu gốc bởi vì XGrind không phân tách riêng rẽ phần cấu trúc và dữ liệu Tài liệu nén có thể được phân tích cú pháp bằng cách sử dụng chính xác các kỹ thuật tương tự mà được sử dụng cho phân tích cú pháp của tài liệu XML gốc
Điểm nổi bật thứ hai là các chỉ mục XML XML indexes có thể được tạo ra trên tài liệu nén
Đặc điểm thứ ba của XGrind là có thể cập nhật trực tiếp dữ liệu XML trên các phiên bản nén Đặc điểm cuối cùng là có thể sử dụng DTD để kiểm tra tính hợp lệ validity đối với tài liệu nén hoặc tăng cường tỷ lệ nén
3.2.2 Các kỹ thuật nén được sử dụng trong XGrind
XGrind sử dụng các kỹ thuật khác nhau cho nén siêu dữ liệu meta-data , giá trị thuộc tính loại liệt kê enumerated-type attribute , và giá trị của phần tử hoặc thuộc tính tổng quát chung
3.2.2.1 Quá trình nén siêu dữ liệu
Các thẻ bắt đầu của một phần tử được mã hóa bởi ký tự „T‟ theo sau bởi một phần tử được gán giá trị duy nhất – ID Tất cả các thẻ kết thúc được mã hóa bởi ký tự “/” Tên của
Trang 36các thuộc tính được mã hóa bởi ký tự “A” và theo sau là một thuộc tính được gán giá trị duy nhất – ID.
3.2.2.2 Quá trình nén giá trị của thuộc tính kiểu liệt kê
Giá trị của thuộc tính loại liệt kê xuất hiện phổ biến trong các tài liệu XML Ví dụ như: thành phố, bang của một quốc gia, tập hợp các ph ng ban của công ty, mã bưu điện zipcode … Giá trị liệt kê thường được khai báo trong DTD XGrind nhận biết các thuộc tính liệt kê bằng cách kiểm tra DTD của tài liệu và mã hóa các giá trị của chúng bằng cách
sử dụng một lược đồ mã hóa log2K đơn giản để biểu diễn một miền của các giá trị K được liệt kê
3.2.2.3 Quá trình nén giá trị của phần tử hoặc thuộc tính tổng quát
Mục tiêu của XGrind đó là thực hiện hiệu quả truy vấn tài liệu nén Vì vậy cần thiết phải có một giản đồ nén phi ngữ cảnh context-free compression schema , tức là một giản
đồ nén mà trong đó mỗi chuỗi trong tài liệu được gán một mã code độc lập về vị trí của nó trong tài liệu Tính năng này cho phép xác định vị trí xuất hiện của một chuỗi bất kỳ một cách trực tiếp trong tài liệu nén mà không cần phải giải nén tài liệu
Quá trình nén phi ngữ cảnh không thể thực hiện được với các thuật toán động (adaptive algorithms như LZ77 vì mã code được gán cho một mục dữ liệu data item phụ thuộc vào toàn bộ nội dung đã xuất hiện trước đó, nghĩa là khi thực hiện một truy vấn cho một chuỗi thì phải giải nén toàn bộ nội dung phía trước nó Mặt khác, quá trình nén phi ngữ cảnh có thể thực hiện được với các phiên bản tĩnh non-adaptive của thuật toán Huffman và
mã hóa số học Arithmetic Coding [12]) XGrind sử dụng thuật toán non-adaptive Huffman
Để hỗ trợ cho tính năng non-adaptive phải thực hiện hai bước chuyển đổi tài liệu XML: bước thứ nhất thu thập thống kê và bước thứ hai thực hiện quá trình mã hóa
XGrind sử dụng một bảng phân bổ tần số riêng biệt cho mỗi phần tử hoặc thuộc tính không liệt kê bởi vì các dữ liệu thuộc về cùng một phần tử hay một thuộc tính thường có liên quan về mặt ngữ nghĩa và được dự kiến là sẽ có sự phân bố giống nhau
Với lược đồ phi ngữ cảnh, các truy vấn có thể thực hiện trên tài liệu nén mà không cần giải nén toàn bộ tài liệu Chính xác hơn là, các truy vấn tìm kiếm chính xác exact-match khóa tìm kiếm là một giá trị cụ thể và tìm kiếm theo tiền tố prefix-match khóa tìm kiếm là một tiền tố của các giá trị dữ liệu được thực hiện hoàn toàn trực tiếp trên tài liệu nén Trong khi đó, tìm kiếm theo phạm vi range-match khóa tìm kiếm bao phủ một loạt các giá trị dữ liệu hoặc tìm kiếm từng phần partial-match khóa tìm kiếm là một chuỗi con của các giá trị
dữ liệu lại yêu cầu quá trình giải nén thực hiện ngay nhanh chóng chỉ trên các giá trị của phần tử hoặc thuộc tính mà là một phần của biểu thức truy vấn
3.2.3 Nén đ ng cấu (Homomorphic Compression)
Tính năng nổi bật của chương trình nén XGrind là tài liệu đầu ra của nó vẫn giữ nguyên cấu trúc giống như tài liệu đầu vào Thực tế, tài liệu nén XML có thể được hiển thị như tài liệu XML gốc với thẻ, giá trị của phần tử hay thuộc tính được thay thế với các mã
Trang 37code tương ứng của chúng Thứ nhất, điều này rất thuận lợi cho quá trình sử dụng các kỹ thuật phân tích, truy vấn của tài liệu XML gốc cũng được áp dụng để xử lý các tài liệu nén Thứ hai là chỉ mục có thể được thiết lập trong các tài liệu nén tương tự như cách thức đã được thiết lập trong tài liệu XML thông thường Thứ ba là quá trình cập nhật đối với tài liệu XML có thể được thực hiện trực tiếp trên phiên bản nén Cuối cùng, một phiên bản nén có thể kiểm tra tính hợp lệ của nó bằng cách sử dụng DTD mà không cần đến bất kỳ quá trình giải nén nào được minh họa bởi thuộc tính sau đây:
Cho một tài liệu XML X mà hợp lệ đối với một DTD D, hD là đồng cấu trong quá trình xác định lược đồ mã hóa XGrind cho siêu dữ liệu meta-data và các giá trị thuộc tính loại liệt kê hD(D) là ký hiệu của DTD được nén và hD(X) là ký hiệu của tài liệu XML được nén Thuộc tính sau đây là một kết quả của quá trình “phi ngữ cảnh” (context freeness) của lược đồ nén và tính chất bán cấu trúc đầu ra: X là hợp lệ với D khi và chỉ khi hD(X) hợp lệ với hD(D).
Nói cách khác, tài liệu nén có tính hợp lệ đối với DTD nén của nó
3.2.4 Kiến trúc của XGrind
Kiến trúc của bộ nén XGrind được mô tả trong hình 3.3 bao gồm các thành phần chính sau:XML Parser, DTD Parser, XGrind Kernel, Enum-Encoder, Huffman-Encoder và XML-Gen
XGrind Kernel là thành phần trung tâm của chương trình nén Nó bắt đầu bằng việc
triệu gọi bộ phân tích DTD DTD Parser dùng để phân tích cú pháp DTD của tài liệu
XML, sau đó là quá trình khởi tạo các bảng tần số frequency tables cho từng phần tử hoặc thuộc tính không liệt kê, và sinh ra một bảng biểu tượng symbol table cho thuộc tính thuộc
loại liệt kê Tiếp theo, XGrind Kernel gọi tới bộ phân tích cú pháp XML XML Parser),
quét tài liệu XML và sinh ra tập hợp các bảng tần số cho từng phần tử hoặc thuộc tính không liệt kê Bộ phân tích cú pháp XML được XGrind Kernel gọi lần thứ hai để thiết lập một dạng thẻ bài hóa tokenized form cho thẻ, thuộc tính, giá trị của tài liệu XML XGrind Kernel sẽ dựa vào loại của từng thẻ bài mà triệu gọi các bộ mã hóa tương ứng bao gồm bộ
mã hóa liệt kê Enum-Encoder) và bộ nén Huffman Huffman-Compressor)
ộ mã h a liệt kê (Enum-Encoder) được sử dụng cho siêu dữ liệu meta-data và các
hạng mục dữ liệu thuộc loại liệt kê Mỗi thẻ bắt đầu của một phần tử được mã hóa bằng ký
tự “T” được theo sau bởi một định danh duy nhất - ID Tất cả các thẻ kết thúc được mã hóa bằng ký tự “/” Tên các thuộc tính được mã hóa bằng ký tự “A” theo sau bởi một định danh duy nhất – ID Các giá trị thuộc tính loại liệt kê được mã hóa bằng cách sử dụng thông tin bảng biểu tượng symbol table
ộ nén Huffman (Huffman-Compressor) được sử dụng cho các hạng mục dữ liệu
không liệt kê Module này cài đặt lược đồ nén mã hóa non-adaptive Huffman Nó mã hóa mỗi giá trị phần tử hoặc thuộc tính dựa vào cây Huffman mà được xây dựng từ bảng tần số tương ứng của nó
Trang 38Đầu ra đã được nén bởi các bộ mã hóa ở trên, cùng với các bảng tần số và bảng biểu tượng được gọi là CIR Compressed Internal Representation của chương trình nén và được cung cấp cho XML-Gen XML-Gen sẽ chuyển đổi CIR thành một tài liệu XML nén bán cấu trúc.
Hình 3.3: Kiến trúc của bộ nén XGrind [15]
Ví dụ 3.11: Xét một phần nội dung của tài liệu Student.xml có nội dung như sau:
Ví dụ 3.12: DTD của tài liệu XML trong ví dụ 3.11 như sau:
<! DTD for the Student database >
Trang 39<!ELEMENT STUDENT (NAME, YEAR, PROG, DEPT)>
<!ATTLIST STUDENT rollno CDATA #REQUIRED>
<!ELEMENT NAME (#PCDATA)>
<!ELEMENT YEAR (#PCDATA)>
<!ELEMENT PROG (#PCDATA)>
<!ELEMENT DEPT EMPTY>
<!ATTLIST DEPT name (Computer_Science
Xem xét một đoạn tài liệu XML trong ví dụ 3.11 minh họa một cơ sở dữ liệu sinh viên
và DTD của nó được biểu diễn trong ví dụ 3.12 Ta thấy có năm phần tử là STUDENT, NAME, YEAR, PROG VÀ DEPT Phần tử STUDENT có một thuộc tính rollno, trong khi DEPT có một thuộc tính loại liệt kê là name
Trong ví dụ 3.13, thẻ STUDENT được mã hóa là T0, NAME là T1, YEAR là T2, PROG
là T3 và DEPT là T4 Tất cả các thẻ kết thúc đều được mã hóa là “/” Các thuộc tính rollno
và name lần lượt được mã hóa là A0 và A1 ID của các phần tử hay thuộc tính và thuộc tính name của phần tử DEPT được xác định bởi bộ phân tích cú pháp DTD trong bước chuyển đầu tiên nahuff s biểu thị đầu ra của bộ nén Huffman cho dữ liệu đầu vào s, trong khi enum s biểu thị đầu ra của bộ mã hóa liệt kê cho dữ liệu đầu vào s, trong đó s là giá trị loại liệt kê của thuộc tính
3.3 XAUST
3.3.1 Tổng quan về XAUST
XAUST thuộc nhóm kỹ thuật nén XML không truy vấn và phụ thuộc vào thông tin lược đồ Bộ nén XML XAUST chuyển đổi thông tin lược đồ DTD thành một tập hợp máy
tự động hữu hạn xác định Deterministic Finite Automata - DFA , mỗi phần tử trong DTD
sẽ có một DFA Mỗi transition được gán nhãn bởi một phần tử và hành động action được kết hợp với một transition được gọi đến một bộ mô phỏng simulator cho DFA của phần tử đang được gán nhãn XAUST nhóm tất cả dữ liệu trong cùng một phần tử vào trong một
Trang 40container duy nhất và sử dụng bộ nén số học số 4 arithmetic order-4 compressor để nén Bởi vì sử dụng thông tin lược đồ DTD, XAUST có khả năng tìm, kiểm tra cấu trúc của tài liệu và có khả năng dự đoán chính xác các biểu tượng mong đợi.
Các thành phần cơ bản của XAUST bao gồm: mã hóa số học và máy tự động hữu hạn xác định
3.3.2.2 Mô hình ngữ cảnh hữu hạn (Finite Context Modeling)
Trong một lược đồ ngữ cảnh hữu hạn, xác suất của mỗi biểu tượng hay kí hiệu được tính toán dựa trên ngữ cảnh mà biểu tượng xuất hiện trong đó Ngữ cảnh chỉ là những biểu tượng mà đã được xuất hiện trước đó Mô hình là một tập hợp các bảng đếm tần suất cho mỗi ngữ cảnh Khi gặp một biểu tượng, số đếm tần suất sẽ được cập nhật vào trong bảng Số đếm tần suất được sử dụng để tính xác suất và lược đồ tương ứng khi mỗi biểu tượng được quét qua Thứ tự của mô hình tham chiếu đến số lượng các biểu tượng đã xuất hiện trước đó và tạo lên một ngữ cảnh Trong một mô hình có thứ tự k, cả hai bộ nén và bộ giải nén đều bắt đầu cùng với một mô hình Bộ nén mã hóa biểu tượng với một mô hình đã tồn tại và sau đó cập nhật lại mô hình cho mô hình mới Bộ giải nén tương tự giải mã một biểu tượng bằng cách sử dụng mô hình đã có và sau đó cũng cập nhật lại mô hình Ta thấy rằng, quá trình cập nhập lại mô hình và lưu các bảng đếm tần suất là một quá trình tốn kém, tiêu tốn một số lượng lớn không gian bộ nhớ Điều này làm cho mã hóa số học chậm hơn các lược đồ dựa trên từ điển như Ziv-Lempel
3.3.3 Máy tự động hữu hạn xác định
Mỗi một phần tử trong DTD được kết hợp với một DFA