XML CHƯƠNG VIII: Lý thuyết 3 tiết Thực hành 6 tiết

Download Report

Transcript XML CHƯƠNG VIII: Lý thuyết 3 tiết Thực hành 6 tiết

CHƯƠNG VIII:
XML
Lý thuyết 3 tiết
Thực hành 6 tiết
CƠ BẢN VỀ XML


Giới thiệu XML
Cấu trúc của tài liệu XML
Giới thiệu XML


XML là viết tắt cho chữ eXtensible Markup
Language.
XML là ngôn ngữ đánh dấu tương đối là mới,
được phát triển từ một ngôn ngữ đánh dấu
Standard Generalized Markup Language
(SGML).
Cấu trúc của tài liệu XML



Gồm nhiều phần tử (element), mỗi thành phần
được bắt đầu với một thẻ bắt đầu (start-tag) và
một thẻ kết thúc (end-tag).
Giữa start-tag và end-tag là nội dung của phần
tử này .
Nội dung có thể bao gồm dữ liệu văn bản hay
có thể là một phần tử khác.
Cấu trúc của tài liệu XML (Vd)
<?xml version=“1.0”?>
<Catalog>
<Product>
<ProductID>F10</ProductID>
<ProductName>Shimano</ProductName>
<ListPrice>47.76</ListPrice>
</Product>
</Catalog>
Cấu trúc của tài liệu XML (tt)



Một tài liệu XML không có tồn tại một thẻ nào
không đúng quy định .
Khi xây dựng tài liệu XML cần phải tuân thủ theo
một số quy luật nào đó, nếu tuân thủ đúng quy luật
thì được gọi là well-formed.
Một tài liệu XML well-formed chưa chắc là một tài
liệu hợp lệ, nó chỉ được xem là hợp lệ nếu đảm bảo
những quy tắc trong tài liệu Document Type
Definition (DTD) hay giản đồ (schema)
Một tài liệu XML well-formed





Phải có một root Element duy nhất, gọi là
Document Element.
Mỗi tag mở phải có một tag đóng tương ứng.
Tags trong XML thì case sensitive ( phân biệt
chữ hoa chữ thường).
Mỗi child Element phải nằm trong Element
cha .
Giá trị thuộc tính trong XML phải được bao
trong một cặp ngoặc kép hay một cặp ngoặc
kép .
Processing Instructions và Comments


Processing Instructions (chỉ thị về cách chế
biến) nằm trong cặp tag <? Và ?> .
Mặc dù một tài liệu XML well-formed không
cần có một Processing Instruction, nhưng
thông thường ta sẽ để ở hàng đầu tài liệu,
được gọi là prologue
Processing Instructions và Comments
<?xml version="1.0" encoding="utf-8"
standalone="yes"?>
<Order>
<OrderDate>2002-6-14</OrderDate>
<Customer>Helen Mooney</Customer>
<Item>
<ProductID>1</ProductID>
<Quantity>2</Quantity>
</Item>
</Order>
Processing Instructions và Comments

Có một loại Processing Instruction khác cũng
khá thông dụng là cho biết tên stylesheet của
XML này
<?xml-stylesheet type="text/xsl“ ref="order.xsl"?>

Có thể thêm Comment bằng cách dùng cặp
Tags <!-- và --> .
Namespace

Cho ta cách dùng một Elemet để nói đến hai
dữ liệu khác nhau trong cùng một tài liệu
XML.
Namespace
<?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>
Namespace



Để tránh sự nhầm lẫn, bạn có thể sử dụng
Namespace để nói rõ tên Element ấy thuộc về
URI (Univeral Resource Identifier) nào .
Một URI có thể là một URL hay một chỗ nào
định nghĩa nó.
Khai báo một Namespace trong một Element
bằng cách dùng Attribute xmlns để khai báo
một default namespace .
Name space
Đây là một thư viện sách có phần tử gốc là
<library>
<library>
<book>
<title>XML</title>
</book>
</library>

Name space

Không gian tên dcs được tạo ra cho thư viện
như sau
<library
xmlns:dcs=“http://www.incoll4.edu.vn/lib”>
<book>
<title>XML</title>
</book>
</library>
Name space
Áp dụng không gian tên dcs cho tất cả các thẻ nào
trong tài liệu mà ta muốn dùng chúng duy nhất và
đọc quyền về dcs
<dcs:library
xmlns:dcs=“http://www.incoll4.edu.vn/lib”>
<dcs:book>
<dcs:title>XML</dcs:title>
</dcs:book>
</dcs:library>

