1. Trang chủ
  2. » Công Nghệ Thông Tin

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ệ

69 347 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 69
Dung lượng 837,42 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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ứ

Trang 1

-

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

Trang 2

- 1 -

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

Trang 3

- 2 -

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 

Trang 4

- 3 -

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 XMLTRONG 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 

Trang 5

- 4 -

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

Trang 6

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

Trang 7

- 6 -

đị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

Trang 8

- 7 -

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

Trang 9

- 8 -

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 >

Trang 11

- 10 -

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:

< Product ProductID = >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 >

Trang 12

< 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ụ:

<?xml version = "1.0" encoding = "utf-8" standalone = "yes" ?>

Trang 13

- 12 -

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:

<?xml version = "1.0" encoding = "utf-8" standalone = "yes" ?>

<! Below are details of a purchase 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:

Trang 14

< 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:

< FirstName >Graeme</ FirstName >

< LastName >Malcolm</ LastName >

</ Customer >

< Book xmlns = "http://www.northwindtraders.com/book" >

< Title >Treasure Island</ Title >

< Author >Robert Louis Stevenson</ Author >

</ Book >

Trang 15

< 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 http://www.northwindtraders.com/order;

- Không gian tên http://www.northwindtraders.com/customer (viết tắt là

cust)

- Không gian tên http://www.northwindtraders.com/book (viết tắt là book)

Trang 16

- 15 -

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 ]]>

< Order >

< OrderDate >2002-6-14</ OrderDate >

< Customer >Helen & Mooney</ Customer >

</ Order >

Trang 17

- 16 -

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:

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

&gt; dấu lớn hơn (>)

&lt; dấu nhỏ hơn (<)

&quot; 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,

Trang 18

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: http://www.w3c.org/TR/xpath

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:

Trang 19

- 18 -

