8/2/2010
1
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
ViỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
Lập trình PHP với MySQL
Bài 05. XML, XHTML
Do Ba Lam
2
Nội dung
1.
2.
3.
4.
5.
6.
7.
8.
Giới thiệu về XML
Cú pháp của XML
Không gian tên của XML
Tài liệu XML hợp lệ
Document Object Model (DOM)
Simple API for XML (SAX)
XML và CSS
Extensible Stylesheet Language (XSL)
1
8/2/2010
3
1. Giới thiệu về XML
• XML viết tắt của từ eXtensible Markup Language
(ngôn ngữ đánh dấu mở rộng)
• Là ngôn ngữ dùng để định nghĩa dữ liệu thông
qua các thẻ
• Các thẻ có thể do chúng ta định nghĩa ra
4
1. Giới thiệu về XML
<?xml version=“1.0” encoding=“UTF-8”?>
<document>
<student>
<name>Nguyễn Bích Ngọc</name>
<date>10/10/1990</date>
Hà Nội</place>
</student>
<student>
<name>Trần Văn Đức</name>
<date>10/10/1991</date>
Hải Phòng</place>
</student>
</document>
2
8/2/2010
5
1. Giới thiệu XML
• Lịch sử ra đời
▫ 1990, Tim Berners Lee đã đưa ra HTML
▫ 1995, nhóm XML mong muốn
Không giới hạn ngôn ngữ
Đơn giản cho lập trình viên
Dễ dàng cho các Search Enginge
▫ 11/1996, đặc tả đầu tiên của XML được phát hành
▫ 2/1998, W3C phê chuẩn công nhận version 1.0 của
XML
6
1. Giới thiệu XML
• Các chức năng chính
▫
▫
▫
▫
Dễ dàng trao đổi dữ liệu
Tùy biến ngôn ngữ đa dạng
Dữ liệu mô tả
Dữ liệu có cấu trúc tích hợp
3
8/2/2010
7
2. Cú pháp XML
• 2.1. Quy tắc chung trong XML
• 2.2. Tạo tài liệu XML hợp khuôn dạng
8
2.1. Quy tắc chung trong XML
• XML: tự do định nghĩa thẻ
• Xây dựng cách hiển thị chúng bởi CSS hoặc XSL
• Thẻ XML
▫ Một phần tử XML bao gồm cặp thẻ mở đầu và kết
thúc, bên trong là dữ liệu
<name>Nguyễn Bích Ngọc</name>
▫ Phần dữ liệu muốn thêm các kí tự đặc biệt (dấu >,
<…) thì thực hiện giống như trong HTML
4
8/2/2010
9
2.1. Quy tắc chung trong XML
• Thẻ XML
▫ Nếu chỉ có một thẻ thì thêm dấu / phía cuối:
<name/>
▫ Trong mỗi thẻ có thể định nghĩa thêm các thuộc
tính
• Tên thẻ
▫ XML phân biệt chữ hoa và chữ thường
▫ Bao gồm: chữ cái, chữ số, dấu “_”, dấu “-”, dấu “:”
nhưng không được bắt đầu là chữ số, dấu “-”
10
2.1. Quy tắc chung trong XML
• Tạo khai báo XML
▫ W3C khuyến cáo: mỗi tài liệu XML nên có duy nhất
một khai báo
<?xml version=“1.0” encoding=“UTF8”?>
▫ version=“1.0”: cho biết số hiệu phiên bản XML
đang sử dụng
▫ encoding=“UTF-8”: cho biết kiểu mã hóa ngôn ngữ
5
8/2/2010
11
2.1. Quy tắc chung trong XML
• Tạo khai báo XML
▫ Kết hợp dữ liệu của XML với CSS
href=“ten_file_css”>
▫ Tạo dòng ghi chú: tương tự HTML <!-- -->
▫ Tạo thẻ gốc: mỗi file XML phải có một thẻ gốc
▫ Tạo thuộc tính:
Dạng ten_thuoc_tinh=“gia_tri”
Giá trị được bao trong nháy kép “” hoặc nháy đơn „‟
12
2.1. Quy tắc chung trong XML
• Tạo khai báo XML
▫ Thuộc tính xml:lang
<text xml:lang=“en”>Hello</text>
▫ Search engine sẽ sử dụng để nhận dạng ngôn ngữ
sử dụng.
▫ Tên quốc gia theo chuẩn ISO 693 gồm 2 kí tự tắt
6
8/2/2010
13
2.2. Tạo tài liệu XML hợp khuôn
dạng
• Các trình dịch XML thường yêu cầu rất nghiêm
ngặt về kiểm tra cú pháp
• Một tài liệu XML được coi là đúng cú pháp khi
nào hợp khuôn dạng
• Khuôn dạng: các quy tắc khai báo, thẻ, thuộc
tính, đặt tên thẻ…
14
2.2. Tạo tài liệu XML hợp khuôn
dạng
• Quy tắc cơ bản
▫ Các khai báo XML cần đặt ở dòng đầu tiên
▫ Mỗi tài liệu chỉ có một phần tử gốc
▫ Thẻ đầy đủ bao gồm thẻ đóng và thẻ mở hoặc thẻ
với dấu / ở cuối
▫ Các thẻ lồng nhau phải có thẻ đóng, thẻ mở hợp vị
trí
▫ Tên thuộc tính trong một thẻ là duy nhất
▫ Giá trị (kể cả số) nằm trong cặp dấu nháy đơn hoặc
nháy kép
7
8/2/2010
15
3. Không gian tên của XML
• XML cho phép tự định nghĩa và đặt tên các thẻ
• Kết hợp các tài liệu XML từ các ứng dụng khác
nhau sẽ gặp phải khả năng trùng tên thẻ
16
3. Không gian tên của XML
• Cần có sự phân biệt về phạm vi hay không gian
tên mà mỗi thẻ có ý nghĩa
• Namespace: cho phép tạo và sử dụng các thẻ
cùng tên độc lập mà không gây ra lỗi
• Sử dụng:
▫ <xmlns:namespacePrefix=“URI”>
▫ URI là xâu xác định một tài nguyên trên mạng
Internet, dùng để tạo namespace duy nhất
▫ Thường trỏ tới URL chứa thông tin liên quan
8
8/2/2010
17
3. Không gian tên của XML
• Ví dụ
• Giả sử thông tin về sinh viên do phòng Đào tạo
tạo ra và quản lý. Viện CNTT muốn bổ sung thêm
thông tin về sinh viên. Để phân biệt thông tin do
phòng Đào tạo hay Viện đưa ra, tránh các thẻ
trùng tên chúng ta định nghĩa các không gian tên
khác nhau
18
3. Không gian tên của XML
xmlns: Daotao=“”
xmlns:CNTT=“”>
<Daotao:student>
<Daotao:name>Nguyễn Bích Ngọc</Daotao:name>
<Daotao:date>10/10/1990</Daotao:date>
<Daotao:place>Hà Nội</Daotao:place>
<CNTT:comment>Tin 1</CNTT:comment>
</Daotao:student>
<Daotao:document>
9
8/2/2010
19
3. Không gian tên của XML
• Thuộc tính xmlns:prefix có thể được đặt ở bất kỳ
thẻ nào chứ không chỉ giới hạn ở phần tử gốc
=> Có thể đặt định nghĩa không gian tên đến nơi
nó bắt đầu được sử dụng
20
3. Không gian tên của XML
xmlns: Daotao=“”>
<Daotao:student>
<Daotao:name>Nguyễn Bích Ngọc</Daotao:name>
<Daotao:date>10/10/1990</Daotao:date>
<Daotao:place>Hà Nội</Daotao:place>
xmlns:CNTT=“”>
Tin 1
</CNTT:comment>
</Daotao:student>
<Daotao:document>
10
8/2/2010
21
3. Không gian tên của XML
• Không gian tên mặc định
▫ Định nghĩa một không gian tên mặc định cho tất cả
các thẻ trong tài liệu
<xmlns=“URI”>
prefix=“”
▫ Khi kết hợp hai tài liệu XML với nhau => chỉ cần
mô tả không gian tên của tài liệu thứ hai
22
3. Không gian tên của XML
xmlns=“”>
<student>
<name>Nguyễn Bích Ngọc</name>
<date>10/10/1990</date>
Hà Nội</place>
xmlns:CNTT=“”>
Tin 1
</CNTT:comment>
</student>
<document>
11
8/2/2010
23
4. Tài liệu XML hợp lệ
Vấn đề
• Thẻ trong XML do người sử dụng tự định nghĩa
• Kiểm tra xem tài liệu XML có các thẻ được phép
hay không (tương tự như trong CSDL một bảng
gồm các trường và bản ghi chỉ gồm dữ liệu các
trường) => XML hợp lệ
• Documents Type Definitions (DTDs): định nghĩa
kiểu tài liệu
• Schemas: giản đồ tương tự DTD nhưng cho phép
định nghĩa nhiều kiểu dữ liệu hơn
24
4.1. Documents Type Definitions
• DTD chứa định nghĩa cấu trúc một tài liệu XML.
• DTD có thể được định nghĩa trong tài liệu XML
hoặc định nghĩa ở một file bên ngoài và được liên
kết đến trong tài liệu XML
• DTD không phải là XML, nó có cú pháp riêng
• Khai báo
▫ <!DOCTYPE rootname [DTD]>
▫ <!DOCTYPE rootname SYSTEM [URL to DTD]>
12
8/2/2010
25
4.1. Documents Type Definitions
• Định nghĩa DTD
<!ELEMENT element-name(element-content)>
…..
<!ELEMENT element-name category>
• Trong đó
▫ element-content: các thẻ nằm trong element-name
▫ category: kiểu dữ liệu thành phần. Với dữ liệu văn
bản là #PCDATA
26
<?xml version=“1.0” standalone=“yes”?>
<!ELEMENT document(student)*>
<!ELEMENT student(name, date, place)>
<!ELEMENT name(#PCDATA)>
<!ELEMENT date(#PCDATA)>
<!ELEMENT place(#PCDATA)>
]>
<document>
<student>
. . .
</student>
<document>
13
8/2/2010
27
student.dtd
document(student)*>
student(name, date, place)>
name(#PCDATA)>
date(#PCDATA)>
place(#PCDATA)>
student.xml
<?xml version=“1.0” standalone=“yes”?>
<!DOCTYPE document SYSTEM “student.dtd”>
<document>
<student>
. . .
</student>
<document>
28
4.1. Documents Type Definitions
• Hạn chế
▫ DTD hợp lệ tài liệu XML nhưng bản thân lại không
phải là XML
▫ Tài liệu XML chỉ có duy nhất một DTD
▫ XML có thể có nhiều namespace tuy nhiên DTD
không hỗ trợ khả năng này
▫ DTD chỉ hỗ trợ kiểu xâu text
• => Schema
14
8/2/2010
29
4.2. Schema
• Schema
▫ định nghĩa các thành phần (element) trong tài liệu
▫ định nghĩa các thuộc tính trong tài liệu
▫ định nghĩa các thành phần con trong một thành
phần
▫ định nghĩa thứ tự xuất hiện, kiểu dữ liệu…cho các
thành phần
• Schema là khuyến cáo sử dụng của W3C vào ngày
2/5/2001
30
4.2. Schema
• Ưu điểm của Schema so với DTD
▫ Nhiều kiểu dữ liệu hơn: boolean, dates and times,
URIs, integer, bytes, lóng, decimals…
▫ Hỗ trợ namespaces
▫ DTD là mô hình “closed”: mô tả tất cả các thành
phần có thể xuất hiện trong tài liệu; Schema cho
phép mô hình “open” mô tả các thành phần ngoài
các thành mô tả
▫ Là định dạng XML
15
8/2/2010
31
<?xml version="1.0"?>
<xs:schema xmlns:xs=" />targetNamespace=""
xmlns=""
elementFormDefault="qualified">
<xs:element name=“document”>
<xs:element name=“student">
<xs:complexType>
<xs:sequence>
<xs:element name=“name" type="xs:string"/>
<xs:element name=“date" type="xs:date"/>
<xs:element name=“place" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element>
</xs:schema>
32
<?xml version="1.0"?>
xmlns=""
xmlns:xsi=" />XMLSchema-instance"
xsi:schemaLocation=“student.xsd">
…
</document>
16
8/2/2010
33
4.2. Schema
• Tập giá trị cho một thành phần
<xs: element name=“Direction”>
<xs:simpleType>
<xs:restriction base=“xs:string”>
<xs:enumeration value=“East”>
<xs:enumeration value=“West”>
<xs:enumeration value=“South”>
<xs:enumeration value=“North”>
</xs:restriction>
</xs:simpleType>
</xs:element>
34
4.2. Schema
• Khai báo một danh sách các thành phần thông
qua <list>
<xs:element name=“Dept” type=“DeptList”/>
<xs:simpleType name=“DeptList”>
<xs:list itemType=“xs:string”/>
</xs:simpleType>
File xml:
<Dept> CNPM TTM HTTT KHMT KTMT </Dept>
17
8/2/2010
35
5. Document Object Model (DOM)
• DOM là một API đối với HTML và XML, định
nghĩa cấu trúc logic của tài liệu và các xử lý của
chúng
• DOM được sử dụng để xử lý dữ liệu lưu trong
XML
• Tài liệu XML sẽ là một cây bao gồm tập hợp các
nút chứa: phần tử, dữ liệu, thuộc tính…
36
5. Document Object Model (DOM)
Nút
Mô tả
Element
Attribute
Text
Entity
Processing Instruction
Phần tử XML
Thuộc tính
Dữ liệu
Thực thể
Chỉ thị xử lý
Comment
Chú thích
Document
Document Type
Document Fragment
Tài liệu
Kiểu tài liệu
Đoạn tài liệu
Notation
Ghi chú
Các loại nút
trong DOM
18
8/2/2010
37
5. Document Object Model (DOM)
• Ví dụ
<document>
<student>
<student>
<student>
<name>
<date>
1/10/1990
Hà Nội
N V An
<student>
38
5. Document Object Model (DOM)
• Các đối tượng cơ bản của DOM
Đối tượng
Mô tả
Node
Một nút đơn trong kiến trúc
NodeList
Một tập hợp nút
NamedNodeMap Một tập các nút, cho phép truy
xuất theo tên cũng như chỉ số
19
8/2/2010
39
5. Document Object Model (DOM)
• Một số phương thức trong DOM
Phương thức
childNodes
firstChild
lastChild
parentNode
previousSibling
nextSibling
nodeName
nodeValue
Mô tả
Trả về NodeList chứa các nút con
Trả về nút con đầu tiên
Trả về nút con cuối cùng
Trả về nút cha
Trả về nút cùng mức đứng trước
Trả về nút cùng mức kế tiếp
Trả về tên của nút
Trả về giá trị của nút
40
5. Document Object Model (DOM)
• Ví dụ
▫
▫
▫
▫
nodeRoot trỏ tới nút gốc document
nodeRoot.childNodes(0)=> student đầu tiên
nodeRoot.childNodes(0).parentNode()=> document
nodeRoot.childNode(1).firstChild().nodeValue() =>
N V An
20
8/2/2010
41
<script language="javascript">
function readXML(){
var xmlObj, rootNode, childNode, nameNode;
var name;
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("student.xml");
rootNode = xmlDoc.documentElement;
childNode = rootNode.firstChild;
nameNode = childNode.firstChild;
name = nameNode.text;
alert("Name: "+name);
}
</script>
42
6. Simple API for XML (SAX)
• DOM:
▫ coi tài liệu như một cấu trúc cây
▫ cung cấp thuộc tính và phương thức duyệt nút trên cây
▫ => phải chủ động tìm dữ liệu
• SAX
▫ xử lý tài liệu XML theo mô hình hướng sự kiện
▫ dữ liệu sẽ tự động được gửi đến khi có sự kiện phát sinh
▫ Nguồn gốc là API của Java, các phiên bản hiện nay hỗ
trợ nhiều ngôn ngữ lập trình khác
▫ SAX 2.0 gồm 2 gói chuẩn: org.xml.sax,
org.xml.sax.helpers
21
8/2/2010
43
7. XML và CSS
• Sử dụng CSS để định nghĩa cách hiển thị các thẻ
XML
• Thực hiện
▫ Tạo ra tài liệu XML
▫ Tạo ra file CSS (kiểu External Style) có chứa định
nghĩa các style của các thẻ trong tài liệu XML
▫ Chèn đoạn mã khai báo việc sử dụng CSS
href=“ten_file_css”?>
44
7. XML và CSS
student{font-size:16pt;margin-left:10;
font-style:italic;}
name,date,place{font-size:14;}
22
8/2/2010
45
8. Extensible Stylesheet Language
(XSL)
• XSL là một ngôn ngữ dựa trên XML để tạo ra
bảng biểu (stylesheet)
• XML và XSL stylesheet là đầu vào của XSLT
processor. Đầu ra là một cây, mỗi thành phần
trong XML chuyển thành một nút có giá trị,
thuộc tính xác định
• XSLT processor sử dụng XSL stylesheet để
chuyển dịch và định dạng XML đầu vào.
46
8. XSL
• Bao gồm:
▫ XSLT: chuyển XML thành một XML khác
▫ XPath: định hướng cho XSL như tìm kiếm các
thành phần..
▫ XSL-FO (XSL-Formatting Object): định dạng
XML đầu ra để các browsers có thể hiển thị với bố
cục và cấu trúc phù hợp
23
8/2/2010
47
8. XSL
• Khai báo Stylesheet
“ />hoặc
/>
48
8. XSL
• XPATH
• Tài liệu XML được xem như một cây, trong đó
mỗi thành phần được biểu diễn bằng một nút.
Root
Comment
Comment
Processing
Instruction
Processing
Instruction
Element
Element
Text
24
8/2/2010
49
Phần tử
Mô tả
<xsl:applytemplates>
Áp dụng các mẫu của tài liệu XSL vào con của nút
hiện hành
match=“expression”> thức. Phần tử gốc là “/”
<xsl:template>
Chứa đựng các quy tắc để áp dụng khi một nút xác
định được chọn
select=“expression”>
Thiết lập giá trị của một phần tử XML và thêm nó vào
cây. Yêu cầu select chứa một phần tử XPATH
<xsl:output>
Định nghĩa định dạng đầu ra được tạo bởi stylesheet
<xsl:copy>
Thêm nút hiện hành vào cây xuất ra
select=“expression”>
Chứa đựng hoàn toàn một mẫu được áp dụng cho mỗi
nút được chọn bởi XPATH bằng thuộc tính lựa chọn
select=“expression”>
Sắp xếp các nút được chọn để các nút này được xử lý
theo thứ tự
50
8. XSL
<?xml version=“1.0” encoding=“UTF-8”?>
<?xml-stylesheet type="text/xsl" href="transform.xsl"?>
<document>
<student>
<name>Nguyễn Bích Ngọc</name>
<date>10/10/1990</date>
Hà Nội</place>
</student>
<student>
<name>Trần Văn Đức</name>
<date>10/10/1991</date>
Hải Phòng</place>
</student>
</document>
25