Namespace
<?xml version="1.0"?>
<BookOrder OrderNo="1234">
<OrderDate>2001-01-01</OrderDate>
<Customer xmlns="http://www.northwindtraders.com/customer">
<Title>Mr.</Title>
<FirstName>Graeme</FirstName>
<LastName>Malcolm</LastName>
</Customer>
<Book xmlns="http://www.northwindtraders.com/book”>
<Title>Treasure Island</Title>
<Author>Robert Louis Stevenson</Author>
</Book>
</BookOrder>
<dcs:library
xmlns:dcs=“http://www.incoll4.edu.vn/lib”
xmlns:amazon=“http://www.amazon.com/lib”
<dcs:book>
<dcs:title>XML</title>
</dcs:book>
<amazon:book>
<amazon:title>XML</amazon:title>
</amazon:book>
</dcs:library>
XÂY DỰNG TÀI LIỆU XML


Document Type Define (DTD)
XML schema
Document Type Define (DTD)


DTD là một bộ những qui tắc cú pháp cho
nhãn. Nó cho bạn biết những nhãn nào bạn có
thể sử dụng trong một tài liệu, chúng nên
được xếp theo thứ tự nào, những nhãn nào có
thể xuất hiện bên trong các nhãn khác, những
nhãn nào có các thuộc tính,...
Một DTD có thề là một bộ phận của một tài
liệu XML, nhưng thường nó là một tài liệu
riêng biệt hoặc một loại các tài liệu.
Document Type Define (DTD)
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>
Document Type Define (DTD)
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Document Type Define (DTD)
Và file “note.dtd”
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
http://www.scribd.com/doc/40179716/Bai02-XML
XML schema


XML Schema mô tả cấu trúc của tài liệu
XML, thay thế cho DTD
XML Schema mô tả:



Các phần tử và thuộc tính trong tài liệu XML
Thứ tự và số lượng các phần tử con
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
Tích hợp với namespace
XML Schema

Cấu trúc chung ( thông dụng ) của các tài liệu trong
XML Shema như sau
<?xmlversion="1.0"encoding="utf-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema">
Đặc tả các thẻ
Đặc tả các kiểu
</xs:schema>

http://www.scribd.com/doc/38247160/Giao-Trinh-XML


