Thứ Tư, 29 tháng 5, 2013

Tìm hiểu về cấu trúc DOM và SAX trong XML

Bài viết này sẽ trình bày các mô hình khác nhau để xem 1 tài liệu như mô hình tuyến tính, mô hình cây và mô hình đối tượng. Đồng thời bài viết cũng giới thiệu khái niệm phân tích XML và các kỹ thuật tiêu biểu là DOM vàSAX.

           I.      Các dạng mô hình:

Dữ liệu trong XML có thể được phân tích dựa trên nhiều mô hình khác nhau. Có 3 mô hình chính dùng để phân tích dữ liệu trong XML:

Ø       Mô hình tuyến tính (Linear): theo mô hình này dữ liệu được duyệt theo dạng đường thẳng, mô hình chỉ phù hợp với các dạng dữ liệu tĩnh không có sự thay đổi. Ví dụ như ta muốn tìm thông tin trong 1 cuốn sách trong thư viện chúng ta bắt đầu từ chủ đề của sách, đến tên sách, đến trang thứ mấy của sách và dòng thứ mấy. Tuy nhiên nếu cuốn sách đó được tái bản hay chuyển sang dạng khác thì mô hình này không còn thích hợp

Ø       Mô hình cây (Tree Model): như chúng ta đã biết XML có dạng cấu trúc phân cấp vì thế chúng ta có thể biểu diễn dữ liệu trong XML theo cấu trúc cây. Cấu trúc này có ưu điểm là chúng ta có thể xác định được các mối quan hệ giữa các phần tử với nhau. Ví dụ về mô hình này:

XML:

 


Cấu trúc cây:

 


Ø       Mô hình đối tượng: Mô hình đối tượng XML là tập hợp các đối tượng dùng để truy xuất và thao tác với các dữ liệu trong XML. Trong mô hình này dữ liệu cũng được tổ chức thành dạng cấu trúc cây cùng với các nút. Các đối tượng có nhiều thuộc tính và phương thức để chúng ta có thể quét cấu trúc cây XML và các phần tử trong cây.

      II.      Parsers:

1. Khái niệm:

Parser là 1 gói phần mềm, 1 thư viện hay 1 công cụ dùng để trước hết phân tích dữ liệu trong file XML và sau đó chuyển đổi dữ liệu này thành dạng dữ liệu mà các phần mềm khác có thể sử dụng được.

 


2. Các kỹ thuật phân tích: có 2 kỹ thuật phân tích dữ liệu XML

Ø       Phân tích dựa trên sự kiện: theo kỹ thuật này dữ liệu trong XML sẽ được đọc tuần tự từ trên xuống. Mỗi lần đọc 1 phần của dữ liệu sẽ được đưa vào phân tích ví dụ như 1 elementSimple APIfor XML (SAX) và Streaming API for XML (StAX) được xây dựng trên kỹ thuật này

Ø       Phân tích dựa trên đối tượng: theo kỹ thuật này dữ liệu trong XML sẽ được đọc và phân tích trên bộ nhớ theo sơ đồ cây XMLDocument Object Model (DOM) được xây dựng theo kỹ thuật này.

Ø       Cả 3 kỹ thuật SAXStAX và DOM đều có ưu nhược điểm khác nhau, do đó việc chọn lựa là tùy theo tình huống

DOM:













Ưu điểm



Nhược điểm


ü       Dễ dàng sử dụngü       Dễ dàng quét các phần tử trong XMLü       Có thể truy xuất ngẫu nhiênü       Việc phân tích chỉ làm 1 lầnü       Tốn bộ nhớ


SAX, StAX:













Ưu điểm



Nhược điểm


ü       Ít tốn bộ nhớ, StAX dễ làm hơn SAXü       Không có công cụ để quét các phần tử trong XMLü       Không thể truy xuất ngẫu nhiênü       Không hỗ trợ namespace, không thể thêm sửa xóa XML


