MỤC TIÊU- Trình bày được: + Các khái niệm trong XML + Định nghĩa kiểu tư liệu - DTD+ Ngôn ngữ định dạng dữ liệu+ Ngôn ngữ tạo liên kết - Tạo được tài liệu XML hợp lệ, hợp khuôn dạng -
Trang 1CHƯƠNG 4
XML
CƠ SỞ DỮ LIỆU WEB & XML
Trang 24.1 Tổng quan về XML
4.2 Định nghĩa kiểu dữ liệu - DTD
4.3 Ngôn ngữ định dạng
4.4 Liên kết
Chương 4: XML
Trang 3 MỤC TIÊU
- Trình bày được:
+ Các khái niệm trong XML + Định nghĩa kiểu tư liệu - DTD+ Ngôn ngữ định dạng dữ liệu+ Ngôn ngữ tạo liên kết
- Tạo được tài liệu XML hợp lệ, hợp khuôn dạng
- Áp dụng để tạo cấu trúc tài liệu
Chương 4: XML
Trang 44.1.1 Giới thiệu
XML - eXtensible Markup Language
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)
W3C phát triển
tương tự như cơ sở dữ liệu
dùng văn bản (text) để mô tả thông tin
4.1 Tổng quan về XML
Trang 54.1.1 Giới thiệu
Đơn vị cơ sở của XML là các ký tự
Tài liệu xml gồm một hoặc nhiều thực thể (mỗi thực thể thường là một phần)
XML có thể dùng cho nhiều loại dữ liệu
4.1 Tổng quan về XML
Trang 64.1.1 Giới thiệu
Có ba loại văn bản XML:
Văn bản không hợp lệ: không theo nguyên tắc cú pháp
được quy định bởi đặc tính kỹ thuật XML
Văn bản hợp lệ: tuân theo nguyên tắc cú pháp XML và quy định trong DTD hoặc lược đồ
Văn bản chuẩn tuân: theo quy tắc cú pháp XML nhưng
không có DTD hoặc lược đồ.
4.1 Tổng quan về XML
Trang 74.1.1 Giới thiệu
ví dụ:
<?xml version="1.0" encoding="UTF-8"?>
<book isbn="978-1594489501">
<title> A Thousand Splendid Suns </title>
<author> Khaled Hosseini </author>
<publisher> Riverhead Hardcover </publisher>
<amazon_price> 14.27 </amazon_price>
</book>
4.1 Tổng quan về XML
Trang 84.1.1 Giới thiệu
Các đặc điểm của XML:
Dễ dàng viết được các chương trình xử lý dữ liệu
Tài liệu XML dễ đọc và có tính hợp lý cao
XML dễ dàng được sử dụng trên Internet
XML hỗ trợ nhiều ứng dụng
Không đặt nặng tính hình thức trong nội dung thẻ
4.1 Tổng quan về XML
Trang 94.1.2 Cấu trúc một tài liệu XML
Một tài liệu XML được chia thành hai phần chính:
- Phần khai báo: khai báo cho tài liệu XML
khai báo phiên bản, bảng mã ký tự sử dụng trong tài liệu
định nghĩa kiểu cho tài liệu
Khai báo có thể có hoặc không Nếu có, nó phải là ở dòng đầu tiên trong văn bản
Ví dụ:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
4.1 Tổng quan về XML
Trang 104.1.2 Cấu trúc một tài liệu XML
Một tài liệu XML được chia thành hai phần chính:
- Phần thân: chứa nội dung dữ liệu
gồm một hay nhiều phần tử,
mỗi phần tử được chứa trong một cặp thẻ
phần tử đầu tiên là phần tử gốc (root element)
4.1 Tổng quan về XML
Trang 114.1.2 Cấu trúc một tài liệu XML
Ví dụ:
<EMAIL>
<FROM> Peter@gmail.com </FROM>
<TO> Jhon@gmail.com </TO>
<SUBJECT> Invitation </SUBJECT>
<CC> marry@yahoo.com </CC>
</EMAIL>
4.1 Tổng quan về XML
Trang 124.1.2 Cấu trúc một tài liệu XML
Một tài liệu XML được coi là hợp khuôn dạng (well-form) nếu:
các khai báo đặt tại dòng đầu tiên của tài liệu
chỉ có một thành phần gốc (root)
mỗi phần tử của tài liệu phải được nằm trong một cặp thẻ
Các thành phần đều nằm giữa cặp thẻ gốc và phải lồng nhau một cách hợp lý
các cặp thẻ phải được viết chính xác như nhau
giá trị của thuộc tính phải nằm giữa ngoặc kép hoặc đơn
4.1 Tổng quan về XML
Trang 134.1.2 Cấu trúc một tài liệu XML
- Phần tử gốc
chứa tất cả các phần tử trong văn bản:
<?xml version="1.0"?>
Trang 144.1.2 Cấu trúc một tài liệu XML
Trang 154.1.2 Cấu trúc một tài liệu XML
- Phần tử
Thuộc tính cho phép xác định thêm thông tin và ý nghĩa của thẻ
một phần tử có thể chứa các thuộc tính được đặt trong thẻ bắt đầu, ngay sau tên phần tử
Giá trị của thuộc tính phải được đặt trong cặp nháy đơn hoặc nháy kép
mỗi tên thuộc tính chỉ được xuất hiện một lần trong mỗi phần tử
4.1 Tổng quan về XML
Trang 164.1.2 Cấu trúc một tài liệu XML
Trang 174.1.2 Cấu trúc một tài liệu XML
tất cả thông tin được lưu trữ trong các thuộc tính
4.1 Tổng quan về XML
Trang 184.1.2 Cấu trúc một tài liệu XML
Trang 194.1.2 Cấu trúc một tài liệu XML
- Một số quy tắc cho phần tử
Mỗi thẻ bắt đầu phải có thẻ kết thúc, hoặc thẻ đóng
Các thẻ không được chồng gối lên nhau
Mỗi tài liệu XML có duy nhất một phần tử gốc
Tên của phần tử phải tuân theo quy ước đặt tên của XML
Phân biệt chữ hoa, chữ thường
Các phần tử lồng nhau là cấu trúc quan trọng trong XML
4.1 Tổng quan về XML
Trang 204.1.2 Cấu trúc một tài liệu XML
- Quy tắc đặt tên phần tử
bắt đầu bằng các ký tự hay dấu ”_”, không được bắt đầu bằng số hay dấu câu
sau ký tự đầu tiên, có thể dùng số, “-“ và “.”
không được chứa khoảng trống, dấu hai chấm “:”
không được bắt đầu bởi nhóm ký tự “xml”
không được chứa ký tự trống ngay sau dấu mở “<”, nhưng
có thể chứa ký tự trống ngay trước dấu đóng “>”
4.1 Tổng quan về XML
Trang 214.1.2 Cấu trúc một tài liệu XML
Ví dụ: đặc tả thông tin về Jane
<?xml version = “1.0” encoding = 8”?>
“UTF-<label>
<name> Jane Smith </name>
<address street = "270 Burlington Road"
Trang 224.1.2 Cấu trúc một tài liệu XML
- Chú thích:
có thể xuất hiện bất cứ đâu trong văn bản
bắt đầu bằng “<! ” và kết thúc bằng “ >”
không thể chứa một dấu nối kép “—”
chú thích có thể chứa bất cứ nội dung gì
Trang 234.1.2 Cấu trúc một tài liệu XML
Trang 244.1.3 Tài liệu XML hợp khuôn dạng, hợp lệ
- Một tài liệu XML được xem là hợp khuôn dạng nếu:
đảm bảo những quy tắc cú pháp thiết lập cho XML bởi tổ chức W3C (XML 1.0 - các luật về thẻ, phần tử, thuộc tính, giá trị,…)
nói cách khác tài liệu XML hợp khuôn dạng là tài liệu XML
có cấu trúc đúng
4.1 Tổng quan về XML
Trang 254.1.3 Tài liệu XML hợp khuôn dạng, hợp lệ
- Để hợp khuôn dạng, tài liệu XML phải đúng các luật sau đây:
Có một phần tử gốc duy nhất, chứa tất cả phần tử khác
Mỗi thẻ mở phải có một thẻ đóng giống như nó
Mỗi phần tử con nằm trọn bên trong phần tử cha của nó
Giá trị thuộc tính trong XML phải được đặt giữa một cặp ngoặc kép hay một cặp ngoặc đơn
4.1 Tổng quan về XML
Trang 264.1.3 Tài liệu XML hợp khuôn dạng, hợp lệ
- Tài liệu xml hợp lệ khi nó là tài liệu được kết hợp với định nghĩa kiểu dữ liệu (DTD) và tuân theo các chuẩn của DTD
- Hầu hết các trình duyệt kiểm tra tính hợp khuôn dạng trước
Tiếp theo một vài trình duyệt có thể kiểm tra thêm tính hợp lệ của tài liệu xml
4.1 Tổng quan về XML
Trang 274.1.4 Kiểu dữ liệu
XML có hai nhóm kiểu dữ liệu là kiểu ghép và kiểu cơ bản
Kiểu ghép là kiểu chứa các phần tử con trong nó hoặc
chứa thêm thuộc tính
Kiểu cơ bản là các kiểu nội tại đã được định nghĩa sẵn
4.1 Tổng quan về XML
Trang 284.1.4 Kiểu dữ liệu
- Kiểu cơ bản
4.1 Tổng quan về XML
Binary Kiểu dữ liệu nhị phânBoolean Kiểu luận lý
Byte Kiểu byte
Decimal Kiểu thập phân
Double Kiểu số thực 64-bitString Kiểu chuỗi
Date Kiểu ngày
Month Kiểu tháng (ví dụ 4, 6)
Century Kiểu thế kỷ (ví dụ 20)
Trang 294.1.4 Kiểu dữ liệu
- Kiểu cơ bản
4.1 Tổng quan về XML
Int, integer Kiểu số nguyên
Id Kiểu định danh
Entity Kiểu thực thể
Entities Kiểu đa thực thể
Idref Kiểu tham chiếu định danh
Notation Kiểu ghi chú
NMToken Kiểu Token đơn
NMTokensKiểu đa Token
Trang 304.1.4 Kiểu dữ liệu
- Kiểu ghép
cấu trúc gồm có hai hay nhiều kiểu dữ liệu đơn giản
lập trình viên có thể tự định nghĩa các kiểu dữ liệu này
4.1 Tổng quan về XML
Trang 314.2.1 Định nghĩa dữ liệu
định nghĩa kiểu dữ liệu (Data Type Definition – DTD) là định
nghĩa kiểu dữ liệu cho các phần tử
DTD mô tả các quy tắc cấu trúc của tài liệu
Liệt kê các phần tử, thuộc tính và các thực thể có thể được
sử dụng trong tài liệu
Cấu trúc của DTD phân cấp theo dạng hình cây
DTD phải theo cú pháp qui định của W3C
Có hai loại DTD (Nội và ngoại)
4.2 Định nghĩa kiểu dữ liệu - DTD
Trang 32>
Ví dụ Khai báo DTD lưu trữ toàn bộ thông tin của một Email
4.2 Định nghĩa kiểu dữ liệu - DTD
Trang 334.2 Định nghĩa kiểu dữ liệu - DTD
<!ELEMENT SUBJECT (#PCDATA)>
<!ELEMENT BODY (#PCDATA)>
]>
<EMAIL>
<TO> Smith@gmail.com </TO>
<FROM> John@yahoo.com </FROM>
<CC> peter@hotmail.com </CC>
<SUBJECT> Play a game <SUBJECT>
<BODY> We have a game on this Sunday </BODY>
</EMAIL>
Trang 344.2.1 Định nghĩa dữ liệu
Khi khai báo một phần tử có khả năng chứa nhiều phần tử con
chúng ta phải lặp lại khai báo <ELEMENT>
sử dụng các ký tự đại diện (*)
Ví dụ:
<?xml version="1.0"?>
<!DOCTYPE EMAILS [
<!ELEMENT EMAILS ( EMAIL ) * >
<!ELEMENT EMAIL (To, From, CC, Subject,Body)>
]>
4.2 Định nghĩa kiểu dữ liệu - DTD
Trang 354.2.1 Định nghĩa dữ liệu
Một số nguyên tắc sử dụng ký tự đại diện
Giả sử a, b là hai phần tử con muốn khai báo và định nghĩa
a*: Không có hoặc có nhiều phần tử con giống nhau
a+: Có một hoặc nhiều phần tử con giống nhau
a?: Phần tử a hoặc không có phần tử nào cả
a, b: Phần tử a tiếp đến là phần tử b
a|b: Phần tử a hoặc b nhưng không được cả hai
(expresstion) Tập các phần tử expresstion trong cặp ngoặc
sẽ ảnh hưởng bởi ký tự đại diện *, + hoặc ?
4.2 Định nghĩa kiểu dữ liệu - DTD
Trang 364.2.1 Định nghĩa dữ liệu
một DTD có thể chứa các thành phần sau:
ELEMENT Định nghĩa một phần tử
ATTRIBUTE Định nghĩa một thuộc tính của một ELEMENT
ENTITY Định nghĩa một thực thể
NOTATION Định nghĩa chú thích
#PCDATA Chứa dữ liệu văn bản
4.2 Định nghĩa kiểu dữ liệu - DTD
Trang 374.2.1 Định nghĩa dữ liệu
- Phần tử
phần tử có thể chứa dữ liệu, phần tử con hoặc thuộc tính
<!ELEMENT name content_mode>
name là tên phần tử;
content_mode có thể là EMPTY, ANY hoặc cả hai
ANY: phần tử có thể chứa bất kỳ kiểu nội dung nào kể cả phần tử khác,
trình phân tích sẽ không kiểm tra cú pháp hay xác định tính hợp lệ của nội dung phần tử
4.2 Định nghĩa kiểu dữ liệu - DTD
Trang 384.2.1 Định nghĩa dữ liệu
- Phần tử
EMPTY: Khai báo phần tử rỗng
phần tử không mang nội dung nhưng có quyền mang giá trị cho thuộc tính
Trang 394.2.1 Định nghĩa dữ liệu
- Thuộc tính
Thuộc tính chứa thông tin về phần tử hay nội dung của phần tử
<!ATTLIST element attribute type default>
element là tên của phần tử
attribute là tên thuộc tính
type là kiểu dữ liệu
default giá trị mặc định
4.2 Định nghĩa kiểu dữ liệu - DTD
Trang 404.2.1 Định nghĩa dữ liệu
- Thuộc tính
Ví dụ:
4.2 Định nghĩa kiểu dữ liệu - DTD
<?xml version="1.0" standalone ="yes"? >
<!DOCTYPE DOCUMENT [
<!ELEMENT DOCUMENT (CUSTOMER)*>
<!ELEMENT CUSTOMER (NAME, ORDER, DAY, PRODUCT)>
<!ELEMENT NAME (#PCDATA)>
<!ELEMENT ORDER (#PCDATA)>
<!ELEMENT DAY (#PCDATA)>
<!ELEMENT PRODUCT (#PCDATA)>
<!ATTLIST CUSTUMER TYPE CDATA #IMPLIED>
Trang 414.2.1 Định nghĩa dữ liệu
- #PCDATA (Parsed Character Data)
Khai báo phần tử chứa dữ liệu văn bản thô, không định dạng
<!ELEMENT CUSTOMER (#PCDATA)>
Trang 424.2.1 Định nghĩa dữ liệu
- #PCDATA (Parsed Character Data)
Ví dụ sau đây là không hợp lệ vì phần #PCDATA chứa phần tử:
4.2 Định nghĩa kiểu dữ liệu - DTD
<?xml version="1.0"?>
<!DOCTYPE DOCUMENT [
<!ELEMENT DOCUMENT (CUSTOMER)*>
<!ELEMENT CUSTOMER (#PCDATA)>
Trang 434.2.1 Định nghĩa dữ liệu
- #PCDATA (Parsed Character Data)
Có thể định nghĩa một DTD vừa có khả năng chứa dữ liệu thuần text vừa chứa dữ liệu thể hiện phần định dạng (kiểu nội dung hỗn hợp)
Ví dụ:
4.2 Định nghĩa kiểu dữ liệu - DTD
<!DOCTYPE DOCUMENT [
<!ELEMENT DOCUMENT (CUSTOMER)*>
<!ELEMENT CUSTOMER (NAME, ORDER, PRODUCT)>
<!ELEMENT PRODUCT (#PCDATA | PRODUCT_ID)>
<!ELEMENT PRODUCT_ID (#PCDATA)>
]>
Trang 444.2.1 Định nghĩa dữ liệu
- DTD ngoại
dựa trên các DTD đã được định nghĩa sẵn (tệp tin dtd)
ứng dụng XML có thể chia sẻ và dùng chung với ứng dụng khác
Có hai cách tham chiếu ngoại: Tham chiếu ngoại riêng (Peivate DTDs) và tham chiếu ngoại chung (Public DTDs)
4.2 Định nghĩa kiểu dữ liệu - DTD
Trang 454.2.1 Định nghĩa dữ liệu
- DTD ngoại dùng riêng
tham chiếu ngoại riêng được sử dụng cho một nhóm người
và mang tính cá nhân
khai báo tham chiếu ngoại riêng bằng cách sử dụng từ
khóa SYSTEM trong chỉ thị khai báo <!DOCTYPE>
4.2 Định nghĩa kiểu dữ liệu - DTD
Trang 464.2.1 Định nghĩa dữ liệu
- DTD ngoại dùng riêng
Ví dụ:
4.2 Định nghĩa kiểu dữ liệu - DTD
<?xml version="1.0" standalone ="no"? >
<!DOCTYPE DOCUMENT SYSTEM
Trang 474.2.1 Định nghĩa dữ liệu
- DTD ngoại dùng riêng
Tệp tin order.dtd như sau:
4.2 Định nghĩa kiểu dữ liệu - DTD
<!ELEMENT DOCUMENT (CUSTOMER)*>
<!ELEMENT CUSTOMER (NAME, ORDER, PRODUCT)>
<!ELEMENT NAME (#PCDATA)>
<!ELEMENT ORDER (#PCDATA)>
<!ELEMENT PRODUCT (#PCDATA )>
Trang 484.2.1 Định nghĩa dữ liệu
- DTD ngoại dùng chung
sử dụng từ khóa PUBLIC vào khai báo <!DOCTYPE>
cần phải tạo ra một định danh chung hình thức (FPI –
Formal Public Identifier) và tuân theo một số qui tắc cho FPI
- Trường đầu tiên của FPI xác định kết nối DTD đến một chuẩn hình thức Đối với các DTD do chúng ta tự định nghĩa, trường này sẽ là một ký tự chấm (.).
Đối với các chuẩn hình thức, trường này sẽ tự tham chiếu đến chuẩn của
nó (ví dụ như ISO/IEC:13449:2000).
4.2 Định nghĩa kiểu dữ liệu - DTD
Trang 49- Trường thứ tư chỉ định ngôn ngữ mà định nghĩa TD sử dụng (ví dụ với tiếng Anh chúng ta dùng là EN)
Các trường trong FPI cách nhau bằng cặp dấu sổ trái (//)
4.2 Định nghĩa kiểu dữ liệu - DTD
Trang 504.2.1 Định nghĩa dữ liệu
Ví dụ:
4.2 Định nghĩa kiểu dữ liệu - DTD
<?xml version="1.0" standalone ="no"? >
<!DOCTYPE DOCUMENT PUBLIC
".//viethanit//Custom XML Version 1.0//EN"
Trang 51HỌC GÌ – NHỚ GÌ?
XML