Tài liệu Lập trình với XML cho DB2 Phần 1: Hiểu biết mô hình dữ liệu XML potx - Pdf 10

Lập trình với XML cho DB2
Phần 1: Hiểu biết mô hình dữ liệu XML
Mở đầu
Một số trong những mục tiêu thiết kế cho XML như đã nêu trong các khuyến nghị w3 xem xét
khía cạnh phát triển ứng dụng của ngôn ngữ đó:
 "XML sẽ hỗ trợ một loạt các ứng dụng".
 "Thật dễ dàng viết các chương trình xử lý các tài liệu XML".
Trong khi đã tập trung rất nhiều vào các mục tiêu khác nhau xung quanh việc dễ đọc, việc tuần
tự hóa và vận chuyển, thì mục tiêu phát triển ứng dụng vẫn chưa tạo ra nhiều chú ý như vậy
Bài viết đầu tiên của một loạt bài này giới thiệu tác động mà XML đem lại cho phát triển ứng
dụng ở ba mức:
 Phần 1 trình bày trường hợp sử dụng XML trong việc phát triển ứng dụng với mục đích
làm cho quá trình phát triển ứng dụng đơn giản, rẻ tiền, cơ động và có chất lượng cao.
Việc lập trình XML sẽ dẫn đến một loại chuyển biến cơ bản tương tự về các mô hình phát
triển ứng dụng trong thập kỷ này như là các phương pháp luận đối tượng đã làm trong
thập kỷ qua.
 Phần 2 tập trung vào vai trò của cơ sở dữ liệu. Ở đây tập trung vào cả hai chức năng DB2
9 (tên mã ban đầu là Viper) và Viper 2. Bạn sẽ tìm hiểu:
o Làm thế nào để môi trường lưu trữ và truy vấn XML mới chạy trong mô hình dữ
liệu XML của tầng ứng dụng.
o Một khi bạn sửa lại kiến trúc phát triển ứng dụng dựa trên XML mới, làm thế nào
để các lược đồ cơ sở dữ liệu của bạn trở nên đơn giản hơn và tự nhiên hơn.
o Làm thế nào để truy vấn dữ liệu XML trong cơ sở dữ liệu không khác so với truy
vấn dữ liệu trong ứng dụng.
o Cuối cùng, làm thế nào để kết hợp dữ liệu quan hệ với dữ liệu XML để có được
mọi thứ tốt nhất của cả hai thế giới ấy.
 Phần 3 tập trung vào máy khách, đưa vào bức tranh các công nghệ XML được sử dụng
trong các trình duyệt Web và máy chủ Web: Ajax, XSLT, SVG, Comet, các nguồn cung
cấp và các ứng dụng kết hợp. Bạn sẽ tìm hiểu làm thế nào để các nguồn cung cấp và các
dịch vụ Web được tạo ra trong cơ sở dữ liệu, được truy vấn và được kết hợp trong tầng
ứng dụng và sau đó được trình bày trong các trình duyệt của máy khách.