(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

Trang 20

- 19 -

2.2.2.1 Đườ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/*

Trang 21

- 20 -

2.2.2.2 Đườ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:

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

Trang 22

- 21 -

2.2.2.3 Đườ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

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:

Trang 23

- 22 -

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

Ancestor:: 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-self::

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

ancestor-or-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-sibling::

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

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

Trang 24

- 23 -

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-sibling::

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

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ì

preceding-sibling:: 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:

Trang 25

- 24 -

book[excerpt] 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ử

author[lastname = "Smith"] 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

Trang 26

- 25 -

author/degree[@from != "Harvard"] Mọi phần tử degree, là con một phần tử

author, và có một thuộc tính from với trị

số không phải là "Harvard"

author[lastname = /editor/lastname] Mọi phần tử author có chứa một phần tử

lastname bằng với phần tử lastname là con của gốc editor

author[ = "John"] Mọi phần tử author có trị số là “John” 2.2.4.4 Phép toán hội (Union)

Trong ngôn ngữ Xpath hỗ trợ phép toán hội (Operator Union), giống như

phép toán Logical OR (hoặc là) Dưới đây là vài thí dụ:

(book | magazine)/price Mọi phần tử price là con của phần tử

book hay phần tử magazine 2.2.4.5 Các phép toán khác

Để chọn những loại nhánh khác hơn là nhánh phần tử, ta dùng Node-Type Test Mục đích của việc dùng Node-Type Test là để chỉ định sự lựa chọn khác thường Thí dụ như, descendant::text() cho ta mọi text nhánh là con cháu của

Trang 27

- 26 -

nhánh ngữ cảnh, dù rằng loại nhánh chính của con cháu nhánh ngữ cảnh là phần tử

Có 4 loại Node-Type Tests như liệt kê dưới đây:

comment() Mọi ghi chú của

nhánh

following::comment() chọn mọi ghi

chú của nhánh hiện ra sau nhánh ngữ cảnh

hiện ra trước nhánh ngữ cảnh

processing-instruction()

Mọi chỉ thị xử lý của nhánh

self::processing instruction() chọn

mọi chỉ thị xử lý nhánh trong nhánh ngữ cảnh

text() Mọi text của

./author Mọi phần tử author trong ngữ cảnh trước

cú pháp này tương đương với author

/bookstore Phần tử gốc tên là bookstore

//author Mọi phần tử tên là author trong tài liệu

book[/bookstore/@specialty =

@style]

Mọi phần tử book có thuộc tính style với giá trị bằng giá trị của thuộc tính specialty của phần tử gốc bookstore của tài liệu

Trang 28

Mọi phần tử emph bất cứ nơi nào dưới excerpt

là con của những phần tử book , bất cứ nơi nào dưới phần tử bookstore

.//title Mọi phần tử title một hay nhiều bậc thấp hơn

trong nhánh ngữ cảnh

author/* Mọi phần tử là con của các phần tử con author book/*/lastname Mọi phần tử lastname là cháu của các phân từ

con của phần tử book

*[@specialty] Mọi phần tử con có thuộc tính specialty

@style Thuộc tính style của nhánh ngữ cảnh

price/@exchange Thuộc tính exchange của những phần tử price

trong ngữ cảnh, tức là những phần tử price của

nhánh ngữ cảnh

price/@exchange/total Trả về một tập rỗng, vì thuộc tính không có

phần tử con Cú pháp này được chấp nhận trong

Trang 29

- 28 -

văn phạm của XML Path Language, nhưng không thật sự hợp lệ

book[@style] Mọi phần tử book có thuộc tính style trong

nhánh ngữ cảnh Lưu ý phần nằm trong ngoặc vuông là điều kiện của phần tử book

book/@style Thuộc tính style của mọi phần tử book trong

nhán ngữ cảnh Ở đây không có điều kiện như hàng trên Ta nói đến thuộc tính hay phần tử nằm bên phải nhất

author[1] Phần tử author thứ nhất trong nhánh ngữ cảnh author[firstname][3] Phần tử author thứ ba có một phần tử con

firstname

my:book Phần tử book từ không gian tên my

my:* Mọi phần tử trong không gian tên my

Trang 30

- 29 -

Chương 3 SQL SERVER VÀ DỮ LIỆU XML 3.1 SQL Server và kiểu dữ liệu XML

Cùng với sự phát triển của XML, các hệ quản trị cơ sở dữ liệu bắt đầu có sự

hỗ trợ cho ngôn ngữ này Điển hình là việc hệ quản trị cơ sở dữ liệu SQL Server đã coi XML như là một kiểu dữ liệu, và ngày càng cải tiến khả năng hỗ trợ cho loại ngôn ngữ này

Ở SQL Server 2000, ta có thể nhận được dữ liệu quan hệ ở dạng XML với cú pháp: FOR XML, hoặc lưu trữ XML như dữ liệu quan hệ trong SQL Server sử dụng mệnh đề OPEN XML Cho tới SQL Server 2005 có thêm một kiểu dữ liệu mới là XML cho phép ta viết mã nhận dữ liệu XML như là XML, tránh việc biến đổi từ XML thành dữ liệu quan hệ khi dùng OPEN XML Cũng từ phiên bản SQL Server

2005, ta cũng có thể dùng tài liệu giản đồ biểu diễn trong ngôn ngữ W3C XML Schema Definition (đôi khi gọi là giản đồ XSD) để chỉ ra cấu trúc hợp lệ trong XML Từ đó mở ra nhiều hướng tiếp cận cho dữ liệu XML trong hệ quản trị cơ sở

dữ liệu này

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

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

Trong SQL Server, để tạo ra một tài liệu XML ta sử dụng cú pháp sau:

Để tìm hiểu kỹ hơn, ta từng bước đi vào từng cú pháp trong cú pháp lệnh SQL trên Ta thực hành trên CSDL Northwind với các bảng dữ liệu Customer, Products, Order details

Trước tiên, ta tìm hiểu cú pháp lệnh:

FOR XML RAW [('ElementName')] }

FOR XML {{RAW [('ElementName')] |AUTO}|EXPLICIT|PATH [('ElementName')] } [,BINARY BASE64]

[,TYPE]

