Thực thi DOM được tiến hành trong bộ nhớ lưu trữ của tài liệu. Các lợi ích thu được khi sử dụng DOM:
- Cho phép truy cập ngẫu nhiên đến các thành phần trong tài liệu.
- Có thể thực hiện thao tác tìm kiếm phức tạp trong tài liệu một cách dễ dàng.
35 - Có thể đọc và viết trên tài liệu.
II.2. Phân tích XML bằng SAX:
SAX được coi là một API đơn giản để cho XML, SAX thực hiện dựa trên hai giao diện chính:
- Giao diện XMLReader để thể hiện bộ phân tích.
- Giao diện ContenHandler để nhận các dữ liệu từ bộ phân tích.
II.2.1. SAX là gì?
SAX là một API đơn giản của XML và được đưa ra vào cuối năm 1997 và đầu năm 1998 bởi Peter Murray-Rust. SAX được thiết kế dựa trên chiều hướng các giao diện trừu tượng hơn là các lớp hiện thực vì thế nó được thể hiện dưới dạng các tầng trên của các bộ phân tích đã có thông qua API.
Khi sử dụng SAX có thể thực hiện trên nhiều phiên bản bộ phân tích với các kiến trúc khác nhau.
II.2.2. Các bước sử dụng SAX:
Có ba bước sử dụng SAX trong ứng dụng: 1. Tạo mô hình đối tượng.
2. Tạo ra bộ phân tích SAX tương ứng. 3. Tạo ra tài liệu mô tả tương ứng.
II.2.3.Trường hợp lựa chọn bộ phân tích SAX:
Khi tiến hành xử lý và phân tích trên tài liệu XML lớn thì việc sử dụng bộ phân tích SAX đạt hiệu quả cao hơn so với việc sử dụng DOM. Khi sử dụng bộ phân tích SAX có một số lợi ích sau:
- Phân tích trên mọi tài liệu có kích cỡ khác nhau. - Tự xây dựng cấu trúc tài liệu theo mong muốn.
- Chỉ phải truy cập đến một tập nhỏ của thông tin khi cần thiết. - Thực hiện xử lý nhanh.
So với giao diện dựa trên đối tượng (DOM), SAX có một số khác biệt sau:
- Xử lý ở mức thấp hơn so với các giao diện dựa trên đối tượng. - Cho phép thực hiện nhiều thao tác hơn.
- Thực hiện hiệu quả hơn so với giao diện dựa trên đối tượng.
- Yêu cầu thực hiện nhiều công việc hơn so với giao diện dựa trên đối tượng.
II.2.4. Phân tích bằng SAX:
Phân tích là công việc tiến hành đọc tài liệu XML và báo cáo lại các nội dung chứa trong tài liệu đó cho các ứng dụng Client trong khi kiểm tra xem tài liệu có hợp khuôn dạng hay không.
Khi thực hiện phân tích XML, các sự kiện không được liên kết đến các hành động mà các thành phần trong tài liệu XML sẽ được đọc. Khi đó có các sự kiện sau được thực hiện:
- Các thẻ mở của thành phần. - Các thẻ đóng của thành phần.
- Nội dung chứa bên trong của thành phần. - Các thực thể.
- Các lỗi xẩy ra khi thực hiện phân tích.
Trong SAX các sự kiện được định nghĩa như là các phương thức để xác định các giao tiếp Java, SAX gồm có một số giao diện chính sau:
- DocumentHandler: định nghĩa các sự kiện liên quan đến tài liệu, ví dụ như mở và đóng. Hầu hết các ứng dụng để hỗ trợ các sự kiện cơ bản này.
37
- DTDHandler: định nghĩa các sự kiện liên quan đến DTD. - EntityResolver: định nghĩa các sự kiện làm việc với thực thể.
- ErrorHandler: định nghĩa các sự kiện để kiểm soát lỗi có thể xảy
ra.
SAX mô tả các bộ phân tích như là các trạng thái của giao diện XMLReader. Khi đó có các lớp đặc biệt để thực thi các giao diện khác nhau này để thực hiện trên các bộ phân tích và mỗi khi bộ phân tích nhận dạng được một thành phần mới trong tài liệu thì ngay lập tức sinh ra sự kiện mới mô tả tương ứng.
II.2.5. Các giao diện Callback:
SAX sử dụng các mẫu thiết kế Observer để nói với các ứng dụng
Client xem nội dung của tài liệu làm việc là cái gì. Và các bộ phát triển Java có hầu hết các mẫu này từ các kiến trúc của AWT và Swing. Khi đó, các thành lập trình viên Client thực thi giao diện như là MouseListener để
nhận các sự kiện thông qua các phương thức đã có. Sau đó các lập trình tiến hành đăng ký đối tượng MouseListener với thành phần dưới dạng một Button bằng cách sử dụng phương thức SetMouseListener(). Và sau đó
khi người sử dụng di chuyển hoặc kích chuột trong vùng của các nút để cho phép đăng ký đối tượng MouseListener.
Khi bộ phân tích đọc đến thành phần nào của tài liệu thì thực hiện gọi đến các phương thức tương ứng. Ví dụ: Khi bộ phân tích đọc được thẻ bắt đầu thì gọi điến phương thức startElement(), khi bộ phân tích tiến hành
đọc một số nội dung chứa trong đó thi gọi thông qua phương thức
Character(), cuối cùng khi bộ phân tích gặp phải thẻ kết thúc của tài liệu
thì gọi đến phương thức endElement(). Khi bộ phân tích đọc câu lệnh chỉ
dung của tài liệu bao gồm: tên thẻ, các thuộc tính của thể và các tham số sẽ được đưa vào tương ứng dưới dạng các tham số của phương thức.
II.2.6. Nhận tài liệu:
Một cách tổng quát, một XMLReader có thể phân tích nhiều tài liệu và thực hiện các thao tác đó trong cùng một contentHandler. Tuy nhiên,
vấn đề quan trọng ở đây là phải xác định được tài liệu nào được xử lý cuối cùng và tài liệu nào được xử lý đầu tiên. Để quản lý thông tin này, bộ phân tích sẽ bao gồm phương thức startDocument() để thực hiện bắt đầu việc
phân tích một tài liệu mới trước khi thực hiện bất kỳ phương thức nào trong ContentHandler. Cuối cùng tiến hành gọi đến phương thức
endDocument() sau khi kết thúc việc phân tích tài liệu.
II.2.7. Nhận các thành phần tài liệu:
Trong khi tiến hành phân tích tài liệu XML, công việc chính của SAX là báo các thẻ kết quả chứ không phải các thành phần. Khi bộ phân tích nhận được thẻ bắt đầu nó sẽ gọi đến phương thức startElement() và tương tự khi nhận được thẻ kết thúc thì phương thức endElement() sẽ được gọi
đến, còn trong trường hợp khi gặp các thẻ rỗng thì cả hai phương thức
startElement() và endElement() đều đồng loạt được gọi đến. Nếu thể kết
thúc không tương ứng phù hợp với thẻ bắt đầu thì bộ phân tích sẽ chuyển đến dòng SAXParserException để kiếm soát lỗi xảy ra.
II.3. Kết luận:
Phân tích XML là kỹ thuật để kiểm tra xem tài liệu XML được xây dựng đã hợp lệ và đúng chưa. Để phân tích XML có thể sử dụng: DOM,SAX,…
Trong chương này trình bày các khái niệm và các giao diện cơ bản trong DOM và SAX để hỗ trợ cho việc thực hiện phân tích tài liệu XML đã
39 có. Sự khác nhau cơ bản giữa hai mô hình phân tích này là: Mô hình DOM thực hiện phân tích tài liệu dưới dạng sơ đồ cây và ngược lại mô hình SAX thực hiện phân tích tài liệu thành các giao diện đối tượng cơ bản.
CHƯƠNG III: CHUYỂN ĐỔI GIŨA XML VÀ MÔ HÌNH DỮ LIỆU
Thông thường trong hiện tại, cơ sở dữ liệu quan hệ thường được dùng để lưu trữ dữ liệu là chính.Tuy nhiên, hiện nay khi XML đã được nghiên cứu và sử dụng mạnh mẽ như là một xu hướng công nghệ của Internet vì thế mà các công ty để lưu trữ dữ liệu họ có thể dùng XML. Công việc chuyển đổi các cơ sở dữ liệu quan hệ sang các tài liệu XML bảo đảm các ràng buộc là yêu cầu tất yếu.
Hình III. 1: Sơ đồ chuyển đổi giữa tài liệu XML và cơ sở dữ liệu quan hệ
III.1. Chuyển đổi CSDL quan hệ sang tài liệu XML:[3]
Hiện có nhiều thuật toán khác nhau để chuyển đổi từ lược đồ cơ sở dữ liệu về lược đồ XML, trong đó có hai thuật toán: NeT và CoT.
- NeT: tạo ra một cấu trúc lồng từ một mô hình quan hệ phẳng bằng cách thực hiện lặp đi lặp lại tóan tử lồng nest trên mỗi bảng cho đến khi lược đồ kết quả XML trở nên phân cấp.
- CoT: xem xét cả cấu trúc của lược đồ quan hệ và các ràng buộc ngữ nghĩa như các phụ thuộc bao hàm. Nó nhận đầu vào là một lược đồ quan hệ trong đó có nhiều bảng liên kết với nhau thông qua quan hệ bao gồm và chuyển đổi thành một sơ đồ tốt.
41 Giả sử có tập T^ - tất cả các tên bảng, một tập C^ - tên các trường và tập b^ - các kiểu dữ liệu cơ bản được định nghĩa trong SQL chuẩn. Để mô tả tên cột cC^ sẽ được xác định bởi tên bảng tT^ trong dấu [].
Định nghĩa 3.1: Lược đồ quan hệ
Một lược đồ quan hệ được biểu diễn bằng một bộ bốn thành phần R=(T,C,P,) trong đó:
- T là tập hữu hạn các tên bảng trong T^, TT^.
- C là môt hàm từ một tên bảng tT sang tập hợp các tên cột cC^. - P là một hàm từ tên trường c sang định nghĩa kiểu của nó.
Ví dụ P(c)=, trong đó là một bộ năm thành phần (x,u,n,d,f) với xb^, u có thể là “v” (duy nhất) hoặc “v” (không duy nhất), n là ? (có thể rỗng) hoặc là “?” (không rỗng), d là tập hữu hạn miền các giá trị xác định của c hoặc nếu không xác định, và f là giá trị mặc định của c hoặc nếu không xác định.
- là một tập hữu hạn các ràng buộc quan hệ toàn vẹn hoặc nhận được trực tiếp từ CSDL hoặc được cung cấp bởi các chuyên gia.
Ví dụ 3.1: Xét hai bảng Student(Sname, Course, Advisor) và bảng Professor(Pname, Office) trong đó các trường gạch chân là các trường khoá của bảng tương ứng và Course là khoá ngoại tham chiếu đến trường Pname. Trường Office có thể lưu giá trị Null và giá trị mặc định cho Advisor là “GS Smtith”. Một sinh viên có thể được hướng dẫn bởi nhiều giáo sư và có thể không tham gia hoặc tham gia nhiều khóa học.
Dữ liệu và lược đồ quan hệ tương ứng được mô tả như sau: Các lược đồ quan hệ:
C(Student)={Sname, Advisor, Course, Mark} C(Professor)={Pname, Office} P(Sname)={string, v, ?, , “GS Smith”} P(Cource)={string, v, ?, , } P(Pname)= string, v, ?, , } P(Office)={integer, v, ?, , } } , Pr , } ,
{{SnameCource Student Pname ofessor Advisor Pname
key key Các bảng trong T: Bảng Student
Sname Cource Advisor
Hang Multimedia GS Han
Hang Logic GS Tan
Hang Database System GS Huy
Hung Data mining GS Tan
Hung Distributed Databasse GS Han
Tuan Multimedia GS Han
Tuan Networking GS Dai
Bảng Professor Pnam Office GS Han 800 GS Tan 700 GS Huy 500 GS Dai 400 Định nghĩa 3.2: (Xscheme)
Một Xscheme được biểu diễn bởi một bộ sáu X=(E,A,M,P,r,), trong đó: - E là tập hữu hạn tên các phần tử trong E^ - tập tên các phần tử.
43
- A là một hàm từ tên một phần tử eE sang tập các tên các thuộc tinh aA^ - tập tên các thuộc tính.
- M là một hàm từ tên một phần tử eE sang định nghĩa kiểu phần tử của nó.
Ví dụ,
M(e)= với là một biểu thức thông thường: ::=; x; +; , ; ?; *; +
với biểu diễn phần tử trống, xx^, và “+” thể hiện phép hợp, “.” thể hiện phép nối, “?” thể hiện sự không xảy ra hoặc xảy ra một lần, “*” biểu diễn sự xảy ra nhiều lần, “+” biểu diễn “,*”.
- P là một hàm tử tên một thuộc tính a sang định nghĩa kiểu thuộc tính của nó. Ví dụ, P(a)= trong đó là một bộ bốn (x,n,d,f) với x x^, n hoặc là “?” hoặc là “?”, d là tập hữu hạn các miền giá trị xác định của a hoặc nếu không xác định, và f là giá trị mặc định của a hoặc nếu không xác định.
- rE là một tập hữu hạn các phần tử gốc.
- là một tập hữu hạn các ràng buộc toàn vẹn cho mô hình XML.
Mô hình XML sử dụng hai khối cấu trúc cơ bản để xây dựng các tài liệu XML- thuộc tính và phần tử. Một vài đặc tính cơ bản kế thừa từ mô hình XML bao gồm:
1. Các thuộc tính của nút không được sắp xếp, trong khi các phần tử con thì luôn có trật tự.
2. Cả hai kiểu dữ liệu hỗ trợ đều được đặc tả trong chuẩn W3C. 3. Các phần tử có thể biểu diễn nhiều sự kiện tốt hơn các thuộc tính. Đó là các khả năng chi tiết của mô hình XML tuy nhiên nó còn biến đổi tuỳ thuộc vào lựa chọn ngôn ngữ lược đồ XML. Trong chuyển đổi từ R sang
X có thể sử dụng các thuộc tính hoặc phần tử của X để mô tả các thực thể tương tự trong R.
Để tăng tính mềm dẻo của thuật toán có thể thực hiện theo hai cách: hướng thuộc tính hoặc hướng phần tử. Tuỳ theo cách mà một thuật toán có thể được lựa chọn để chuyển đổi một thực thể trong mô hình quan hệ R thành một thuộc tính hoặc phần tử nếu cả hai đạt được thực thể một cách đúng đắn.