Khoá luận tốt nghiệp tìm hiểu về xml Khoá luận tốt nghiệp tìm hiểu về xml Khoá luận tốt nghiệp tìm hiểu về xml Khoá luận tốt nghiệp tìm hiểu về xml Khoá luận tốt nghiệp tìm hiểu về xml Khoá luận tốt nghiệp tìm hiểu về xml Khoá luận tốt nghiệp tìm hiểu về xml
Trang 1PHẦN 1: CƠ SỞ LÝ THUYẾT
Chương 1: TÌM HIỂU VỀ XML 1.1.Khái niệm XML:
- XML (Extensible Markup Language) ra đời vào tháng 2/1998, XML làtập con của SGML - Standard Generalized Markup Language
- Các tiêu chuẩn của XML qui định bởi W3C - World Wide WebConsortium
- Là ngôn ngữ hình thức thuộc dạng đánh dấu với:
1.2 Mục tiêu ra đời và lợi ích khi sử dụng XML
1.2.1 Mục tiêu ra đời của XML
Ngày nay, XML đang trở thành một chuẩn chung cho việc trao đổi dữ liệucho những ứng dụng chạy trên môi trường Internet Vì XML cho phép ngườidùng có thể tự định nghĩa các thẻ (tag) - những thẻ này làm cho tài liệu XML đadạng hơn những ngôn ngữ thông thường như HTML Như vậy mục tiêu đặt racho sự ra đời XML là : Đầu tiên nó sẽ tương thích với SGML, và dễ dàng viếtnhững chương trình để xử lý cho những tài liệu XML Kế tiếp, những tài liệuXML rõ ràng, dễ đọc, dễ dàng tạo lập Và điều quan trọng là nó được hỗ trợtrong nhiều ứng dụng Nói tóm lại, XML dễ dàng chia sẻ thông tin qua nhữngđịnh dạng khác nhau thông qua môi trường web XML được thiết kế để cho mọingười đều có thể sử dụng được
1.2.2 Lợi ích khi sử dụng XML
Trang 2Sau đây là một số lợi ích khi sử dụng XML:
XML được dùng để trao đổi dữ liệu
XML có thể tách rời dữ liệu, sử dụng XML, dữ liệu được chứa trong cáctập tin XML riêng biệt
XML có thể mô tả thông tin của những đối tượng phức tạp mà cơ sở dữliệu quan hệ không thể giải quyết được
XML có thể dùng để chuyển đổi dữ liệu giữa các hệ thống không tươngthích
XML dùng để chia sẻ dữ liệu với những tập tin văn bản đơn giản dễ hiểu
XML cũng được dùng để lưu trữ dữ liệu, có thể làm cho dữ liệu hữu íchhơn.Từ XML có thể tạo ra những ngôn ngữ dùng trong các lãnh vựcchuyên môn như WAP, WML,
1.3.Khái niệm tài liệu XML:
- Dạng biểu diễn thông tin được đề xuất của Công nghệ XML
- Văn bản có cấu trúc, được tạo lập dựa trên một ngôn ngữ XML nào đó.
<firstname>Richard</firstname>
<lastname>Feynman</lastname>
phần tử (element)
Trang 3<title>Waiting for the Mahatma</title>
<Tên thẻ> Nội dung </Tên thẻ>
<lastname>Narayan</lastname>
<title>Waiting for the Mahatma</title>
<published>1981</published>
Như vậy, bằng cách sử dụng định dạng XML, người dùng có thể hiểu vàbiết được tập tin trên đang muốn truyền tải nội dung gì
1.4 Tạo lập một tài liệu XML
Có nhiều cách tạo tài liệu XML nhưng đơn giản nhất là dùng trình soạnthảo Notepad để soạn thảo tài liệu XML, nhưng phải tuân thủ theo qui tắc sau: <root>
Ví dụ một trang tài liệu XML
<?xml version="1.0"?>
<thu_vien>
Trang 4<ten_sach>Ong gia va bien ca</ten_sach>
<nha_xb>Van Hoc Nghe Thuat</nha_xb>
Dòng kế <sach ID = "1029384"> là phần tử con của thu_vien, trong đó ID
là một thuộc tính của phần tử này, và 1029384 là giá trị của thuộc tính này
Bốn dòng tiếp theo là các phần tử con của sach, trong đó ten_sach,nha_xb, nam_xb, tac_gia là tên của các phần tử và Cuon theo chieu gio, ThanhNien, 1995, Margaret Michell là nội dung của các phần tử tương ứng
Hai dòng cuối cùng là dấu hiệu kết thúc của các phần tử sach, và thu_vien Một số quy định:
Tất cả thẻ trong XML phải có thẻ chấm dứt tương ứng
vd: XML sai <ten_sach>Cuon theo chieu gio
XML đúng <ten_sach>Cuon theo chieu gio</ten_sach>
Các thẻ XML phân biệt chữ hoa, chữ thường
vd: sai <Ten_Sach>Cuon theo chieu gio</ten_sach>
Trang 5đúng <ten_sach>Cuon theo chieu gio</ten_sach>
Các thẻ XML phải được lồng theo đúng thứ tự
vd: sai <ten_sach>Cuon theo chieu gio<nam_xb>1995</ten_sach></nam_xb> đúng <ten_sach>Cuon theo chieu gio</ten_sach><nam_xb>1995</nam_xb> XML phải có phần tử gốc (root element) và chỉ nên có 1, trong ví trên làthu_vien
Các giá trị thuộc tính của XML phải để trong ngoặc kép
vd: sai <sach ID= 1029384>
đúng <sach ID="1029384">
Tên các phần tử không được có khoảng trắng
vd: sai <ten sach>Cuon theo chieu gio</ten sach>
đúng <ten_sach>Cuon theo chieu gio</ten_sach>
1.5 Cấu trúc & cú pháp
1.5.1 Cấu trúc:
Một tập tin XML là tập tin văn bản thuần tuý, có phần mở rộng là xml vàgồm có 3 phần chính:
Phần khai báo: cho biết đây là 1 tập tin XML
Phần liên kết: định nghĩa kiểu, thông tin về các liên kết (nếu có), thông tinchỉ định cách thức xử lý (processing instructions) đối với văn bản XMLnày Phần này không bắt buộc phải có
Phần nội dung là phần chính của XML, nó chứa đựng dữ liệu cần chứatrong tập tin XML Phần nội dung có cấu trúc hình cây:
- Toàn bộ tập tin XML chỉ có 1 phần tử gốc duy nhất
- Bên trong phần tử gốc có thể có nhiều phần tử con
- Các phần tử con có thể có thể nhiều phần tử con và cứ thế tiếp tục
Trang 6 Một tài liệu XML Well-Formed
Phải có một root (gốc) Element duy nhất, gọi là DocumentElement, nó chứa tất cả các Elements khác trong tài liệu
Mỗi opening Tag phải có một closing Tag giống như nó
Tags trong XML thì case sensitive, tức là opening Tag và closingTag phải được đánh vần y như nhau, chữ hoa hay chữ thường
Mỗi Child Element phải nằm trọn bên trong Element cha của nó.Attribute value trong XML phải được gói giữa một cặp ngoặc képhay một cặp apostrophe (nháy đơn)
Valided Một văn bản XML được gọi là Valided thì trước hết nó phải là
văn bản Well-Formed và phải phù hợp với tất cả các định nghĩa trong mộtđặc tả chung cho các văn bản có cùng cấu trúc, gọi là DTD (DocumentType Definition)
Nói cách khác, văn bản XML được coi là Valided nếu nó không chứa bất
kỳ phần tử nào mà không được định nghĩa trước trong DTD và thứ tự xuất hiện,
số lần xuất hiện của một phần tử phải phù hợp với các đặc tả của DTD
Trang 7Để có thể trao đổi thông tin có cấu trúc, hai cơ sở dữ liệu phải thống nhấtdùng chung một đặc tả DTD cho các văn bản XML Tuy nhiên với các văn bảnphi cấu trúc thì không nhất thiết phải tuân thủ hoàn toàn chuẩn về tính Validedcủa một tài liệu XML, mà chỉ cần một phần trong chúng chứa những thông tinhữu ích giúp cho việc mô tả tính chất và nội dung của bản thân tài liệu Cácthông tin mô tả này còn gọi là Meta-Data(Dữ liệu mô tả về các dữ liệu).
1.5.2.1.DTD (Document Type Definition)
Định nghĩa kiểu dữ liệu cho các phần tử thẻ còn gọi là định nghĩa kiểu tư
liệu Document Type Definition (DTD).
Cú pháp định nghĩa và khai báo kiểu tư liệu cho các phần tử thẻ :
< !DOCTYPE root-name [DTD]
>
Để bắt đầu định nghĩa kiểu tư liệu cho các phần tử XML dùng khai báo:
<! DOCUMENT rootname [DDT]> Ngoài ra còn có một số khai báo khác
DTD là định nghĩa cho phần tử trong tài liệu
DTD cần theo cú pháp qui định của tổ chức XML W3C
- Phần khai báo định nghĩa kiểu tư liệu đặt ở phần khởi đầu tài liệu XML Cónhiều mẫu khai báo :
< !DOCTYPE root-name [DTD]>
< !DOCTYPE root-name SYSTEM URL>
< !DOCTYPE root-name SYSTEM URL [DTD]>
Trang 8 Các kiểu dữ liệu của phần tử và thuộc tính
Lí do sử dụng XML Schema:
XML Schema là một sự thay thế cho DTD
Hỗ trợ nhiều loại dữ liệu
Sử dụng cú pháp XML
Bảo toàn sự giao tiếp dữ liệu
Ràng buộc khóa và tham chiếu mạnh hơn DTD
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
Trang 9Xây dựng lược đồ từ nhiều thành phần
<include>: giống như #include trong ngôn ngữ C
schemaLocation: cho biết nơi để lấy thông tin
Khai báo phần tử trong XML Schema
Phần tử <schema> là phần tử gốc trong các tài liệu XML Schema
Trang 10 Phần tử và loại dữ liệu trong lược đồ được khai báo trong namespacehttp://www.w3.org/2001/XMLSchema và có tiền tố là xs
Kiểu giản đơn (Simple element): là một phần tử XML chỉ có kiểu
dữ liệu text, mà không có thuộc tính hoặc không thể chứa các phần
tử khác
Kiểu text có thể có nhiều loại
Kiểu phức hợp (Complex element): là một phần tử XML có thuộctính, hoặc chứa các phần tử con khác
1.5.4 Cú pháp
Có các qui tắc về cú pháp để soạn thảo một tập tin XML:
Dòng đầu tiên của tập tin XML là dòng khai báo Vd:
<?xml version="1.0" standalone="yes/no" encoding="UTF-8"?>
version: hiện tại đang là 1.0, version báo cho bộ xử lý XML biết nó sẽ tuân thủcác qui định về XML version 1.0
Nếu standalone = yes thì bộ xử lý XML sẽ tìm văn bản định nghĩa DTD đikèm, từ đó mà xử lý phần nội dung XML theo qui định của DTD
encoding: phiên bản XML 1.0 xem UTF-8 là mặc định, có thể bỏ qua khai báonày
Toàn bộ dòng trên phải được viết bằng chữ thường
Tuân thủ các quy định của văn bản định dạng DTD
Thống nhất trong cách dùng chữ HOA, chữ thường cho tên của phần tử
Trang 11 Hoặc dùng toàn chữ thường, toàn chữ hoa, hoặc chỉ viết hoa ký tự đầu tiên
Đặt giá trị thuộc tính trong dấu ngoặc đơn hoặc ngoặc kép
Nhớ đóng tất cả các thẻ (mọi thẻ mở phải có thẻ kết) kể cả các thẻ rỗng(thẻ không có giá trị)
Các thẻ rỗng có 2 cách viết: <the_rong></the_rong> hoặc <the_rong />
Thuộc tính là tùy chọn có hoặc không
Nội dung của phần tử có thể là:
Văn bản thuần túy (dữ liệu đơn): <hoten>Nguyen A</hoten>
Dữ liệu phức, trong đó chứa các phần tử con:
<hoten><ho>Nguyen</ho><ten>A</ten></hoten>
Rỗng: <hoten />
Khoảng trắng trong nội dung không bị cắt bớt như HTML
Nên phân biệt phần tử và thẻ Khi nói đến phần tử là nói đến toàn bộ khối dữ liệubắt đầu từ thẻ mở đến thẻ đóng
Tên của thẻ do người dùng đặt, do đó nên chọn tên có ý nghĩa và dẽ nhớ.Tên của thẻ tuân theo các qui định:
Không bắt đầu bằng số hoặc các dấu đặc biệt
Có thể chứa chữ, số và các ký tự khác
Không chứa khoảng trắng
Không bắt đấu bằng 3 chữ xml hay XML
Các phần tử có mối liên hệ cha - con nếu được đặt lồng nhau
1.6.2 Phần tử gốc (root):
Trang 12Trong tài liệu XML, chỉ có một phần tử gốc, và phần tử này sẽ chứa tất cảnhững phần tử của tài liệu XML do chúng ta tạo ra.
1.6.3.Thuộc tính (Attributes):
Thuộc tính của 1 phần tử cung cấp thông tin bổ sung về phần tử đó
Thuộc tính của 1 phần tử luôn được đặt bên trong thẻ của phần tử đó
Thuộc tính được khai báo theo công thức:
tên_thuộc_tính = "giá_trị_thuộc_tính"
Nếu trong thuộc tính có dấu " thì dùng kết hợp dấu đơn và kép:
<cau_thu nick="ông 'Pele' đen">
Thuộc tính thường chứa thông tin cần thiết cho phần mềm hơn là chongười xem
Ví dụ có văn bản XML như sau:
Trang 13<header>Hello</header>
<noi_dung>Sao? Luc nay khoe khong?"</noi_dung>
</e_mail>
Một số nhược điểm khi dùng thuộc tính:
Thuộc tính không thể chức nhiều giá trị, phần tử thì có thể tạo phần tử con
Thuộc tính khó mở rộng về sau
Thuộc tính không mô tả cấu trúc của 1 văn bản XML
Thuộc tính khó truy xuất bằng ngôn ngữ lập trình hơn phần tử (vì các thưviện hàm điều khiển thuộc tính không nhiều)
Thuộc tính khó tương thích với văn bản định dạng DTD hơn phần tử
1.6.4 Chú thích (Comments)
Giống như HTML, trong văn bản XML bạn có thể đặt chú thích vào đểgiải thích điều gì đó cho người đọc mà không ảnh hưởng đến cấu trúc của toàn
bộ văn bản XML Chú thích được thêm vào theo công thức sau:
<! đặt nội dung chú thích nơi đây >
Trang 141.6.5 CDATA
CDATA (character data) nói cho bộ phân tích XML biết toàn bộ nội dungđặt trong CDATA là văn bản thuần túy, không cần phân tích chi tiết bên trong CDATA được dùng khi nội dung của 1 phần tử là 1 đoạn văn bản quá dài vớinhiều ký tự đặc biệt
CDATA có cú pháp như sau:
<![CDATA[ đặt nội dung văn bản nơi đây ]]>
CDATA bắt đầu bằng <![CDATA[
Sau đó là nội dung văn bản
CDATA không thể chứa một CDATA khác
Không có khoảng trắng trong thẻ <![CDATA[ và ]]>
Trang 15Khóa tắt (entity) là 1 từ khóa dùng viết tắt thay cho 1 đoạn văn bản, hay từ khác Khóa tắt được đưa vào XML dưới dạng:
&tên-khóa;
Bắt đầu bằng dấu & đến tên khóa, sau đó dấu ;
Khóa tắt là khái niệm dùng chung cho HTML và XML Ví dụ trong HTML cụm
< thay thế cho <
Lợi ích của việc dùng khóa tắt là:
Giảm công sức đánh máy, nếu gặp phải 1 đoạn văn mà xuất hiện trênnhiều tài liệu khác nhau, cần đặt khóa tắt cho đoạn văn bản đó
Giảm lỗi, dĩ nhiên Khi đánh máy 1 cụm từ thay cho 1 đoạn văn bản thì ítlỗi hơn
Sửa đổi dễ dàng Nếu muốn sửa đoạn văn bản trong khóa tắt thì chỉ sửatrong phần định nghĩa
Khóa tắt có thể dùng để giữ chỗ cho các thông tin còn chưa rõ ràng, sẽ cậpnhật sau này
Khóa tắt được định nghĩa theo 3 cách:
Định nghĩa cục bộ ngay trong văn bản XML, tuy nhiên chỉ dùng cho mỗivăn bản XML đó thôi
Định nghĩa nơi khác và đặt phần liên kết trong văn bản XML
Định nghĩa trong văn bản định dạng DTD đi kèm với văn bản XML đó Sau đây là cú pháp định nghĩa khóa tắt cục bộ:
<!DOCTYPE [ <!ENTITY tên_khóa "nội_dung_văn bản" >
CDATA bắt đầu bằng <!DOCTYPE [ <!ENTITY toàn bộ chữ in hoa
Sau đó là tên khóa, ghi nhớ rằng tên sẽ phân biệt chữ hoa chữ thường
Phần nội dung phần văn bản tiếp theo sau và cần viết tắt đặt trong dấu nháy đôi " Kết thúc bằng >
<?xml version="1.0" ?>
<!DOCTYPE [
<!ENTITY copyright "Copyright 2002 www.ViDu.com All rights reserved.Please do not copy or redistribute without authorization For authorization,contact root@ViDu.com." >
Trang 161.7.Xử lý đọc ghi tài liệu XML
Sử dụng XMLreader và XML writer để đọc và ghi dữ liệu:
XmlReader và XmlWriter là 2 lớp ảo quan trọng nhất trong mô hình đốitượng XML của NET Framework
o XmlReader cung cấp các API để đọc tài liệu XML
o XmlWriter cung cấp các API để tạo ra các tài XML theo chuẩn củaW3C
o Microsoft áp dụng kết hợp ý tưởng của DOM và SAX trong việcthiết kế và xây dựng 2 lớp này
o XmlReader và XmlWriter sử dụng mô hình stream để đọc/ghi từngphần của tài liệu XML
o Do XmlReader và XmlWriter đều là abstract class nên khi sử dụng,cần phải dùng các lớp cụ thể kế thừa từ các lớp này
Trang 17o Sử dụng các lớp XmlTextReader, XmlNodeReader hay XslReader
Trang 18 XmlReader cung cấp một số hàm để thao tác trên kiểu và giá trị của nodehiện tại
Khi hết stream, Read( ) sẽ trả về giá trị False
Ví dụ: đọc và duyệt qua từng node của tài liệu XML và xuất tên của cácelement trong tài liệu
public void DisplayElements( XmlReader reader )
o Thuộc tính NodeType trả về kiểu node (tương tự DOM)
Với mỗi node đang được đọc, có thể lấy thông tin về giá trị và các thôngtin liên quan đến node đó
o Thuộc tính Value trả về giá trị của node
Trang 19 XmlReader cung cấp các hàm trả về giá trị theo từng kiểu dữ liệu cụ thể(ReadInt16, ReadDouble, ReadString, …)
public void DisplayNode( XmlReader node )
Trang 20 Attribute là thành phần bên trong của element nên hàm Read( ) KHÔNG
duyệt vào các node attribute!!!
Để truy cập các attribute của element hiện tại, sử dụng hàm
Trang 21 XmlWriter cung cấp các hàm để ghi dữ liệu có kiểu cụ thể (nhưWriteInt32( ), WriteDouble( ), WriteString( )…)
public static void Main( String[] args )
{
/* Instantiates an XmlTextWriter that writes to the console */
XmlTextWriter writer = new XmlTextWriter( Console.Out );
/* Use indenting for readability */
Trang 23Cách đơn giản nhất là dùng văn bản hướng dẫn hiển thị dạng CSS (CascadingStyle Sheet) như ví dụ sau đây:
bookstore {background-color: #ffffff; width: 100%;}
book {display: block; margin-bottom: 30pt; margin-left: 0;}
title {color: #FF0000; font-size: 16pt;}
author {color: #0000FF; font-size: 16pt; }
year, publisher {Display: block; color: #000000; margin-left: 20pt;}
lưu văn bản trên vào 1 tập tin với tên bookstore.css, sau đó thêm dòng
<?xml-stylesheet type="text/css" href="bookstore.css"?>
vào phần khai báo của văn bản XML như sau:
Trang 25</body>
</html>
lưu văn bản trên vào 1 tập tin với tên thucdon.xsl, sau đó thêm dòng
<?xml-stylesheet type="text/css" href="thucdon.css"?>
vào phần khai báo của văn bản XML như sau:
Nạp dữ liệu vào DataSet
static void FillMyDataSet(DataSet ds)
{
string strConn, strSQL;
strConn = "Data Source= localhost;" +
Trang 26"Initial Catalog=Northwind; Integrated Security = true; Trusted_Connection=Yes;";
strSQL = "SELECT OrderID, CustomerID, OrderDate FROM Orders " +
"WHERE CustomerID = 'GROSR'";
SqlDataAdapter daOrders, daDetails;
daOrders = new SqlDataAdapter(strSQL, strConn);
strSQL = "SELECT OrderID, ProductID, Quantity, UnitPrice " +
"FROM [Order Details] WHERE OrderID IN (SELECT " +
"OrderID FROM Orders WHERE CustomerID = 'GROSR')";
daDetails = new SqlDataAdapter(strSQL, strConn);
daOrders.Fill(ds, "Orders");
daDetails.Fill(ds, "Order Details");
}
Hiển thị tập tin XML trên IE
static void ShowXmlInIE(string strPathToXml)
strConn = "Data Source= localhost;" +
"Initial Catalog=Northwind; Integrated Security = true;
Trusted_Connection=Yes;";
strSQL = "SELECT TOP 3 CustomerID, CompanyName FROM Customers";
SqlDataAdapter da = new SqlDataAdapter(strSQL, strConn);
DataSet ds = new DataSet();
da.Fill(ds, "Customers");
DataTable tbl = ds.Tables["Customers"];
//Leave the first customer unchanged.
//Modify the second customer.
tbl.Rows[1]["CompanyName"] = "Modified Company Name";
//Delete the third customer.
tbl.Rows[2].Delete();
//Add a new customer.
tbl.Rows.Add(new object[] {"ANEW1", "New Company Name"});
//Write the contents to an XML document in diffgram format
//and display the document in Internet Explorer.
string strPathToXml = "C:\\MyData.XML";
ds.WriteXml(strPathToXml, XmlWriteMode.DiffGram);
ShowXmlInIE(strPathToXml);