text:
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:
- 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.
- 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.
- 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.
- 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
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
<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ó:
- 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 ("<Items/>")) 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 đượ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.
Tải về
Tài nguyên
Học tập
- Trang công nghệ DB2 pureXML™: Tìm hiểu thêm về sự hỗ trợ XML của DB2.
- ISV thành công với DB2 Viper (developerWorks, 03.2006): Tìm hiểu về các thay đổi sản phẩm DB2 9 là đáng kể nhất với các ISV và cách chúng có thể ảnh hưởng đến mã và các kịch bản lệnh của ứng dụng cơ sở dữ liệu hiện có.
- Khai hỏa Máy lai (DB2 Magazine, 07.2005): Tìm hiểu các chi tiết về các khả năng XML nguyên gốc của DB2.
- Có gì mới trong Viper của DB2 (developerworks, 02.2006): Tìm hiểu cách DB2 9 mô tả chi tiết hành trình kiến trúc từ các phiên bản trước.
- Hãy khởi đầu nhanh chóng với DB2 Viper (developerWorks, 03.2006): Bắt đầu bằng nắm vững các tính năng XML của DB2 9.
- Truy vấn dữ liệu DB2 XML với SQL (developerWorks, 03.2006): Tìm hiểu các vấn đề cơ bản về truy vấn dữ liệu DB2 với SQL.
- Truy vấn dữ liệu XML của DB2 bằng XQuery (developerWorks, 04.2006): Tìm hiểu các vấn đề cơ bản về truy vấn dữ liệu DB2 bằng XQuery.
- Từ DAD đến phân tách lược đồ XML có chú thích (developerWorks, 04.2006): Bắt đầu với phân tách lược đồ XML.
- Ánh xạ mặc định với lược đồ XML có chú thích (developerWorks, 04.2006): Tìm hiểu các vấn đề cơ bản về phân tách lược đồ XML có chú thích.
- Sử dụng XML nguyên gốc của DB2 với PHP (developerWorks, 11.2005): Bài viết này giới thiệu các khái niệm cơ bản của pureXML.
- Hỗ trợ XML nguyên gốc trong DB2 Universal Database: So sánh và đối chiếu để nêu bật sự hỗ trợ XML mới của DB2 so với công nghệ cơ sở dữ liệu quan hệ truyền thống.
- Các khuyến nghị W3C về Ngôn ngữ đánh dấu mở rộng (XML): Trang Web này là tài nguyên về nguồn gốc và các mục đích của XML.
- Truy cập vào trang tài nguyên developerWorks về DB2 cho Linux, UNIX và Windows để đọc các bài viết và các hướng dẫn và kết nối đến các tài nguyên khác để mở rộng các kỹ năng DB2 của bạn.
- Tìm hiểu về DB2 Express-C, bản miễn phí của Ấn bản Express của DB2 cho cộng đồng.
Lấy sản phẩm và công nghệ
- Tải về phiên bản dùng thử miễn phí của DB2 Enterprise 9.
- Bây giờ bạn có thể sử dụng DB2 miễn phí. Tải về DB2 Express-C, một bản miễn phí của ấn bản Express của DB2 cho cộng đồng, cung cấp các tính năng dữ liệu cốt lõi tương tự như ấn bản Express của DB2 và cung cấp một cơ sở vững chắc để xây dựng và triển khai ứng dụng.
Bình luận
-
Vùng dữ liệu trên developerWorks
Khám phá các bài viết xoay quanh lĩnh vực dữ liệu, Quản lý hệ thống thông tin
-
Vùng mã nguồn mở trên developerWorks
Xem các bài viết về HTML, CSS, JavaScript,...
-
Điện toán đám mây
Tìm hiểu về điện toán đám mây

