Mặc dù XML rất hiệu quả trong quá trình trao đổi, truy suất trên Internet, nhưng nó không thể có được những tính năng tuyệt vời của cơ sở dữ liệu quan hệ như: lưu trữ hiệu quả với dung l
Trang 1TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN & TOÁN ỨNG DỤNG
LUẬN VĂN TỐT NGHIỆP
CHUYỂN ĐỔI DỮ LIỆU XML SANG CƠ
SỞ DỮ LIỆU QUAN HỆ CÁCH TIẾP CẬN DỰA TRÊN DOM
Giảng viên hướng dẫn : Th.S LƯƠNG THỊ NGỌC KHÁNH Sinh viên thực hiện: VƯƠNG VĂN MẠNH
TRỊNH THỊ TUYẾT NHI Lớp : 06 TH 3D
Khoá : 10
TP Hồ Chí Minh, tháng 7 năm 2010
Trang 2Chúng em xin ghi nhận lòng biết ơn sâu sắc đến Th.S Lương Thị Ngọc Khánh
đã tận tình hướng dẫn, truyền đạt cho chúng em những kiến thức quý báu cùng với những lời động viên khuyến khích của Cô trong những lúc chúng em gặp khó khăn, trở ngại khi thực hiện đề tài
Con xin ghi nhớ công ơn của Ba Mẹ đã sinh thành, nuôi dưỡng và dạy dỗ con trưởng thành như ngày hôm nay Ba Mẹ luôn là chỗ dựa tinh thần vững chắc cho con khi con vấp ngã và gặp những khó khăn trong cuộc sống
Cuối cùng chúng tôi xin gửi lời cám ơn đến bạn bè đã thăm hỏi, động viên và giúp đỡ chúng tôi trong quá trình thực hiện đề tài
Mặc dù chúng em đã nỗ lực hết sức để hoàn thành tốt đề tài của mình
nhưng những sai sót trong đề tài là điều không thể tránh khỏi, kính mong Thầy Cô thông cảm và tận tình chỉ bảo cho chúng em, mong các bạn đóng góp ý kiến để chúng tôi có thể hoàn thiện đề tài của mình hơn
TP Hồ Chí Minh 7/2010 Sinh viên thực hiện Vương Văn Mạnh – Trịnh Thị Tuyết Nhi
Trang 3Nhận xét của Giáo Viên Hướng Dẫn
Trang 4
Nhận xét của Giáo Viên Phản Biện
Trang 5
Mục lục
MỞ ĐẦU 12
NỘI DUNG 15
Phần 1: Cơ sở lý thuyết 15
Chương 1: Tổng quan về XML và XML DOM 15
1.1 Giới thiệu Tổng quan về XML 15
1.1.1 Lịch sử phát triển của XML 15
1.1.2 XML là gì? 18
1.1.3 Lợi ích khi sử dụng XML 18
1.1.4 Một số ứng dụng của XML 21
1.1.5 Tạo một tài liệu XML 22
1.1.6 Kết luận 23
1.2 Một số khái niệm cơ bản về XML 24
1.2.1 Nguyên tắc của ngôn ngữ XML 24
1.2.2 XML Elements (Các phần tử XML) 28
1.2.2.1 Định nghĩa 28
1.2.2.2 Nguyên tắc đặt tên cho những phần tử XML 29
1.2.3 XML Attributes (các thuộc tính XML) 30
1.2.4 XML Document (tài liệu XML) 30
1.2.5 Một tài liệu XML hợp lệ 31
1.2.6 Document Type Definition (DTD) 31
1.2.6.1 Định nghĩa 31
Trang 61.2.6.2 Xác định thuộc tính 33
1.2.6.3 Một số hạn chế của DTD 33
1.2.7 Schema XML (Lược đồ XML) 34
1.2.7.1 Định nghĩa 34
1.2.7.2 Lợi ích của XML Schema so với DTD 35
1.2.7.3 Xác định phần tử trong lược đồ 36
1.2.8 XML Parser (Bộ phân tích XML) 36
1.2.9 XML DOM (XML Document Object Model) 37
1.2.10 XML Namespace 37
1.2.11 XML CDATA 40
1.2.11.1 PCDATA _Parsed Character Data (dữ liệu được phân tích) 40
1.2.11.2 CDATA _UnParsed Character Data (dữ liệu không được phân tích)
1.2.12 Các ký tự trong tài liệu XML 42
1.2.13 Một số công nghệ XML 42
1.2.14 Các giao diện lập trình XML 44
1.2.14.1 DOM (Document Object Model) 44
1.2.14.2 SAX (Simple API for XML) 45
1.2.14.3 JDOM 46
1.2.14.4 Java API cho kiểm ngữ XML (JAXP) 47
1.3 XML DOM 48
1.3.1 Những khái niệm cơ bản về DOM 48
1.3.1.1 Khái niệm DOM 48
Trang 71.3.1.2 DOM với chức năng như một API 51
1.3.1.3 Lợi ích và điểm hạn chế khi sử dụng DOM 52
1.3.2 XML DOM 53
1.3.2.1 XML DOM là gì? 53
1.3.2.2 Các kiểu nút khác nhau của XML trong mô hình DOM 55
1.3.2.2.1 Tạo hệ phân cấp 55
1.3.2.2.2 Sự khác nhau giữa các phần tử và các nút trong DOM 57
1.3.2.3 Các kỹ thuật parser một tài liệu XML 58
1.3.2.3.1 SAX Parser (Simple API for XML) 59
1.3.2.3.2 DOM Parser (Document Object Model) 59
1.3.3 Truy xuất tài liệu XML với DOM bằng ngôn ngữ Java 61
1.3.3.1 DOM làm việc như thế nào ? 61
1.3.3.2 Các đối tượng trong DOM 62
1.3.3.3 Một số kỹ thuật lập trình với DOM 63
1.3.3.3.1 Phân tích một tài liệu XML 63
1.3.3.3.2 Các thao tác trên một tài liệu XML 68
1.3.3.3.2.1 Lấy phần tử gốc 68
1.3.3.3.2.2 Lấy nút con của một nút 70
1.3.3.3.2.3 Tạo mới tài liệu XML 72
1.4 Kết luận 77
Chương 2: Cơ sở dữ liệu quan hệ So sánh dữ liêu quan hệ và dữ liệu XML 78
2.1 Cơ sở dữ liệu quan hệ 78
Trang 82.1.1 Sơ lược về cơ sở dữ liệu 78
2.1.1.1 Cơ sở dữ liệu là gì ? 78
2.1.1.2 Quản lý dữ liệu 80
2.1.1.3 Mô hình cơ sở dữ liệu (Database Model) 81
2.1.1.4 Hệ quản trị cơ sở dữ liệu quan hệ (Relational Database Management System_ Viết tắt là RDBMS) 82
2.1.2 Thiết kế cơ sở dữ liệu quan hệ 83
2.1.2.1 Phụ thuộc hàm 83
2.1.2.1.1 Định nghĩa 83
2.1.2.1.2 Hệ tiên đề cho phụ thuộc hàm 85
2.1.2.2 Khoá của lược đồ quan hệ 88
2.1.2.2.1 Định nghĩa 89
2.1.2.2.2 Thuật toán tìm khóa 89
2.1.2.2.3 Lưu ý về các khoá chính và khoá ngoại 91
2.1.2.3 Chuẩn hoá lược đồ quan hệ 91
2.1.2.3.1 Định nghĩa 91
2.1.2.3.2 Các dạng chuẩn 92
2.1.2.3.2.1 Dạng chuẩn thứ 1 92
2.1.2.3.2.2 Dạng chuẩn thứ 2 93
2.1.2.3.2.3 Dạng chuẩn thứ 3 93
2.1.2.3.2.4 Dạng chuẩn Boye Codd 94
2.2 So sánh dữ liệu quan hệ và dữ liệu XML 94
Trang 9Chương 3: Ánh xạ dữ liệu XML sang dữ liệu quan hệ: Cách tiếp cận dựa trên
DOM 96
3.1 Đặt vấn đề 96
3.2 Các phương pháp tiếp cận để giải quyết vấn đề 98
3.3 Cách giải quyết vấn đề 99
3.3.1 Ánh xạ lược đồ 100
3.3.1.1 Đơn giản hoá DTD 102
3.3.1.2 Tạo lập và giản lược đồ thị DTD bởi thuật toán Inline() 102
3.3.1.3 Sinh lược đồ quan hệ 104
3.3.2 Ánh xạ dữ liệu 106
3.3.2.1 Định nghĩa 106
3.3.2.2 Bổ đề 1 113
3.3.2.3 Bổ đề 2 113
3.3.2.4 Định lý 114
3.4 Kết luận 115
Phần 2: Cơ sở thực hành 116
Chương 4: Cài đặt thuật toán 116
Chương 5: Đánh giá và kết luận 116
5.1 Đánh giá 116
5.2 Hướng phát triển 116
TÀI LIỆU THAM KHẢO 117
Trang 10Danh mục các từ viết tắt
RDBMS Hệ quản trị cơ sở dữ liệu quan hệ _ Relational Database Management System
Trang 11Hình 1.3.2.3.2.a: DOM Parser
Hình 1.3.2.3.2.b: Hoạt động của XML DOM Parser
Hình 1.3.3.1: Quá trình làm việc của DOM, XML parser
Hình 2.1: Một CSDL đơn giản
Hinh 3.3.c: Quá trình chuyển đổi XML sang RDB
Hình 3.3.1: Ánh xạ lược đồ XML sang lược đồ quan hệ
Hình 3.3.2.: Thao tác gộp
Hình 3.3.2: Ánh xạ dữ liệu XML sang dữ liệu quan hệ
Trang 12MỞ ĐẦU
Ngày nay, Internet phát triển mạnh mẽ làm cho HTML (HyperText Markup Language - ngôn ngữ đánh dấu siêu văn bản) một ngôn ngữ lý tưởng để hiển thị trang Web được nhiều người biết đến Tuy vậy, HTML không thể phát triển xa hơn nữa trong thế giới ảo, nó được đánh giá là khá tồi khi mô tả nội dung trang web dưới dạng
dữ liệu để có thể thao tác dễ dàng được ở bất cứ thời điểm và hoàn cảnh nào Điều này
đã làm cho người ta suy nghĩ đến XML Vậy XML là gì?
XML là ngôn ngữ lập trình tương đối mới, nhưng đang ngày càng trở nên phổ dụng trong nhiều ứng dụng đa dạng XML xuất hiện cung cấp cho chúng ta một cách
thức mô tả dữ liệu có cấu trúc mà bản thân tên gọi của nó đã nêu rõ eXtensible Markup
Language (ngôn ngữ tăng cường) Do đó, ở đâu có dữ liệu nhập/xuất, lưu trữ hoặc
truyền từ nơi này đến nơi khác thì ở đó trở thành mảnh đất đầy tiềm năng thích hợp với các khả năng của XML Có lẽ nổi tiếng nhất vẫn là các ứng dụng có liên quan đến web Nhưng có nhiều ứng dụng khác không thuộc web vẫn thích hợp với XML Ví dụ: Để thay thế cho các dữ liệu truyền thống hoặc để chuyển giao thông tin tài chính giữa các doanh nghiệp,…
Có thể nói, XML là một ngôn ngữ chung thống nhất cho toàn bộ dữ liệu trên web, giúp cho các nhà phát triển sức mạnh để đem lại mọi thông tin và dữ liệu có cấu trúc cần thiết từ bất cứ chương trình nào tới tận màn hình của người sử dụng
Mặc dù XML rất hiệu quả trong quá trình trao đổi, truy suất trên Internet, nhưng
nó không thể có được những tính năng tuyệt vời của cơ sở dữ liệu quan hệ như: lưu trữ hiệu quả với dung lượng cực lớn, sao chép dự phòng, phục hồi dữ liệu, tối ưu hệ
thống, Ngoài ra, số lượng ngày càng tăng của các tài liệu XML đòi hỏi sự cần thiết để lưu trữ và truy vấn tài liệu XML một cách hiệu quả Vì vậy, trong phạm vi của đề tài
này, chúng tôi sẽ trình bày “quá trình chuyển đổi dữ liệu XML sang dữ liệu quan
hệ : cách tiếp cận dựa trên DOM” Chúng tôi chọn cơ sở dữ liệu Microsoft SQL
Trang 13Server 2005 để lưu trữ dữ liệu trong quá trình thực hiện chuyển đổi Trước khi đi vào nội dung chính của đề tài, chúng tôi sẽ tìm hiểu một số khái niệm cơ bản về XML cũng như XML DOM và cơ sở dữ liệu quan hệ cũng như đặc điểm nổi bật của cơ sở dữ liệu quan hệ
Nội dung chính của luận văn chia làm 2 phần:
Phần 1: Cơ sở lý thuyết: Trong phần này được chia làm 3 chương:
Chương 1: Tổng quan về XML và XML DOM:
Chương này đề cập đến lịch sử phát triển của XML, một vài khái niệm cơ bản
về ngôn ngữ XML: tại đây bạn có thể định nghĩa các thành phần, các thẻ gán và các thuộc tính riêng Từ đó cho thấy các thẻ gán không có ý nghĩa trình bày, chúng chẳng qua là một cách mô tả cấu trúc dữ liệu Chương này còn nói đến lợi ích khi sử dụng XML, một số ứng dụng XML, cách tạo ra một tài liệu XML và thế nào là một tài liệu XML well-formed? Ngoài ra, bạn còn biết 2 cách để tài liệu XML hợp lệ đó là định nghĩa kiểu tư liệu cho các phần tử dựa vào khai báo DTD hoặc dựa vào lược đồ XML Bên cạnh đó, bạn còn được giới thiệu tổng quan về XML DOM và cách truy suất tài liệu XML thông qua DOM như thế nào?
Chương 2: Cơ sở dữ liệu quan hệ So sánh sự khác nhau giữa dữ liệu quan hệ
và dữ liệu XML
Trong chương này, bạn được giới thiệu lại một số kiến thức cơ bản về cơ sở dữ liệu và cơ sở dữ liệu quan hệ, cách thiết kế cơ sở dữ liệu quan hệ? Sự khác và giống nhau giữa dữ liệu XML và dữ liệu quan hệ Từ đó nhận thứ được các điểm mạnh và điểm yếu của mỗi cơ sở dữ liệu
Chương 3: Ánh xạ dữ liệu XML sang dữ liệu quan hệ: Cách tiếp cận dựa trên DOM
Trang 14Chương này đề ra vấn đề tại sao phải chuyển đổi dữ liệu XML sang dữ liệu quan hệ? Và cách tiếp cận để giải quyết vấn đề dựa trên hai thuật toán là New Inlining: Chuyển đổi lược đồ XML sang lược đồ quan hệ và thuật toán XInsert: Chuyển đổi dữ liệu XML sang dữ liệu quan hệ
Phần 2: Cơ sở thực hành: Phần này bao gồm 2 chương:
Chương 4: Cài đặt thuật toán
Chương này nhằm cài đặt 2 thuật toán New Inlining và XInsert để chuyển đổi
dữ liệu XML sang dữ liệu quan hệ Kết quả của hai thuật toán này là nhiều bảng dữ liệu có quan hệ với nhau
Chương 5: Đánh giá và kết luận
Chương này tóm tắt lại các vấn đề được đặt ra, các vấn đề đã được giải quyết và các vấn đề chưa được giải quyết, và nêu ra một số hướng phát triển trong tương lai
Trang 15XML được triển khai nhờ sự đóng góp của rất nhiều người trong 10 năm qua
Cách đây hơn 10 năm SGML ra đời (Standard Generalised Markup Language), một
ngôn ngữ quốc tế vô cùng phức tạp, dùng để mô tả các tài liệu phức tạp và có cấu trúc tinh vi SGML là ngôn ngữ rất khó học và các công cụ để phát triển nó cũng khá đắt tiền
Năm 1990, Tim Berners-Lee ở CERN đã phát minh ra HTML, một phần nhỏ
của SGML, nhưng dễ sử dụng hơn, có thể được viết bằng tay mà không cần phải có một chương trình nào giúp đỡ Sự thành công của HTML vượt quá sức tưởng tượng của chính tác giả, nhưng vào đầu năm 1995, các nhà phát triển đã bắt đầu nhận ra sự giới hạn của HTML, mặc dù Microsoft, Netscape cố gắng thêm thắt rất nhiều thứ vào HTML nhưng cũng không ngăn được việc lộ rõ những giới hạn của HTML
Trang 16Hình 1.1.1.a: Tim Berners-Lee Cha đẻ của WWW đã phát minh ra HTML năm
1990
Mùa hè năm 1996, Jon Bosak ở Sun Microsystem khởi đầu nhóm cộng tác W3C
SGML, được gọi là nhóm XML Mục đích của nhóm là đơn giản hoá SGML để nó dễ
sử dụng như HTML, đồng thời lại mạnh mẽ và linh động Tim Bray và C.M McQueen viết hầu hết Specification (bản điều kiện kỹ thuật) nguyên thủy của XML Trước đó Bray đã có kinh nghiệm nhiều năm quản lý dự án “New Oxford English Dictionary” Ông muốn XML hội tụ các điều kiện sau:
Sperberg- Đơn giản đủ cho lập trình viên áp dụng
Dễ cho Search Engine (Alta Vista, Yahoo, InfoSeek,…) phân loại
Không giới hạn trong tiếng anh của nước Mỹ
Trang 17Hình 1.1.1.b: GuTim Bray
Chính vì vậy phiên bản Specification nháp đầu tiên của XML được phát hành vào tháng 11 năm 1996 Tháng 7 năm 1997, Microsoft lần đầu tiên đưa ra một áp dụng
thực sự của XML, Channel Definition Format (CDF), sử dụng để xuất bản các trang
Web tới các vị khách đã đóng tiền đặt mua trước theo tháng Vào thời gian đó, CDF đã được tích hợp vào IE 4.0 Sau đó Microsoft và Inso Corporation đã cùng hợp tác để
xuất bản XSL (eXtensible Style Language) để làm Style Sheet diễn tả cách trình bày
một trang XML
Tháng 1 năm 1998 Microsoft đã đưa ra một chương trình miễn phí tên MSXSL
để generate một trang HTML từ một cặp trang XML và XSL Sau này IE5.0 đã hỗ trợ việc hiển thị một trang XML đơn
Tháng 2 năm 1998, W3C đã phê chuẩn cho thi hành chính thức Version 1.0 của XML Specification
Vậy để nắm rõ hơn về XML và tầm quan trọng của nó, chúng ta sẽ đi vào định nghĩa trong phần tiếp theo
Trang 181.1.2 XML là gì?
Như đã được nói trong phần giới thiệu, XML (eXtensible Markup Language) là ngôn ngữ đánh dấu mở rộng (ngôn ngữ đặc tả dữ liệu) được tạo nên bởi liên minh mạng toàn cầu (W3C – World Wide Web Consortium) XML là ngôn ngữ có kiến trúc gần giống với HTML nhưng mạnh hơn HTML về nhiều mặt, ra đời sau HTML nhưng
nó nhanh chóng trở thành một chuẩn phổ biến trong việc chuyển đổi thông tin qua các trang web sử dụng giao thức HTTP Trong khi HTML là ngôn ngữ chủ yếu về hiển thị
dữ liệu thì XML lại đang phát triển mạnh về việc truyền tải, trao đổi và thao tác dữ liệu XML đưa ra một định dạng chuẩn cho cấu trúc dữ liệu hoặc thông tin bằng việc tự định nghĩa định dạng của tài liệu, nhờ đó dữ liệu được lưu trữ bằng XML sẽ độc lập với việc xử lý
Nói cách khác, XML là một bộ quy luật về cách chia một tài liệu ra làm nhiều phần, rồi đánh dấu và ráp các phần khác nhau lại để dễ nhận diện chúng XML cho phép người dùng có thể tự định nghĩa các thẻ (tag) để đánh dấu các phần trong tài liệu, những thẻ này làm cho XML đa dạng hơn những ngôn ngữ thông thường như HTML
Vì vậy, XML được mệnh danh là công nghệ tiên tiến của tương lai Bản thân XML tuy không có gì khó hiểu nhưng các công cụ chuẩn được định ra để làm việc với XML như: DOM – Document Object Model, Xpath, XSL, XML Schema, … thì rất hữu hiệu, và các chuẩn này được phát triển không ngừng
1.1.3 Lợi ích khi sử dụng XML
Trong quá trình trưởng thành và phát triển, XML đã đối mặt và đương đầu với nhiều thử thách trong việc thuyết phục các nhà lập trình rằng XML là sự lựa chọn hàng đầu vì nó dễ dàng để hiểu, dễ dàng để đọc, và dễ dàng thực hiện
XML không sinh ra để thay thế cho HTML nhưng để trở thành một sự bổ xung
lý tưởng cho HTML, giải quyết một số vấn đề cơ bản cho HTML chẳng hạn như:
Trang 19 XML được thiết kế để phát triển và mở rộng một ngôn ngữ đánh dấu
mới theo một hệ thống chuẩn Từ trước đến nay, HTML chưa bao giờ được cung cấp một khả năng mở rộng linh hoạt tuân theo một chuẩn nhất định Để thay đổi hoặc sửa chữa chuẩn HTML, dường như chúng ta sẽ phải đối mặt với toàn bộ thế giới
XML được thiết kế để chỉ ra rõ ràng các quy tắc rằng XML markup được tạo ra như thế nào và các công cụ phát triển (development tool) và các trình duyệt có thể phân tích nó như thế nào Sự tối nghĩa trong các quy tắc về HTML tag và cấu trúc của nó đã tạo ra quá nhiều trường hợp ngoại lệ đối với các sản phẩm và trình duyệt liên quan đến HTML Như là một hệ quả tất yếu, những người phát triển không thể dễ dàng tạo ra các công cụ HTML mới (và các kỹ thuật liên quan) mà không có những công cụ phát triển nâng cấp liên tục, người
sử dụng thì không thấy rõ được sự phát triển cho đến khi trình duyệt của họ được nâng cấp và hỗ trợ các kỹ thuật phát triển này
HTML là một ngôn ngữ chú trọng hoàn toàn tới việc sẽ trình bày nội dung bên trong của trang Web ra ngoài như thế nào, còn XML thì mô tả nội dung bên trong của trang Web để có thể dễ dàng thao tác trực tuyến Vấn đề ở chỗ là một trang HTML đôi lúc không nói lên được điều gì về dữ liệu mà nó mang, còn HTML markup chỉ cho chúng ta thấy dữ liệu đó được phô diễn trên màn hình như thế nào, còn để hiểu được dữ liệu đó chúng ta cần tới XML
Cuối cùng, XML có thể được sử dụng với tất cả mọi người, ngay cả với những ai chưa có một chút xíu kinh nghiệm lập trình
XML cung cấp khả năng làm tăng thêm tính linh động của các văn bản dạng
HTML với các XML tags (thẻ) XML tags cho phép trình duyệt có thể biết rõ về các thông tin mà mình trình bày cho người sử dụng, qua đó đem lại một số khả năng mới rất tiện dụng cho Web:
Trang 20 Giảm bớt tải trọng của hệ phục vụ: Các ứng dụng web dùng XML để
giảm bớt tải trọng trên các hệ phục vụ web Để thực hiện, chúng lưu trữ tất cả thông tin trên hệ khách càng lâu càng tốt, rồi gửi thông tin đến các hệ phục vụ
đó trong một tư liệu XML lớn
XML đơn giản hóa việc trao đổi dữ liệu Bởi vì những tổ chức khác
(hoặc thậm chí là các phần khác nhau trong cùng tổ chức) hiếm khi làm chuẩn hóa trên một bộ công cụ duy nhất, chúng sẽ phải làm một số lượng đáng kể công việc để trao đổi thông tin Sử dụng XML, mỗi nhóm sẽ tạo nên một lợi ích riêng
mà có thể chuyển đổi những định dạng dữ liệu bên trong trở thành XML và ngược lại Trên hết, đây là cơ hội tốt để nhà cung cấp phần mềm có thể đưa ra các công cụ chuyển đổi những ghi chép cơ sở dữ liệu của họ (danh bạ LDAP hoặc lệnh mua, v.v ) thành XML và ngược lại
XML cho phép mã hóa thông minh Bởi vì những văn bản XML được
tổ chức để nhận dạng từng thông tin quan trọng (cũng như mối quan hệ giữa các thông tin), có thể viết mã để xử lí văn bản XML mà không cần con người tác động Những nhà cung cấp phần mềm đã dành rất nhiều thời gian và tiền bạc xây dựng các công cụ phát triển XML, điều đó có nghĩa là viết mã đó, là một quá trình tương đối đơn giản
XML cho phép tìm kiếm thông minh Mặc dù công cụ tìm kiếm đã cải
thiện dần trong nhiều năm qua, tuy nhiên nhận được những kết quả không chính xác vẫn phổ biến xảy ra Nếu bạn đang tìm kiếm một ai đó mang tên “Chip” trong những trang HTML, bạn sẽ tìm thấy một loạt các trang web về chip sô-cô-
la, chip máy tính, chip gỗ, và nhiều thứ vô dụng khác Tìm kiếm văn bản XML cho <first-name> các yếu tố chứa từ Chip sẽ mang lại cho bạn những kết quả tốt hơn rất nhiều
Trang 211.1.4 Một số ứng dụng của XML
Từ những lợi ích trên mà XML đã được sử dụng rộng rãi trong nhiều ứng dụng khác nhau:
Giao dịch thương mại (Business-to-business transport): Dữ liệu
thương mại, hoá đơn, yêu cầu mua hàng, thông tin thuế … có thể được truyền qua đường điện tử giữa các nhà sản xuất bằng định dạng XML XML có rất nhiều ưu điểm so với định dạng EDI (Electronic Data Interchange)
Cấu trúc Web site: Bản thân XML đã có tính cấu trúc và phân tán, các
nhà phát triển Web site có thể dễ dàng sử dụng XML trong việc tăng tính phân tầng và cấu trúc duyệt (navigations) đối với những trang Web của họ Hơn nữa,
sử dụng XML sẽ giúp cho việc lưu trữ thông tin người sử dụng, trạng thái Web site, điều khiển luồng dữ liệu trong trang Web … trở nên dễ dàng hơn bao giờ hết bằng cách kết hợp XML và XSLT
Điều khiển cơ sở dữ liệu: XML cũng đóng góp vào sự phát triển trong
việc tương tác với cơ sở dữ liệu, ví dụ như việc nhận dữ liệu từ câu truy vấn SQL hoặc cập nhật dữ liệu từ một bản ghi XML Bằng việc mô tả dữ liệu theo định dạng XML, chúng ta không cần thiết phải có một chút khái niệm nào về cấu trúc thật sự của dữ liệu
Quản lý văn bản: Hầu hết các công ty đều ngập tràn trong biển giấy tờ,
và điều này đã tiêu tốn không biết bao nhiêu thời gian của họ XML được sử dụng để mã hoá các văn bản sang dạng XML, giúp cho việc quản lý các văn bản trở nên hiệu quả hơn rất nhiều
Trang 221.1.5 Tạo một tài liệu XML
Các văn bản XML đều bắt đầu với một khai báo XML, khai báo này sẽ đưa ra
cho bộ kiểm ngữ những thông tin cơ bản có trong văn bản Khai báo XML có thể có, nhưng không bắt buộc Nếu có, nó phải là thứ đầu tiên trong văn bản
Tuyên bố có thể chứa tới ba cặp giá trị-tên (nhiều người gọi đó là những thuộc tính, dù thực chất về kỹ thuật thì không phải vậy) Phiên bản là phiên bản XML được
sử dụng; giá trị lúc này phải là 1.0 Encoding là chỉ bảng mã chữ cái được sử dụng trong văn bản này, ISO-8859-1 là chữ cái tham khảo trong khai báo trên bao gồm những chữ cái rất phổ biến trong hầu hết các ngôn ngữ Tây Âu Nếu không có
encoding nào được chỉ ra, bộ kiểm ngữ XML sẽ cho là những chữ cái trong bộ UTF-8, một tiêu chuẩn Unicode phù hợp với từng chữ cái và chữ tượng hình của các ngôn ngữ trên thế giới
<?xml version="1.0" encoding="ISO-8859-1" standalone="no>
Cuối cùng, standalone, có thể là có hoặc không, xác định tài liệu này có thể được xử lý cùng với hay không với bất cứ tập tin nào khác Chẳng hạn, nếu văn bản XML không tham khảo các tập tin khác, bạn nên chỉ rõ standalone="yes" Nếu văn bản XML tham khảo những tập tin khác mà mô tả nội dung văn bản, bạn nên chỉ rõ
standalone="no" Bởi vì standalone="no" là một mặc định, bạn sẽ hiếm khi thấy
standalone trong các tuyên bố XML
Bây giờ hãy thử xem một văn bản XML mẫu Với XML, chúng ta có thể đưa ý nghĩa vào các thẻ trong văn bản Quan trọng hơn, máy tính sẽ dễ dàng hơn trong việc
xử lý thông tin Chúng ta có thể rút được ngày đặt hàng ra từ văn bản này đơn giản là bằng cách bao bọc nó bởi các thẻ <OrderDate> và </OrderDate>, được biết một cách
máy móc là phần tử <OrderDate>
Trang 23<?xml version="1.0" encoding="utf-8" standalone="yes"?>
Tài liệu XML trong ví dụ mẫu trên bao gồm 1 Element gốc: <Order>
<OrderDate>, <Customer>, <Item> là Element con của Element gốc <ProductID>,
<Quantity> là con của element Item
1.1.6 Kết luận
Kết thúc phần 1.1, chúng ta có thể hình dung một cách tổng quan về ngôn ngữ XML, chẳng hạn như: Lịch sử ra đời của XML như thế nào?, XML là gì?, Lợi ích và ứng dụng của nó đối với lĩnh vực công nghệ ra sao? Và một tài liệu XML trông như thế nào? Từ đó ta có thể tạo các ứng dụng phức hợp hoặc đơn giản theo như tình huống của ta đảm bảo
Trang 24Phần lớn năng lực có được từ XML là do cách khắt khe mà các tư liệu phải được viết Để xem xét chi tiết hơn các quy tắc tạo XML well-formed và hiểu rõ hơn về cấu trúc XML cũng như việc thực hiện truy vấn trên tập tin XML như thế nào?, chúng
ta sẽ đi vào tìm hiểu tiếp ở những phần sau
1.2 Một số khái niệm cơ bản về XML
1.2.1 Nguyên tắc của ngôn ngữ XML
Bất cứ một ngôn ngữ nào cũng đều có một nguyên tắc nhất định, ví dụ trong SQL dùng các từ khoá như: Select … From…Where….; Insert to… để quản lý thông tin dữ liệu,… hoặc trong HTML thì sử dụng những thẻ có sẵn (từ khoá) để trình bày, biều diễn thông tin: <html> </html>, <tittle> </tittle>, <body> </body>, <p> </p>,
<br>, …còn đối với XML, mặc dù các thẻ XML do người dùng đặt ra nhưng nó cũng cần phải tuân thủ những nguyên tắc sẽ được trình bày dưới đây
Một tài liệu XML phải tuân thủ các thẻ (tags), các element (phần tử), các thuộc tính (attribute), các giá trị (value),… chứa bên trong nó để parser có thể nhận diện và phân biệt mọi thứ Khi đó, tài liệu XML được gọi là Well-Formed Vậy một tài liệu XML được gọi là Well-formed khi nó phải tuân thủ theo các luật sau:
Phải có một root (gốc) Element duy nhất, gọi là Document Element,
nó chứa tất cả các Elements khác trong tài liệu
Ví dụ: Đoạn code dưới đây là sai:
Trang 25<Product ProductID="2">Desk</Product>
</Catalog>
Mỗi opening Tag phải có một closing Tag giống như nó
Ví dụ: Đoạn code sau không well-formed vì có tag mở Item nhưng không
Trang 26 Tags trong XML thì case sensitive, tức là opening Tag và closing
Tag phải được đánh vần y như nhau, chữ hoa hay chữ thường
Ví dụ: Đoạn code sau không well-formed do thẻ
Mỗi Child Element phải nằm trọn bên trong Element cha của nó
Ví dụ: Đoạn code sau không well-formed do các thẻ vẫn còn chéo nhau:
<Catalog>
<Category CategoryName="Beverages">
Trang 27<Product ProductID="1"> Coca-Cola</Category>
<Product ProductID= “1”>Chair</Product>
<Product ProductID= “2”>Desk</Product>
</Catalog>
Hay:
Trang 28<Catalog>
<Product ProductID= ‘1’>Chair</Product>
<Product ProductID= ‘2’>Desk</Product>
</Catalog>
1.2.2 XML Elements (Các phần tử XML)
1.2.2.1 Định nghĩa
Một tài liệu XML chứa đựng những phần tử XML (XML elements)
Một phần tử XML được cấu tạo bởi 3 phần:
Start Tag
Data
End Tag Cặp thẻ bắt đầu và kết thúc sẽ mô tả dữ liệu bên trong, hay còn gọi là giá trị của phần tử
Ví dụ: Phần tử <Trường> </Trường> với giá trị Tôn Đức Thắng
Trang 29Một phần tử XML có thể chứa các phần tử khác, các phần tử cũng có thể có các thuộc tính
Trong ví dụ sau có element root: <bookstore>, bookstore có chứa các element
<book>, element <book> lại chứa các element: <title>, <author>, <year>, <price>
Element <book>có chứa thuộc tính là category
1.2.2.2 Nguyên tắc đặt tên cho những phần tử XML
XML phải tuân theo những nguyên tắc đặt tên như sau:
Tên có thể chứa chữ cái, số, hoặc các ký tự khác
Tên không thể bắt đầu với một số hoặc một ký tự là dấu chấm
Tên không thể bắt đầu với chữ xml (hoặc Xml, XML, …)
Trang 30 Tên không được chứa các ký tự rỗng
1.2.3 XML Attributes (các thuộc tính XML)
Tương tự như HTML, XML cũng có thể chứa các thuộc tính trong thẻ bắt đầu
và các thuộc tính này sẽ cung cấp thông tin bổ sung cho các phần tử
Một phần tử có thể có một hoặc nhiều thuộc tính, mổi thuộc tính là một cặp giá trị được ngăn cách bởi dấu “=”
tên-Thuộc tính giá trị luôn được kèm theo trong dấu ngoặc kép hoặc dấu ngoặc đơn
Ví dụ: <person sex = “female”> hoặc <person sex= ‘female’>
Nếu giá trị thuộc tính tự nó có chứa dấu ngoặc kép có thể sử dụng dấu ngoặc đơn
Ví dụ: <gangster name= ‘George “Shotgun” Ziegler’>
1.2.4 XML Document (tài liệu XML)
Tài liệu XML có cú pháp XML đúng khi nó tuân theo nguyên tắc ngôn ngữ XML
Một tài liệu XML đơn giản nhất là một phần tử XML, tuy vậy trên thực tế, một tài liệu XML thường bao gồm nhiều phần tử XML lồng ghép với nhau
Ví dụ: Một tài liệu XML đúng cú pháp sẽ được trình bày như sau:
<KhoaCNTT>
<Lớp LOP= “CNTT1”>
<giáo_viên>Dương Thu Trang</giáo_viên>
<lớp_trưởng>Lê Hòa Hiếu<lớp_trưởng>
</Lớp>
</KhoaCNTT>
Trang 311.2.5 Một tài liệu XML hợp lệ
Một tài liệu XML hợp khuôn dạng là yếu tố đầu tiên trong việc tạo lập ra một tài liệu XML, tức là mỗi tài liệu chỉ có một nút gốc, mỗi phần tử phải có thẻ mở và thẻ đóng, và phải lồng nhau chính xác, và cuối cùng là tên thuộc tính chỉ suất hiện một lần trong thẻ mở Nhưng một tài liệu XML hợp nguyên tắc không có nghĩa là nó hợp lệ Muốn kiểm tra sự hợp lệ của XML, ta phải dựa vào DTD (Document Type Definition)
và XML Schema, là 2 phương pháp trình bày dữ liệu
1.2.6 Document Type Definition (DTD): cung cấp cách kiểm tra hợp lệ của tài liệu
1.2.6.1 Định nghĩa
DTD là 1 trong 2 phương pháp trình bày dữ liệu trong tài liệu XML
Mục đích của một DTD là xác định cấu trúc của XML, tức là DTD xác định các phần tử có thể xuất hiện trong tài liệu, thứ tự chúng suất hiện, cách chúng được sắp xếp trong các phần tử khác, và các chi tiết cơ bản trong cấu trúc tài liệu XML
Dùng phần tử <!DOCTYPE> để tạo DTD và DTD xuất hiện trong phần tử đó Phần tử này có thể có nhiều dạng khác nhau:
<!DOCTYPE rootname [DTD]>
<!DOCTYPE rootname SYSTEM URI>
<!DOCTYPE rootname SYSTEM URI [DTD]>
<!DOCTYPE rootname PUBLIC identifier URI>
<!DOCTYPE rootname PUBLIC identifier URI [DTD]>
Với rootname: Tên phần tử gốc
Trang 32URI: Định danh của DTD bên ngoài tài liệu XML hiện thời trên không gian mạng internet
Ví dụ: Một DTD xác định cấu trúc cơ bản của văn bản địa chỉ:
<! address.dtd >
<?xml version = “1.0” encoding = “UTF-8” standalone = “yes”?>
<!DOCTYPE address [
<!ELEMENT address (name, street, city, state, postal-code)>
<!ELEMENT name (title? first-name, last-name)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT first-name (#PCDATA)>
<!ELEMENT last-name (#PCDATA)>
<!ELEMENT street (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT state (#PCDATA)>
<!ELEMENT postal-code (#PCDATA)>
]>
Trong ví dụ này, xác định 3 điều cơ bản:
Một phần tử <address> sẽ chứa một <name>, một <street>, một
<city>, một <state>, một <postal-code>, mỗi phần tử này phải xuất hiện và xuất hiện trong trật tự đó
Phần tử <name> chứa phần tử <title> tùy ý, sau nữa là phần tử
<first-name> và phần tử <last-name>
Trang 33 Tất cả các phần tử khác chứa chữ (PCDATA: dữ liệu ký tự đã
được kiểm tra ngữ pháp, không thể chứa phần tử khác trong phần
tử này
1.2.6.2 Xác định thuộc tính
Sử dụng DTD ta có thể:
Xác định những thuộc tính nào là bắt buộc
Xác định các giá trị mặc định cho thuộc tính
Lên danh sách tất cả các giá trị hợp lệ cho một thuộc tính đã cho Dùng từ khóa ATTLIST để lên danh sách các thuộc tính của phần tử
Ví dụ: như trên nhưng đổi <state> là thuộc tính của <city>
<!ELEMENT city (#PCDATA)>
<!ATTLIST city state CDATA #REQUIRED>
Trong Ví dụ:Tên city trong thuộc tính nhằm chỉ cho bộ kiểm ngữ thấy những thuộc tính này được xác định cho phần tử <city>, state là tên của thuộc tính, từ khóa CDATA và #REQUIRED chỉ cho bộ kiểm ngữ biết rằng thuộc tính state bao gồm chữ cái và bắt buộc phải có
Trang 34 Cuối cùng là do không viết theo định dạng XML nên DTD khó viết
và khó hiểu
Vì vậy việc dùng một DTD để kiểm tra sự hợp lệ của một tài liệu XML là không khả thi Chúng ta cần có một sự lựa chọn khác khả thi hơn đó là sử dụng lược đồ XML- XML Schema Definition (XSD)
1.2.7 Schema XML (Lược đồ XML)
1.2.7.1 Định nghĩa
Lược đồ XML (Schema) định nghĩa các phần tử xuất hiện trong tài liệu XML và các thuộc tính liên kết với các phần tử này Nó cũng định nghĩa cấu trúc của tài liệu (các mối liên quan cha-con của các phần tử trong tài liệu), thứ tự mà các phần tử con xuất hiện, và số lượng các phần tử con Nó đồng thời xác định xem một phần tử là rỗng hay chứa dữ liệu và định nghĩa các giá trị mặc định cho các thuộc tính
<xsd:element name="to" type="xsd:string"/>
<xsd:element name="from" type="xsd:string"/>
<xsd:element name="heading" type="xsd:string"/>
Trang 35<xsd:element name="body" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
1.2.7.2 Lợi ích của XML Schema so với DTD
Với các lược đồ XML, ta sẽ dễ dàng hơn trong việc xác định một tài liệu XML hợp lệ hay không Một số lợi ích vượt trội của nó so với các DTD:
Lược đồ XML sử dụng cú pháp XML Nói cách khác, một lược đồ
XML là một tài liệu XML Điều đó có nghĩa rằng ta có thể xử lý một lược đồ như các tài liệu khác Ví dụ, ta có thể soạn tài liệu kiểu XSLT để chuyển một lược đồ XML thành một dạng Web với các mã JavaScript được tạo ra tự động như ta đưa vào vậy
Lược đồ XML thích hợp các loại dữ liệu Các DTD thích hợp các loại
dữ liệu được phát triển từ xuất bản Lược đồ XML thì thích hợp với mọi loại dữ liệu gốc từ các DTD (như các ID và những thứ liên quan tới ID) Chúng cũng thích hợp với
số nguyên, số dấu phẩy động, ngày, thời gian, chuỗi, URL và các loại dữ liệu hữu ích khác cho việc xử lý và kiểm soát dữ liệu
Lược đồ XML mở rộng Ngoài các loại dữ liệu được xác định trong chi
tiết kĩ thuật của lược đồ XML, ta còn có thể tạo dữ liệu riêng, và từ những loại dữ liệu này suy ra các loại dữ liệu mới
Lược đồ XML có khả năng biểu đạt ấn tượng Ví dụ, với lược đồ
XML ta có thể xác định giá trị của bất cứ thuộc tính <state> nào không thể dài hơn 2
ký tự, hoặc giá trị của bất cứ phần tử <postal-code> nào cũng phải phù hợp với cách biểu đạt phổ biến [0-9]{5}(-[0-9]{4})? Ta không thể làm điều tương tự với các D
Trang 361.2.7.3 Xác định phần tử trong lược đồ
Lược đồ xác định số phần tử XML bằng phần tử <xsd:element>
Xác định tính liên tục của các phần tử trong phần tử cha: <xsd:sequence>
Lược đồ xác định một loại dữ liệu mới bằng phần tử <xsd:complexType>
Trong ví dụ trên, phần tử <note>chứa một phần tử <to>,một phần tử
<from>,một phần tử <heading>,một phần tử <body>, và các phần tử này nằm trong trật tự
Các phần tử <to>, <from>, <heading>, <body> đều chứa dữ liệu kiểu
ký tự: “xsd:string”
1.2.8 XML Parser (Bộ phân tích XML)
XML parser là các gói phần mềm được sử dụng như một phần kèm theo của ứng dụng Chúng là những bộ thư viện, các hàm, API,… hỗ trợ phân tích nội dung và trích xuất dữ liệu của XML khá đơn giản Dưới đây là các trình phân tích và thư viện thường dùng nhất:
XML for Java (XML4J): Thư viện phân tích tài liệu XML phát triển bởi IBM AlphaWorks Thư viện này rất nổi tiếng và được sử dụng rộng rãi
Microsoft XML Parser: Trình phân tích sử dụng bởi trình duyệt Internet Explorer cài đặt thông qua kiến trúc COM của Windows
Java Standard Extension for XML: Đây là gói thư viện dành cho Java xây dựng bởi SunMicrosystem
Python XML parser: Trình phân tích tài liệu XML dựa vào ngôn ngữ python cho Linux và Unix
Trang 37XML Parser thường tách dữ liệu XML thành từng mẫu nhỏ và khiến chúng có thể truy xuất được bởi mã lệnh của chương trình Một vài trình phân tích có chức năng kiểm tra khuôn dạng hoặc tính hợp lệ của tài liệu XML
Có 2 kỹ thuật chính (thực ra hiện nay chỉ có 2 kỹ thuật này), đó là DOM (còn được gọi lá Tree-based hay Object-based) và SAX (còn gọi là Event-based) Chúng tôi
sẽ trình bày kỹ hơn về 2 kỹ thuật này trong phần dưới Ngoài ra Microsoft còn cung cấp cho chúng ta 1 Parser là MSXML Đặc điểm chung của chúng là đều có thể dùng được thông qua javascript vì Microsoft đều cung cấp chúng dưới dạng ActiveXObject
1.2.9 XML DOM (XML Document Object Model)
Các XML DOM định nghĩa một cách tiêu chuẩn để truy cập và thao tác với các tài liệu XML bằng cách bộ kiểm ngữ sẽ đọc cả văn bản và xây dựng một cây trí nhớ, nhờ vậy các mã sẽ dùng giao diện DOM để thao tác trên cây này
DOM xem tài liệu XML như là một cấu trúc cây, tất cả các phần tử có thể được truy cập thông qua cây DOM Nội dung của tài liệu XML (dữ liệu và thuộc tính) đều
có thể được sửa đổi hoặc xóa và các phần tử mới có thể được tạo ra
Các phần tử, các thuộc tính, các dữ liệu trong tài liệu XML đều có thể được gọi
Ví dụ: XML mô tả thông tin về một quyển sách
<BOOK>
Trang 38<TITLE>A Suitable Boy</TITLE>
<PRICE currency="US Dollar">22.95</PRICE>
<TITLE> ở trên sẽ được viết lại thành:
<BookInfo:TITLE>A Suitable Boy</BookInfo:TITLE>
<AuthorInfo:TITLE>Mr.</AuthorInfo:TITLE>
Tên đứng trước dấu “:” hay còn gọi là tiền tố được tham chiếu tới một
namespace, hay một Universal Resource Identifier (URI) URI sẽ bảo đảm tính đơn
nhất khi kết hợp nhiều đoạn mã XML lại với nhau bằng cách gắn vào trước các phần tử
một tiền tố (một tên thu gọn thay cho tên namespace), tiền tố này là đơn nhất trong phạm vi văn bản đang xét Với hệ thống này, không thể xảy ra xung đột giữa tag và thuộc tính và hai tag chỉ có thể trùng tên với nhau hoàn toàn khi mà chúng bắt nguồn từ cùng một namespace và có cùng một tên tag như nhau Nó cho phép văn bản có thể chứa cả thông tin về sách và tác giả mà không sợ sự nhập nhằng về phần tử <TITLE>
Trang 39sẽ tham chiếu đến sách hay tác giả Nếu một chương trình muốn hiển thị tên của một cuốn sách, nó chỉ cần sử dụng object model để tìm phần tử <TITLE> trong namesapce BookInfo
Khai báo một namespace
Có 2 cách để khai báo một namespace:
Khai báo mặc định: Dùng từ khóa XMLns là từ khóa và được bộ kiểm ngữ hiểu như là một khai báo của namespace và giá trị của nó là một tham chiếu đến một URI
"urn:Finance:Money"
<bk:BOOK XMLns:bk="urn:BookLovers.org:BookInfo" XMLns:money="urn:Finance:Money">
Trang 40<bk:TITLE>A Suitable Boy</bk:TITLE>
<money:PRICE money:currency="US Dollar">22.95</money:PRICE>
</bk:BOOK>
Kiểu khai báo này hữu dụng khi mà một nút chứa các phần tử và thuộc tính nằm trên các namespace khác nhau
1.2.11 XML CDATA
1.2.11.1 PCDATA _Parsed Character Data (dữ liệu được phân tích)
Bộ kiểm ngữ XML (XML Parser) thường phân tích tất cả các văn bản trong tài liệu XML
Khi một phần tử XML được phân tích cú pháp thì các văn bản cũng được phân tích cú pháp
Ví dụ:
<message>Đây là văn bản sẽ được kiểm ngữ</message>
Khi những phần tử XML có chứa những phần tử khác thì bộ kiểm ngữ sẽ phá vỡ thành những phần tử phụ