4. Các giao diện lập trình XML

Không thể tìm thấy URL thông số tiện ích

Tổng quan: Các giao diện lập trình XML

Phần này khái quát một số vấn đề lập trình của XML. Những vấn đề này đều mang đến cho các nhà phát triển những giao diện thích hợp để làm việc với văn bản XML. Có nhiều API sẵn có; trong phần này chỉ bàn tới bốn API phổ biến và hữu ích nhất: đó là Mô hình đối tượng tài liệu (DOM), API Đơn giản cho XML (SAX), JDOM, và Java API cho Kiểm tra ngữ pháp XML (JAXP). (Bạn có thể tìm hiểu thêm về các API này qua các link trong Tài nguyên.)

DOM

Document Object Model, thường được gọi là DOM, xác định một loạt các vấn đề cho phiên bản kiểm tra ngữ pháp của một văn bản XML. Bộ kiểm ngữ sẽ đọc cả văn bản và xây dựng một cây trí nhớ, nhờ thế các mã sẽ dùng các giao diện DOM để thao tác trên cây này. Bạn có thể chuyển qua cây để xem nội dung trong văn bản gốc là gì, bạn có thể xóa các phần của cây, có thể sắp xếp lại cây, thêm các nhánh mới, v.v..

DOM do W3C tạo nên, và đó là một đề nghị chính thức của Liên minh.

Sản phẩm DOM

DOM cung cấp rất nhiều chức năng mà bạn có thể dùng để trình bày và xây dựng văn bản XML, tuy nhiên những chức năng này đều phải trả chi phí. Vì DOM gốc cho văn bản XML đang được phát triển, nên một số người trong danh sách chuyển thư XML-DEV thấy lo lắng về nó:

  • DOM xây dựng một cây lưu trữ của toàn văn bản. Nếu văn bản quá lớn, nó đòi hỏi một số lượng bộ nhớ rất lớn.
  • DOM tạo nên các chủ thể biểu đạt mọi thứ trong văn bản gốc, bao gồm các phần tử, từ ngữ, thuộc tính và những khoảng trống. Nếu bạn chỉ quan tâm tới một phần nhỏ trong văn bản, thì sẽ vô cùng lãng phí khi tạo nên mọi chủ thể mà không bao giờ được sử dụng.
  • Bộ kiểm ngữ DOM phải đọc toàn văn bản trước khi mã của bạn được kiểm soát. Đối với những văn bản quá lớn, điều này sẽ bị kéo dài đáng kể.

Đây chỉ là những vấn đề về thiết kế của DOM; dù sao, DOM API vẫn rất hữu ích khi kiểm ngữ văn bản XML.


API đơn giản cho XML

Xoay quanh các vấn đề về DOM, các thành viên XML-DEV (đứng đầu là David Megginson) đã tạo nên SAX. SAX có vài đặc điểm xác định rõ hơn các lo lắng về DOM:

  • Bộ kiểm ngữ SAX gửi các sự kiện đến mã của bạn. Bộ kiểm ngữ sẽ cho bạn biết khi nó tìm thấy bắt đầu, kết thúc của một phần tử, từ ngữ, bắt đầu và kết thúc của văn bản, v.v.. Bạn sẽ quyết định sự kiện nào là quan trọng, và bạn cũng sẽ quyết định tạo ra kết cấu dữ liệu nào để nắm giữ các dữ liệu từ các sự kiện đó. Nếu bạn không dứt khoát lưu dữ liệu từ một sự kiện, nó sẽ bị loại bỏ.
  • Một bộ kiểm ngữ SAX không tạo ra bất kỳ chủ thể nào, nó chỉ đơn giản gửi các sự kiện đến yêu cầu của bạn. Bạn muốn tạo ra các chủ thể dựa trên những sự kiện đó hay không là tùy ý bạn.
  • Bộ kiểm ngữ SAX bắt đầu gửi các sự kiện cho bạn ngay khi bắt đầu kiểm ngữ. Mã của bạn sẽ nhận được một sự kiện khi bộ kiểm ngữ tìm thấy nơi bắt đầu văn bản, một phần tử hay một đoạn từ ngữ, v.v.. Yêu cầu của bạn sẽ có kết quả ngay lập tức; bạn không cần phải chờ cho đến khi kiểm ngữ hết toàn bộ văn bản. Thậm chí, nếu bạn chỉ tìm thứ gì đó trong văn bản, mã của bạn sẽ ném ra một loại trừ khi nó tìm thấy cái nó đang tìm. Loại trừ này dừng bộ kiểm ngữ SAX lại, và mã sẽ làm cái nó cần làm với dữ liệu được tìm thấy.

Phải nói rằng những điều này, cả SAX và DOM đều có đặc điểm riêng. Phần còn lại của phần này sẽ bàn về tại sao bạn nên lựa chọn cách phân giới này hay cách phân giới kia.


Sản phẩm SAX

Để công bằng, bộ kiểm ngữ SAX cũng có những vấn đề gây lo lắng:

  • Các sự kiện SAX thường không chính thức. Khi bộ kiểm ngữ SAX tìm thấy đoạn văn trong văn bản XML, nó sẽ gửi sự kiện tới mã. Sự kiện này đơn giản chỉ là đoạn văn tìm được; nó không cho bạn biết phần tử nào chứa đoạn văn đó. Nếu bạn muốn biết điều đó, bạn buộc phải tự viết mã quản lý trạng thái.
  • Các sự kiện SAX thường không kéo dài. Nếu yêu cầu của bạn cần một kết cấu dữ liệu làm khuôn văn bản XML, bạn cũng phải tự viết mã. Nếu muốn vào dữ liệu từ một sự kiện SAX mà bạn không lưu dữ liệu đó trong mã, bạn sẽ phải kiểm ngữ lại văn bản lần nữa.
  • SAX không được điều khiển bằng một tổ chức điều hành trung tâm. Mặc dù điều này không gây ra vấn đề gì, nhưng một số nhà phát triển vẫn mong muốn SAX được điều khiển bởi một tổ chức như W3C.