markdown:
## 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](http://www.w3.org/TR/REC-xml/) 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:
- 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.
- 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.
- 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.
- 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
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](#download) 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
<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ó:
- 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ề](#download).
### 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 ("<Items/>")) 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](#download) để 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](http://www.ibm.com/developerworks/vn/views/data/libraryview.jsp ?search_by=Lập+trình+với+XML+cho+DB2), 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.
## Tải về
|Mô tả||Tên||Kích thước|
|DOM and XPath wrapper class for java|
## Tài nguyên
### Học tập
[Trang công nghệ DB2 pureXML™](http://www.ibm.com/software/data/db2/xml/): Tìm hiểu thêm về sự hỗ trợ XML của DB2. [ISV thành công với DB2 Viper](http://www.ibm.com/developerworks/db2/library/techarticle/dm-0603ford/?S_TACT=105AGY75)(developerWorks, 03.2006): Tìm hiểu về các thay đổi sản phẩm DB2 9 là đáng kể nhất với các ISV và cách chúng có thể ảnh hưởng đến mã và các kịch bản lệnh của ứng dụng cơ sở dữ liệu hiện có. [Khai hỏa Máy lai](http://www.db2mag.com/story/showArticle.jhtml?articleID=167100937)( *DB2 Magazine*, 07.2005): Tìm hiểu các chi tiết về các khả năng XML nguyên gốc của DB2. [Có gì mới trong Viper của DB2](http://www.ibm.com/developerworks/db2/library/techarticle/dm-0602saracco/?S_TACT=105AGY75)(developerworks, 02.2006): Tìm hiểu cách DB2 9 mô tả chi tiết hành trình kiến trúc từ các phiên bản trước. [Hãy khởi đầu nhanh chóng với DB2 Viper](http://www.ibm.com/developerworks/db2/library/techarticle/dm-0603saracco/?S_TACT=105AGY75)(developerWorks, 03.2006): Bắt đầu bằng nắm vững các tính năng XML của DB2 9. [Truy vấn dữ liệu DB2 XML với SQL](http://www.ibm.com/developerworks/db2/library/techarticle/dm-0603saracco2/?S_TACT=105AGY75)(developerWorks, 03.2006): Tìm hiểu các vấn đề cơ bản về truy vấn dữ liệu DB2 với SQL. [Truy vấn dữ liệu XML của DB2 bằng XQuery](http://www.ibm.com/developerworks/db2/library/techarticle/dm-0604saracco/?S_TACT=105AGY75)(developerWorks, 04.2006): Tìm hiểu các vấn đề cơ bản về truy vấn dữ liệu DB2 bằng XQuery. [Từ DAD đến phân tách lược đồ XML có chú thích](http://www.ibm.com/developerworks/db2/library/techarticle/dm-0604pradhan/?S_TACT=105AGY75)(developerWorks, 04.2006): Bắt đầu với phân tách lược đồ XML. [Ánh xạ mặc định với lược đồ XML có chú thích](http://www.ibm.com/developerworks/db2/library/techarticle/dm-0604pradhan2/?S_TACT=105AGY75)(developerWorks, 04.2006): Tìm hiểu các vấn đề cơ bản về phân tách lược đồ XML có chú thích. [Sử dụng XML nguyên gốc của DB2 với PHP](http://www.ibm.com/developerworks/db2/library/techarticle/dm-0511singh/?S_TACT=105AGY75)(developerWorks, 11.2005): Bài viết này giới thiệu các khái niệm cơ bản của pureXML. [Hỗ trợ XML nguyên gốc trong DB2 Universal Database](http://www.vldb2005.org/program/paper/thu/p1164-nicola.pdf): So sánh và đối chiếu để nêu bật sự hỗ trợ XML mới của DB2 so với công nghệ cơ sở dữ liệu quan hệ truyền thống. [Các khuyến nghị W3C về Ngôn ngữ đánh dấu mở rộng (XML)](http://www.w3.org/TR/REC-xml/): Trang Web này là tài nguyên về nguồn gốc và các mục đích của XML.
- Truy cập vào
[trang tài nguyên developerWorks về DB2 cho Linux, UNIX và Windows](http://www.ibm.com/developerworks/db2/zones/db2udb?S_TACT=105AGY75)để đọc các bài viết và các hướng dẫn và kết nối đến các tài nguyên khác để mở rộng các kỹ năng DB2 của bạn.
- Tìm hiểu về
[DB2 Express-C](http://www.ibm.com/software/data/db2/udb/db2express/), bản miễn phí của Ấn bản Express của DB2 cho cộng đồng.
### Lấy sản phẩm và công nghệ
- Tải về phiên bản
dùng thử miễn phí của
[DB2 Enterprise 9](http://www.ibm.com/developerworks/downloads/im/udb/index.html?S_TACT=105AGY75&S_CMP=art).
- Bây giờ bạn có
thể sử dụng DB2 miễn phí. Tải về
[DB2 Express-C](http://www.ibm.com/developerworks/downloads/im/udbexp/index.html?S_TACT=105AGY75&S_CMP=art), một bản miễn phí của ấn bản Express của DB2 cho cộng đồng, cung cấp các tính năng dữ liệu cốt lõi tương tự như ấn bản Express của DB2 và cung cấp một cơ sở vững chắc để xây dựng và triển khai ứng dụng.
## Bình luận
[Vùng dữ liệu trên developerWorks](http://www.ibm.com/developerworks/vn/views/data/libraryview.jsp)
Khám phá các bài viết xoay quanh lĩnh vực dữ liệu, Quản lý hệ thống thông tin
[Vùng mã nguồn mở trên developerWorks](http://www.ibm.com/developerworks/vn/views/opensource/libraryview.jsp)
Xem các bài viết về HTML, CSS, JavaScript,...
[Điện toán đám mây](http://www.ibm.com/developerworks/vn/views/cloud/libraryview.jsp)
Tìm hiểu về điện toán đám mây

Content-Language: en-US

Kp-eeAlive: timeout=10, max=98


text:
Showbiz Việt thì chỉ có gương soi là hiếm có và mắc tiềnThứ Hai, 24/09/2012, 10:37 GMT+7
Mỗi ngày chúng ta đều soi mình trong gương bởi mong muốn hình ảnh của mình hoàn hảo hơn khi xuất hiện. Quả thực hình thức không quyết định tất cả nên người đời có câu nói tốt gỗ hơn tốt nước sơn. Nhìn vào thực tế đang diễn ra tron giới showbiz Việt thật khó để tìm ra 1 chiếc gương để chỉ rõ tất cả những gì đang diễn ra trong đó đâu là thực đâu là hư.. Phải có những thứ phụ kiện liên quan khác thì mới làm sáng tỏ bộ mặt thật ẩn chứa sau ánh rèm hào quang kia.
Để tất cả những thành viên trong đó cùng soi vào gương, thì sẽ ra sao?
Người ta nói, khi đến nhà người lạ, muốn biết con gái người ta có xinh đẹp hay không chỉ cần để ý xem nhà đó có nhiều... gương hay không? Thường thì người càng đẹp, lại càng muốn tự ngắm nhìn mình mỗi ngày. Ngắm để thấy mình đẹp ở đâu để tôn lên, xấu ở đâu để che đi. Vậy nên, với một ngôi nhà có người đẹp, tấm gương quan trọng lắm.
Thế nhưng, chuyện lạ là có một “ngôi nhà” toàn là người đẹp (hoặc những người cho mình là đẹp), toàn là người sang trọng nhưng lại gần như không có một cái gương nào. Ngôi nhà mà người ta nhìn vào với ánh mắt ngưỡng mộ, thèm muốn, xuýt xoa có tên là Showbiz ấy, lại thiếu đi cái cơ bản nhất cần có của ngôi-nhà-của-những-người-đẹp.
Nhiều người nói showbiz bây giờ như cái chợ, tôi lại thấy nó giống ngôi nhà không có nóc nhiều hơn. Người ta vẫn thường dùng từ “nhà không nóc” để nói một gia đình thiếu “tôn ti trật tự”, cha mẹ không dạy được con, con cái hỗn hào, không nghe lời cha mẹ. Showbiz bây giờ, liệu có khác là mấy?
Nhiều khi tôi cứ nghĩ, nếu showbiz có một tấm gương thật lớn, để tất cả những thành viên trong đó cùng soi vào, thì sẽ ra sao?
Mùi thơm hay mùi thối dù có bay lòng vòng rồi vẫn là “cả nhà ngửi cùng nhau”
Nếu showbiz có gương, người ta hẳn đã biết mình là ai, đang ở đâu? Để khi đó người đi sau biết nghe lời người đi trước, để dù người đi trước có lỡ nói sai người ta cũng phản kháng một cách nhẹ nhàng, có học với tinh thần cầu thị và chia sẻ.
Nếu showbiz có gương, người ta hẳn đã biết mình là ai, đang ở đâu? Lúc đó chắc sẽ không có chuyện những bậc tiền bối ăn cơm lâu năm trong showbiz than vãn rằng “showbiz không có tình người” còn đàn em chỉ là con rối trên sân khấu. Showbiz tưởng lớn nhưng hóa ra lại rất nhỏ, mùi thơm hay mùi thối dù có bay lòng vòng rồi vẫn là “cả nhà ngửi cùng nhau”.
Nếu showbiz có gương, người ta hẳn đã biết mình là ai, đang ở đâu? Khi đó hẳn sẽ không còn chuyện chị em trong nhà vạch áo nhau ra, để người khác cười “lưng em mày đầy sẹo”. Để anh, chị, em showbiz không phải như cái thằng Chí Phèo chửi khắp làng Vũ Đại, nhưng ai cũng nghĩ “nó chừa mình ra".
Nếu showbiz có gương, người ta hẳn đã biết mình là ai, đang ở đâu? Lúc đó sẽ không có chuyện ông này đứng lên tố ông kia là “con buôn”, là thế này, là thế nọ... Ông kia tố lại: “Thế ông không là con buôn à? Ông không thế này à, không không thế nọ à?” và cả “nhà” showbiz đều tự hỏi: “Rốt cuộc đứa nào chẳng là con buôn?”.
Nếu showbiz có gương, người ta hẳn đã biết mình là ai, đang ở đâu? Và lúc đó chắc sẽ không có chuyện đàn chị phải “đóng vai ác” để chỉ dạy đàn em phép lịch sự tối thiểu, phải biết kính trên nhường dưới, khi hát phải biết tôn trọng người khác, không tranh giành. Và cả “nhà” showbiz đều tự hào: “Bộ giáo dục đang sử dụng tiền thuế của chúng ta có ích.”
Nếu showbiz có gương, người ta hẳn đã biết mình là ai, đang ở đâu? Khi đó người ta hẳn sẽ biết đâu là chuyên môn tốt nhất của mình. Nhà sản xuất, đạo diễn, ca sĩ, thí sinh... sẽ không cùng nhau chuyển sang làm... kịch sĩ. Showbiz khi đó sẽ không phải là cái sân khấu mà sở thú phải chở cả ngàn con... cá sấu tới để lấy nước mắt cho kịch sĩ diễn bi kịch, trong khi khán giả tưởng cá sấu được mang đến để làm đạo cụ... tấu hài.
Nếu showbiz có gương, vài người sẽ phản đối rằng: “Tôi soi gương mỗi ngày đấy chứ?”. Khổ nỗi, showbiz quá rộng lớn, rộng hơn cả tấm gương soi nên người ta chỉ thấy mỗi bản thân mà không nhận thấy cả showbiz phản chiếu trong đó. Lúc đó chắc là lỗi thuộc về showbiz rồi, ai kêu rộng lớn và phức tạp quá mà chi?
Nếu showbiz có gương, khi đó tôi hẳn cũng “soi xấu” mình mỗi ngày. Bởi khi bạn nhận xét về ai đó, chính là lúc bạn đang vẽ chân dung của chính mình. Nhưng mà tôi khác à nha, tôi biết mình xấu nên khi soi gương tôi đều... đeo mặt nạ. Bây giờ mặt nạ thiếu gì đâu? Muốn đẹp cỡ Hà Hồ, nam tính như Bình Minh cũng có. Mà thích “ngây thơ trong sáng” như Bảo Anh, “chuẩn men” như Cao Thái Sơn, “mạnh mẽ thẳng thắn” như Đàm Vĩnh Hưng hay “hiền ngoan” như Ngọc Trinh cũng đều có hết...Đấy là cách của MC Phan Anh đang nhìn và học trong giới showbiz đấy ạ.
“Tôi soi gương mỗi ngày đấy chứ?”
Gì chứ showbiz thì chỉ có gương soi là hiếm có và mắc tiền thôi, chứ rẻ nhất và sẵn có nhất là mặt nạ còn gì?
Quả thực khi đứng ở góc độ 1 MC làm chương trình truyền hình thực tế có quá nhiều bão nhiều sạn như The Voice thì Phan Anh hiểu rất rõ những thực hư ẩn giấu trong đó. Chẳng trách gì sau những mưa khen tới tấp của người cầm cân nảy mực thì ở vòng liveshow khán giả thấy những nét thật giả đã hiện ra. Tìm đâu ra 1 chiếc gương để soi rõ nhất chân thực nhất nhỉ? Khi mà những điều người ta cần thấy đã bị che lấp đi?
Xin kết thúc bài viết nhỏ này bằng 1 câu chuyện như sau: Hai vợ chồng có 1 đứa con nhỏ và họ đã li dị. Mỗi lần đi chơi với bố hoặc mẹ thì cả hai người cũng dặn con chung 1 câu đại khái rằng : “Con không được nói lại với ba (mẹ) là mẹ (ba) đi với ai nhé”.
Thế là đứa trẻ về nói lại với hai người rằng: Sao người lớn toàn nói dối nhau thế?
Đấy là 1 góc gương bé tí và nó cũng giống như trong giới showbiz chẳng thể nào soi hết ngóc ngách của nó xem ai xài hàng hiệu ai không, ai nói thực ai nói dối …
Tags: showbiz, scandal, Phan Anh, gương soi, The Voice, chuyện của người nghệ sĩ, người mẫu, hàng hiệu, scandal, bộ mặt thật của showbiz, cạnh tranh trong showbiz
Nhãn: Ca sĩ, Congso sưu tầm
CongSo.com / Showbiz
Read more: http://congso.com/showbiz-viet-thi-chi-co-guong-soi-la-hiem-co-va-mac-tien-4065
- 24/09/2012 16:01 - Sửng sốt với giọng hát của cậu nhóc đường phố khi …
- 24/09/2012 16:01 - Ngon lạ với món chè ốc
- 24/09/2012 16:01 - 7 việc kinh doanh tại gia
- 24/09/2012 16:01 - Ông bầu Hoàng Vũ kể chuyện về 9 người tình
- 24/09/2012 16:01 - 'Vampire Prosecutor':phim ma cà rồng Hàn Quốc hấp …
- 24/09/2012 08:01 - Sao Việt nói chuyện trinh tiết
- 23/09/2012 20:01 - 'Xin mọi người bao dung vì hoa hậu chỉ là người bì…
- 23/09/2012 16:11 - Nghề bất lương và chiêu trò của 'Chí phèo' hiện đạ…
- 23/09/2012 16:11 - Tổng hợp video các trận đấu đêm qua
- 22/09/2012 16:19 - Làm sếp: Dễ hay khó?

markdown:
##
Thứ Hai, 24/09/2012, 10:37 GMT+7
[Showbiz Việt thì chỉ có gương soi là hiếm có và mắc tiền](http://congso.com/showbiz-viet-thi-chi-co-guong-soi-la-hiem-co-va-mac-tien-4065)
Mỗi ngày chúng ta đều soi mình trong gương bởi mong muốn hình ảnh của mình hoàn hảo hơn khi xuất hiện. Quả thực hình thức không quyết định tất cả nên người đời có câu nói tốt gỗ hơn tốt nước sơn. Nhìn vào thực tế đang diễn ra tron giới showbiz Việt thật khó để tìm ra 1 chiếc gương để chỉ rõ tất cả những gì đang diễn ra trong đó đâu là thực đâu là hư.. Phải có những thứ phụ kiện liên quan khác thì mới làm sáng tỏ bộ mặt thật ẩn chứa sau ánh rèm hào quang kia.
*Để tất cả những thành viên trong đó cùng soi vào gương, thì sẽ ra sao?*
Người ta nói, khi đến nhà người lạ, muốn biết con gái người ta có xinh đẹp hay không chỉ cần để ý xem nhà đó có nhiều... gương hay không? Thường thì người càng đẹp, lại càng muốn tự ngắm nhìn mình mỗi ngày. Ngắm để thấy mình đẹp ở đâu để tôn lên, xấu ở đâu để che đi. Vậy nên, với một ngôi nhà có người đẹp, tấm gương quan trọng lắm.
Thế nhưng, chuyện lạ là có một “ngôi nhà” toàn là người đẹp (hoặc những người cho mình là đẹp), toàn là người sang trọng nhưng lại gần như không có một cái gương nào. Ngôi nhà mà người ta nhìn vào với ánh mắt ngưỡng mộ, thèm muốn, xuýt xoa có tên là Showbiz ấy, lại thiếu đi cái cơ bản nhất cần có của ngôi-nhà-của-những-người-đẹp.
Nhiều người nói showbiz bây giờ như cái chợ, tôi lại thấy nó giống ngôi nhà không có nóc nhiều hơn. Người ta vẫn thường dùng từ “nhà không nóc” để nói một gia đình thiếu “tôn ti trật tự”, cha mẹ không dạy được con, con cái hỗn hào, không nghe lời cha mẹ. Showbiz bây giờ, liệu có khác là mấy?
Nhiều khi tôi cứ nghĩ, nếu showbiz có một tấm gương thật lớn, để tất cả những thành viên trong đó cùng soi vào, thì sẽ ra sao?
*Mùi thơm hay mùi thối dù có bay lòng vòng rồi vẫn là “cả nhà ngửi cùng nhau”*
Nếu showbiz có gương, người ta hẳn đã biết mình là ai, đang ở đâu? Để khi đó người đi sau biết nghe lời người đi trước, để dù người đi trước có lỡ nói sai người ta cũng phản kháng một cách nhẹ nhàng, có học với tinh thần cầu thị và chia sẻ.
Nếu showbiz có gương, người ta hẳn đã biết mình là ai, đang ở đâu? Lúc đó chắc sẽ không có chuyện những bậc tiền bối ăn cơm lâu năm trong showbiz than vãn rằng “showbiz không có tình người” còn đàn em chỉ là con rối trên sân khấu. Showbiz tưởng lớn nhưng hóa ra lại rất nhỏ, mùi thơm hay mùi thối dù có bay lòng vòng rồi vẫn là “cả nhà ngửi cùng nhau”.
Nếu showbiz có gương, người ta hẳn đã biết mình là ai, đang ở đâu? Khi đó hẳn sẽ không còn chuyện chị em trong nhà vạch áo nhau ra, để người khác cười “lưng em mày đầy sẹo”. Để anh, chị, em showbiz không phải như cái thằng Chí Phèo chửi khắp làng Vũ Đại, nhưng ai cũng nghĩ “nó chừa mình ra".
Nếu showbiz có gương, người ta hẳn đã biết mình là ai, đang ở đâu? Lúc đó sẽ không có chuyện ông này đứng lên tố ông kia là “con buôn”, là thế này, là thế nọ... Ông kia tố lại: “Thế ông không là con buôn à? Ông không thế này à, không không thế nọ à?” và cả “nhà” showbiz đều tự hỏi: “Rốt cuộc đứa nào chẳng là con buôn?”.
Nếu showbiz có gương, người ta hẳn đã biết mình là ai, đang ở đâu? Và lúc đó chắc sẽ không có chuyện đàn chị phải “đóng vai ác” để chỉ dạy đàn em phép lịch sự tối thiểu, phải biết kính trên nhường dưới, khi hát phải biết tôn trọng người khác, không tranh giành. Và cả “nhà” showbiz đều tự hào: “Bộ giáo dục đang sử dụng tiền thuế của chúng ta có ích.”
Nếu showbiz có gương, người ta hẳn đã biết mình là ai, đang ở đâu? Khi đó người ta hẳn sẽ biết đâu là chuyên môn tốt nhất của mình. Nhà sản xuất, đạo diễn, ca sĩ, thí sinh... sẽ không cùng nhau chuyển sang làm... kịch sĩ. Showbiz khi đó sẽ không phải là cái sân khấu mà sở thú phải chở cả ngàn con... cá sấu tới để lấy nước mắt cho kịch sĩ diễn bi kịch, trong khi khán giả tưởng cá sấu được mang đến để làm đạo cụ... tấu hài.
Nếu showbiz có gương, vài người sẽ phản đối rằng: “Tôi soi gương mỗi ngày đấy chứ?”. Khổ nỗi, showbiz quá rộng lớn, rộng hơn cả tấm gương soi nên người ta chỉ thấy mỗi bản thân mà không nhận thấy cả showbiz phản chiếu trong đó. Lúc đó chắc là lỗi thuộc về showbiz rồi, ai kêu rộng lớn và phức tạp quá mà chi?
Nếu showbiz có gương, khi đó tôi hẳn cũng “soi xấu” mình mỗi ngày. Bởi khi bạn nhận xét về ai đó, chính là lúc bạn đang vẽ chân dung của chính mình. Nhưng mà tôi khác à nha, tôi biết mình xấu nên khi soi gương tôi đều... đeo mặt nạ. Bây giờ mặt nạ thiếu gì đâu? Muốn đẹp cỡ Hà Hồ, nam tính như Bình Minh cũng có. Mà thích “ngây thơ trong sáng” như Bảo Anh, “chuẩn men” như Cao Thái Sơn, “mạnh mẽ thẳng thắn” như Đàm Vĩnh Hưng hay “hiền ngoan” như Ngọc Trinh cũng đều có hết...Đấy là cách của MC Phan Anh đang nhìn và học trong giới showbiz đấy ạ.
*“Tôi soi gương mỗi ngày đấy chứ?”*
Gì chứ showbiz thì chỉ có gương soi là hiếm có và mắc tiền thôi, chứ rẻ nhất và sẵn có nhất là mặt nạ còn gì?
Quả thực khi đứng ở góc độ 1 MC làm chương trình truyền hình thực tế có quá nhiều bão nhiều sạn như The Voice thì Phan Anh hiểu rất rõ những thực hư ẩn giấu trong đó. Chẳng trách gì sau những mưa khen tới tấp của người cầm cân nảy mực thì ở vòng liveshow khán giả thấy những nét thật giả đã hiện ra. Tìm đâu ra 1 chiếc gương để soi rõ nhất chân thực nhất nhỉ? Khi mà những điều người ta cần thấy đã bị che lấp đi?
Xin kết thúc bài viết nhỏ này bằng 1 câu chuyện như sau: Hai vợ chồng có 1 đứa con nhỏ và họ đã li dị. Mỗi lần đi chơi với bố hoặc mẹ thì cả hai người cũng dặn con chung 1 câu đại khái rằng : “Con không được nói lại với ba (mẹ) là mẹ (ba) đi với ai nhé”.
Thế là đứa trẻ về nói lại với hai người rằng: Sao người lớn toàn nói dối nhau thế?
Đấy là 1 góc gương bé tí và nó cũng giống như trong giới showbiz chẳng thể nào soi hết ngóc ngách của nó xem ai xài hàng hiệu ai không, ai nói thực ai nói dối …
Tags:
[showbiz](http://congso.com/tags/showbiz), [scandal](http://congso.com/tags/scandal), [Phan Anh](http://congso.com/tags/phan-anh), [gương soi](http://congso.com/tags/guong-soi), [The Voice](http://congso.com/tags/the-voice), [chuyện của người nghệ sĩ](http://congso.com/tags/chuyen-cua-nguoi-nghe-si), [người mẫu](http://congso.com/tags/nguoi-mau), [hàng hiệu](http://congso.com/tags/hang-hieu), [scandal](http://congso.com/tags/scandal), [bộ mặt thật của showbiz](http://congso.com/tags/bo-mat-that-cua-showbiz), [cạnh tranh trong showbiz](http://congso.com/tags/canh-tranh-trong-showbiz)
Nhãn:
[Ca sĩ](http://congso.com/l/ca-si), [Congso sưu tầm](http://congso.com/l/congso-suu-tam) [CongSo.com](http://congso.com/)/ [Showbiz](http://congso.com/showbiz) **Read more:** [http://congso.com/showbiz-viet-thi-chi-co-guong-soi-la-hiem-co-va-mac-tien-4065](http://congso.com/showbiz-viet-thi-chi-co-guong-soi-la-hiem-co-va-mac-tien-4065)
- 24/09/2012 16:01 -
[Sửng sốt với giọng hát của cậu nhóc đường phố khi …](/cong-so/1490-sung-sot-voi-giong-hat-cua-cau-nhoc-duong-pho-khi-the-hien-bai-hit-cua-whitney-houston.html)
- 24/09/2012 16:01 -
[Ngon lạ với món chè ốc](/cong-so/1491-ngon-la-voi-mon-che-oc.html)
- 24/09/2012 16:01 -
[7 việc kinh doanh tại gia](/cong-so/1492-7-viec-kinh-doanh-tai-gia.html)
- 24/09/2012 16:01 -
[Ông bầu Hoàng Vũ kể chuyện về 9 người tình](/cong-so/1493-ong-bau-hoang-vu-ke-chuyen-ve-9-nguoi-tinh.html)
- 24/09/2012 16:01 -
['Vampire Prosecutor':phim ma cà rồng Hàn Quốc hấp …](/cong-so/1494-vampire-prosecutorphim-ma-ca-rong-han-quoc-hap-dan-va-loi-cuon-den-bat-ngo.html)
- 24/09/2012 08:01 -
[Sao Việt nói chuyện trinh tiết](/cong-so/1447-sao-viet-noi-chuyen-trinh-tiet.html)
- 23/09/2012 20:01 -
['Xin mọi người bao dung vì hoa hậu chỉ là người bì…](/cong-so/1446-xin-moi-nguoi-bao-dung-vi-hoa-hau-chi-la-nguoi-binh-thuong.html)
- 23/09/2012 16:11 -
[Nghề bất lương và chiêu trò của 'Chí phèo' hiện đạ…](/cong-so/1444-nghe-bat-luong-va-chieu-tro-cua-chi-pheo-hien-dai.html)
- 23/09/2012 16:11 -
[Tổng hợp video các trận đấu đêm qua](/cong-so/1445-tong-hop-video-cac-tran-dau-dem-qua.html)
- 22/09/2012 16:19 -
[Làm sếp: Dễ hay khó?](/cong-so/1415-lam-sep-de-hay-kho.html)

WARC-Type: response

Content-Type: application/http; msgtype=response

Server: Apache

P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"

Cache-Control: post-check=0, pre-check=0

Pragma: no-cache

Set-Cookie: thietketrangweb-temp_tpl=thietketrangweb-temp; expires=Tue, 13-Oct-2015 05:10:14 GMT; path=/

Vary: Accept-Encoding

Content-Encoding: gzip

Connection: close

Content-Type: text/html; charset=utf-8


text:
Giao Hàng Toàn Quốc - Thanh Toán Khi Nhận Hàng
Cam kết cho đổi trả, hoàn tiền 100% nếu không hài lòng về sản phẩm
CÔNG TY MỸ PHẨM WHITE DOCTORS
Địa Chỉ : 262/05 Cách Mạng Tháng 8, Phường 10, Quận 3, TP. HCM

WARC-Truncated: length

Server: LiteSpeed

Set-Cookie: ja_nickel_tpl=ja_nickel; expires=Tue, 13-Oct-2015 05:10:58 GMT; path=/


text:
Đơn vị ban hành
Loại văn bản
Cổng thông tin điện tử Bộ Công Thương (MOIT)
Bản quyền thuộc về Bộ Công Thương
Địa chỉ: 54 Hai Bà Trưng, Hoàn Kiếm, Hà Nội
Điện thoại: (04) 22202222 Fax:(04) 22202525
Trưởng Ban biên tập: TS. Trần Tuấn Anh - Thứ trưởng Bộ Công Thương
Email: bbt@moit.gov.vn Điện thoại: (04) 22205392 Fax: (04) 22205397
Ghi rõ nguồn "Cổng thông tin điện tử Bộ Công Thương" hoặc "http://www.moit.gov.vn" khi phát hành lại thông tin từ website này

Cache-Control: private, max-age=0


text:
R-KEEPER V7
QUẢN LÝ NHÀ HÀNG THEO CÁCH CHUYÊN NGHIỆP
* Order điện tử trên màn hình cảm ứng
* Quản lý kho và định lượng
* Quản lý chuỗi nhà hàng
* Quản lý nhượng quyền kinh doanh
R-KEEPER SHELTER
QUẢN LÝ TOÀN DIỆN KHÁCH SẠN, NHÀ NGHỈ, RESORT
* Quản lý booking khách sạn
* Quản lý check-in/check-out
* Quản lý house-keeping
* Quản lý tổng thể nghiệp vụ khách sạn
GAME-KEEPER
QUẢN LÝ TỔNG THỂ KHU VUI CHƠI PHỨC HỢP
* Quản lý các máy trò chơi
* Quản lý các điểm bán hàng và dịch vụ
* Hệ thống thẻ thanh toán và e-ticket
Hiện nay có rất nhiều người kinh doanh câu lạc bộ (CLB) Billiard (Bi-a), lượng khách hàng yêu thích và thường xuyên tham gia môn thể thao này cũng khá lớn, nhưng để tạo được ấn tượng và hút khách hàng đến CLB của mình thì hoàn toàn không phải dễ. Những góp ý dưới đây có thể phần nào đưa ra những gợi ý hữu ích cho những người kinh doanh trong lĩnh vực này.
Trước hết bạn phải xác định được đối tượng phục vụ là ai? (công nhân, sinh viên, khu đông dân cư hay những tay cơ chuyên nghiệp). Qua đó để bạn có thể lựa chọn tìm mặt bằng cho phù hợp.
Trong kinh doanh bi-a tìm mặt bằng là điều quan trọng nhất và là yếu tố quyết định 50% thành công trong chuyện kinh doanh này. Bởi nó quyết định đến lợi nhuận cuối cùng của việc kinh doanh bi-a
Lựa chọn được loại bàn chơi phù hợp với đối tượng phục vụ và túi tiền của bạn hiện có.
Bạn đã tìm hiểu cách kê bàn như thế nào là khoa học chưa?
Bàn bi-a phải được kê đảm bảo các yếu tố:
Bạn phải sử dụng các loại bi có tuổi thọ cao như Bi của Đức, Bỉ.... không được dùng bi Trung Quốc vì chỉ trong thời gian ngắn bi Trung Quốc sẽ bị bẩn nếu bạn tận dụng chơi sẽ mất khách.
Phải thường xuyên được lau chùi đảm bảo độ sáng bóng của bi.
Quảng cáo để mọi người biết đến CLB của bạn
Bạn phải có biển quảng cáo đủ để bất kỳ một ai đi qua đều phát hiện ra Câu lạc bộ bi-a của bạn.
Bạn nên có chương trình khuyến mại trong tuần lễ khai trương để thu hút khách ban đầu cho câu lạc bộ.
Bạn quảng cáo Câu lạc bộ của bạn bằng nhiều hình thức như phát các tờ rơi, phát thanh lưu động, gián ba-nô, áp phích tại các khu đông người...
Lấy lòng và giữ chân khách hàng
Bạn phải có giàn âm thanh và sử dụng các bản nhạc mà đối tượng bạn phục vụ đang ưu thích (nhưng chỉ mở đủ nghe, không nên mở quá to ảnh hưởng đến khách chơi).
Nhân viên phục vụ phải luôn có thái độ niềm nở với khách trong bất kỳ tình huống nào?(điều này rất quan trọng để giữ khách).
Nên thuê đội ngũ cân bàn cực chuẩn để đảm bảo bàn đánh không bị bê, giật, chạy không chuẩn....
Không nên lấy tiền giờ quá cao, vì bạn nên nhớ 1 điều cơ bản trong kinh doanh bi-a nguồn thu nhập chính không phải tiền giờ mà là tiền đồ uống, thuốc lá, món ăn....
Một kinh nghiệm thực tế nho nhỏ nhằm lấy lòng khách: đừng tiếc vài ngàn để lấy cảm tình của khách. (Chẳng hạn: Khách chơi hết 53.000đ bạn nói của anh hết 53.000đ nhưng chỉ nên lấy 50.000đ và hãy nở nụ cười thật thân thiện là bạn đã đem về lợi nhuận lâu dài cho câu lạc bộ của bạn rồi đấy).
(tổng hợp từ Internet)

markdown:
![](/pictures/baiviet/tuvan1_13104590868.gif)
![](/images/bandovietnam.jpg)
## Kinh nghiệm kinh doanh câu lạc bộ Billiard
Trong kinh doanh bi-a tìm mặt bằng là điều quan trọng nhất và là yếu tố quyết định 50% thành công trong chuyện kinh doanh này. Bởi nó quyết định đến lợi nhuận cuối cùng của việc kinh doanh bi-a
Bàn bi-a phải được kê đảm bảo các yếu tố:
Bạn phải sử dụng các loại bi có tuổi thọ cao như Bi của Đức, Bỉ.... không được dùng bi Trung Quốc vì chỉ trong thời gian ngắn bi Trung Quốc sẽ bị bẩn nếu bạn tận dụng chơi sẽ mất khách.
Phải thường xuyên được lau chùi đảm bảo độ sáng bóng của bi.
Bạn phải có biển quảng cáo đủ để bất kỳ một ai đi qua đều phát hiện ra Câu lạc bộ bi-a của bạn.
Bạn nên có chương trình khuyến mại trong tuần lễ khai trương để thu hút khách ban đầu cho câu lạc bộ.
Bạn quảng cáo Câu lạc bộ của bạn bằng nhiều hình thức như phát các tờ rơi, phát thanh lưu động, gián ba-nô, áp phích tại các khu đông người...
Bạn phải có giàn âm thanh và sử dụng các bản nhạc mà đối tượng bạn phục vụ đang ưu thích (nhưng chỉ mở đủ nghe, không nên mở quá to ảnh hưởng đến khách chơi).
Nhân viên phục vụ phải luôn có thái độ niềm nở với khách trong bất kỳ tình huống nào?(điều này rất quan trọng để giữ khách).
Nên thuê đội ngũ cân bàn cực chuẩn để đảm bảo bàn đánh không bị bê, giật, chạy không chuẩn....
Không nên lấy tiền giờ quá cao, vì bạn nên nhớ 1 điều cơ bản trong kinh doanh bi-a nguồn thu nhập chính không phải tiền giờ mà là tiền đồ uống, thuốc lá, món ăn....
Một kinh nghiệm thực tế nho nhỏ nhằm lấy lòng khách: đừng tiếc vài ngàn để lấy cảm tình của khách. (Chẳng hạn: Khách chơi hết 53.000đ bạn nói của anh hết 53.000đ nhưng chỉ nên lấy 50.000đ và hãy nở nụ cười thật thân thiện là bạn đã đem về lợi nhuận lâu dài cho câu lạc bộ của bạn rồi đấy).
**Các tin khác :**
|
|![]()
![](/images/li.jpg)
[Kinh doanh nhà hàng - những bước đi đầu tiên (P1)](/tin-tuc/kinh-nghiem-quan-ly/kinh-doanh-nha-hang-nhung-buoc-di-dau-tien-(p1)-c93a180.html)(05/05/2012) ![](/images/li.jpg)
[Khởi nghiệp với nhà hàng kem tươi](/tin-tuc/kinh-nghiem-quan-ly/khoi-nghiep-voi-nha-hang-kem-tuoi-c93a177.html)(26/01/2012) ![](/images/li.jpg)
[Bài học quản lý: biết tìm người thay... mình](/tin-tuc/kinh-nghiem-quan-ly/bai-hoc-quan-ly:-biet-tim-nguoi-thay...-minh-c93a175.html)(04/01/2012) ![](/images/li.jpg)
[Quản lý khách sạn - Làm gì khi nợ nần lớn?](/tin-tuc/kinh-nghiem-quan-ly/quan-ly-khach-san-lam-gi-khi-no-nan-lon-c93a174.html)(22/11/2011) ![](/images/li.jpg)
[Để giữ đầu bếp giỏi cho nhà hàng](/tin-tuc/kinh-nghiem-quan-ly/de-giu-dau-bep-gioi-cho-nha-hang-c93a171.html)(17/10/2011) ![](/images/li.jpg)
[Các hình thức phục vụ trong ngành công nghiệp nhà hàng](/tin-tuc/kinh-nghiem-quan-ly/cac-hinh-thuc-phuc-vu-trong-nganh-cong-nghiep-nha-hang-c93a157.html)(05/08/2011) ![](/images/li.jpg)
[Quản lý nhân sự khách sạn](/tin-tuc/kinh-nghiem-quan-ly/quan-ly-nhan-su-khach-san-c93a163.html)(15/08/2011) ![](/images/li.jpg)
[5 nguyên tắc làm việc cho nhân viên khách sạn](/tin-tuc/kinh-nghiem-quan-ly/5-nguyen-tac-lam-viec-cho-nhan-vien-khach-san-c93a155.html)(02/08/2011) ![](/images/li.jpg)

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Content-Type: text/html


text:
Xem Phim Người Giúp Việc
Bộ Phim Người Giúp Việc – The Help
Incoming search terms:
- sexnguoigiupviet
- phim han quoc nguoi giup viec
- phim nguoi lon giup viec
- phin nguoi giup viec
- nguoi giup viec phim han quoc
- phimsecchuvanguoigiupviec
- phin sex nguoi giup viec
- pxem phim sex nguoi giup viet
- xem phim em gai giup viet va ong chu tinh duc hang quoc
- xem phim ong chu voi nguoi giup viet cap3
- phim nguoi giup viecphim
- phim sey nguoi giup viet vu tq
- xem phim nguoi giup viet
- phim cap 3 nguoi giup viec han quoc
- video cha lay con phim trung quoc

markdown:
# Xem Phim Người Giúp Việc
Bộ Phim
**Người Giúp Việc – The Help**
#### Incoming search terms:
[sexnguoigiupviet](http://www.sharephim.net/nguoi-giup-viec/) [phim han quoc nguoi giup viec](http://www.sharephim.net/nguoi-giup-viec/) [phim nguoi lon giup viec](http://www.sharephim.net/nguoi-giup-viec/) [phin nguoi giup viec](http://www.sharephim.net/nguoi-giup-viec/) [nguoi giup viec phim han quoc](http://www.sharephim.net/nguoi-giup-viec/) [phimsecchuvanguoigiupviec](http://www.sharephim.net/nguoi-giup-viec/) [phin sex nguoi giup viec](http://www.sharephim.net/nguoi-giup-viec/) [pxem phim sex nguoi giup viet](http://www.sharephim.net/nguoi-giup-viec/) [xem phim em gai giup viet va ong chu tinh duc hang quoc](http://www.sharephim.net/nguoi-giup-viec/) [xem phim ong chu voi nguoi giup viet cap3](http://www.sharephim.net/nguoi-giup-viec/) [phim nguoi giup viecphim](http://www.sharephim.net/nguoi-giup-viec/) [phim sey nguoi giup viet vu tq](http://www.sharephim.net/nguoi-giup-viec/) [xem phim nguoi giup viet](http://www.sharephim.net/nguoi-giup-viec/) [phim cap 3 nguoi giup viec han quoc](http://www.sharephim.net/nguoi-giup-viec/) [video cha lay con phim trung quoc](http://www.sharephim.net/nguoi-giup-viec/)

Content-Type: text/html; charset=UTF-8