Tải bản đầy đủ (.pdf) (69 trang)

Nghiên cứu một số kỹ thuật khai phá dữ liệu XML ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (837.42 KB, 69 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
---------------------------------------

Bùi Ngọc Dũng
NGHIÊN CỨU MỘT SỐ KỸ THUẬT KHAI PHÁ DỮ LIỆU XML
ỨNG DỤNG TRONG THỰC HIỆN XỬ LÝ DỮ LIỆU QUAN HỆ
Chuyên nghành: Đảm bảo toán học cho máy tính và hệ thống tính toán

LUẬN VĂN THẠC SỸ KHOA HỌC
ĐẢM BẢO TOÁN HỌC CHO MÁY TÍNH
VÀ HỆ THỐNG TÍNH TOÁN

NGƯỜI HƯỚNG DẪN KHOA HỌC:
1. PGS. TS. HUỲNH QUYẾT THẮNG

Hà Nội - 2011


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

LỜI CAM ĐOAN

Kính gửi:
-

Trung tâm Đào tạo và Bồi dưỡng sau Đại học



-

Trường Đại học Bách Khoa Hà Nội

Tên tôi là: Bùi Ngọc Dũng
Sinh ngày: 19-02-1984
Là học viên cao học khóa 2008-2010.
Tôi xin cam đoan: Toàn bộ kiến thức và nội dung trong bài luận văn của tôi
là các kiến thức tự nghiên cứu từ các tài liệu tham khảo trong và ngoài nước, không
có sự sao chép hay vay mượn dưới bất kỳ hình thức nào để hoàn thành luận văn tốt
nghiệp luận văn tốt nghiệp Cao học chuyên nghành Đảm bảo toán học cho máy tính
và hệ thống tính toán.
Tôi xin chịu hoàn toàn trách nhiệm về nội dung của luận văn này trước
Trung tâm đào tạo và Bồi dưỡng sau đại học, Trường đại học Bách khoa Hà Nội.

-1-


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

MỤC LỤC
LỜI CAM ĐOAN .......................................................................................................1 
MỞ ĐẦU.....................................................................................................................4 
Chương 1. TÌM HIỂU CHUNG VỀ XML .................................................................5 
1.1. 


XML là gì? .................................................................................................5 

1.2. 

Lý do ra đời của XML................................................................................5 

1.3. 

Ứng dụng của XML trong các hệ thống thông tin hiện đại .......................6 

Chương 2. KHAI PHÁ DỮ LIỆU XML.....................................................................8 
2.1. 

Biểu diễn dữ liệu trong XML.....................................................................8 

2.1.1. 

Tạo một tài liệu XML đúng cấu trúc...................................................8 

2.1.2. 

Chỉ thị xử lý và ghi chú .....................................................................11 

2.1.3. 

Không gian tên ..................................................................................12 

2.1.4. 


CDATA và thực thể tham chiếu........................................................15 

2.2. 

XPath và xử lý tài liệu XML....................................................................16 

2.2.1. 

Biểu diễn XML trong XPath .............................................................17 

2.2.2. 

Đường dẫn trong XML......................................................................18 

2.2.2.1.  Đường dẫn tuyệt đối ....................................................................19 
2.2.2.2.  Đường dẫn tương đối ...................................................................20 
2.2.2.3.  Đường dẫn và điều kiện ...............................................................21 
2.2.3. 

Tập hợp và chỉ mục ...........................................................................21 

2.2.4. 

Từ khóa và các phép toán..................................................................22 

2.2.4.1.  Từ khóa ........................................................................................22 
2.2.4.2.  Phép toán sàng lọc (Filter) ...........................................................23 
2.2.4.3.  Phép toán so sánh (Compare) ......................................................24 

-2-



Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

2.2.4.4.  Phép toán hội (Union)..................................................................25 
2.2.4.5.  Các phép toán khác ......................................................................25 
Chương 3. SQL SERVER VÀ DỮ LIỆU XML .......................................................29 
3.1.  

SQL Server và kiểu dữ liệu XML ............................................................29 

3.2.  

Khai phá dữ liệu XML trong SQL Server................................................29 

3.2.1.  

Cách sinh ra một tài liệu XML trong SQL Server ............................29 

3.2.2.  

Thao tác với dữ liệu XML trong SQL Server ...................................42 

Chương 4. ỨNG DỤNG KHAI PHÁ DỮ LIỆU XML TRONG CƠ SỞ DỮ LIỆU
QUAN HỆ .................................................................................................................55 
4.1. 


Phát biểu bài toán .....................................................................................55 

4.2. 

Các giải pháp thực hiện............................................................................56 

4.2.1. 

Replication.........................................................................................56 

4.2.2. 

DataMirror.........................................................................................57 

4.2.3. 

Giải pháp đề nghị ..............................................................................58 

4.3. 

Thực hiện giải pháp..................................................................................61 

4.3.1. 

Thực hiện...........................................................................................61 

4.3.2. 

Một số chú ý ......................................................................................63 


KẾT LUẬN ...............................................................................................................66 
TÀI LIỆU THAM KHẢO.........................................................................................68 

-3-


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

MỞ ĐẦU
Hiện nay, trong ngành Công nghệ thông tin, XML (eXtensible Markup
Language) chiếm một vai trò rất quan trọng. Để thấy ảnh hưởng rộng lớn của XML
trong ngành Công Nghệ Thông Tin ta chỉ cần để ý rằng XML chính là lý do của sự
xuất hiện Microsoft.Net. Từ hệ điều hành WindowsXP trở đi, bên trong đầy dẫy
XML. Hãng phần mềm Microsoft đã đầu tư hơn 3 tỷ đô la Mỹ vào kỹ thuật này, và
sau sự xuất hiện của XML trong WindowsXP thì các ứng dụng của Microsoft nếu
không thể chuyển qua chạy trên nền .NET thì ít nhất cũng sẽ được chuyển thành
dùng cho .NET được thông qua XML. Đi song song với .NET là SQLServer một
cơ sở dữ liệu dần hổ trợ XML một cách hoàn toàn.
Tại thời điểm hiện tại Web Services đã trở nên rất thông dụng, nó đã trở
thành một phần quan trọng trong việc xây dựng một hệ thống thông tin diện rộng.
Việc sử dụng Web Service cho phép ta có thể xây dựng các ứng dụng mà có thể kết
nối trao đổi thông tin với nhau mà không cần phải đồng bộ hóa các ứng dụng này
trên cùng một nền, trên cùng hệ điều hành. Các ứng dụng có thể được xây dựng bới
nhiều loại ngôn ngữ lập trình khác nhau: .Net, Visual Basic, ASP, php, java.. và
được build trên nhiều loại hệ điều hành khác nhau: Windows XP, Windows Server,

Linux,… Nhưng vẫn có thể trao đổi thông tin được với nhau, đây chính là cách thức
để có thể dễ dàng nâng cấp cho hệ thống, kết nối các hệ thống có sẵn với nhau. Web
Services được triển khai dựa vào XML với các giao thức http, https,.. chuẩn.
Trong khuân khổ của đồ án này, ngoài việc tập trung vào tìm hiểu về XML
em tập trung vào nghiên cứu về ứng dụng của XML vào trong cơ sở dữ liệu
SQLServer, đề xuất bài toán ứng dụng thực tế để khai phá dữ liệu XML trong cơ sở
dữ liệu SQLServer trên mô hình WAN diện rộng mục tiêu đồng bộ dữ liệu từ các
đơn vị cấp thấp lên các đơn vị cao hơn.

-4-


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

Chương 1. TÌM HIỂU CHUNG VỀ XML
1.1.

XML là gì?
XML là viết tắt của eXtensible Markup Language (Ngôn ngữ đánh dấu văn

bản có thể mở rộng) là một bộ qui luật về cách chia một tài liệu ra làm nhiều phần,
rồi đánh dấu và ráp các phần khác nhau lại để dễ nhận diện chúng. Ðược công nhận
bởi W3C và trở thành một trong những chuẩn dữ liệu được sử dụng phổ biến nhất
hiện nay.
XML là ngôn ngữ xây dựng cấu trúc tài liệu văn bản, dựa theo chuẩn SGML
(Standard Generalized Markup Language: siêu ngôn ngữ có khả năng sinh ngôn ngữ

khác). SGML được phát triển cho việc định cấu trúc và nội dung tài liệu điện tử, do
tổ chức ISO (International Organization for Standards) chuẩn hoá năm 1986. SGML
là do IBM đưa ra, song không thể không kể đến những đóng góp của các công ty
khác. XML được W3C phát triển, nhưng đặc tả XML lại do Netscape, Microsoft và
các thành viên của dự án Text Encoding Initiative (TEI) xây dựng. Tổ chức W3C
XML Special Interest Group có đại diện từ hơn 100 công ty cùng nhiều chuyên gia
được mời khác.
1.2.

Lý do ra đời của XML
Lý do ra đời của XML vì SGML rất rắc rối, và HTML có nhiều giới hạn nên

năm 1996 tổ chức W3C thiết kế XML. XML version 1.0 được định nghĩa trong hồ
sơ “February 1998 W3C Recommendation”.
Điểm quan trọng của XML là nó không thuộc riêng về một công ty nào mà là
một sản phẩm mà trí tuệ của nó thuộc về cả thế giới, là một tiêu chuẩn được mọi
người công nhận vì được soạn ra bởi World Wide Web Consortium - W3C (Một tổ
chức độc gồm rất nhiều các chuyên gia soạn thảo ra các tiêu chuẩn cho trình duyệt
Web, máy chủ và ngôn ngữ) và các cá nhân muốn đóng góp thông qua trao đổi bằng
Email. Bản thân của XML tuy không có gì khó hiểu, nhưng các công cụ chuẩn được

-5-


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010


định ra để làm việc với XML như Document Object Model - DOM, XPath, XSL,
v.v.. thì rất hữu hiệu, và chính các chuẩn này cũng được phát triển không ngừng.
Microsoft đã tập trung vào XML ngay từ đầu, chẳng những có đại diện để
làm việc thường trực trong W3C mà còn tích cực đóng góp bằng cách gởi những đề
nghị. Tại Microsoft, khi tiêu chuẩn về XML chưa được hoàn thành thì các sản phẩm
của Microsoft tuân thủ những gì có vẻ được đa số công nhận và khi tiêu chuẩn hoàn
thành thì tuân thủ hoàn toàn.
Công cụ làm việc với XML sáng giá nhất do Microsoft phát triển là ActiveX
MSXML. Nó được dùng trong Visual Basic 6, ASP (Active Server Pages) của IIS
và Internet Explorer từ version 5.5. Hiện nay MSXML đã có version 6.0 và gồm
nhiều các modul trong đó nổi bật là: MSXML Parse (đọc và phân tích) và Validate
(kiểm tra sự hợp lệ) của XML file. MSXML cũng giúp ta dựa vào một XSL file để
transform (Chuyển đổi) một XML file thành một trang Web (HTML) hay một XML
khác.
1.3.

Ứng dụng của XML trong các hệ thống thông tin hiện đại
Dưới sự tác động của Microsoft và các hãng lập trình hàng đầu, cũng như

những người yêu thích công nghệ. Ngày nay, XML xuất hiện hầu như ở tất cả các
hệ điều hành, ngôn ngữ lập trình, hệ quản trị cơ sở dữ liệu cũng như các ứng dụng
phát triển.
Từ sau hệ điều hành WindowsXP của Microsoft việc xuất hiện của XML
càng phổ biến hơn, nó xuất hiện và được hỗ trợ tại hầu hết các ứng dụng nền của hệ
điều hành, của các ứng dụng Plugin. Windows xây dựng cả một FrameWork để hỗ
trợ cho XML và FrameWork này ngày càng được bổ xung và hoàn thiện. Cho tới
thời điểm hiện tại, các phần mềm được sử dụng nhiều của Microsoft mà tại đó ta
đều thấy sự xuất hiện không thể thiếu của XML như: Microsoft Word, Microsoft
Excel, InfoPath.. hay trong công cụ lập trình Visual Studio.


-6-


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

Các hệ quản trị cơ sở dữ liệu quan hệ cũng nhận ra được vai trò to lớn của
XML cụ thể như SQL Server đã bắt chấp nhận XML như một kiểu dữ liệu từ phiên
bản SQL Server 2005 và cùng với kiểu dữ liệu là những cú pháp hỗ trợ cho việc
khai phá dữ liệu XML ngay trên nền hệ quản trị cơ sở dữ liệu. Đến phiên bản SQL
Server 2008 thì sự hỗ trợ càng trở nên rõ nét với việc tối ưu hóa về tốc độ cho kiểu
dữ liệu cũng như các thao tác xử lý với kiểu dữ liệu XML.
Ngoài ra còn rất nhiều các ứng dụng khác do các lập trình trên thế giới phát
triển sử dụng cũng như hỗ trợ XML.

-7-


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

Chương 2. KHAI PHÁ DỮ LIỆU XML
2.1.


Biểu diễn dữ liệu trong XML

2.1.1. Tạo một tài liệu XML đúng cấu trúc
Một tài liệu XML được gọi là có cấu trúc đúng khi nó tuân thủ đầy đủ các
luật lệ về thẻ (Tag), phần tử (Element), thuộc tính (Attribute), giá trị (Value)… chứa
bên trong để bộ phân tích có thể nhận diện. Cụ thể như sau:
- Có một phần tử gốc duy nhất gọi là Root Element hay Document Element
nó chứa tất cả các phần tử khác trong tài liệu;
- Mỗi một thẻ mở, phải có một thẻ đóng giống như nó;
- Trong tên của thẻ có phân biệt chữ hoa, chữ thường;
- Mỗi một phần tử con phải nằm trọn trong phần tử cha của nó;
- Giá trị của thuộc tính phải được đặt trong một cặp ngoặc kép.
Tại luật thứ nhất: tài liệu XML sau không đúng cấu trúc vì nó không có phần
tử gốc:
<Product ProductID="1">Chair</Product>
<Product ProductID="2">Desk</Product>

Tài liệu XML như trên được gọi là XML phân mảnh, muốn cho tài liệu này
trở thành đúng cấu trúc ta phải đặt các phần tử vào trong một phần tử gốc, ví dụ:
<Catalog>
<Product ProductID="1">Chair</Product>
<Product ProductID="2">Desk</Product>
</Catalog>

Tại luật thứ hai: Mỗi một thẻ mở phải có một thẻ đóng giống như nó, trường
hợp một thẻ mà không có dữ liệu thì có thể viết ngắn gọn lại như sau <Tag /> như
vậy tài liệu sau không đúng cấu trúc:
<Order>
<OrderDate>2002-6-14</OrderDate>
<Customer>Helen Mooney</Customer>

<Item>

-8-


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

<ProductID>2</ProductID>
<Quantity>1</Quantity>
<Item>
<ProductID>4</ProductID>
<Quantity>3</Quantity>
</Item>
</Order>

Để tài liệu XML trên được đúng cấu trúc, ta cần có thẻ đóng cho thẻ <Item>
đầu tiên.
<Order>
<OrderDate>2002-6-14</OrderDate>
<Customer>Helen Mooney</Customer>
<Item>
<ProductID>2</ProductID>
<Quantity>1</Quantity>
</Item>
<Item>
<ProductID>4</ProductID>

<Quantity>3</Quantity>
</Item>
</Order>

Tại luật thứ ba: Tên của thẻ có phân biệt chữ hoa chữ thường, như vậy
OrderDate khác với Orderdate do đó tài liệu XML sau không đúng cấu trúc:
<Order>
<OrderDate>2001-01-01</Orderdate>
<Customer>Graeme Malcolm</Customer>
</Order>

Để tài liệu XML này trở thành đúng cấu trúc ta phải chuyển chữ d trong thẻ
đóng thành D:
<Order>
<OrderDate>2001-01-01</OrderDate>
<Customer>Graeme Malcolm</Customer>
</Order>

-9-


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

Tại luật thứ bốn: Mỗi một phần tử con phải nằm trọn trong phần tử cha của
nó, tức là không thể bắt đầu một phần tử mới khi chưa kết thúc một phần tử trước
đó. Như vậy ví dụ sau không đúng:

<Catalog>
<Category CategoryName="Beverages">
<Product ProductID="1">
Coca-Cola
</Category>
</Product>
</Catalog>

Tại ví dụ này thẻ đóng </Category> xuất hiện trước khi thẻ đóng </Product>
xuất hiện. Như vậy ta có thể chỉnh cho nó đúng cú pháp lại như sau:
<Catalog>
<Category CategoryName="Beverages">
<Product ProductID="1">
Coca-Cola
</Product>
</Category>
</Catalog>

Tại luật thứ năm: Giá trị của các thuộc tính phải được đặt trong một cặp
ngoặc kép:
<Catalog>
<Product ProductID=1>Chair</Product>
<Product ProductID='2">Desk</Product>
</Catalog>

Các giá trị 1, 2 không nằm trong một cặp ngoặc kép, do đó tài liệu XML trên
không đúng cú pháp. Ta cần phải sửa lại như sau:
<Catalog>
<Product ProductID="1">Chair</Product>
<Product ProductID="2">Desk</Product>

</Catalog>

- 10 -


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

Ví dụ về một tài liệu XML chuẩn:
<BookOrder OrderNo="1234">
<OrderDate>2001-01-01</OrderDate>
<Customer>
<Title>Mr.</Title>
<FirstName>Graeme</FirstName>
<LastName>Malcolm</LastName>
</Customer>
<Book>
<Title>Treasure Island</Title>
<Author>Robert Louis Stevenson</Author>
</Book>
</BookOrder>

2.1.2. Chỉ thị xử lý và ghi chú
Ngoài các dữ liệu cần thiết, một tài liệu XML còn chứa các chỉ thị xử lý cho
bộ phân tích và các ghi chú cho người đọc tài liệu.
Chỉ thị xử lý (Processing Instruction) được đặt trong cặp thẻ <? và ?> thông
thường nó cho biết phiên bản của tài liệu XML mà bộ xử lý cần làm theo, đôi khi

cho ta biết dạng mã hóa của dữ liệu trong tài liệu là gì, hoặc cách thức xác nhận tính
hợp lệ của tài liệu. Ví dụ:
<Order>
<OrderDate>2002-6-14</OrderDate>
<Customer>Helen Mooney</Customer>
<Item>
<ProductID>1</ProductID>
<Quantity>2</Quantity>
</Item>
<Item>
<ProductID>4</ProductID>
<Quantity>1</Quantity>
</Item>
</Order>

- 11 -

standalone="yes"?>


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

Trong tài liệu trên giá trị của thuộc tính version bằng “1.0” cho ta biết phiên
bản của tài liệu. Giá trị của thuộc tính encoding bằng “utf-8” cho ta biết tài liệu
được mã hóa ở chuẩn utf-8. Giá trị của thuộc tính standalone bằng “yes” cho ta biết

tài liệu này có thể được xác nhận tính hợp lệ một mình mà không cần tới DTD hay
Schema.
Cũng có một loại chỉ thị xử lý khác cho ta biết khuân mẫu của tài liệu. Ví dụ:
<?xml-stylesheet type="text/xsl" href="order.xsl"?>

Ở đây, XML stylesheet cho ta biết khuân mẫu của tài liệu thuộc loại
“text/xsl” và được chứa trong tệp “order.xsl”.
Phần ghi chú cho tài liệu XML được đặt trong cặp thẻ <!-- và --!> như sau:

standalone="yes"?>



<Order>
<OrderDate>2002-6-14</OrderDate>
<Customer>Helen Mooney</Customer>
<Item>
<ProductID>1</ProductID>
<Quantity>2</Quantity>
</Item>
<Item>
<ProductID>4</ProductID>
<Quantity>1</Quantity>
</Item>
</Order>

2.1.3. Không gian tên

Không gian tên (namespace) là một khái niệm rất quan trọng trong XML, nó
cho ta phân biệt hai hay nhiều dữ liệu khác nhau của cùng một phần tử trong tài liệu
XML. Cũng giống như trong trường hợp hai người trùng tên để phân biệt hai người
này ta phải dùng đến họ. Xét trường hợp tài liệu XML sau:

- 12 -


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

<?xml version="1.0"?>
<BookOrder OrderNo="1234">
<OrderDate>2001-01-01</OrderDate>
<Customer>
<Title>Mr.</Title>
<FirstName>Graeme</FirstName>
<LastName>Malcolm</LastName>
</Customer>
<Book>
<Title>Treasure Island</Title>
<Author>Robert Louis Stevenson</Author>
</Book>
</BookOrder>

Khi quan sát ví dụ trên, ta nhận thấy rất dễ gây nhầm lẫn trong cách dùng
phần tử Title, trong tài liệu này có 2 cách dùng Title: 1 cách chỉ về danh hiệu của

người mua (Mr. Mrs. Dr.) còn cách kia chỉ tựa đề của cuốn sách. Để tránh nhầm lẫn
ta có thể sử dụng không gian tên để xác định phần tử này thuộc không gian tên nào.
Các không gian tên được định nghĩa bởi URI (Universal Resource Identifier), một
URI cũng có thể là một URL hoặc là một định nghĩa riêng nào đó không nhất thiết
phải là một địa chỉ Internet mà chỉ cần xác định duy nhất.
Không gian tên có thể được khai báo thông qua thuộc tính xmlns như vậy
trong ví dụ ở trên ta có thể sửa lại thành:
<?xml version="1.0"?>
<BookOrder OrderNo="1234">
<OrderDate>2001-01-01</OrderDate>
<Customer xmlns=" /><Title>Mr.</Title>
<FirstName>Graeme</FirstName>
<LastName>Malcolm</LastName>
</Customer>
<Book xmlns=" /><Title>Treasure Island</Title>
<Author>Robert Louis Stevenson</Author>
</Book>

- 13 -


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

</BookOrder>

Ta đã tránh được nhầm lẫn do bên trong Customer, và Book ta lần lượt sử

dụng hai không gian tên khác nhau:
/>và />
Tuy nhiên, trong trường hợp một đơn đặt hàng có nhiều Customer và nhiều
Book thì việc liên tục thay đổi các không gian tên là không khả thi, một cách giải
quyết cho trường hợp này là sử dụng các chữ viết tắt cho không gian tên ở ngay đầu
tài liệu trong phần tử gốc, và sau đó ta có thể dùng các chữ viết tắt này để thay thế.
Thí dụ như sau:
<?xml version="1.0"?>

xmlns=" />
xmlns:cust=" />xmlns:book=" />OrderNo="1234">
<OrderDate>2001-01-01</OrderDate>
<cust:Customer>
<cust:Title>Mr.</cust:Title>
<cust:FirstName>Graeme</cust:FirstName>
<cust:LastName>Malcolm</cust:LastName>
</cust:Customer>
<book:Book>
<book:Title>Treasure Island</book:Title>
<book:Author>Robert Louis Stevenson</book:Author>
</book:Book>
</BookOrder>

Trong tài liệu XML trên ta dùng 3 không gian tên:
-

Không gian tên mặc định />
-


Không gian tên (viết tắt là
cust)

-

Không gian tên (viết tắt là book).

- 14 -


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

Các phần tử, các thuộc tính không có tiền tố ở trước như BookOrder,
OrderNo, và OrderDate, được coi như thuộc về không gian tên mặc định. Để đánh
dấu một phần tử hay thuộc tính không thuộc về không gian tên mặc định, một chữ
viết tắt, đại diện không gian tên sẽ được gắn làm tiền tố cho tên phần tử hay thuộc
tính. Thí dụ như cust:LastName, book:Title.
2.1.4. CDATA và thực thể tham chiếu
CDATA là phần dữ liệu trong tài liệu XML nằm giữa <![CDATA[ và ]]>.
Dữ liệu nằm bên trong những CDATA được giữ nguyên khi thông qua bộ phân tích,
không bị sửa đổi. Điểm nầy rất quan trọng khi ta muốn cho vào những dữ liệu có
chứa những text được xem như các đoạn đánh dấu. Ta có thể đặt những thí dụ cho
XML trong những CDATA và chúng sẽ được bộ phân tích bỏ qua. Khi dùng XSL
stylesheets để chuyển đổi một tệp XML thành HTML, có bất cứ scripting nào bạn
cũng phải đặt trong những CDATA. Dưới đây là các thí dụ dùng CDATA:
<![CDATA[...Dữ liệu được đặt tại đây...]]>

Hoặc
<SCRIPT>
function warning()
{
alert("Lỗi hệ thống");
}
]]>
</SCRIPT>
Trong XML có một số ký tự đặc biệt không thể được hiểu khi đặt trong tài
liệu, trong trường hợp muốn hiển thị các ký tự đó, ta phải sử dụng các ký tự khác để
thay thế hay còn gọi là các thực thể tham chiếu. Ví dụ:
<Order>
<OrderDate>2002-6-14</OrderDate>
<Customer>Helen & Mooney</Customer>
</Order>