Difference between DOM and SAX XML Parser


 
Here are few high level differences between DOM parser and SAX Parser in Java:

 
1) DOM parser loads whole xml document in memory while SAX only loads small part of XML file in memory.

 
2) DOM parser is faster than SAX because it access whole XML document in memory.

 
3) SAX parser in Java is better suitable for large XML file than DOM Parser because it doesn't require much memory.

 
4) DOM parser works on Document Object Model while SAX is an event based xml parser.

III.      Giới thiệu về DOM:

1. Khái niệm:

Document Object Model là một phương pháp tiếp cận dữ liệu từ XML, trong đó tất cả các thành phần củaXML như thẻthuộc tínhtext… đều được xem như là các đối tượng. Dựa vào các đối tượng này mà chúng ta có thể trích xuất thông tin, thay đổi thông tin hay truy vấn thông tin dựa vào các hàm mà đối tượng cung cấp.

W3C DOM là tiêu chuẩn mà W3School giới thiệu. Tiêu chuẩn này không phụ thuộc vào hệ điều hành hay ngôn ngữ lập trình. W3C DOM được chia làm 3 phần: Core DOM là tập hợp các đối tượng dùng cho cấu trúc 1 văn bản; XML DOM là tập hợp các đối tượng dùng cho cấu trúc 1 văn bản XML; HTML DOM là tập hợp các đối tượng dùng cho cấu trúc 1 văn bản HTML.

2. Các đối tượng trong DOM:

Tất cả các thành phần trong XML đều được xem như là 1 “node”. Trong đó root là document node, các thẻ là element node, thuộc tính là attribute node, text là text node, ghi chú là comment node….

Khi parser đọc XML thành đối tượng DOM trên bộ nhớ chúng ta sẽ có 1 cấu trúc cây với các đối tượng là cácnode và trên cấu trúc này chúng ta sẽ thấy mối quan hệ phân tầng giữa các node. Trên cùng là thẻ root (document node) từ node này chúng ta có thẻ rẻ nhánh đến các tầng thấp hơn của cấu trúc cây cho đến khi chúng ta chạm tới text node là tầng thấp nhất của cấu trúc này.

Mối quan hệ giữa các node được mô tả bằng thuật ngữ “parent” và “child” (cha và con). Thuật ngữ “leafnode” dùng để chỉ các node không có child node. Chúng ta có ví dụ sau mô tả việc chuyển đổi từ XML sang DOM:

Ø       File XML:

 


Ø       Cấu trúc DOM đọc từ file XML trên

Do DOM là tiêu chuẩn của W3School không phụ thuộc vào ngôn ngữ lập trình do đó tất cả các ngôn ngữ lập trình đều có thể dùng tiêu chuẩn này để đọc dữ liệu từ XML. Trong phạm vi bài này tôi chỉ giới thiệu khái niệm về DOM, còn ứng dụng ngôn ngữ lập trình để dùng DOM truy xuất nội dung XML tôi sẽ giới thiệu ở bài sau.

    IV.      Giới thiệu về SAX:

Simple API for XML (SAX) là một phương pháp phân tích dữ liệu XML dựa vào sự kiện trong quá trình đọc file XML từ trên xuống dưới. Như vậy để dùng phương pháp này các ngôn ngữ lập trình cần định nghĩa ra cácsự kiện và các hàm tương ứng với từng sự kiện. Khi đó người lập trình sẽ viết class dựa trên các hàm mà ngôn ngữ lập trình cung cấp và dùng class này để phân tích dữ liệu XML. Trong quá trình phân tích, khi gặp sự kiện nào parser sẽ gọi các đoạn code trong hàm tương ứng sự kiện để thực thi. Ví dụ như trong Java, khi parser gặp sự kiện mở thẻ, parser sẽ gọi lại các đoạn code trong hàm “startElement” để thi hành

 


Một điểm cần lưu ý rằng SAX không ghi nhớ XML như một cấu trúc cây trên bộ nhớ. SAX chỉ xây dựng cấu trúc của nhiệm vụ đang thi hành trên bộ nhớ do đó SAX sẽ thực hiện nhanh hơn và ít tốn tài nguyên hơ

0 nhận xét:

Đăng nhận xét