JDOM

Bị vướng bởi một số khó khăn từ mô hình DOM và SAX, Jason Hunter và Brett McLaughlin đã tạo ra JDOM. JDOM được dựa trên công nghệ Java, mở ra dự án theo nguyên tắc 80/20: gửi đến 80% cái người sử dụng cần chỉ với 20% chức năng ở DOM và SAX. JDOM đều thích ứng với bộ kiểm ngữ của DOM và SAX, vì vậy nó được thực hiện như một bộ nhỏ của các lớp Java.

Đặc trưng chính của JDOM là nó có thể giảm phần lớn số mã mà bạn phải viết. Mặc dù bài giới thiệu này không bàn sâu về vấn đề lập trình, yêu cầu của JDOM chỉ bằng 1/3 yêu cầu của DOM và bằng ½ yêu cầu của SAX. (Thuần túy DOM tất nhiên sẽ là phương pháp tốt trong dài hạn.) JDOM không làm được tất cả, nhưng đối với hầu hết những gì bạn cần kiểm ngữ, nó chính là sự lựa chọn đúng đắn.


Java API cho Kiểm ngữ XML

Mặc dù DOM, SAX, và JDOM đều cung cấp những phân giới tiêu chuẩn cho hầu hết các nhiệm vụ thông thường, nhưng vẫn có một số thứ chúng đều chưa đạt tới. Ví dụ, quy trình tạo ra một chủ thể DOMParser (Kiểm ngữ DOM) trong lập trình Java khác xa so với một bộ kiểm ngữ DOM. Để điều chỉnh vấn đề này, Sun đã tạo ra JAXP, Java API cho Kiểm ngữ XML. API này cung cấp các mặt phân giới chung cho việc xử lý văn bản XML khi sử dụng DOM, SAX và XSLT.

JAXP cung cấp các giao diện như DocumentBuilderFactoryDocumentBuilder cung cấp một giao diện chuẩn để phân biệt các bộ kiểm ngữ. Cũng có các phương pháp cho phép bạn điều chỉnh bộ kiểm ngữ có nhận thức được không gian tên hay không và nó sử dụng một DTD hay một lược đồ để kiểm soát văn bản XML.


Giao diện nào là phù hợp với bạn?

Để xác định giao diện lập trình nào phù hợp với bạn, bạn cần phải hiểu về thiết kế của tất cả các giao diện đó, và bạn cũng phải nắm được yêu cầu xử lý văn bản của mình là gì. Xem xét các câu hỏi này sẽ giúp bạn tìm được hướng đi đúng.

  • Tại sao yêu cầu của bạn viết bằng Java? JAXP thích ứng với DOM, SAX và JDOM; nếu bạn đang viết mã bằng Java, bạn nên sử dụng JAXP để tách mã khỏi các chi tiết thực hiện của nhiều bộ kiểm mã khác nhau.
  • Ứng dụng của bạn sẽ được triển khai bằng cách nào? Nếu ứng dụng của bạn được triển khai như một applet Java, và bạn muốn tối giản lượng mã tải về, hãy nhớ rằng các bộ kiểm ngữ SAX nhỏ hơn rất nhiều so với các bộ kiểm ngữ DOM. Cũng nên nhớ rằng khi sử dụng JDOM yêu cầu một lượng mã nhỏ bổ sung vào bộ kiểm ngữ SAX hoặc DOM.
  • Khi bạn kiểm ngữ văn bản XML, bạn có cần phải truy cập dữ liệu đó nhiều lần? Nếu bạn cần quay lại phiên bản đã kiểm ngữ của tệp XML, DOM có thể là lựa chọn tối ưu. Khi một sự kiện SAX, tùy bạn (nhà phát triển) có thể lưu nó lại cho sau này. Nếu bạn cần truy cập vào một sự kiện bạn không lưu trữ, bạn sẽ phải kiểm ngữ tệp một lần nữa. Còn DOM thì lưu trữ tất cả các dữ liệu một cách tự động.
  • Bạn có cần vài thứ từ nguồn XML không? Nếu bạn chỉ cần cái gì đó từ bên ngoài nguồn XML, SAX có thể là lựa chọn đúng đắn. SAX không tạo ra các chủ thể cho từng thứ trong văn bản nguồn, bạn có thể quyết định cái gì là quan trọng. Với SAX, bạn có thể xem xét từng sự kiện có cần thiết không, và xử lý nó cho phù hợp. Thậm chí, khi bạn đã tìm được cái cần tìm, mã sẽ đưa ra một loại trừ dừng việc kiểm ngữ SAX hoàn toàn.
  • Có phải bạn đang làm việc với chiếc máy có bộ nhớ thấp? Nếu như thế, SAX sẽ là lựa chọn tốt nhất, cho dù bạn có đang cân nhắc các nhân tố khác.

Nhớ rằng các API XML tồn tại cho nhiều ngôn ngữ khác nhau, các nhóm Perl và Python đặc biệt đều có công cụ XML rất tốt.

4 của 7 | Trang trước | Trang sau

Comments