- 15 -


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

Trong ví dụ trên, trong giá trị của Customer có ký tự & do đó tài liệu XML
này không đúng cấu trúc, và sẽ không thể hiểu được khi đi qua bộ phân tích, vì thế
cần thay thế nó bởi thực thể tham chiếu đến. Tài liệu XML này có thể được viết lại
như sau:

<Order>
<OrderDate>2002-6-14</OrderDate>
<Customer>Helen & Mooney</Customer>
</Order>

Như vậy sau khi qua bộ phân tích, giá trị của Customer vẫn được hiểu là
Helen & Mooney trong khi biểu diễn ở trong tài liệu thì không phải như thế. Có 5
thực thể tham chiếu sau:
Entity

Description

'

dấu nháy đơn (‘)

&

Ký hiệu và (&)

>

dấu lớn hơn (>)

<

dấu nhỏ hơn (<)

"


dấu ngoặc kép (“)

2.2.

XPath và xử lý tài liệu XML
Ta nhận thấy cấu trúc và cú pháp của XML tương đối đơn giản. Bước tiếp

theo là tìm hiểu cách nào một chương trình xử lý một tài liệu XML
Để xử lý một tài liệu XML chương trình ứng dụng phải có cách đi lại bên
trong tài liệu, lấy ra giá trị của các phần tử hay thuộc tính. Do đó người ta thiết kế
ngôn ngữ XML Path language, mà ta gọi tắt là XPath. XPath đóng một vai trò
quan trọng trong các chương trình ứng dụng vì nó cho phép ta lựa chọn hay sàng lọc
ra những tin tức nào mình muốn để trao đổi hay hiển thị.
Nếu khi làm việc với cơ sở dữ liệu SQL Server ta dùng các câu lệnh SQL
như: Select * from Table XYZ WHERE ... để trích ra một số trường từ một bảng,