[,ROOT[('RootName')]

Trang 31

- 30 -

Cú pháp này cho kết quả là một tài liệu XML phân mảnh (không có phần tử gốc) và các phần tử XML này sử dụng chung một định danh nằm trong thẻ <row /> trong trường hợp sử dụng định danh khác cho thẻ thì ta sẽ truyền định danh này vào với dạng ‘ElementName’ Ví dụ:

Kết quả như sau:

< row CustomerID = BOLID " ContactName = Martín Sommer " Country = Spain " />

< row CustomerID = FISSA " ContactName = Diego Roel " Country = Spain " />

< row CustomerID = GALED " ContactName = Eduardo Saavedra " Country = Spain "

WHERE Country = 'Spain'

FOR XML RAW( 'CustomerInfo' )

Kết quả như sau:

< CustomerInfo CustomerID = BOLID " ContactName = Martín Sommer "

Trang 32

Trong trường hợp dữ liệu được truy vấn từ nhiều bảng kết quả trả về là tài liệu xml phân mảnh trong đó mỗi phần tử XML có tên là bảng đầu tiên được truy vấn đến, có thuộc tính là các trường dữ liệu tồn tại trong bảng đó và các phần tử con

là các bảng tiếp theo được truy vấn, các phần tử con này cũng chứa thuộc tính là các trường dữ liệu trong bảng tiếp theo, ví dụ:

Ví dụ 3:

SELECT P ProductID , ProductName , UnitPrice = ROUND ( UnitPrice , 2 ),

Quantity ,

Discount = CONVERT (int, Discount * 100 ),

ExtendedPrice = ROUND ( CONVERT (money, Quantity *( 1 - Discount ) *

P UnitPrice ), 2 )

FROM Products P , [Order Details] Od

WHERE Od ProductID = P ProductID and Od OrderID = 10248

FOR XML RAW

Kết quả như sau:

< row ProductID = 11 " ProductName = Queso Cabrales " UnitPrice = 21.0000 " Quantity = 12 " Discount = 0 ExtendedPrice = 252.0000 " />

< row ProductID = 42 " ProductName = Singaporean Hokkien Fried Mee "

UnitPrice = 14.0000 " Quantity = 10 " Discount = 0

ExtendedPrice = 140.0000 " />

< row ProductID = 72 " ProductName = Mozzarella di Giovanni "

UnitPrice = 34.8000 " Quantity = 5 Discount = 0 ExtendedPrice = 174.0000 "

Kết quả như sau:

< Customers CustomerID = BOLID " ContactName = Martín Sommer "

Trang 33

- Cột đầu tiên phải ở dạng số nguyên và duy nhất đối với từng dòng dữ liệu ( thường là kiểu ID), tên của cột sẽ trở thành thẻ

- Cột thứ hai cung cấp một số thẻ của phần tử cha, và tên cột này sẽ trở thành cha, bằng cách này các thẻ sẽ cung cấp các thông tin cho ta

- Các cột còn lại sẽ mang các giá trị cùng với các thông tin trong tên cột và dùng để tạo ra các dữ liệu XML, và ta cũng có thể định dạng lại các dữ liệu này để

có được các tài liệu XML khác nhau thông qua các chỉ thị

Chẳng hạn, để đưa ra được kết quả như trong ví dụ 5 ta phải làm như sau:

Ví dụ 5:

SELECT P ProductID , ProductName , UnitPrice = ROUND ( UnitPrice , 2 ),

Quantity ,

Discount = CONVERT (int, Discount * 100 ),

ExtendedPrice = ROUND ( CONVERT (money, Quantity *( 1 - Discount ) *

P UnitPrice ), 2 )

FROM Products P , [Order Details] Od

WHERE Od ProductID = P ProductID and Od OrderID = 10248

FOR XML AUTO

Kết quả như sau:

< ProductID = 11 " ProductName = Queso Cabrales " UnitPrice = 21.0000 " > < Od Quantity = 12 " Discount = 0 ExtendedPrice = 252.0000 " />

Trang 34

- 33 -

Ngoài ra ta có thể hiển thị tài liệu XML theo cách khác thông qua việc sử dụng thêm một số các chỉ thị dịch khác, chẳng hạn chỉ thị Element biến giá trị của phần tử thành giá trị của thuộc tính:

Ví dụ 6:

SELECT 1 AS Tag , NULL AS Parent , P ProductID AS [P!1!ProductID] ,

P ProductName AS [P!1!ProductName] , P UnitPrice AS [P!1!UnitPrice] ,

NULL AS [Od!2!Quantity] , Null as [Od!2!Discount] , null as

[Od!2!ExtendedPrice]

FROM Products P , [Order Details] Od

WHERE Od ProductID = P ProductID and Od OrderID = 10248

UNION ALL

SELECT 2 AS Tag , 1 AS Parent , P ProductID , P ProductName , P UnitPrice ,

Quantity , Discount = CONVERT (int, Discount * 100 ),

ExtendedPrice = ROUND ( CONVERT (money, Quantity *( 1 - Discount ) *

P UnitPrice ), 2 )

FROM Products P , [Order Details] Od

WHERE Od ProductID = P ProductID and Od OrderID = 10248

ORDER BY [P!1!ProductID] , [Od!2!Quantity]

FOR XML EXPLICIT

Kết quả như sau:

< ProductID = 11 " ProductName = Queso Cabrales " UnitPrice = 21.0000 " > < Od Quantity = 12 " Discount = 0 ExtendedPrice = 252.0000 " />

Ngày đăng: 27/07/2017, 20:30

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. Akmal B.Chaudhri, Awais Rashid, Roberto Zicari, 2003, XML Data Management: Native XML and XML-Enabled Database, Addison Wesley Sách, tạp chí
Tiêu đề: XML Data Management: Native XML and XML-Enabled Database
2. Elliotte Rusty Harold, W. Scott Means, 2004, XML in a Nutshell, 3rd Edition, O’Reilly Sách, tạp chí
Tiêu đề: XML in a Nutshell, 3rd Edition
3. Erik T. Ray, 2003, Learning XML, 2nd Edition, O'Reilly Sách, tạp chí
Tiêu đề: Learning XML, 2nd Edition
4. Graeme Malcolm, 2002 , Programing Microsoft SQL Server 2000 with XML, Microsoft Press Sách, tạp chí
Tiêu đề: Programing Microsoft SQL Server 2000 with XML
5. Thomas Rizzo, 2005, Pro SQL Server 2005, Chapter 15: Database Mirroring, Apress Sách, tạp chí
Tiêu đề: Pro SQL Server 2005, Chapter 15: Database Mirroring
6. Sujoy Paul, 2009, Pro SQL Server 2008 Replication, Apress Sách, tạp chí
Tiêu đề: Pro SQL Server 2008 Replication
7. Michael Coles, 2008 , Pro SQL Server 2008 XML, Apress Sách, tạp chí
Tiêu đề: Pro SQL Server 2008 XML
8. Niel M. Bornstein, 2003 , .NET and XML, O’Reilly Sách, tạp chí
Tiêu đề: NET and XML

HÌNH ẢNH LIÊN QUAN

(Hình 01: Hình minh họa cách thể hiện một tài liệu XML dạng cây) - 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ệ
Hình 01 Hình minh họa cách thể hiện một tài liệu XML dạng cây) (Trang 19)
(Hình 02. Hình mô tả phương thức làm việc với dữ liệu XML trong SQL Server) - 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ệ
Hình 02. Hình mô tả phương thức làm việc với dữ liệu XML trong SQL Server) (Trang 45)
Bảng với Schema mong muốn đã tồn tại hoặc không có cột mẫu yêu cầu. - 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ảng v ới Schema mong muốn đã tồn tại hoặc không có cột mẫu yêu cầu (Trang 50)
(Hình 05: Hình mô tả mô hình vận hành của giải pháp đề nghị) - 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ệ
Hình 05 Hình mô tả mô hình vận hành của giải pháp đề nghị) (Trang 61)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w