XML Schema (Ví dụ
<?xml version="1.0"?>
<xs:schema xmlns:xs=“http://www.w3.org/2001/XMLSchema”
targetNamespace=“http://www.w3schools.com”
xmlns=“http://www.w3schools.com”
elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<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"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Schema và Namespace
<schema xmlns=http://www.w3.org/2001/XMLSchema
targetNamespace=“http://xyz.edu/Admin”>
…..
</schema>


http://www.w3.org/2001/XMLSchema:
namespace của các từ khóa dùng trong sự xác
định lược đồ XML, ví dụ: schema,
targetNamespace,…
targetNamespace: định nghĩa namespace của
lược đồ được xác định trong tài liệu
<schema>…</schema> trên
Tham chiếu đến một XML Schema
<?xml version="1.0"?>
<note xmlns=http://www.w3schools.com
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://www.w3schools.com note.xsd">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
xsi:schemaLocation nghĩa là lược đồ của namespace
http://www.w3schools.com được tìm thấy ở
http://www.w3schools.com note.xsd
LẬP TRÌNH VỚI XML


1. Xpath
2. Document Object Model (DOM)
Xpath



Xpath đóng vai trò quan trọng trong công tác
trao đổi dữ liệu giữa các máy tính hay giữa
các chương trình ứng dụng
Là các biểu thức dùng để truy xuất đến một
hoặc nhiều thẻ trong tài liệu XML.
Được sử dụng trong XSLT để chuyển đổi cấu
trúc nội dung tài liệu XML
Xpath (cú pháp đơn giản)
/: Đường dẫn tuyệt đối bắt đầu từ node gốc của tài liệu đến 1
node cụ thể
<AAA>
- /AAA: nút gốc
<BBB/>
- /AAA/BBB: nút B là con của A
<CCC/>
- /AAA/DDD/CCC: C – con D – con A (gốc)
<DDD>
<CCC/>
</DDD>
</AAA>
//: Nút ở độ sâu bất kì
//CCC: nút CCC ở độ sâu bất kì
Xpath (cú pháp đơn giản)
<AAA>
- /AAA/*: Tất cả các nút con trực tiếp của AAA
<BBB>
<CCC/>
<BBB>
<CCC/>
</BBB>
</BBB>
</AAA>
- /*/BBB: Tất cả các nút B ở cấp thứ 2
//*: TẤT CẢ CÁC NODE
Xpath (cú pháp đơn giản)
[ ]: Truy xuất đến các node theo thứ tự nào đó hoặc theo chỉ mục.
Ngoài ra, có thể dùng để chỉ định biểu thức điều kiện chọn lựa node
<AAA>
<BBB/>
<BBB/>
- /AAA/BBB[1]: Nút BBB thứ 1 (con của AAA)
- /AAA/BBB[2]: Nút BBB thứ 2 (con của AAA)
<BBB>
<CCC>
content
</CCC>
</BBB>
<BBB/>
</AAA>
- /AAA/BBB[last()]: Nút BBB cuối cùng
- /AAA/BBB[CCC=“content”]: Nút BBB thứ 3
(có nút con CCC với nội dung là content )
Xpath (cú pháp đơn giản)
@: Truy xuất đến thuộc tính
<AAA>
<BBB id=“b1”/>
Những node BBB có thuộc tính id
<BBB id=“b2”/>
<CCC name=“ccc”/>
<CCC/>
Những node CCC có giá trị thuộc tính
name = ccc
</AAA>
Những node CCC có thuộc tính
- /AAA/CCC[not(@*)]: Những node CCC KHÔNG có thuộc tính
Xpath
XPATH: Axis – dùng để chọn các node trong mối quan hệ với
node hiện thời
child:: : Chọn tất cả node con của node hiện thời
<AAA>
<BBB>
- /AAA/child::ECC
/AAA/ECC
<DDD/>
<BBB/>
<ECC>
<EEE/>
<ECC/>
<CFB/>
</AAA>
- //BBB/child::*
/AAA/BBB/DDD
Xpath
descendant:: : Tất cả các thẻ “con cháu”
/AAA/child::*
<AAA>
/AAA/descendant::*
<AAA>
<BBB>
<DDD>
<BBB>
<DDD>
<EEE/>
</DDD>
</BBB>
</AAA>
<EEE/>
</DDD>
</BBB>
</AAA>
descendant-or-self:: = descendant:: + context node
Xpath
parent:: : Thẻ cha
<AAA>
<BBB>
- //BBB/parent::*
Thẻ cha của BBB
<DDD/>
<BBB/>
<ECC>
<EEE/>
<ECC/>
<CFB/>
</AAA>
- //EEE/parent::ECC
Thẻ cha của ECC
Xpath
following-sibling:: : Tất cả các thẻ “em”
preceding-sibling:: : Tất cả các thẻ “anh”
//EEE/following-sibling::*
<AAA>
<BBB>
//EEE/preceding-sibling::*
<AAA>
<BBB>
<DDD/>
<DDD/>
<EEE/>
<EEE/>
<FFF/>
<FFF/>
<GGG/>
<GGG/>
</BBB>
</AAA>
</BBB>
</AAA>
Xpath
following:: : Tất cả các thẻ có thẻ mở xuất hiện sau thẻ đóng của thẻ hiện
hành
preceding::: Tất cả các thẻ có thẻ đóng xuất hiện trước thẻ mở của thh
//BBB/following::*
<AAA>
<BBB>
<DDD/>
//EEE/preceding::*
<AAA>
<BBB>
<DDD/>
</BBB>
</BBB>
<CCC>
<CCC>
<EEE/>
</CCC>
</AAA>
<EEE/>
</CCC>
</AAA>
Xpath
- //EEE/ancestor::*
<AAA>
<BBB>
<DDD/>
</BBB>
- //EEE/descendant::*
- //EEE/following::*
- //EEE/preceding::*
<CCC>
<EEE>
<FFF/>
</EEE>
<GGG/>
</CCC>
</AAA>
- //EEE/self::*
5 axis trên tạo thành 5 phân
hoạch của tài liệu xml
Không overlap nhau
“Or” ( | ) lại sẽ cho kết quả là tất
cả các node của tài liệu
Document Object Model (DOM)


DOM là một giao diện ứng dụng (API).
DOM thường có dạng là một cây cấu trúc dữ
liệu (Tree View), được dùng để truy xuất các
tài liệu dạng HTML và XML.
Document Object Model (DOM)

DOM có nhiều cấp độ :


Cấp 0 : Bao gồm mọi chi tiết DOM theo qui định
của từng nhà phát triển riêng biệt tồn tại trước khi
DOM cấp độ 1 ra đời. Ví dụ: document.images,
document.forms, document.layers, và
document.all
Cấp 1 : Cách duyệt qua tài liệu (cấu trúc cây) của
DOM (HTML và XML) và thao tác nội dung
(bao gồm việc thêm thành phần). Các thành phần
riêng cho HTML cũng được đưa vào.
Document Object Model (DOM)


Cấp 2 : Hỗ trợ không gian tên XML, khung nhìn
có lọc (filtered views) và các sự kiện DOM
Cấp 3 : Nhằm nâng cao các khả năng của DOM,
cấp độ 3 chứa 6 bản mô tả chi tiết kĩ thuật khác
nhau: 1) the DOM Level 3 Core; 2) the DOM
Level 3 Load and Save; 3) the DOM Level 3
XPath; 4) the DOM Level 3 Views and
Formatting; 5) DOM Level 3 Requirements; and
6) the DOM Level 3 Validation.
DOM (vd)
<?xml version="1.0"?>
<order number="312597">
<date>2000/1/1</date>
<customer id="216A">Company A</customer>
<item>
<part-number warehouse="Warehouse 11">
E16-25A</part-number>
<description>Production-Class
Widget</description>
<quantity>16</quantity>
</item>
</order>