- 16 -


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

thì khi làm việc với XML, một bảng dữ liệu nho nhỏ, XPath cho ta xử lý tương tự
như trong SQL Server trong SQL.
Đi tiên phong trong việc triển khai các chương trình áp dụng XPath là công
việc của các công ty phần mềm lớn như Microsoft, Oracle, Sun, IBM, v.v. Sở dĩ ta
cần có một chuẩn XPath là vì nó được áp dụng trong nhiều hoàn cảnh, nên cần phải

có một lý thuyết rõ ràng, chính xác. Ta sẽ chỉ tìm hiểu những thứ thường dùng trong
XPath, còn tất cả chi tiết hơn về XPath thì có thể tham khảo tại:
/>2.2.1. Biểu diễn XML trong XPath
XPath cho ta cách đi lại bên trong tài liệu XML và coi tài liệu XML như là
một cây (tree) với nhiều nhánh (nodes). Mỗi một phần tử hay một thuộc tính được
coi như và một nhánh của cây. Ta có thể minh họa như sau:
<?xml version="1.0"?>
<Order OrderNo="1047">
<OrderDate>2002-03-26</OrderDate>
<Customer>John Costello</Customer>
<Item>
<Product ProductID="1" UnitPrice="70">Chair</Product>
<Quantity>6</Quantity>
</Item>
<Item>
<Product ProductID="2" UnitPrice="250">Desk</Product>
<Quantity>1</Quantity>
</Item>
</Order>

