Cline Sever - Chương 6: XML và Database - Trần Kim Chi

1- XML và Cơ Sở Dữ Liệu 2- Xdocument 3- Xử lý dữ liệu XML với ASP 4- LINQ to XML XML và Cơ Sở Dữ Liệu • Mở đầu • Sự giống nhau và khác nhau giữa cơ sở dữ liệu và XML • Loại cơ sở dữ liệu XML • Trữ dữ liệu XML trong RDBMS • Minh họa Tầm quan trọng của XML • Extensible Markup Language (XML) là chuẩn chính để biểu diễn thông tin trên Internet đang có sự phát triển rất nhanh • Hầu hết các tổ chức đều dùng XML làm chuẩn chia sẻ thông tin. • Tất cả các framework phát triển ƯD hiện nay đều hỗ trợ XML(.NET, Java). • Tất cả các kiến trúc hệ thống WEB hiện đại được thiết kế dựa trên XML

pdf88 trang | Chia sẻ: candy98 | Lượt xem: 658 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Cline Sever - Chương 6: XML và Database - Trần Kim Chi, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1 XML và Database 1- XML và Cơ Sở Dữ Liệu 2- Xdocument 3- Xử lý dữ liệu XML với ASP 4- LINQ to XML 04.03.2013 2 XML và Cơ Sở Dữ Liệu • Mở đầu • Sự giống nhau và khác nhau giữa cơ sở dữ liệu và XML • Loại cơ sở dữ liệu XML • Trữ dữ liệu XML trong RDBMS • Minh họa Tầm quan trọng của XML • Extensible Markup Language (XML) là chuẩn chính để biểu diễn thông tin trên Internet đang có sự phát triển rất nhanh • Hầu hết các tổ chức đều dùng XML làm chuẩn chia sẻ thông tin. • Tất cả các framework phát triển ƯD hiện nay đều hỗ trợ XML(.NET, Java). • Tất cả các kiến trúc hệ thống WEB hiện đại được thiết kế dựa trên XML. Ứng dụng của XML • Lưu trữ dữ liệu • Trao đổi dữ liệu • Hiển thị dữ liệu • Tất cả đều liên quan đến dữ liệu Ứng dụng của XML • Data Storage • Lưu trữ thuần túy dùng file XML • Lưu trữ XML trong CSDL quan hệ • Lưu trữ trong XML-enabled databases Ứng dụng của XML • Data Interchange • Không cần sử dụng các middleware nếu ứng dụng có thể đọc ghi trực tiếp XML. • Trên 80% dữ liệu trao đổi trên mạng hiện nay dưới dạng XML (per Gartner Group) Ứng dụng của XML • Hiển thị dữ liệu • Cùng một nguồn thông tin được hiển thị trên nhiều loại thiết bị khác nhau. • Trước khi có XML . . . • Phần lớn dùng HTML • Hoặc hoặc 1 tập các trang để phục vụ cho các thiết bị khác nhau. Ứng dụng của XML • Sau khi có XML • Lưu trữ dữ liệu dưới dạng XML documents • Và 1 XSL document cho 1 loại thiết bị. • Nếu xuất hiện loại thiết bị mới chỉ cần • Phát triển protocol mới (e.g., WAP) • Phát triển 1 XSL document mới Ứng dụng của XML • Sau đó có thể • Chuyển cả XML và XSL xuống client. • Hoặc • Chuyển đổi XML và XSL tại server • Chuyển nội dung markup phù hợp xuống client. 04.03.2013 10 Quản lý dữ liệu với quản lý tư liệu • Quản lý dữ liệu: • Cần cơ sở dữ liệu cho trữ dữ liệu • Relational hay Object database • Quản lý tư liệu • Cần hệ thống quản lý nội dung • Hệ thống quản lý nội dung có thể được xây dựng trên cơ sở dữ liệu Lưu trữ và Truy vấn dữ liệu với XML • Dữ liệu XML có thể được lưu trữ bằng các cách sau: • Dưới dạng hệ thống tập tin • Cơ sở dữ liệu quan hệ • Cơ sở dữ liệu XML Lưu trữ dữ liệu XML dưới dạng tập tin • Lưu trữ sử dụng trực tiếp tập tin XML khi: • Dữ liệu được truy cập bởi nhiều hệ thống khác nhau • Dữ liệu có thứ bậc • Tập dữ liệu nhỏ • Tốc độ truy cập không quan trọng • Chỉ thực hiện các truy vấn đơn giản • Các kiểu dữ liệu không quan trọng Một trong những nguyên nhân chính để sử dụng XML là nó hỗ trợ việc trao đổi dữ liệu bán cấu trúc giữa các ứng dụng qua môi trường Internet. Việc sử dụng CSDL để lưu trữ văn bản XML sẽ giúp cho người dùng truy cập thông tin tốt hơn. XML rất mềm dẻo Dữ liệu lưu trữ dưới dạng XML có thể dễ dàng thay đổi cùng với sự tiến hóa của các dịch vụ của hệ thống. Tại sao sử dụng XML cho Databases Có 2 loại chính: • XML- enabled: Ánh xạ văn bản XML thành dữ liệu lưu trữ trong CSDL. • Native XML (NXD): Mô hình lưu trữ bên trong CSDL được xây dựng dựa trên XML và sử dụng văn bản XML như là đơn vị lưu trữ cơ bản. Đơn giản là CSDL hỗ trợ lưu trữ văn bản XML XML Databases là gì? XML không phù hợp khi • Luồng dữ liệu xử lý dưới dạng quan hệ • Tốc độ xử lý là rất quan trọng • Thành phần dữ liệu lưu trữ nằm ngoài các kiểu dữ liệu mà XML có thể thể hiện • Đặc biệt là các dữ liệu có bản chất dạng bảng. • Schema dễ bị thay đổi • Dữ liệu có quan hệ thứ bậc • Phần ít dữ liệu có cấu trúc rõ ràng và cố định 04.03.2013 16 Sự giống nhau với cơ sở dữ liệu • LưuTrữ: Table với tài liệu XML • Lược đồ: Lược đồ cơ sở dữ liệu với DTD, ngôn ngữ lược đồ XML • Ngôn ngữ Query: SQL với XQL, XML-QL, QUILT • Giao diện lập trình: JDBC với SAX, DOM 04.03.2013 17 Khác nhau với cơ sở dữ liệu • Storge mechanism • Indexing • Built-in security • Transaction support • Data integrity • Multi-user access • Query across multiple data sources Lưu trữ XML trong CSDL quan hệ • XML/relational mapping là quá trình chuyển đổi giữa mô hình quan hệ và XML • Văn bản XML có thể chuyển thành mô hình quan hệ và ngược lại. • Có nhiều cách thức khác nhau để thực hiện việc chuyển đổi này. Relational Model Order of rows is not guaranteed unless the ORDER clause is used in one or more columns Relations (tables) Data is represented in n-ary relations. Has a domain that represents a set of values Attributes (columns) Strict schema Restrictive The strict schema insures data integrity XML Model The XML Model is hierarchical format Data is represented in trees structures There's nodes Relationships between the node The schema provides flexibility Easily modified format multiple elements represented in a hierarchy, including a root“Comments” element and one or more individual “Comment” elements pertaining to a given item. XML Model XML Model VS. Relational Model? XML data is hierarchical XML data is self-describing XML data has inherent ordering  An XML database contains collections relational data is represented in a model of logical relationships. relational data is not self- describing. Relational data does not have inherent ordering. A relational database contains tables XML vs. Relational Database CUSTOMER Name Age ABC 30 XYZ 40 ABC 30 XYZ 40 XML vs. Relational Database XML vs. Relational Database XML-to-Relational mapping • Schema mapping Database schema được tạo ra từ XML schema hoặc DTD để lưu trữ văn bản XML. • Data mapping Chia nhỏ văn bản XML thành các relational tuples và chèn vào CSDL quan hệ. Inlined DTD graph Generated Database Schema Data Mapping • XML file is used to insert data into generated database schema • Parser is used to fetch data from XML file. 94872 PEN 19.95 30 94866 BINDER</PROD_NAME > 7.95 26 92219 LABELS</PROD_NAME > 12.95 250 Example of an XML document XML document decomposed into a relation Items Order Another Example..... 2003-07-28 456 XY- 47 14 16.80 B- 987 6 2.34 Sales Order Items table Example Robert Roberts 25 John Doe 32 33 XML và Database 1- XML và Cơ Sở Dữ Liệu 2- Xdocument 3- Xử lý dữ liệu XML với ASP 4- LINQ to XML Đối tượng XmlDocument • Đối tượng XmlDocument nằm trong name space System.Xml. Cần import / using System.Xml (VB.NET hay C#) • Là đối tượng chính của .NET thích hợp cho việc truy xuất dữ liệu của một tệp XML đã tồn tại và cập nhật dữ liệu XML. • Cho phép thực hiện các thao tác trên tập XML như trên một table: • Đọc dữ liệu • Thêm một Node • Xóa một Node • Cập nhật thuộc tính và giá trị một Node 1) Chức năng 34 Đối tượng XmlDocument 1) Chức năng Trong System.Xml chứa các lớp chính để thao tác với tài liệu XML như: XmlDocument , XmlReader, XmlTextReader, XmlValidatingReader, XmlNodeReader, XmlWriter, và XmlTextWriter 35 2- Khai báo đối tượng XmlDocument * Khác với khai báo một biến kiểu dữ liệu đơn giản: Dim tênbiến As KiểuDữLiệu Ví dụ : Dim Str As String Dim Num as Integer Dim Arr(5) as String VB.Net * Dim xmlDoc As new XmlDocument (Khai báo sử dụng tư liệu XML) ASP.Net XmlDocument doc = new XmlDocument(); 36 Đối tượng XmlDocument 3- Đọc, Ghi một tư liệu XML a) Phương thức Load : đọc tệp XML Cú pháp : xmlDoc.Load(PathName_of_XML_file) Thông thường ta tạo thư mục DATA để lưu trữ các tệp XML Cú pháp trên được sử dụng: xmlDoc.Load(“../../DATA/book.xml”) b) Phương thức Save : Lưu tệp tin XML Cú pháp: xmlDoc.Save(PathName_of_XML_file) 37 Đối tượng XmlDocument 3- Đọc, Ghi một tư liệu XML • Việc đọc một tài liệu XML tùy thuộc vào cấu trúc của tài liệu đó, và thường có tính đệ quy vì khi đã tải tài liệu XML vào đối tượng XMDocument thì việc duyệt trên đối tượng này giống như duyệt trên một cấu trúc cây. • Mỗi node của tài liệu có thuộc tính NodeType cho biết đó là node loại nào. Các giá trị của thuộc tính này là: Element, Text, ... 38 Đối tượng XmlDocument 3- Đọc, Ghi một tư liệu XML • Ví dụ: duyệt qua tất cả các node Text trong tài liệu static public void Process(XmlNode node, int level) { if(node.NodeType == XmlNodeType.Text) Console.WriteLine("{0}", node.InnerText); foreach (XmlNode child in node.ChildNodes) { Process(child, level + 1); } } 39 Đối tượng XmlDocument 4- Các thao tác với xmlDocument Tran Van Mot 1111111111 mot@gmail.com Nguyen Thi Hai 2222222222 hai@yahoo.com Bui Dinh Ba 3333333333 ba@gmail.com 40 Đối tượng XmlDocument 4- Các thao tác với xmlDocument Lớp Person sau đây đã được xây dựng: class Person { public string Name { set; get; } public string Phone { set; get; } public string Email { set; get; } public Person(string name, string phone, string mail) { this.Name = name; this.Phone = phone; this.Email = mail; } public override string ToString() { return this.Name + ", " + this.Phone + ", " + this.Email; } } 41 Đối tượng XmlDocument 4- Các thao tác với xmlDocument • Phương thức Duyệt tài liệu XML: static public void TraverseFile() {XmlDocument doc = new XmlDocument(); doc.Load(path); XmlNode nod = doc.SelectSingleNode("contacts/person");//tìm node đầu tiên thỏa XPath str += "TênPhoneEmail"; while (nod != null) { str += ""; str += ""; str += ""; str += nod["name"].InnerText; str += ""; str += ""; str += nod["phone"].InnerText; str += ""; str += ""; str += nod["email"].InnerText; str += ""; str += ""; nod = nod.NextSibling;//chuyển sang node kế tiếp } str += ""; Label1.Text = str;} } 42 Đối tượng XmlDocument 4- Các thao tác với xmlDocument • Đọc tài liệu XML: static public List ReadElements() { List temp = new List(); XmlDocument doc = new XmlDocument(); doc.Load(inputFilePath); XmlNodeList nodeList = doc.SelectNodes("contacts/person"); foreach (XmlNode node in nodeList) { temp.Add new Person { node["name"].InnerText, node["phone"].InnerText, node["email"].InnerText }}; return temp; } 43 Đối tượng XmlDocument 4- Các thao tác với xmlDocument • Tìm kiếm trên tài liệu: static public void Search(XmlNode root, string find, ref XmlNode result) { if (root.NodeType == XmlNodeType.Text) if (root.InnerText == find)result = root; foreach (XmlNode n in root.ChildNodes) Search(n, name,ref result); } • Trong đó find là chuỗi cần tìm, nếu tìm được hàm này trả về XmlNode chứa chuỗi find, ngược lại hàm trả về giá trị null. 44 Đối tượng XmlDocument 4- Các thao tác với xmlDocument • Tìm kiếm trên tài liệu: • Đoạn mã dưới đây minh họa cách sử dụng hàm này. XmlDocument doc = new XmlDocument(); doc.Load(inputFilePath); XmlNode root = doc.SelectSingleNode("contacts"); XmlNode result = null; Search(root, "Nguyen Thi Hai",ref result); if (result == null) Label1.Text = "không thấy"; else Label1.Text =result.InnerText; 45 Đối tượng XmlDocument 4- Các thao tác với xmlDocument • Thêm phần tử vào tài liệu: thực hiện các bước sau: 1. Tham chiếu đến tài liệu xDoc 2. Tạo phần tử con subNode, và bổ sung các thuộc tính nếu có 3. Tạo các TextNode cho subNode 4. Bổ sung các TextNode vào subNode 5. Bổ sung subNode vào tài liệu xDoc 6. Lưu tài liệu 46 Đối tượng XmlDocument 4- Các thao tác với xmlDocument • Thêm phần tử vào tài liệu: thực hiện các bước sau: static public void InsertElement(string cat, string name, string phone, string email) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(inputFilePath); //tạo một phần tử "person" mới: XmlElement elPerson = xmlDoc.CreateElement("person"); //bổ sung thuộc tính "category": elPerson.SetAttribute("category", cat); //tạo các phần tử "name", "phone" và "email": XmlElement elName = xmlDoc.CreateElement("name"); XmlElement elPhone = xmlDoc.CreateElement("phone"); XmlElement elEmail = xmlDoc.CreateElement("email"); 47 Đối tượng XmlDocument 4- Các thao tác với xmlDocument • Thêm phần tử vào tài liệu: thực hiện các bước sau: static public void InsertElement(string cat, string name, string phone, string email) { //tạo các text node: XmlText txtName = xmlDoc.CreateTextNode(name); XmlText txtPhone = xmlDoc.CreateTextNode(phone); txtEmail = xmlDoc.CreateTextNode(email); //thêm các textnode vào "name", "phone", "email": elName.AppendChild(txtName); elPhone.AppendChild(txtPhone); elEmail.AppendChild(txtEmail); 48 Đối tượng XmlDocument 4- Các thao tác với xmlDocument • Thêm phần tử vào tài liệu: thực hiện các bước sau: static public void InsertElement(string cat, string name, string phone, string email) { //thêm phần tử vừa tạo vào node "person" mới: elPerson.AppendChild(elName); elPerson.AppendChild(elPhone); elPerson.AppendChild(elEmail); //lấy node gốc: XmlElement elRoot = xmlDoc.DocumentElement; //thêm "person" vào gốc: elRoot.AppendChild(elPerson); //lưu document: xmlDoc.Save(outputFilePath); } 49 Đối tượng XmlDocument 4- Các thao tác với xmlDocument • Cập nhật một phần tử trong tài liệu: • Việc cập nhật và xóa các phần tử trong tài liệu sẽ dựa trên thao tác tìm kiếm. Nếu tìm được: • Cập nhật giá trị mới • Lưu tài liệu. 50 Đối tượng XmlDocument 4- Các thao tác với xmlDocument • Cập nhật một phần tử trong tài liệu: static public bool UpdateElement(string oldValue, string newValue) { try { XmlDocument doc = new XmlDocument(); doc.Load(inputFilePath); //tìm node cần cập nhật: XmlNode root = doc.DocumentElement;//lấy node gốc XmlNode result = null; Search(root, oldValue,ref result); 51 Đối tượng XmlDocument 4- Các thao tác với xmlDocument • Cập nhật một phần tử trong tài liệu: static public bool UpdateElement(string oldValue, string newValue) { if (result != null) { result.InnerText = newValue; doc.Save(inputFilePath); return true; } else return false; } catch { return false; } } 52 Đối tượng XmlDocument 4- Các thao tác với xmlDocument • Xóa phần tử: • Tìm kiếm phần tử cần xóa (giả sử phần tử tìm được là result). • Xác định phần tử cha của x, bằng thuộc tính result.ParentNode • Gọi phương thức RemoveChild từ phần tử cha này, với tham số là result 53 Đối tượng XmlDocument 4- Các thao tác với xmlDocument • Xóa phần tử: static public bool Delete(string find) { try { XmlDocument doc = new XmlDocument(); doc.Load(inputFilePath); //tìm node cần cập nhật: XmlNode root = doc.DocumentElement; //lấy node gốc XmlNode result = null; Search(root, find, ref result); 54 Đối tượng XmlDocument 4- Các thao tác với xmlDocument • Xóa phần tử: static public bool Delete(string find) { if (result != null) { result.ParentNode.RemoveChild(result); //xóa result doc.Save(inputFilePath); return true; } else return false; } catch { return false; } } 55 Đối tượng XmlDocument Đối tượng XmlTextWriter, XmlTextReader Dùng để - ghi dữ liệu ra tệp XML theo định dạng - đọc dữ liệu từ tệp XML 56 Đối tượng XmlTextWriter 1- Khai báo Imports System.Xml Dim xtw as New XmlTextWriter(fileXml,Encoding.UTF8) Khai báo các thuộc tính của đối tượng XmlTextWriter Xtw.Formatting=Formatting.Indented Xtw.Identation=3 57 Các phương thức Ghi dữ liệu ra tệp XML - xtw.WriteStartDocument() - xtw.WriteComment(strComment) - xtw.WriteStartElement(RootNodeName) - xtw.WriteStartElement(NodeName) - xtw. WriteEndElement() ‘ an Child Element - xtw.WriteStartElement() ‘ Root Element - xtw.WriteEndDocument() - xtw.Flush() - xtw.Close() 58 Đối tượng XmlWriter, XmlReader Dùng để - ghi dữ liệu ra tệp XML - đọc dữ liệu từ tệp XML, thường dùng kèm với đối tượng DataSet 59 Khai báo và tạo đối tượng XmlReader Dim ds As New DataSet Dim xmlDoc As XmlReader xmlDoc = XmlReader.Create("Product.xml") ds.ReadXml(xmlDoc) ‘ đưa dữ liệu XML và DataSet DataGridView1.DataSource = ds.Tables(0) ‘ Gắn dữ liệu trong DataSet vào đối tượng lưới DataGridView 60 DCT.XML 7 9 - Viết thủ tục (Sub) in ra màn hình kết quả học tập của sinh viên có mã số “0812” - Viết hàm (Function) trả về Điểm trung bình tích lũy của sinh viên có mã số “0812” - Sử dụng Sub, Function trong thủ tục Main() của Module1 61 ORDER.XML <Order ID=“0801” Customer=“Văn Phương” Date=“08- 10-10”> 7 3 - Viết thủ tục (Sub) in ra màn hình Chi tiết hóa đơn có mã số “0812” - Viết hàm (Function) trả về tổng giá trị (Amount) có mã số “0812” - Sử dụng Sub, Function trong thủ tục Main() của Module1 62 63 XML và Database 1- XML và Cơ Sở Dữ Liệu 2- Xdocument 3. Xử lý dữ liệu XML với ASP 4- LINQ to XML Data Provider Class Data Provider Connection Class, Command Công dụng OleDB OleDbConnection OleDbCommand Kết nối mọi ứng dụng chạy .NET Sql SqlConnection SqlCommand Chỉ dành cho SQL Server ODBC OdbcConnection OdbcCommand Khi có một ODBC dữ liệu nguồn Khai báo NameSpace Using System.Xml Using System.Console Using System.Data Using System.Data.OleDb //CSDL Khác Using System.Data.SQLClient//SQL server Ví dụ minh họa sử dụng DataSet Mục tiêu: đưa dữ liệu từ table SV.sv vào tệp SV.xml SV(HoTen Char(30), Lop Char(12)) 1- Khai báo và tạo đối tượng Connection 2- Khai báo tạo đối tượng Adapter 3- Khai báo tạo đối tượng DataSet, nạp dữ liệu vào DataSet 4- Đưa dữ liệu trong DataSet vào đối tượng XML 5- Lưu dữ liệu XML 1- Khai báo đối tượng Connection OleDbConnection con;// Khai báo và kết nối với Access String strcon; strCon ="Provider=Microsoft.Jet.OleDb.4.0;Data Source ="; strCon = strCon + Server.MapPath(".") + "\\sv.mdb"; con = new OleDbConnection(strCon); con.Open(); SqlConnection con;// Khai báo và kết nối với SQL String strcon; strCon= “Server=ServerName;Database=DBName;uid=userName;pwd=password”; con = new SqlConnection(strCon); con.Open(); Đối tượng Connection 2-Khai báo, tạo và nạp đối tượng Adapter  Tạo DataAdapter  Hoặc  Sau đó SqlDataAdapter da; da= new SqlDataAdapter(sql, conn); Da.Fill(ds); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand.Connection = conn; da.SelectCommand.CommandText = sql; 2-Khai báo, tạo và nạp đối tượng Adapter  Tạo DataAdapter  Hoặc  Sau đó SqlDataAdapter da; da= new SqlDataAdapter(sql, conn); Da.Fill(ds); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand.Connection = conn; da.SelectCommand.CommandText = sql; 04/03/13 70 DataSet • DataSet là một mô hình CSDL quan hệ thu nhỏ đáp ứng nhu cầu của ứng dụng. • Dataset chứa các bảng (DataTable), các quanhệ (DataRelation) và các ràng buộc (constraint) • Dataset thuộc tên miền: System.Data.Dataset. • Khai báo • New System.Data.Dataset() Hoặc • New System.Data.Dataset() SQL Server 2000 DataSet DataTable DataTable Thiết bị lưu trữ OleDb Database SqlDataAdapter SqlConnection DataTable Bộ nhớ OleDbDataAdapter OleDbConnection Dataset Tạo DataSet • Tạo Dataset • Sau đó DataSet ds = New DataSet(); Da.Fill(ds); Ví dụ demo XMLDocument 4- Đưa dữ liệu trong DataSet vào đối tượngXML (trong bộ nhớ) xmlDoc.LoadXml(objDataSet.GetXml()) xmlDoc.Save(xmlFile) ‘ đối tượng xmlDoc đã được khai báo : Dim xmlDoc As New XmlDocument xmlDoc.Load(PathXML) 74 XML và Database 1- XML và Cơ Sở Dữ Liệu 2- Xdocument 3. Xử lý dữ liệu XML với ASP 4- LINQ to XML 7 5 Sử dụng LINQ to XML • Để thao tác với các tài liệu XML tại thời điểm run-time, .NET cài đặt sẵn các lớp và tiện ích đ