XSLT
XmlDocument và XPathDocument
XmlReader và XmlWriter
XSLT


XSL (Extension Style Language) để chuyển
dữ liệu của XML ra dạng HTML .
XSL chia làm hai dạng :


XSLT (XSL Transformation) : ngôn ngữ XSL
chuyên về chuyển dịch – thực hiện việc rút trích
dữ liệu XML đưa vào khuôn dạnh HTML .
XSLFO (XSL Formating Object) : ngôn ngữ XSL
chuyên về định dạng – cung cấp các thuộc tính
định dạng tài liệu cho phong phú và đa dạng hơn
như font, chữ, màu sắc, hình ảnh .
Sơ đồ chuyển đổi dữ liệu
Cấu trúc tổng quát file XSL
Nhúng tài liệu XSLT vào tài liệu
XML
<?xml version=“1.0” encoding=“UTF-8”?>
<?xml-stylesheet type=“text/xsl” href=“path file
.xsl”?>
<!--Cấu trúc tài liệu XML -->
Một số phần tử XSLT







Template
Apply-templates
Value-of
Sort
Copy-of
Copy
…
XmlDocument và XPathDocument

XmlDocument là đối tượng tài liệu .
XML Document
Các thuộc tính của lớp
XmlDocument





Attributes : Tập các thuộc tính của node hiện
hành .
Childnodes : Trả về các con của node hiện
hành .
DocumentElement : lấy phần tử gốc .
DocumentType
FirstChild, lastChild, nextSibling, nodeName,
nodeType, nodeValue .
Phân tích tài liệu XML

Tài liệu nạp từ tập tin và tự động tạo cây
DOM :



XmlDocument doc = new XmlDocument();
doc.Load(xmlPath);
Lưu trữ phần tử gốc :

XmlNode rootNode = doc.DocumentElement;
Duyệt tài liệu XML
XPathDocument


XPathDocument tương thích cho bất kỳ thao
tác nào của lớp XmlDocument.
Khi cần thao tác nhanh chúng ta có thể sử
dụng XPathDocument .
Ví dụ :
XmlReader và XmlWriter
XmlReader

Một số thuộc tính của XmlReader :









AttributeCount .
EOF .
Depth : Xác định độ sâu của node hiện hành
HasAttribute
HasValue
IsEmptyElement
Name
Value
ValueType
Sử dụng XmlReader




Không gian tên : Using System.Xml
Mở tài liệu XML :
xmlFile = @Server.MapPath(“”) + “\\file_xml” ;
Tạo đối tượng sử dụng phương thức Create()
XmlReader reader = XmlReader.Create(xmlFile);
Đọc tài liệu
while(reader.Read())
{
Response.Write(reader.Name);
}
XmlWriter

Các thuộc tính :




Settings : tạo đối tượng XmlWriterSettings
WriteState
XmlLang
XmlSpace
Sử dụng XmlWriter

Bắt đầu :

WriteStartDocument()


Ghi chỉ thị : <?xml version=“1.0”?>
Kết thúc :

WriteEndDocument()

Đóng các thuộc tính và phần tử
Ghi phần tử
<name>
<firstName>Minh</firstName>
</name>
 Writer.WriteStartElement(“name”);
 Writer.WriteElementString(“firstName”,”Minh”)
 Writer.WriteEndElement()
Ghi thuộc tính
Writer.WriteStartElement(“employee”);
Writer.WriteStartAttribute(“id”);
Writer.WriteString(“1”);
Writer.WriteEndAttribute();
Writer.WriteEndElement();
 Kết quả :

<employee id=“1” />
Bài tổng hợp
IV. Cơ sở dữ liệu và XML



XML là định dạng chung cho việc thay đổi dữ
liệu trên Internet
Datasets xuất dữ liệu như XML
XML cung cấp một định dạng thuận lợi cho
việc chuyển nội dung một dataset đến client
và ngược lại .
IV. Cơ sở dữ liệu và XML (tt)

Các đối tượng XML đồng bộ
Tổng quan XML và Datasets
Các phương thức của đối tượng
DataSet



Sử dụng ReadXml để nạp dữ liệu từ file hoặc dòng
DataSet ds = new DataSet();
Ds.ReadXml(Server.MapPath(“filename.xml”));
Sử dụng WriteXml để ghi dữ liệu XML vào file, stream
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(strSql,conn);
da.Fill(ds);
ds.WriteXml(Server.MapPath(“filename.xml”));
Sử dụng GetXml để ghi dữ liệu vào biến chuỗi
String strXmlDS = ds.GetXml();