Tài liệu XML được thể hiện như một cây với các phần tử là các nhánh màu
nâu và các thuộc tính là các nhánh mầu trắng.

- 17 -


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng

Đảm bảo toán 2008 - 2010

(Hình 01: Hình minh họa cách thể hiện một tài liệu XML dạng cây)
2.2.2. Đường dẫn trong XML
Ta có thể dùng XPath để chỉ định đường đi hay vị trí (Location Path) đến
nhánh nào hay trích ra (trả về) một hay nhiều nhánh thỏa đúng điều kiện yêu cầu.
Các biểu thức XPath có thể là tuyệt đối tức là lấy gốc làm chuẩn hay tương đối tức
là khởi đầu từ nhánh vừa mới được chọn. Nhánh đó được gọi là nhánh tình huống
(context node).
Có hai cách viết để diễn tả vị trí bằng XPath là viết nguyên và viết tắt. Trong
cả hai cách ta đều dùng dấu slash (/) để nói đến Document Element, tức là gốc. Ta
có thể đi lại trong các nhánh của cây giống giống như các nhánh của Windows
System Directory mà ta thấy trong Panel bên trái của Window Explorer. Ta cũng sẽ
dùng những ký hiệu như slash (/), một chấm (.) và hai chấm (..) của Windows
System File Folder cho cách viết tắt trong vị trí trong XPath để đi xuống các nhánh
con, cháu, chỉ định nhánh ngữ cảnh, hay đi ngược lên các nhánh tổ tiên.

