Tìm hiểu cơng nghệ XML và xây dựng hệ thống quản lý dịch vụ khách hàng
2.2.3. Truy vấn dữ liệu XML sử dụng XPathDocument và XPathNavigator
Việc sử dụng lớp XmlDocument và XmlDataDocument để xử lý tài liệu
XML cũng cĩ một vài hạn chế. Đầu tiên, tồn bộ tài liệu phải được lưu trong
cache. Thêm vào đĩ, việc định hướng thơng qua một cây sẽ gặp nhiều khĩ
khăn, và định hướng thơng qua những view quan hệ cũng khơng thuận tiện.
Để khắc phục vấn đề này, VS.NET cung cấp lớp XPathDocument và
XPathNavigator.
Lớp XPathDocument cho phép chúng ta xử lý dữ liệu XML mà khơng
phải tải lên tồn bộ cây. Và XPathNavigator sử dụng để thao tác trên dữ liệu của XPathDocument. Nĩ cũng được sử dụng để thao tác trên XmlDocument, và XmlDataDocument. Nĩ hỗ trợ kỹ thuật định hướng cho việc chọn nút, lặp qua các nút đã chọn, và làm việc trên những nút đã chọn này. Để thực hiện
được việc này, nĩ sử dụng biểu thức XPath.
XPath chỉ ra cú pháp truy vấn cho việc rút trích dữ liệu từ một tài liệu
XML. Ý tưởng sử dụng tương tự như trong SQL, tuy nhiên cú pháp của nĩ thì khác biệt. Nĩi chung, cú pháp truy vấn XPath cĩ vẻ phức tạp. Tuy nhiên qua các ví dụ sau, Chúng ta cĩ thể thấy được sự ngắn gọn và hiệu quả trong việc
rút trích dữ liệu XML. Chi tiết về cú pháp của XPath sẽ khơng đi sâu trong
bài viết này vì nĩ nghiên về lĩnh vực khác. Tuy nhiên, chúng ta cũng minh họa vài cách sử dụng biểu thức XPath. Sau đây chúng ta xem qua ví dụ một
tài liệu XML mà sẽ được sử dụng để thực hiện truy vấn trên đĩ. Tài liệu này
đặt tên là bank1.xml.
<?xml version="1.0" encoding="utf-8" ?> <Bank>
Tìm hiểu cơng nghệ XML và xây dựng hệ thống quản lý dịch vụ khách hàng <AccountNo>A1112</AccountNo> <Name>Pepsi Beagle</Name> <Balance>1200.89</Balance> <State>OH</State> </Account> ………… ………… <Account> <AccountNo>A7833</AccountNo> <Name>Frank Horton</Name> <Balance>8964.55</Balance> <State>MI</State> </Account> </Bank>
Ví dụ 1: Giả sử chúng ta muốn truy vấn tất cả tên của tài khoản. Biểu
thức XPath như sau:
Dạng 1: descendant::Name
Dạng 2: Bank/Account/Name
Ý nghĩa của biếu thức dạng 1 là “ Hãy lấy những nút con của tất cả những nút cĩ tên là Name”, cịn dạng 2 được diễn đạt như sau “Lấy những nút Name của nút Account của nút Bank”. Cả hai biểu thức này đều trả về cùng một tập hợp nút như nhau.
Ví dụ 2: Chúng ta muốn lấy tất cả khách hàng từ Ohio (OH). Biểu thức được viết như sau:
Dạng 1: descendant::Account[child::State=‘OH’]
Dạng 2: Bank/Account[child::State=‘OH’]
Ví dụ 3: Lấy tất cả Account cĩ Balance>5000.00
Dạng 1: descendant::Account[child::Balance> 5000]
Tìm hiểu cơng nghệ XML và xây dựng hệ thống quản lý dịch vụ khách hàng
Ví dụ 4: Giả sử Chúng ta muốn lấy thơng tin của những Account mà cĩ
tên bắt đầu bằng ký tự ‘D’
Dạng 1: descendant::account[starts-with(child::Name,‘D’)]
Dạng 2: Bank/Account[starts-with(child::Name,‘D’)]
Như vậy, sử dụng dạng nào là thích hợp. Điều đĩ phụ thuộc vào cảm giác của từng người và trên cấu trúc của tài liệu XML. Dạng 2 trơng dễ sử dụng hơn dạng 1. Tuy nhiên, trong những tài liệu XML lồng quá sâu, thì dạng 1 sẽ
đưa ra một biểu thức hiệu quả hơn.
Trên đây, chúng ta đã biết khái niệm về cách sử dụng biểu thức XPath như thế nào, kế tiếp chúng ta sẽ đi vào sử dụng XPathDocument. Trong ngữ cảnh này, chúng ta sẽ đưa ra 2 ví dụ. Ví dụ đầu tiên sẽ lấy tất cả tên của khách hàng từ Ohio và hiển thị lên listbox. Ví dụ thứ hai sẽ minh hoạ cách tìm kiếm dữ liệu thơng qua XPathDocument.
2.2.3.2. Cách sử dụng XPathDocument và XPathNavigator
Đầu tiên, chúng ta load tài liệu XML sử dụng XPathDocument như sau: XPathDocument doc = new
XPathDocument(Server.MapPath("Bank2.xml"));
Chúng ta cần hai đối tượng: XPathNavigator để rút trích ra tập hợp nút mà chúng ta muốn lấy, và XPathNodeIterator để lặp thơng qua tập hợp nút vừa lấy được. Khai báo như sau:
XPathNavigator myNav = new XPathNavigator(); myNav = myDoc.CreateNavigator();
XPathNodeIterator myIter = new XPathNodeIterator();
myIter=myNav.Select("Bank/Account[child::State='OH']/Name");
Biểu thức “Bank/Account[child::State=‘OH’]/Name” trả về những node tên Name từ tập nút Account cĩ State=”OH”. Để lấy giá trị bên trong nút
Tìm hiểu cơng nghệ XML và xây dựng hệ thống quản lý dịch vụ khách hàng
Name, chúng ta sử dụng Current.Value của đối tượng Iterator. Cụ thể như
sau:
while (myIter.MoveNext())
{
lstName.Items.Add(myIter.Current.Value);
}
2.2.3.3. Cách sử dụng XPathDocument và XPathNavigator cho việc định hướng tài liệu
Phần này minh họa cách tìm kiếm một XPathDocument sử dụng giá trị
của một thuộc tính và giá trị của một phần tử (element). Sử dụng tài liệu XML
bank2.xml sau: <Bank> <Account AccountNo="A1112"> <Name>Pepsi Beagle</Name> <Balance>1200.89</Balance> <State>OH</State> </Account> ……………. ……………. </Bank>
Để tìm kiếm giá trị cụ thể của một thuộc tính, chúng ta sử dụng biểu thức
như sau
Bank/Account[@AccountNo='"+accNo+"']/Balance
Để tìm kiếm giá trị cụ thể của một phần tử, chúng ta sử dụng biểu thức
như sau:
Tìm hiểu cơng nghệ XML và xây dựng hệ thống quản lý dịch vụ khách hàng
Chúng ta cần gọi phương thức MoveNext() của đối tượng Iterator để lấy
nút Balance. Biểu thức như sau:
Bank/Account[@AccountNo='"+accNo+"']/Balance
Sau đây là một đoạn chương trình hồn chỉnh viết bằng ngơn ngữ
ASP.NET sử dụng C#
<%@ Import Namespace="System.Xml.Xsl"%> <%@ Import Namespace="System.Xml.XPath"%> <%@ Import Namespace="System.Xml"%>
<%@ Page Language="C#" Debug="True"%> <HTML>
<HEAD> </HEAD> <body>
<form runat="server" ID="Form1">
<h4>Balance Inquiry Screen</h4>
Select an Account Number:
<asp:DropdownList id="cboAcno"
runat="server" width="100"/>
Balance from Account Number Search:
<asp:Textbox id="txtBalance1"
runat="server" width="80"/>
<hr>
Select an Customer Name:www.syngress.com
<asp:DropdownList id="cboName"
runat="server" width="110"/>
Balance from Customer Name Search :
<asp:Textbox id="txtBalance2"
runat="server" width="80"/>
<asp:Button id="cmdDetails" Text="Show
Balances" runat="server" onClick="showNames"/> </form>
Tìm hiểu cơng nghệ XML và xây dựng hệ thống quản lý dịch vụ khách hàng
private void Page_Load(object sender, System.EventArgs e) {
if(!Page.IsPostBack) {
XPathDocument myDoc = new
XPathDocument(Server.MapPath("Bank3.xml")); XPathNavigator myNav = new XPathNavigator();
myNav = myDoc.CreateNavigator();
XPathNodeIterator myIter = new XPathNodeIterator();
myIter=myNav.Select("Bank/Account[child::State='OH']/Name"); //Điền giá trị Account Number vào DropDownList
myIter=myNav.Select("//@*"); //Lấy tất cả các thuộc tính
while (myIter.MoveNext()) {
cboAcno.Items.Add(myIter.Current.Value); }
//Điền giá trị Name vào DropDownList
myIter=myNav.Select("/Bank/Account/Name"); while (myIter.MoveNext()) { cboName.Items.Add(myIter.Current.Value); } } }
private showsNames(object sender, System.EventArgs e) {
//Lấy giá trị của item được chọn
string accNo = cboAcno.SelectedItem.Text.Trim(); XPathDocument myDoc = new
XPathDocument(Server.MapPath("Bank3.xml")); XPathNavigator myNav = new XPathNavigator();
myNav = myDoc.CreateNavigator();
XPathNodeIterator myIter = new XPathNodeIterator();
//Truy vấn để lấy nút Balance từ AccounNo
Tìm hiểu cơng nghệ XML và xây dựng hệ thống quản lý dịch vụ khách hàng
accNo+"']/Balance"); myIter.MoveNext();
//Hiển thị giá trị của nút Balance
txtBalance1.Text=FormatCurrency(myIter.Current.Value); myIter = myNav.Select("descendant::Account[child::Name='"+ accName+"']/Balance"); myIter.MoveNext();
//Hiển thị giá trị của nút Balance
txtBalance2.Text=FormatCurrency(myIter.Current.Value) } </Script> </body> </HTML> 2.2.4. Nhận xét
Như vây chúng ta đã biết được XML là như thế nào và cách sử dụng nĩ ra sao. Và bây giờ câu hỏi đặt ra là tại sao khơng tổ chức dữ liệu chỉ trên tập tin XML thơi mà lại dùng tập tin XML như là một cách lưu trữ hỗ trợ thêm cho việc lưu trữ trên SQL Server. Để trả lời câu hỏi này, chúng ta xem qua sự so sánh sau đây.
2.3. XML và Cơ sở dữ liệu
2.3.1. XML cĩ phải là Cơ sở dữ liệu?
Việc XML cĩ phải là cơ sở dữ liệu hay khơng thật khĩ giải đáp. Vì XML cũng giống như mọi ngơn ngữ khác đĩ là nĩ cũng cĩ ưu điểm và khuyết điểm.
Ưu điểm của XML như chúng ta đã biết ở trên nhưng khuyết điểm của XML ở đây là XML dài dịng và truy xuất chậm. Việc truy xuất chậm là do việc lưu
Tìm hiểu cơng nghệ XML và xây dựng hệ thống quản lý dịch vụ khách hàng
trữ tài liệu XML trong bộ nhớ để phục vụ cho vấn đề truy vấn như chúng ta
đã đề cập trong mơ hình DOM. Vì vậy, sau đây chúng ta sẽ quan tâm đến một
khía cạnh khác của XML. Đĩ là XML cĩ gần gũi như một Cơ sở dữ liệu (CSDL) hay khơng? Câu trả lời là “chỉ một phần nào”. Vì XML cũng cĩ một số điểm giống như CSDL. Đĩ là nĩ cũng cĩ khả năng lưu trữ, cĩ hỗ trợ một số lược đồ như DTD, hay Schema (tương tự như bảng trong CSDL quan hệ). Và trên XML ta cũng cĩ thể thực hiện thao tác truy vấn bằng cách sử dụng XPath, XQuery, XQL,…, và XML cũng cĩ hỗ trợ lập trình trên giao diện. Nhưng một số vấn đề mà XML chưa hỗ trợ như một CSDL. Đĩ là khơng cĩ
chỉ mục, vấn đề bảo mật khơng cao, tính tồn vẹn dữ liệu chưa đáp ứng,
khơng hỗ trợ các trigger, việc truy cập đa người dùng cũng hạn chế, và cuối cùng là khơng cho truy vấn thơng qua nhiều tài liệu,v.v... Như vậy, việc lưu trữ dữ liệu XML như một cơ sở dữ liệu cũng khơng khả thi.
2.3.2. Vai trị XML trong hệ thống hỗ trợ dịch vụ khách hàng hàng
Trước khi đi vào phần này, chúng ta sẽ khảo sát một sự so sánh sau đây
2.3.2.1. Đánh giá các kiểu cơ sở dữ liệu lưu trữ dữ liệu XML
2.3.2.1.1. Sử dụng hệ thống tập tin (file)
Khi lưu trữ XML bằng tập tin (file) thì việc liên kết các thành phần của cấu trúc cây sẽ khơng được hỗ trợ nên việc lưu trữ những liên kết về cấu trúc và ngữ nghĩa của nĩ rất phức tạp. Và trên tập tin khơng thể thực thi được những yêu cầu rút trích dữ liệu phức tạp nên sử dụng hệ thống tập tin sẽ khơng hiệu quả.
Tìm hiểu cơng nghệ XML và xây dựng hệ thống quản lý dịch vụ khách hàng
2.3.2.1.2. Sử dụng CSDL quan hệ
Như chúng ta đã biết, CSDL quan hệ xây dựng dựa trên cấu trúc bảng nên khơng phù hợp cho cấu trúc phân cấp và kết nối tự nhiên trong nội dung của XML. Nếu chúng ta cố gắng lưu trữ trong CSDL quan hệ cho phù hợp bằng các bảng dữ liệu và các mối quan hệ thì sẽ phá vỡ cấu trúc đối tượng và ngữ nghĩa của XML, phải chịu sự trùng lắp trong thiết kế dữ liệu,…Và vấn đề tiếp theo là sẽ nặng nề trong việc xử lý nhúng và đáp ứng các yêu cầu phức tạp mà cấu trúc XML đưa ra. Như vậy, CSDL quan hệ là lựa chọn thơng minh trong
nhiều ứng dụng khác, nhưng nĩ khơng phù hợp và khơng hiệu quả cho việc
lưu trữ dữ liệu phân cấp của XML.
2.3.3. Mơ hình lưu trữ trong hệ thống quản lý dịch vụ khách hàng (eSupport) khách hàng (eSupport)
Do đã giới thiệu về những ưu điểm và khuyết điểm khi lưu trữ trên tập tin XML hay trên CSDL quan hệ, nên nhĩm chúng em quyết định tích hợp cả hai mơ hình trên trong hệ thống eSupport, nghĩa là kết hợp việc lưu trữ dưới dạng tập tin XML và CSDL quan hệ. Việc sử dụng cách này với mục đích:
Tận dụng được ưu điểm và khắc phục những yếu điểm của hai cách lưu
trữ trên.
Thích hợp cho việc tìm kiếm trong hệ thống eSupport.
Tìm hiểu cơng nghệ XML và xây dựng hệ thống quản lý dịch vụ khách hàng
Chương 3: MƠ TẢ HỆ THỐNG QUẢN LÝ DỊCH VỤ KHÁCH HÀNG
3.1. Đối tượng sử dụng
Việc trao đổi thơng tin diễn ra giữa khách hàng và doanh nghiệp liên quan
đến sản phẩm và dịch vụ của doanh nghiệp. Khi khách hàng cĩ yêu cầu hay
thắc mắc về sản phẩm và dịch vụ của doanh nghiệp, khách hàng cĩ thể gửi yêu cầu về doanh nghiệp để được giải đáp. Trong doanh nghiệp, sẽ cĩ một bộ phận nhân viên chuyên trách việc giải đáp các yêu cầu cho khách hàng. Do cĩ nhiều sản phẩm và dịch vụ khác nhau nên bộ phận nhân viên của cơng ty cũng
được chia ra theo từng lĩnh vực cần giải đáp.
Trên cơ sở đĩ, một hệ thống hỗ trợ dịch vụ khách hàng được xây dựng
nhằm phục vụ cho việc trao đổi giữa các nhân viên (doanh nghiệp) và khách hàng được dễ dàng và nhanh chĩng. Đối tượng sử dụng chính của hệ thống là khách hàng, nhân viên của doanh nghiệp, và quản trị hệ thống.
3.2. Mơ tả hệ thống quản lý dịch vụ khách hàng
Hệ thống bao gồm hai phân hệ chính là phân hệ hỗ trợ khách hàng và phân hệ hỗ trợ hệ thống.
3.2.1. Phân hệ hỗ trợ khách hàng
Khi khách hàng cĩ nhu cầu tìm kiếm thơng tin, giải đáp thắc mắc về doanh nghiệp, khách hàng cĩ thể vào khu vực dịch vụ khách hàng để tìm kiếm và xem nội dung các câu hỏi - trả lời cĩ sẵn trong hệ thống FAQ. Hệ thống FAQ là phần quản trị các câu hỏi và câu trả lời cĩ sẵn, các câu hỏi này tập hợp các
Tìm hiểu cơng nghệ XML và xây dựng hệ thống quản lý dịch vụ khách hàng
câu hỏi thường gặp được tập trung lại để phục vụ khách hàng. Hệ thống FAQ
được chia theo chủ đề bất kỳ và cĩ thể cho khách hàng tìm kiếm theo từ khố.
Trường hợp khách hàng cần biết các thơng tin nhưng khơng cĩ sẵn trong hệ thống, khách hàng sẽ đăng ký một tài khoản khách hàng (chỉ một lần) và mở một hay nhiều yêu cầu cho một hay nhiều vấn đề tại một hay nhiều thời
điểm khác nhau. Hay khách hàng khơng cần vào website, khách hàng chỉ cần
gửi email tới support@tendn.com, hệ thống sẽ tự động tạo một tài khoản
(account) và tạo một yêu cầu hỗ trợ trên hệ thống, đồng thời hệ thống sẽ gửi thơng tin tài khoản mới cho khách hàng bằng email. Hệ thống cũng sẽ gửi một email để thơng báo cĩ yêu cầu hỗ trợ này cho nhân viên doanh nghiệp.
Khách hàng cĩ thể theo dõi tiến trình xử lý yêu cầu của nhân viên doanh
nghiệp qua email (khi yêu cầu đang được nhân viên xem xét thì khách hàng
nhận được email, thơng báo về quá trình giải quyết yêu cầu của doanh
nghiệp).
Khách hàng cũng nhận được các thơng báo về sản phẩm mới, dịch vụ,
khuyến mãi do doanh nghiệp đưa ra.
3.2.2. Phân hệ hỗ trợ hệ thống
Trong phân hệ này được chia làm hai đối tượng sử dụng chính là: quản trị và nhân viên.
3.2.2.1. Đối tượng nhân viên (staff)
Mỗi nhân viên sẽ được phân cơng phụ trách giải đáp yêu cầu của một hay nhiều phịng ban. Khi nhân viên đăng nhập vào tài khoản của mình thì tất cả
Tìm hiểu cơng nghệ XML và xây dựng hệ thống quản lý dịch vụ khách hàng
nhân viên đĩ xem xét. Nhân viên sẽ xem xét và trả lời các yêu cầu của khách hàng trong thời gian nhanh nhất cĩ thể. Khi yêu cầu được giải quyết xong thì
trạng thái của nĩ sẽ được thay đổi, nếu như khách hàng cĩ đăng ký nhận trả
lời qua email thì nội dung câu trả lời sẽ được gởi đến cho người sử dụng qua email của họ.
Trong trường hợp phịng ban nhận yêu cầu khơng trả lời được thì nhân
viên quản trị sẽ chuyển qua phịng ban phù hợp để xử lý.
Nhân viên cĩ thể lựa chọn trong các yêu cầu khách hàng gửi lên, yêu cầu nào mới (chưa cĩ trong hệ thống câu hỏi-trả lời), thường xuyên cần được giải đáp thì nhân viên sẽ cập nhật vào hệ thống FAQ.
3.2.2.2. Đối tượng quản trị viên (admin)
Quản trị viên cĩ chức năng quản trị chung hệ thống, quản lý cấu hình hệ thống, đảm bảo cho hệ thống hoạt động tốt.
Quản trị viên quản lý người dùng trong hệ thống bao gồm các thao tác thêm, xĩa, sửa tài khoản người dùng và nhân viên. Thực hiện phân quyền cho các nhân viên.
Quản trị viên cũng theo dõi các yêu cầu và trả lời, chọn lựa yêu cầu nào mới, thường được khách hàng quan tâm để cập nhật FAQ.
Quản trị viên quản lý, theo dõi chặt chẽ quá trình xử lý yêu cầu của các nhân viên, đảm bảo khách hàng khơng phải chờ đợi lâu. Nếu cĩ yêu cầu nào bị giải quyết chậm trễ ngưng trệ thì quản trị phải nhắc nhở bằng email tới các nhân viên và các phịng ban.
Tìm hiểu cơng nghệ XML và xây dựng hệ thống quản lý dịch vụ khách hàng
3.3. Xác định yêu cầu chức năng hệ thống
3.3.1. Yêu cầu chức năng nghiệp vụ
3.3.1.1. Nhĩm chức năng dành cho người dùng chung
Tìm kiếm FAQ