Tôi đã kèm theo một trình bao bọc Java làm ví dụ cho bài viết này để bạn có thể sử dụng như là
ví dụ hoặc là một khuôn mẫu cho trình bao bọc riêng của bạn. Logic nghiệp vụ của ứng dụng này
trực tiếp sử dụng mô hình XML bằng cách dùng các API của trình bao bọc. Có thể dễ dàng tuần
tự hóa và chuyển dữ liệu XML đã sửa đổi giữa đối tượng khác nhau hoặc giữa các tầng khác
nhau trong một môi trường nhiều tầng (SOA).
Về đầu trang
Mô hình dữ liệu XML so với mô hình đối tượng dữ liệu
Hầu hết các ứng dụng bao gồm các đối tượng nghiệp vụ sử dụng các hệ thống phân cấp của các
đối tượng dữ liệu. Các đối tượng dữ liệu nói chung là các lớp bao gói mỏng xung quanh dữ liệu
nghiệp vụ. Lý do tồn tại chính của chúng là để trưng ra dữ liệu được chứa đựng cho các đối
tượng nghiệp vụ theo một cách có kiểm soát. Lợi ích khác của việc dùng các trình bao bọc đối
tượng là chúng có thể trình bày dữ liệu được lưu trữ trong các bảng quan hệ theo một hệ thống
phân cấp đối tượng tự nhiên để nắm bắt mối quan hệ giữa dữ liệu. Một phần quan trọng của nỗ
lực mã hóa được dành để tạo các trình bao bọc đối tượng này xung quanh dữ liệu nghiệp vụ của
các ứng dụng.
Do XML vốn đã duy trì mối quan hệ giữa các cấu trúc dữ liệu, nên yêu cầu để tạo ra một hệ
thống phân cấp đối tượng riêng biệt để nắm bắt mối quan hệ giữa các cấu trúc dữ liệu riêng biệt
là không thích hợp. Bên cạnh đó, XML đã có một mô hình đối tượng chuẩn được gọi là DOM
(Mô hình đối tượng tài liệu). Các bước triển khai thực hiện mô hình này xử lý việc dựng, sửa đổi
và tuần tự hóa dữ liệu XML. Nhờ sử dụng khôn ngoan ngôn ngữ XPath kết hợp với các API của
DOM, thì việc tải, chỉnh sửa và lưu dữ liệu XML trong một ứng dụng nghiệp vụ chỉ là một công
việc tầm thường.
Về đầu trang
Một ví dụ hiển nhiên
Để hiểu rõ hơn về những khác biệt trong hai mô hình, chúng ta hãy xem mỗi mô hình tác động
như thế nào đến việc thiết kế và việc triển khai thực hiện ứng dụng.
Khi sử dụng mã ví dụ, tôi sẽ minh họa hai cách tiếp cận bằng cách sử dụng một kịch bản đơn
giản xử lý thông tin về khách hàng và thông tin về đơn hàng.
Mô hình đối tượng dữ liệu
Trong cách tiếp cận mô hình đối tượng dữ liệu, trước tiên bạn cần tạo các đối tượng trình bao