- 18 -


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

2.2.2.1.

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

Đường dẫn tuyệt đối


Ta lấy ví dụ là tài liệu XML trong mục 2.2.1 và đi tìm một số các đường dẫn
tuyệt đối trong tài liệu này. Muốn chọn cái nhánh của phần tử Order (nó cũng là
Root Element) bằng cú pháp nguyên, ta sẽ dùng cú pháp XPath sau đây:
/child::Order
Cũng có thể viết tắt lại thành: /Oder
Để đi ra nhánh của cây, chẳng hạn đi tìm nhánh Customer bằng cách dùng
cú pháp XPath sau:
/child::Order/child::Customer
Cũng có thể viết tắt lại thành: /Order/Customer
Nếu ta muốn lấy ra một thuộc tính của nhánh, bạn phải chỉ rõ điều này bằng
cách dùng từ khóa (keyword) attribute trong cách viết nguyên hay dùng ký tự @
trong cú pháp tắt. Do đó để lấy thuộc tính OrderNo của phần tử Order, ta sẽ dùng
cú pháp XPath sau:
/child::Order/attribute::OrderNo
Hoặc dùng cú pháp tắt sau: /Order/@OrderNo
Để trích ra các nhánh con cháu, tức là các nhánh xa hơn, ta dùng từ khóa
descendant trong cú pháp nguyên hay một double slash (//) trong cú pháp tắt. Thí
dụ, để lấy ra các nhánh Product trong tài liệu, ta có thể dùng cú pháp XPath sau:
/child::Order/descendant::Product
Cú pháp tắt tương đương là: /Order//Product
Đối với những nhánh mà tên của chúng không thành vấn đề, để lấy những
nhánh này ta có thể dùng ký tự * để thay thế. Thí dụ, dùng dấu * để lấy tất cả các
nhánh con của Order, cú pháp XPath như sau:
/child::Order/child::*

Cú pháp tắt tương đương là: /Order/*

- 19 -



Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

2.2.2.2.

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

Đường dẫn tương đối

Nhiều khi đường dẫn trong Xpath là tương đối với nhánh ngữ cảnh, trong
trường hợp ấy đường dẫn diễn tả cách lấy ra một nhánh hay một số nhánh tương
đối. Thí dụ, nếu phần tử Item thứ nhất trong Order là nhánh ngữ cảnh, thì đường
dẫn tương đối để trích ra phần tử con Quantity được thể hiện bởi cú pháp Xpath
sau:
child::Quantity
Cú pháp tắt tương đương là: Quantity
Tương tự như vậy, để lấy ra thuộc tính ProductID của phần tử con Product,
thì cú pháp Xpath của đường dẫn tương đối là:
child::Product/attribute::ProductID
Cú pháp tắt tương đương là: Product/@ProductID
Để đi ngược lên phía trên của cây, ta dùng từ khóa parent (cha). Dạng tắt
tương đương của từ khóa này là hai dấu chấm (..). Thí dụ nếu nhánh ngữ cảnh là
phần tử OrderDate, thì thuộc tính OrderNo có thể được lấy ra từ phần tử Order
bằng cách sử dụng cú pháp Xpath tương đối sau:
parent::Order/attribute::OrderNo
Để ý là cú pháp trên chỉ trả về một trị số khi nhánh cha tên Order. Nếu
muốn lấy ra thuộc tính OrderNo từ nhánh cha không cần biết nó tên gì ta phải dùng
cú pháp Xpath sau:
parent::*/attribute::OrderNo

Hoặc cú pháp tắt tương đương là: ../@OrderNo
Ngoài ra, ta có thể nói đến chính nhánh ngữ cảnh bằng cách dùng từ khóa
self hoặc một dấu chấm (.) trong trường hợp cú pháp tắt. Điều này rất tiện trong vài
trường hợp, nhất là khi ta muốn biết nhánh ngữ cảnh trước đó là nhánh nào.

- 20 -


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

2.2.2.3.

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

Đường dẫn và điều kiện

Ta có thể giới hạn số nhánh lấy về bằng cách gắn thêm điều kiện sàng lọc
vào đường dẫn. Điều kiện này được gắn vào cú pháp XPath bên trong một cặp
ngoặc vuông ([]). Thí dụ, để lấy ra mọi phần tử Product có thuộc tính UnitPrice lớn
hơn 70, bạn có thể dùng cú pháp XPath sau đây:
/child::Order/child::Item/child::Product[attribute::UnitPrice>70]
Cú pháp tắt tương đương là: /Order/Item/Product[@UnitPrice>70]
Trong cú pháp của điều kiện ta cũng có thể dùng XPath tương đối , do đó
trong cú pháp điều kiện ta có thể dùng bất cứ nhánh nào. Thí dụ sau đây là cú pháp
XPath lấy về những nhánh Item có phần tử con Product với thuộc tính ProductID
có giá trị bằng 1:
/child::Order/child::Item[child::Product/attribute::ProductID=1]
Cú pháp tắt tương đương là: /Order/Item[Product/@ProductID=1]

2.2.3. Tập hợp và chỉ mục
Tập hợp các nhánh do XPath trả về được gọi là Collection. Thông thường,
trong lập trình “Collection” được dùng để nói đến một tập hợp các đối tượng cùng
loại (Objects), ta có thể lần lượt đi qua các đối tượng trong một Collection nhưng
không đảm bảo thứ tự của chúng tức là gặp đối tượng nào trước, đối tượng nào sau.
Trái lại, trong chuẩn XPath, khi một Collection được trả về bởi một truy vấn
XPath, nó giữ nguyên thứ tự các nhánh và cấp bậc của chúng trong tài liệu XML.
Tức là nếu XPath trả về một cành gồm nhiều nhánh thì trừ những nhánh không thỏa
điều kiện, các nhánh còn lại vẫn giữ đúng vị trí trên cành.
Vì các thuộc tính của một phần tử không có thứ tự, nên chúng có thể nằm lộn
xộn trong một Collection. Một Collection được xem như một mảng (Array). Muốn
trực tiếp đến một nhánh nào đó trong Collection ta có thể dùng một chỉ mục (index)
trong cặp ngoặc vuông. Nhánh thứ nhất có chỉ mục là 1. Ví dụ sau:

- 21 -


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

Author[1] trả về phần tử Author đầu tiên.
Author[FirstName][3] phần tử Author thứ 3 có một phần tử con là FirstName
2.2.4. Từ khóa và các phép toán
2.2.4.1.

Từ khóa


Trong cú pháp của đường dẫn trong XPath các từ khóa được dùng để chỉ các
mối liên hệ giữa các nhánh và được dùng trong nhánh ngữ cảnh. Dưới đây là bảng
liệt kê các từ khóa.
Từ khóa
Ancestor::

Ý nghĩa
Tổ tiên của nhánh ngữ cảnh, bao gồm có cha, ông nội, ông cố
.v.v., do đó từ khóa ancestor:: luôn luôn kể cả nhánh gốc trừ khi
chính nhánh ngữ cảnh là nhánh gốc.

ancestor-or-

Chính nhánh ngữ cảnh và tổ tiên của nó. Từ khóa ancestor-or-

self::

self:: luôn luôn kể cả nhánh gốc.

attribute::

Các thuộc tính của nhánh ngữ cảnh.

child::

Con cái của nhánh ngữ cảnh. Tuy nhiên, thuộc tính hay không
gian tên của nhánh không được xem là con cái của nhánh ngữ
cảnh.

descendant::


Con cháu của nhánh ngữ cảnh. Từ khóa descendant:: không bao
giờ chứa thuộc tính hay không gian tên của nhánh.

following::

Mọi nhánh hiện ra sau nhánh ngữ cảnh trên cây, không kể con
cháu, thuộc tính, hay không gian tên của nhánh.

following-

Mọi nhánh nằm ngay sau nhánh ngữ cảnh. Từ khóa following-

sibling::

sibling:: chỉ những nhánh con, của cùng một nhánh cha, nằm

- 22 -


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

trên cây sau nhánh ngữ cảnh. Nếu nhánh ngữ cảnh là thuộc tính
hay không gian tên thì following-sibling:: sẽ trả về giá trị rỗng.
namespace::


Những không gian tên của nhánh ngữ cảnh.

parent::

Nhánh cha của nhánh ngữ cảnh nếu nó có cha. Nhánh cha là
nhánh nằm ngay phía trên context node trên cây.

preceding::

Mọi nhánh hiện ra trước nhánh ngữ cảnh trên cây, không kể các
nhánh tổ tiên, thuộc tính, hay không gian tên. Một cách để nhận
diện từ khóa preceding:: mọi nhánh đã kết thúc hoàn toàn trước
khi nhánh ngữ cảnh bắt đầu.

preceding-

Mọi nodes anh (nằm trước) nhánh ngữ cảnh. Từ khóa

sibling::

preceding-sibling:: nói đến chỉ những nhánh con, của cùng một
nhánh cha, nằm trên cây và trước nhánh ngữ cảnh. Nếu nhánh
ngữ cảnh là thuộc tính hay không gian tên thì precedingsibling:: trống rỗng.

self::

Là chính nhánh ngữ cảnh.

2.2.4.2.


Phép toán sàng lọc (Filter)

Như ta đã thấy ở trên, để giới hạn chỉ lấy ra những nhánh thỏa đáng một điều
kiện, lọc các dữ liệu (Filter) vào Collection. Sàng lọc là mệnh đề giống mệnh đề
WHERE trong ngôn ngữ SQL của cơ sở dữ liệu.
Nếu một Collection nằm giữa một filter, nó sẽ cho kết quả TRUE nếu
Collection trả về ít nhất một nhánh và FALSE nếu Collection trống rỗng (empty).
Filters luôn luôn được tính theo ngữ cảnh của nó. Ta có thể hiểu rõ thông qua các
thí dụ sau:

- 23 -


Nghiên cứu một số kỹ thuật khai phá dữ liệu XML
Ứng dụng trong thực hiện xử lý dữ liệu quan hệ

Cú pháp
book[excerpt]

Bùi Ngọc Dũng
Đảm bảo toán 2008 - 2010

Ý nghĩa
Mọi phần tử book có chứa ít nhất một phần tử
excerpt

book[excerpt]/title

Mọi phần tử title nằm trong những phần tử book
có chứa ít nhất một phần tử excerpt


book[excerpt]/author[degree] Mọi phần tử author có chứa ít nhất một phần tử
degree và nằm trong những phần tử book có chứa
ít nhất một phần tử excerpt
book[author/degree]

Mọi phần tử book có chứa ít nhất một phần tử
author với ít nhất một phần tử degree con

book[excerpt][title]

Mọi phần tử book có chứa ít nhất một phần tử
excerpt và ít nhất một phần tử title.

2.2.4.3.

Phép toán so sánh (Compare)

Để so sánh hai đối tượng trong XPath ta dùng dấu (=) cho bằng nhau và (!=)
cho không bằng nhau. Mọi phần tử và thuộc tính là xâu (string), nhưng được xem
như những con số khi đem ra so sánh. Ví dụ:
Cú pháp
author[lastname = "Smith"]

Ý nghĩa
Mọi phần tử author có chứa ít nhất một
phần tử lastname với trị số bằng Smith

author[lastname[1] = "Smith"]


Mọi phần tử author có có phần tử
lastname con đầu tiên với trị số bằng
Smith

- 24 -


×