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

Một số trong những mục tiêu thiết kế cho XML như đã nêu trong các khuyến nghị

w3xem 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àytrong các trình duyệt của máy khách.

pdf22 trang | Chuyên mục: XML | Chia sẻ: dkS00TYs | Lượt xem: 2232 | Lượt tải: 2download
Tóm tắt nội dung Lập trình với XML cho DB2, Phần 1: Hiểu biết mô hình dữ liệu XML, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ustomerXML.appendNode(itemnode ,"/Customer/Items",false); 
} 
9. customerXML.find("/Customer/Items/item[@price>15.0 and @price <25.5]",true); 
10. for(int i=0;i < customerXML.currentFind.getLength();i++) { 
11. System.out.println(customerXML.getValue("@description",i)); 
} 
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)); 
5. dbResult = dbstmt.executeQuery("select xmlelement( name \"items\" , 
xmlelement( name \"item\" , 
xmlattributes(itemid as \"id\" ), 
xmlattributes(description as \"description\" ), 
xmlattributes(price as \"price\" ), 
xmlattributes(date as \"purchaseDate\" ) 
) 
) from purchase_table where customerid=custid"); 
6. if (dbResult.rs.next ()) { 
7. Node itemsnode= customerXML.createNode (dbResult. getString(1)); 
8. customerXML.appendNode(itemsnode ,"/Customer",false); 
} 
9. customerXML.find("/Customer/Items/item[@price>15.0 and @price <25.5]",true); 
10. for(int i=0;i < customerXML.currentFind.getLength();i++) { 
11. System.out.println(customerXML.getValue("@description",i)); 
} 
Vì vậy, mặc dù chúng ta không có dữ liệu XML trong cơ sở dữ liệu, chúng ta đã 
sử dụng SQL để tạo ra một khung nhìn XML cho dữ liệu quan hệ với ứng dụng 
của chúng ta. Ngoài ra, chúng ta đã thêm phần tử các mặt hàng bên ngoài cùng lúc 
khi chúng ta đang tạo ra dữ liệu XML các mặt hàng trong truy vấn. Bây giờ tất cả 
mọi thứ mà chúng ta cần làm là thêm XML các mặt hàng vào XML khách hàng. 
Phần còn lại của ứng dụng vẫn giữ nguyên. 
Các lợi ích của việc sử dụng một mô hình XML trên một mô hình đối tượng thuần 
túy 
Các trình bao bọc đối tượng dữ liệu tạo nên một phần chính của mã ứng dụng, mà 
thực ra đang chuyển trọng tâm từ logic nghiệp vụ đến việc quản lý các đối tượng 
dữ liệu. Bên cạnh đó, mã bổ sung thêm này thực hiện: 
 Thêm chi phí. 
 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à một hạn chế. 
 Mã logic nghiệp vụ dễ đọc vì XPath mô tả tính chất chính xác của dữ liệu 
và mối quan hệ của nó với cấu trúc nghiệp vụ.. 
Các vấn đề và các giải pháp thích ứng với mô hình XML 
Dữ liệu quan hệ phải được ánh xạ tới dữ liệu XML nếu nó không được lưu trữ như 
vậy. Quá trình ánh xạ rất nặng nề, mặc dù hầu hết các nhà cung cấp cơ sở dữ liệu 
quan hệ đều cung cấp các công cụ cho nó. Tuy nhiên, với việc giới thiệu về các 
khả năng của XML thuần túy trong các máy chủ cơ sở dữ liệu như DB2 và 
Microsoft® SQL Server, yêu cầu ánh xạ và chia nhỏ dữ liệu XML vào các bảng 
quan hệ để lưu trữ không còn cần thiết nữa. Khi sử dụng các chỉ mục XML và 
XQuery, bây giờ có thể tìm kiếm dữ liệu XML đã lưu này và lấy ra chúng nguyên 
vẹn trong ứng dụng, theo cùng cách mà bạn muốn lấy một đối tượng ký tự lớn từ 
cơ sở dữ liệu. 
Đối với dữ liệu đã lưu là XML thuần túy trong cơ sở dữ liệu, có một yêu cầu hiểu 
rõ cách sử dụng các hàm SQL/XML và XQuery để truy vấn XML. Nhờ ngay từ 
đầu tập trung vào các tìm kiếm XPath đơn giản hơn là sử dụng các XQuery phức 
tạp, nên có thể làm giảm những khó khăn khi chuyển đổi sang các truy vấn XML. 
Đường cong học tập để hiểu biết và trở nên thành thạo với việc sử dụng các API 
của DOM và các bước triển khai thực hiện của chúng có thể là một vấn đề, cũng 
như để trở nên thành thạo trong việc chuyển hướng và tìm kiếm hệ thống phân cấp 
XML bằng cách sử dụng XPath. Hãy sử dụng lớp trình trợ giúp kèm theo bài viết 
này để giảm yêu cầu gọi trực tiếp các API của DOM. Lớp trình trợ giúp chứa các 
API của DOM và đưa ra các API tự nhiên hơn có thể được gọi từ mã ứng dụng. 
Nó có tất cả các chức năng cần thiết được yêu cầu để khởi tạo và tuần tự hóa một 
mô hình XML và để tìm kiếm và sửa đổi dữ liệu hay siêu dữ liệu trong cá thể 
XML. Lớp trình bao bọc cũng xử lý các phép biến đổi XSL, các vùng tên và xác 
nhận hợp lệ lược đồ nếu cần. 
Trực tiếp nhúng các cuộc gọi API của DOM trong logic nghiệp vụ của ứng dụng 
là không hiệu quả do bất kỳ các thay đổi nào trong lược đồ XML sẽ đòi hỏi các 
thay đổi sâu rộng trong mã ứng dụng. Sử dụng nhiều các cuộc gọi API để chuyển 
hướng hệ thống phân cấp; điều này làm giảm tính dễ đọc của mã. Đối tượng dữ 
liệu đang được chuyển hướng hoặc được sửa đổi là không rõ ràng khi chúng sẽ đi 
cùng với một trình bao bọc đối tượng do người dùng định nghĩa. Lớp trình bao bọc 
loại bỏ yêu cầu nhúng các cuộc gọi API của DOM trong logic nghiệp vụ. Do lớp 
trình 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. 
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. 
Mục lục 
 Mở đầu 
 Các vấn đề cơ bản về mô hình dữ liệu XML 
 Mô hình dữ liệu XML so với mô hình đối tượng dữ liệu 
 Một ví dụ hiển nhiên 
 Các lợi ích của việc sử dụng một mô hình XML trên một mô hình đối 
tượng thuần túy 
 Các vấn đề và các giải pháp thích ứng với mô hình XML 
 Kết luận 

File đính kèm:

  • pdfLập trình với XML cho DB2, Phần 1 Hiểu biết mô hình dữ liệu XML.pdf
Tài liệu liên quan