public class Items
{
Hashtable list=new Hashtable();

Public Items(int custid,Connection conn)
{
Statement dbstmt= conn.createStatement();
ResultSet dbResult = dbstmt.executeQuery("select itemid, description,
price, date from purchase_table where customerid=custid")
While (dbResult.rs.next ())
{
tempitem = new Item();
tempitem.SetID(dbResult. getString(1));
tempitem. SetDescription (dbResult. getString(2));
tempitem. Setprice (dbResult. getFloat(3));
tempitem. SetpurchaseDate (dbResult. getString(4));
Additem (tempitem);

}
}

public void AddItem (item oneitem) {list.put(oneitem.GetID(),oneitem);}
public Item GetItem (ItemID) {return list.get(String itemID);}
public Hashtable GetItems(){return list;}
public Items FindItemByPrice (flaot min, float max)
{
Items retList=new Items();
for (Enumeration e=list.elements () ; e.hasMoreElements() ; )
{
item tmpItem=(item)e.nextElement();

Liệt kê 4. Sử dụng các đối tượng dữ liệu trong ứng dụng

Customer customer = new Customer (custid,dbConnection)
customer.SetItemList (new Items(custid , dbConnection)) ;
Items list=customer.GetItemsList(). FindItemByPrice(15.0,25.50);
for (Enumeration e=list.elements () ; e.hasMoreElements() ; )
{
System.out.println(((item)e.nextElement()).GetDescription());
}

Trong ví dụ trên chúng ta thấy rằng mã dùng cho các đối tượng dữ liệu là theo hàm mũ nhiều
hơn so với mã cần dùng cho logic nghiệp vụ. Cũng do các đối tượng trình bao bọc che đi các mối
quan hệ giữa dữ liệu nghiệp vụ bên dưới, nên điều cần thiết nhất là các API đối tượng của trình
bao bọc có đầy đủ các tài liệu cần thiết giúp cho các nhà phát triển ứng dụng hiểu cách sử dụng
đúng chúng.
Sự chuyển hướng đơn giản giữa các hệ thống phân cấp đối tượng luôn có sẵn trong mô hình đối
tượng dữ liệu, nhưng các khả năng tìm kiếm và chuyển hướng nâng cao phải được triển khai
thực hiện đối với từng tiêu chuẩn tìm kiếm (ví dụ, FindItemByPrice).
Mô hình dữ liệu XML
Vì lý do chính để có các đối tượng trình bao bọc là để chứa dữ liệu nghiệp vụ, nên có thể thay
thế chúng bằng một mô hình dữ liệu XML.

Liệt kê 5. Mô hình dữ liệu XML
<Customer customerid ="" firstname="" lastname="" >
<Items>
<Item ID="" description="" purchaseDate="" price="" />
</Items>
</Customer>

Bây giờ nếu dữ liệu trong cơ sở dữ liệu đã được lưu trữ trong XML có:

}

Truy vấn đầu tiên (dòng 2) trả về dữ liệu XML vào cột custXML cho khách hàng cụ thể. Chuỗi
ký tự XML này được chuyển vào hàm tạo (constructor) của DOM wrapper (dòng 3), lần lượt sử
dụng trình phân tích cú pháp XML để khởi tạo một hệ thống phân cấp đối tượng biểu hiện dữ
liệu XML.
Lưu ý : Do XML khách hàng không có bất kỳ phần tử các mặt hàng nào trong nó (như lược đồ
XML mà chúng ta đã định nghĩa trong mô hình đã dự kiến), chúng ta tạo ra các mặt hàng của
phần tử mới (dòng 4) và thêm nó làm một phần tử con trong phần tử Customer (Khách hàng).
Kết quả của truy vấn thứ hai (dòng 5) lấy một danh sách các mặt hàng (định dạng XML) mà
khách hàng đã mua từ cơ sở dữ liệu. Mỗi mặt hàng trong danh sách (dòng 7) được nối (dòng 8)
đến hệ thống phân cấp các đối tượng DOM trong đường dẫn Customer/items.
Cuối cùng, tìm kiếm hệ thống phân cấp đối tượng DOM bằng cách sử dụng XPath cho tất cả các
mặt hàng trong phạm vi giá đã cho (dòng 9) và mô tả từng mặt hàng đã tìm kiếm (dòng 10) được
in ra.
Trường hợp 2 Tất cả dữ liệu đã lưu trữ trong cơ sở dữ liệu theo dữ liệu quan hệ
Do không lưu trữ dữ liệu theo XML, nên chúng ta sẽ cần thực hiện phép chuyển đổi bên trong
truy vấn bằng cách sử dụng các hàm xuất bản SQL/XML.

Liệt kê 7. Chuyển đổi bằng cách sử dụng các hàm xuất bản SQL/XML
1. Statement dbstmt= conn.createStatement();
2. ResultSet dbResult = dbstmt.executeQuery("select xmlelement( name
\"Customer\" ,
xmlattributes(customerid as \"customerid\" ),
xmlattributes(fname as \"firstname\" ),
xmlattributes(lname as \"lastname\" )
) from customer_table where customerid=custid");

3. XMLParse customerXML = new XMLParse(dbResult. getString(1));


 Thêm các lỗi.
 Chu kỳ phát triển ứng dụng dài hơn.
 Mã cứng nhắc và ít cơ động hơn.
 Sự cần thiết để sửa đổi hoặc tái tạo hệ thống phân cấp đối tượng khi có bất kỳ các thay
đổi nào trong lược đồ dữ liệu.
 Mã khó bảo trì hơn.
 Không xác nhận hợp lệ dữ liệu có sẵn.
 Cần nhiều tài liệu hơn để giải thích các đối tượng trình bao bọc.
 Cần triển khai thực hiện logic khá phức tạp cho các khả năng như tìm kiếm và chuyển
hướng nâng cao trong hệ thống phân cấp đối tượng.
 Xử lý tuần tự hóa dữ liệu theo từng đối tượng nghiệp vụ.
 Ứng dụng được gắn cho công cụ này nếu các công cụ đang được sử dụng để thực hiện
ánh xạ.
Sử dụng phương pháp luận lập trình XML, toàn bộ hệ thống phân cấp của các đối tượng trình
bao bọc có thể bị loại bỏ, để cho lập trình viên tập trung vào logic nghiệp vụ hơn là tập trung vào
cấu trúc dữ liệu nghiệp vụ. XML mang lại những lợi thế lập trình sau đây:
 Mã được rút gọn chuyển dịch theo hướng chất lượng tốt hơn, chi phí thấp hơn và linh
hoạt hơn.
 Nó khuyến khích phát triển RAD.
 Các khả năng tìm kiếm và chuyển hướng nâng cao đã được xây dựng trong trình phân
tích cú pháp XPath.
 Các việc kiểm tra bắt buộc và xác nhận hợp lệ lược đồ đã được xây dựng thành mô hình
XML.
 Tính bền vững được xây dựng thành mô hình. Bất cứ lúc nào cũng có thể sinh ra hệ thống
phân cấp dữ liệu XML theo một tệp, chuỗi hoặc luồng
 Không cần các công cụ bổ sung
 Phương pháp luận này cho thấy nhiều mối quan hệ và hệ thống phân cấp dữ liệu cho
logic nghiệp vụ. Trong mã đối tượng nghiệp vụ, rất khó để hiểu được định dạng của cấu
trúc dữ liệu nghiệp vụ đang được sử dụng (có nghĩa là, mô hình dữ liệu được che đi từ mã
nghiệp vụ). Trong thế giới quan hệ điều này là cần thiết; trong thế giới XML nó có thể là

bao bọc sử dụng XPath để chuyển hướng DOM, nên bất kỳ các sửa đổi lược đồ nào đang ảnh
hưởng tới mã ứng dụng sẽ chỉ yêu cầu các thay đổi với chuỗi ký tự XPath bị ảnh hưởng trong các
cuộc gọi API đến các trình bao bọc từ ứng dụng. Cũng do XPath cho biết vị trí của nút XML
(đang được sử dụng) trong hệ thống phân cấp nên khả năng dễ đọc mã ứng dụng là rất cao.
Về đầu trang
Kết luận
Các ứng dụng nghiệp vụ chủ yếu tập trung vào việc tạo ra, sử dụng, lưu trữ và trình bày dữ liệu
nghiệp vụ. Việc bao bọc đối tượng dữ liệu được đặt xung quanh dữ liệu nghiệp vụ để làm cho
các logic nghiệp vụ dễ dàng xử lý việc này hơn. Các trình bao bọc đối tượng dữ liệu này rất tốn
kém khi tạo ra và bảo trì và chuyển trọng tâm của ứng dụng từ miền logic nghiệp vụ đến logic xử
lý dữ liệu.
Khi sử dụng mô hình dữ liệu XML, có thể loại bỏ toàn bộ hệ thống phân cấp của các trình bao
bọc đối tượng dữ liệu, để cho các lập trình tập trung vào logic nghiệp vụ hơn là vào việc quản lý
dữ liệu nghiệp vụ. Bằng cách sử dụng một trình bao bọc DOM, mã ứng dụng được phân cách
khỏi API của DOM. Việc sử dụng XPath để chuyển hướng làm cho mã ứng dụng dễ hiểu hơn
nhờ minh họa các mối quan hệ trong dữ liệu nghiệp vụ đang được sử dụng.
Lý tưởng là dữ liệu nên được duy trì như dữ liệu XML thuần trong cơ sở dữ liệu, nhưng ngay cả
khi dữ liệu được lưu trữ trong các bảng quan hệ, thì lần đầu tiên chuyển đổi nó sang XML để sử
dụng trong ứng dụng vẫn có thể có ý nghĩa trong nhiều trường hợp.
Nếu có thể định dạng các cấu trúc dữ liệu được bao bọc bên trong một hệ thống phân cấp đối
tượng bằng cách sử dụng XML và nếu mục đích chính của hệ thống phân cấp đối tượng là để sử
dụng và trưng ra các cấu trúc dữ liệu này cho logic nghiệp vụ, thì một DOM có thể thay thế cho
hệ thống phân cấp đối tượng của trình bao bọc.
Trong phần 2 của loạt bài này, bạn sẽ tìm hiểu cách sửa đổi kiến trúc ứng dụng XML cho các
ứng dụng DB2 của bạn.


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status