Một mục tiêu chính của XML là 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 đang dẫn đến một loại biến chuyển cơ bản tương tự về 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. Trong bài đầu tiên của loạt bài này về lập trình bằng XML với DB2® của IBM®cho Linux® UNIX® và Windows®, bạn sẽ học những điều cơ bản về mô hình dữ liệu XML và những ưu điểm mà nó mang lại cho môi trường lập trình của bạn trên một mô hình đối tượng thuần túy.
22 trang |
Chia sẻ: haohao89 | Lượt xem: 1923 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Lập trình với XML cho DB2: 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 DOWNLOAD ở trên
Lập trình với XML cho DB2, Phần 1: Hiểu biết mô hình dữ liệu XML
Hardeep Singh, Kiến trúc sư các công nghệ nâng cao, IBM
Tóm tắt: Một mục tiêu chính của XML là 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 đang dẫn đến
một loại biến chuyển cơ bản tương tự về 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. Trong
bài đầu tiên của loạt bài này về lập trình bằng XML với DB2® của IBM®cho
Linux® UNIX® và Windows®, bạn sẽ học những điều cơ bản về mô hình dữ liệu
XML và những ưu điểm mà nó mang lại cho môi trường lập trình của bạn trên một
mô hình đối tượng thuần túy.
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.
Bài viết thứ tư tập hợp tất cả các công nghệ này lại với nhau và cho thấy
một ví dụ hoạt động đời sống thực.
Các vấn đề cơ bản về mô hình dữ liệu XML
Lưu ý:
Nếu dữ liệu của bạn đã theo định dạng XML, phần còn lại của quá trình này hoàn
toàn tự nhiên và cực kỳ đơn giản. Nếu dữ liệu của bạn theo định dạng quan hệ, bạn
vẫn có thể sử dụng phương pháp luận này, nhưng quá trình này đòi hỏi phải tạo
ánh xạ dữ liệu quan hệ hai chiều đến dữ liệu XML. Có thể đạt được bước này bằng
cách sử dụng các hàm SQL/XML để xuất bản và chia nhỏ. Hầu hết các cơ sở dữ
liệu quan hệ hỗ trợ các hàm này bên cạnh các công nghệ ánh xạ khác. Ánh xạ dữ
liệu quan hệ tới dữ liệu phân cấp (XML) có thể có vẻ không cần thiết với nhiều
nhà phát triển chỉ vì lợi ích sử dụng XML làm mô hình dữ liệu trong việc phát
triển ứng dụng của họ. Nhưng là các nhà phát triển, chúng ta thực hiện nó mọi lúc
khi chúng ta ánh xạ mối quan hệ đến các đối tượng dữ liệu. Những lợi thế của việc
sử dụng mô hình dữ liệu XML có thể là đủ hấp dẫn với nhiều nhà phát triển để
xem xét việc sử dụng nó trong việc phát triển ứng dụng của họ, ngay cả khi không
có nhu cầu về dữ liệu XML trong mô hình nghiệp vụ của họ.
Theo truyền thống, XML đã được sử dụng để định nghĩa siêu dữ liệu cho các tài
liệu nghiệp vụ. Mô hình đối tượng tài liệu (DOM) đã được sử dụng để xử lý siêu
dữ liệu này trong một ứng dụng. Nếu chúng ta nhìn vào DOM, chúng ta sẽ thấy nó
cung cấp một giao diện đối tượng theo cấu trúc dữ liệu XML phân cấp với các API
của DOM đang được sử dụng để xử lý hệ thống phân cấp này. Nói cách khác,
DOM có thể được sử dụng như một trình bao bọc (wrapper) đối tượng để xử lý bất
kỳ cấu trúc dữ liệu nào có thể được biểu diễn bằng XML.
Trong mô hình dữ liệu XML, bạn định nghĩa nhiều đối tượng dữ liệu ứng dụng
của mình như là XML. Vì XML có phân cấp, nên thật dễ nắm bắt được mối quan
hệ giữa đối tượng dữ liệu khác nhau trong một định dạng tự nhiên, dễ đọc với con
người.
Một khi đã định nghĩa mô hình dữ liệu XML, có thể khởi tạo nó trong ứng dụng
bằng cách sử dụng một trình phân tích cú pháp DOM. Để phân tách mã ứng dụng
với các API của DOM thường dùng để tìm vị trí và xử lý mô hình XML, bạn có
thể tạo ra một trình bao bọc xung quanh các lần triển khai thực hiện DOM và
XPath. Trình bao bọc này cũng làm cho mã của bạn cơ động hơn.
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).
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.
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 bọc để chứa đựng các dữ liệu khách hàng và đơn hàng, như trong
Liệt kê 1, Liệt kê 2 và Liệt kê 3.
Liệt kê 1. Tạo khách hàng
public class Customer
{
int customerid;
String firstname;
String lastname;
Items itemspurchased ;
Public Customer (int custid, Connection conn)
{
Statement dbstmt= conn.createStatement();
ResultSet dbResult = dbstmt.executeQuery("select fname, lname from
customer_table where customerid=custid");
customerid=custid;
SetFirstName(dbResult.getString(1));
SetLastName(dbResult.getString(2));
}
public String GetFirstName {return firstname;}
public Void SetFirstName (fname) {firstname=fname;}
public String GetLastName {return lastname ;}
public Void SetLastName (lname) {lastname=lname;}
public Items GetItemsList {return itemspurchased; }
public SetItemsList (list) { itemspurchased =list;}
}
Liệt kê 2. Tạo lớp các mặt hàng
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();
float price= tmpItem .GetPrice();
if(price >= min && price <=max)
{
retList.AddItem(tmpItem);
}
}
}
public Items FindItemByDate (purchaseDate) { }
}
Liệt kê 3. Tạo định nghĩa mặt hàng
public class Item
{
String id;
String description;
String purchaseDate;
Float price;
Public void SetID (String ItemID) {id= ItemID;}
Public void SetDescription (String desc) { description = desc;}
Public void SetpurchaseDate (String pDate) { purchaseDate = pDate ;}
Public void Setprice (float pprice { price = pprice ;}
Public String GetID (){return id;}
Public String GetDescription(){return description;}
Public float GetPrice(){return price;}
}
Bây giờ đối tượng dữ liệu có thể được sử dụng trong ứng dụng để quản lý dữ liệu
bên dưới.
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
Bây giờ nếu dữ liệu trong cơ sở dữ liệu đã được lưu trữ trong XML có:
Dữ liệu khách hàng được lưu trữ là <Customer customerid =""
firstname="" lastname="" />
Dữ liệu mặt hàng được lưu trữ là <Item ID="" description=""
purchaseDate="" price="" />
Thì với bất kỳ khách hàng cụ thể nào, tất cả mọi thứ mà chúng ta cần làm là nhận
dữ liệu XML khách hàng và chèn vào nó danh sách các mặt hàng được truy vấn.
Hãy viết lại mã ứng dụng để sử dụng mô hình XML để giữ thông tin khách hàng
và các mặt hàng. Để tạo ra và sử dụng một cá thể của mô hình dữ liệu XML này
chúng ta sẽ sử dụng lớp trình bao bọc DOM được gọi là XMLParse được đính
kèm trong phần Tải về.
Trường hợp 1 -- Dữ liệu được lưu trữ trong cơ sở dữ liệu như XML
Liệt kê 6. Viết lại ứng dụng để sử dụng mô hình XML
1. Statement dbstmt= conn.createStatement();
2. ResultSet dbResult = dbstmt.executeQuery("select custXML from
customer_table where customerid=custid");
3. XMLParse customerXML = new XMLParse(dbResult. getString(1));
4. customerXML.appendNode("/Customer", customerXML.createNode (""))
5. dbResult = dbstmt.executeQuery("select itemXML from purchase_table
where customerid=custid");
6. While (dbResult.rs.next ()) {
7. Node itemnode= customerXML.createNode (dbResult. getString(1));
8. customerXML.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 đư