You are on page 1of 143

Chương 1: TỔNG QUAN VỀ XML

GV: ThS Ngô Lê Quân


1.1 Tìm hiểu về ngôn ngữ đánh dấu
 Thuật ngữ “đánh dấu - markup” nói đến các mã hay
các dấu hiệu được đưa vào một tài liệu để chỉ ra cách
thể hiện dữ liệu trong tài liệu đó. Hay nói cách khác,
đánh dấu là mô tả dữ liệu trong tài liệu và cách nó sẽ
được thể hiện (Markup Language). HTML (Hyper Text
Markup Language) là một ngôn ngữ đánh dấu, được
hầu hết mọi người biết đến.
1.1 Tìm hiểu về ngôn ngữ đánh dấu
 HTML (Hyper Text Markup Language) là một ngôn
ngữ đánh dấu, được hầu hết mọi người biết đến.

 Các thẻ tag , , , là các thẻ này được các trình duyệt xử
lý và chỉ ra cách hiển thị dữ liệu như thế nào trên trình
duyệt.
1.1 Tìm hiểu về ngôn ngữ đánh dấu
 HTML được hình thành từ một ngôn ngữ đánh dấu Standard
Generalized Markup Language (SGML)và thật ra nó là một áp
dụng của SGML.
 SGML được phát minh bởi Ed Mosher, Ray Lorie và Charles F.
Goldfarb của nhóm IBM research vào năm 1969, khi con người
đặt chân lên mặt trăng. Lúc đầu nó có tên là Generalized Markup
Language (GML), và được thiết kế để dùng làm meta-language,
một ngôn ngữ được dùng để diễn tả các ngôn ngữ khác - văn
phạm, ngữ vựng của chúng v.v... Năm 1986, SGML được cơ
quan ISO (International Standard Organisation) thu nhận
(adopted) làm tiêu chuẩn để lưu trữ và trao đổi dữ liệu. Khi Tim
Berners-Lee triển khai HyperText Markup Language - Bài giảng
Công Nghệ XML Trang 2 HTML để dùng cho các trang Web hồi
đầu thập niên 1990, ông ta cứ nhắc nhở rằng HTML là một áp
dụng của SGML.
1.1 Tìm hiểu về ngôn ngữ đánh dấu
1.2 Sự ra đời XML
 Mỗi ngôn ngữ trước XML có một số nhược điểm như:
 GML và SGML không được thiết phù hợp cho việc trao
chuyển dữ liệu trên web.
 HTML được thiết kế cho mục đích hiển thị dữ liệu như
thế nào trên trình duyệt.
>> XML ra đời để khắc phục các nhược điểm của các ngôn
ngữ trước.
1.2 Sự ra đời XML
 Điểm khác nhau giữa XML và HTML:
1.3 Đặc trưng & ưu điểm XML
 Đặc trưng XML:
XML là những chữ cái viết tắt của cụ từ eXtensible Markup
Language
 XML dùng để phục vu ̣cho viêc mô tả dữ liệu (thông tin lưu
trữ bao gồm những gì, lưu trữ ra sao) để các hê ̣thống khác
nhau có thể đoc và sử dụng những thông tin này môt c ̣ách
thuân tiêṇ
 Các thẻ (tag) của XML thường không đươc đ ̣inh nghĩa trước
mà chúng đươc tạo ra theo quy ước của người, (hoăc Chương
trình) tao ra XML theo những quy ước của chính ho
 ̣XML sử duṇg các khai báo kiểu dữ liêụ DTD (Document Type
Definition) hay lươc đ ̣ ồ Schema để mô tả dữliêụ .
1.3 Đặc trưng & ưu điểm XML
 Ưu điểm của XML:
 XML có thể tách rời dữ liệu khỏi HTML, bởi XML nó có tính độc lập.
Khi HTML được dùng để hiển thị dữ liệu, dữ liệu được lưu bên trong
HTML. Với XML, dữ liệu có thể được lưu bên ngoài HTML. Điều này
đảm bảo rằng những thay đổi dữ liệu trong file XML sẽ không làm ảnh
hưởng tới cách hiển thị được xử lý cài đặt trên file HTML.
 Dữliêụ đôc ̣ lâp l ̣ à ưu điểm chính của XML. Do XML chỉ dùng để mô tả
dữliêu ̣ bằng daṇ g text nên tất cả các chương trình đều có thể đoc đư ̣ ơc
XML. ̣
 Dễ dàng đọc và phân tích dữliêu, nh ̣ ờ ưu điểm này mà XML thường
đươc ḍ ùng để trao đổi dữliệu giữa các hê ṭ hống khác nhau.
 Dễdàng để tao 1 ̣ file XML
 Lưu trữcấu hình cho web site.
 Sử dụng cho phương thức Remote Procedure Calls (RPC) phuc ̣vu ̣web
service.
 XML được dùng để tạo ra ngôn ngữ đánh dấu mới như cho các thiết bị
không dây (Wireless Markup Language)
1.4 Giới thiệu cấu trúc tài liệu XML
 Một ví dụ về cấu trúc của một file XML
1.4 Giới thiệu cấu trúc tài liệu
XML
 Một tài liệu XML băt đầu bằng khai báo XML để định nghĩa
phiên bản XML và bộ có thể thêm bộ mã hóa được dùng trong tài
liệu. Khai báo XML:

 Cho biết tài liệu dùng phiên bản XML 1.0 và sử dụng bộ mã hóa
ký tự UTF-8 thông qua 2 thuộc tính version và encoding.
 Tham số version: Khai báo về phiên bản của định chuẩn XML
đuợc sử dụng Tài liệu XML thuộc đỉnh chuẩn 1.0
 Tham số encoding: Khai báo về cách mã hóa các ký tự
trong tài liệu
 Tài liệu XML sử dụng cách mã hóa Unicode ký hiệu utf-8
1.4 Giới thiệu cấu trúc tài liệu XML
 Tham số standalone: Khai báo về liên kết của tài liệu
XML và các tài liệu khác. Tham số này chỉ có 2 giá trị
hợp lệ là “yes”, “no”. Giá trị định sẳn là “no” Tài liệu
XML có liên kết với các tài liệu khác
1.4 Giới thiệu cấu trúc tài liệu XML
 Tất cả dữ liệu trong file XML phải được nằm trong 1
phần tử, phần tử là đơn vị cơ bản để lưu trữ dữ liệu của
bạn. Các phần tử luôn luôn bắt đầu bằng 1 thẻ mở
<note>và kết thúc bằng 1 thẻ đóng </note> .
 Trong ví dụ trên chúng ta đã tạo ta một phần tử mới
hoàn toán <note>. Và bên trong phần tử này ta có các
phần tử con như <to> , <from>, <here> , <body> .
Như bạn thấy, chúng ta có thê tự đặt tên các thẻ tag của
cách riêng trong tài liệu XML, đó là điểm mạnh của
XML, khả năng cho phép sáng tạo ra “dấu” của riêng
bạn.
1.4 Giới thiệu cấu trúc tài liệu XML
 Giữa các thẻ đóng và mở của một phần tử bạn có thể
đặt nội dung của phần tử (nếu có). Nội dung của phần
tử có thể là 1 đoạn text hay các phần tử con. Cũng
giống như khai báo XML, các phần tử cũng có các
thuộc tính riêng. Một tài liệu XML luôn cần phần tử
gốc ngay cả khi không có phần tử hay văn bản nào
trong nó. Ở đây <note> là phần tử gốc.
 Chú ý: Tài liệu XML được lưu trong tập tin có phần mở
rộng là “.xml”
1.5 Giới thiệu một số trình soạn thảo
và trình duyệt
 Để tạo 1 tài liệu XML, bạn có thể sử dụng một số trình
soạn thảo văn bản như Notepad, wordpad … Ngoài ra
bạn có thể sử dụng các phần mềm chuyên dụng như
XMLWriter, Microsoft Visual Studio, Netbean …
Download phần mềm XMLwriter tại:
http://xmlwriter.net
1.5 Giới thiệu một số trình soạn thảo
và trình duyệt
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.1 Chỉ thị xử lý & chú thích
 1.6.1.1 Chú thích
 Như các ngôn ngữ khác, trong lâp trình thì chú thích (comment)
được tạo ra trong chương trình là cần thiết, để sau này khi đọc laị
mã lêṇh có thể hiểu mã lênh môt c ̣ách nhanh nhất, chính xác và dễ
dàng nhất. Để tao chú thích cho nôị dung trong XML ban có thể
tao ̣ chú thích theo những quy ước sau:
 Chú thích trong XML bắt đầu bằng <!-- và kết thúc bằng -->
 Trong nôị dung của comment không nên có ký tự“-“
 Không nên đăt comment trong 1 thẻ (Thuộc giới hạn ṃở thẻ …
đóng thẻ – quy ước này ám chỉ những “thẻ con” những thẻ chỉ
có nôi dung ̣ mà không chứa các thẻ khác lồng bên trong nó) -
Không nên đăṭ comment trước dòng khai báo <?xml ?>
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.1 Chỉ thị xử lý & chú thích
 1.6.1.2 Chỉ thị xử lý
 Là thông tin dành cho chương trình đang sử dung file XML ̣, các
chỉ thị này được đặt trong cặp tag <? ?>. Thành phần này
không tuân theo các qui đinh của XML. Khi file XML đươc đ ̣ oc,
c ̣ ác thông tin của đối tương này sẽ đươc đọc lên và truyền cho
ứng dụng. Cú pháp như sau:

 Trong đó: - PITarget: tên của ứng dụng nhân thôn ̣g tin của chỉ thị
xử lý - Instruction: nôi dung sẽ truyền cho PITarget
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.1 Chỉ thị xử lý & chú thích
 1.6.1.2 Chỉ thị xử lý
Chúng ta thường thấy dòng lệnh nằm ở đầu file XML.

 Đây không phải là chỉ thị xử lý mà nó là một khai báo XML


(XML Declaration). Nó cho biết phiên bản đặc tả XML mà bộ
phân tích cần làm theo, ngoài ra nó cho phép người lập trình cho
biết dữ liệu trong XML dùng encoding nào, còn thuộc tính
standalone sẽ cho biết tài liệu XML có cần đến một tài liệu khác
không (có hai giá trị cho thuộc tính này đó là “yes” nếu không cần
đến một tài liệu khác và “no” nếu cần).
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.2 Phần tử - Element: Tài liệu XML chứa 1 hay
nhiều các phần tử XML
 1.6.2.1 Phần tử XML là gì? Một phần tử (element hay
còn gọi là các tag) là những thong tin nằm giữa thẻ mở
và thẻ đóng. Nội dung của một phần tử có thể chứa: -
Một hoặc nhiều phần tử khác. - Một đoạn văn bản - Một
thuộc tính - Hoặc là tất cả các loại trên
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.2 Phần tử - Element:
 Ví dụ: Trong ví dụ dưới đây, <bookstore> và <book>
chứa các phần tử khác. Phần tử <book> chứa thuộc
tính (category="CHILDREN"). Các phần tử khác như
<author> , <title> , <year> , <price> và chứa nội
dung có dạng là dữ liệu văn bản text.
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.2.2 Các quy tắc đặt tên trong XML
Việc đặt tên cho các phần tử là tùy ý, có thể tạo ra các
tên phần tử mang ngữ nghĩa riêng cho người sử dụng
nhưng cũng phải tuân thủ các nguyên tắc sau:
 Tên có thể chứa ký tự, số hoặc các ký tự khác
 Tên không thể bắt đầu bằng số hoặc dấu chấm “.”
 Tên không được bắt đầu với ký tự “xml” (hoặc XML,
hoặc Xml …)
 Tên không được chứa khoảng trắng
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.2.2 Các quy tắc đặt tên trong XML
Một số lời khuyên khi đặt tên:
 Tên phải có ý nghĩa, dễ hiểu, có thể sử dụng ký tự “_” để phân
tách tên như sau <first_name>, <last_name> .
 Tên nên ngắn gọn và đơn giản , không nên đặt tên như sau .
 Tránh sử dụng ký tự “-“. Nếu bạn đặt tên phần tử như sau
"first-name," một số chương trình ứng dụng sẽ hiểu nó như
một phép toán trừ.
 Tránh sử dụng ký tự “.” Nếu bạn đặt tên phần tử như sau
"first.name," một số chương trình có thể hiểu "name" là thuộc
tính của đối tượng "first."
 Không sử dụng ký tự “:” để đặt tên bởi ký tự này được sử
dụng trong không gian tên (namespace - sẽ được đề cập ở
phần sau).
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.3 Thuộc tính
 Khi các thẻ (tag) sử duṇg để mô tả cho dữ liêu trong XML
cần phải đươc biểu diên thông ̃ tin nhiều hơn nữa, XML
cho phép ngườ i tạo có thể sử dung thuôc tính (attributes)
để bổ xung cho viêc ̣ mô tả dữ liêụ chi tiết đối với các thẻ .
Ngoài mục đích giúp cho viêc mô tả thông tin đầy đủ hơn
đối với dữ liêu của các thẻ (tag), thuôc ̣ tính còn có tác dung
hỗ trợcho viêc phân ̣ biệt giữa các thành tố cùng tên với
nhau trong môt tập tin XML. Về nguyên tắc, thuôc tính
thường phải tồn tai từng căp mô tả cho tên và giá tri ̣của nó
theo quy ước: <attname>= “attValue”. Cú pháp đầy đủ mô
tả cho 1 tag với attributes đi kèm đươc mô tả như sau
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.3 Thuộc tính

Cũng giống như quy ước về đăt tên cho các thẻ
(tag) trong XML, tên của thuôc tính (atributes name)
cũng phân biệt chữ hoa, thường và luôn bắt đầu bởi ký
tự hay dấu gach dướ i đồng thời không cho phép sử
dung khoảng trắng (white space). Dưới đây mô tả viêc ̣
sử dung thuộc tính bên trong 1 tag.
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.3 Thuộc tính

 Trong ví du ̣trên, bạn thấy ta có tag vớ i các thuôc tính


để mô tả chi tiết cho dữ liêu c ̣ó tên “Bàn ăn gia đình”
là dai, rong, cao, vatLieu cùng với các giá tri ̣cần thiết.
Đây là ví du ̣về tag do chúng ta tự đinh nghĩa
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.4 XML hợp khuôn dạng
Để well-formed, một tài liệu XML phải theo đúng các luật
sau đây:
1. Trong 1 file XML phải có ít nhất một phần tử và phần tử
đầu tiên phải là một nút gốc hay phần tử gốc (Root
Element) duy nhất, gọi là Document Element, nó chứa tất
cả các Elements khác trong tài liệu.
2. Mỗi tag mở (opening Tag) luôn phải có một tag đóng
(closing Tag) giống như nó. Luôn tồn tại 2 thẻ tag mở và
đóng trong 1 tài liệu XML tức là mỗi Tag mở ra phải được
đóng lại. Nút rỗng hay phần tử rỗng (Empty Element) viết
cách gọn như <MiddleInitital/>được gọi là có Tag tự đóng
lại. Các Tags khác phải có thẻ tag đóng.
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.4 XML hợp khuôn dạng
Để well-formed, một tài liệu XML phải theo đúng các
luật sau đây:
3. Đặt tên cho các thẻ tag trong XML thì phân biệt hoa
thường (case sensitive), tức là thẻ mở và thẻ đóng phải
được đánh vần y như nhau, chữ hoa hay chữ thường.
Tên của các thẻ tag phân biệt hoa-thường, tức là thẻ
đóng phải đánh vần y hệt như thẻ mở. Như thế
<order>khác với <Order>, ta không thể dùng thẻ
</Order> để đóng thẻ <order>.
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.4 XML hợp khuôn dạng
Để well-formed, một tài liệu XML phải theo đúng các
luật sau đây:
4. Mỗi phần tử con phải nằm trọn bên trong phần tử cha
của nó. Mỗi nút con hay phần tử con phải nằm trọn
bên trong phần tử cha của nó, tức là không thể bắt đầu
một phần tử mới khi phần tử này chưa chấm dứt. Thí
dụ như tài liệu XML dưới đây không well-formed vì
thẻ đóng của Category hiện ra trước thẻ đóng của
Product.
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.4 XML hợp khuôn dạng
Để well-formed, một tài liệu XML phải theo đúng các
luật sau đây:
5. Giá trị của 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 nháy đơn. Tài liệu
XML well-formed đòi hỏi giá trị của thuộc tính phải
được đặt trong một cặp nháy đơn hay nháy kép.
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.5 Thực thể
 Một vài ký tự có ý nghĩa đặc biệt trong XML. Nếu bạn
thay thế ký tự giống “<“ trong một phần tử XML, nó
sẽ gây ra lỗi bởi vì bộ phân tích hiểu ký tự này như là
bắt đầu 1 phần tử mới. Ví dụ sau sẽ gây ra lỗi trong khi
xử lý XML

 Để tránh gây ra lỗi này, chúng ta thay thế ký tự


“<“ bằng một tham chiếu thực thể “entity
reference”:
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.5 Thực thể
 Có 5 thực thể tham chiều được định nghĩa sẵn trong
XML
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.6 Không gian tên - Namespace XML cho phép tự
đặt tên đối với các phần tử (Elements) và thuộc tính
(Attributes) đi kèm theo những quy định riêng của
mình. Đây là môṭ ưu điểm lớn của XML giúp cho
người tạo ra có thể xây dưṇg và mô tả dữ liệu môt
c ̣ách chủ động, tuy nhiên chúng ta sẽ gặp phải vấn đề
khi file XML này đươc ̣ sử dụng chung trên môṭ
hê ̣thống mà dữ liêu c ̣ủa nó đươc thu thâp từ nhiều
nguồn khác nhau.
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.6 Không gian tên
Hãy xem xét tình huống sau:
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.6 Không gian tên
Hãy xem xét tình huống sau:

Để giải quyết vấn đề trên, trong XML hình thành 1 khái niêṃ
và cho phép sử dung goị là Namespace nhằm giúp cho việc
truy xuất đến các phần tử một cách tường minh trong
những trường hơp ̣ có thể gây ra trùng tên trong cùng 1 file
XML.
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.6 Không gian tên
 1.6.6.1 Định nghia ̃ không gian tên: Không gian tên là
tâp hợp các tên dùng để cho phép kết hơp với các phần
tử và thuôc tính bên trong một tài liêụ XML nhằm giải
quyết nguy cơ xung đôt về tên của các phần tử khi
thông tin đươc ̣ tổng hơp từ nhiều nguồn khác nhau,
thông qua không gian tên, trình duyệt có thể kết hợp
các file XML từ nhiều nguồn khác nhau, có thể truy
xuất đến DTD để kiểm tra cấu trúc của XML nhận
đươc ̣ có thưc sự thích họp ̣ , từ đó xác đinh đươc tính
hơp lê ̣của XML tương ứng
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.6 Không gian tên
 1.6.6.1 Định nghia ̃ không gian tên:
 Tóm lai, ̣ Không gian tên được xem như là 1 kỹ thuât kết
hợp môt số tên phần tử cùng với thuôc ̣ tính thành 1 môt
nhóm, mỗi nhóm sẽ có 1 tên xác đinh. ̣ Do viêc kết hơp
giữa 2 thành phần theo cách tên_nhóm:tên_element cho
nên sẽ đảm bảo không xảy ra trường hơp trùng tên trong
XML. Tên nhóm chính là thành phần “tiền tố” (prefix)
trong tên mới. Như vâỵ, để giải quyết vấn đề xung đột về
tên vừa đề câp ̣ ở trên trong 1 cấu trúc XML hơp nhất, ta
có thể làm như sau:
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.6 Không gian tên
 1.6.6.1 Định nghia ̃ không gian tên:

 Có thể thấy do sử duṇg không gian tên dưới dang ̣ tiền


tố kết hơp với tên của phần tử, tất cả các thẻ tag khi kết
hơp ̣ trong cùng 1 cấu trúc ở trên đã đươc ̣ phân biệt
một cách rõ ràng
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.6 Không gian tên
 1.6.6.2 Cú pháp khai báo không gian tên và thuôc tính
xmlns
 Cú pháp

 Trong đó:
- nameSpacePrefix: chính là phần viết tắt đai diên cho
nameSpace được sử dung như là tiền tố (prefix) cho các tag
trong cùng nhóm
- xmlns: là thuôc ̣ tính đươc sử dung để khai báo và chỉ ra
nameSpace cần thiết sẽ áp dung ̣ trong cấu trúc XML
- URI (Uniform Resource Identifier): Chính là chuỗi ký tự mô tả
cho 1 nguồn tà i nguyên nào đó trên Internet
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.6 Không gian tên
 1.6.6.2 Cú pháp khai báo không gian tên và thuôc tính
xmlns
 Ví dụ:

1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.6 Không gian tên
 1.6.6.2 Cú pháp khai báo không gian tên và thuôc tính
xmlns
 Việc sử dụng tiền tố (prefix) vẫn có thể xảy ra trường hợp
trùng nhau trong quá trinh ̀ xây dưṇg những cấu trúc XML
lớn, cho nên khi khai báo nameSpace thì thành phần prefix
thường sẽ đươc gắṇ với môt ̣ URI nào đó . URI thường là 1
chuỗi ký tự mô tả cho 1 đinḥ danh có thực trên internet,
thông thường URI phổ biến nhất mà moị người đều biết
đến chính là URL (Uniform Resource Location) và đương
nhiên các URL thì luôn luôn là duy nhất, chinh vì điều này
mà nameSpace điṇh nghiã theo cách này cũng trở thành
duy nhất, không thể bi ̣trùng.
1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.6 Không gian tên
 1.6.6.2 Cú pháp khai báo không gian tên và thuôc tính
xmlns

1.6 Tìm hiểu các thành phần trong tài
liệu XML
 1.6.6 Không gian tên
 1.6.6.2 Cú pháp khai báo không gian tên và thuôc tính
xmlns
 Hoăc chúng ta có thể khai báo không gian tên mặc định
(Default Namespaces) như sau mà không sử dung ̣ prefix:
1.7 Tìm hiểu về DTDs
 1.7.1 DTDs là gi?̀
 1.7.1.1 Khái niệm
Một DTD xác định các phần tử có thể xuất hiện trong văn bản,
thứ tự chúng xuất hiện, cách chúng được sắp xếp trong cái
khác, và các chi tiết cơ bản trong cấu trúc văn bản XML.
DTD sử dụng một cú pháp ngắn gọn khai báo chính xác những
yếu tố và tài liệu tham khảo có thể xuất hiện ở đầu trong tài
liệu XML.
DTD cũng khai báo các thực thể (Entity) có thể được sử dụng
trong tài liệu XML. DTD được bộ phân tích XML sử dụng để
kiểm tra 1 tài liệu XML là hợp lệ. Ngoài ra nó còn được dùng
để thiết lập các giá trị mặc định (default value) cho các thuộc
tính. Cấu trúc cây của tài liệu có thể được quyết định dựa trên
DTD.
1.7 Tìm hiểu về DTDs
 1.7.2 Tai sao ̣ lai sử dung DTDs? ̣
 Với một DTDs, mỗi tập tin XML của bạn có thể thực
hiện một mô tả của định dạng riêng của mình.
 Để dễ dàng cho việc trao đổi dữ liệu, việc đưa ra các tiêu
chuẩn cho 1 tài liệu DTD, tên cũng như thứ tự các tag
hay các thuộc tính là điều cần thiết.
 Cũng có thể sử dụng một DTDs để xác minh dữ liệu
riêng là hợp lệ
1.7 Tìm hiểu về DTDs
 1.7.2.1 Cấu trúc DTDs và các bước tao DTDs
 Cấu trúc DTDs bao gồm có 3 phần
Khai báo các phần tử (element)
Khai báo các thuộc tính ( attribute)
Khai báo các thực thể (entity)
 Khai báo phần tử: khai báo phần tử gồm có tên và nôị
dung của phần tử.
 Khai báo thuộc tính: khai báo thuộc tính thuôc phần tử
nào, tên thuộc tính, kiểu dữ liêu ̣ của thuộc tính và giá
tri ̣măc đ ̣inh của thuộc tính.
 Khai báo thực thể: khai báo tên của thực thể, giá tri ̣của
thực thể hay vi ̣trí của giá tri ̣ thực thể.
1.7 Tìm hiểu về DTDs
 1.7.2.2 Các bước xây dựng tài liệu Tao DTD bao gồm
6 bước
 Khai báo tất cả các phần tử có trong XML.
 Khai báo các phần tử con cho từng phần tử (nếu có).
 Xác định thứ tự xuất hiện của các phần tử.
 Khai báo tất cả thuôc tinh của từng phần tử (nếu có).
 Khai báo kiểu dữ liêu ṿà giá tri ̣măc đ ̣ịnh cho thuôc tính.
 Khai báo các thực thể (nếu có)
1.7 Tìm hiểu về DTDs
 Cú pháp:
1.7 Tìm hiểu về DTDs
 Ví dụ:
1.7 Tìm hiểu về DTDs
 1.7.3 Phân loại DTDs
 DTDs có 2 daṇg tùy thuôc ṿào vi ̣trí đặt DTDs: bên trong
file XML hay ̣ ở file .dtd bên ngoài.
 Trường hợp khai báo cục bộ trong file XML. Nếu tài liệu DTD
được khai báo theo hình thức này, thì cần phải đặt các phần tử
theo cú pháp khai báo như sau:

 Ví dụ:
1.7 Tìm hiểu về DTDs
 1.7.3 Phân loại DTDs
 - !DOCTYPE note định nghĩa nút gốc của tài liệu XML
là “note”
 - !ELEMENT note định nghĩa nút gốc “note” chưa 4
phần tử con: "to, from, heading, body"
 - !ELEMENT to định nghĩa phần tử con “to” có kiểu dữ
liệu là "#PCDATA“
 - Tương tự cho các “!ELEMENT from”, “!ELEMENT
heading”, “!ELEMENT body”
1.7 Tìm hiểu về DTDs
 1.7.3 Phân loại DTDs
 Trường hợp DTD khai báo ngoài file XML, ta cần chỉ
ra tham chiếu của file XML tới file DTD cần chỉ định.
Cấu trúc khai báo như sau:
1.7 Tìm hiểu về DTDs
 1.7.3 Phân loại DTDs
 Trường hợp DTD khai báo ngoài file XML

 File note.dtd
1.7 Tìm hiểu về DTDs
 1.7.4 Các dang khai báo trong DTD
 1.7.4.1 Khai báo phần tử
 Element rỗng: <!ELEMENT element_name EMPTY>
 Element chứa text dạng parsed character: <!ELEMENT
element_name (#PCDATA)>
 Element chứa text dạng bất kỳ: <!ELEMENT element_name
ANY>
 Element với các thẻ con, tuần tư: <!ELEMENT element_name
(child1, child2,….)>
1.7 Tìm hiểu về DTDs
 1.7.4 Các dang khai báo trong DTD
 1.7.4.1 Khai báo phần tử
 Khai báo số lần xuất hiện của các thẻ con:
 Chỉ có tên thẻ con: xuất hiêṇ duy nhất 1 lần
 +: phải xuất hiên tối thiểu 1 lần
 *: xuất hiện 0 hay nhiều lần
 ?: xuất hiêṇ 0 hay 1 lần
 Child1|child2: hoăc ̣ child1 xuất hiên hoăc ̣ child2 xuất hiên
1.7 Tìm hiểu về DTDs
 1.7.4 Các dang khai báo trong DTD
 1.7.4.2 Khai báo thuộc tính
 <!ATTLIST element_name attribute_name attribute_type
default_value>
 Giá trị mặc định có thể là 1 trong các giá tri sau ̣
1.7 Tìm hiểu về DTDs
 1.7.4 Các dang khai báo trong DTD
 1.7.4.2 Khai báo thuộc tính
1.7 Tìm hiểu về DTDs
 1.7.4 Các dang khai báo trong DTD
 1.7.4.2 Khai báo thuộc tính
1.7 Tìm hiểu về DTDs
 1.7.4 Các dang khai báo trong DTD
 1.7.4.3 Khai báo thực thể Các thực thể (Entities) là các
biến hằng được định nghĩa ngắn gọn thay thế cho mỗi một
chuỗi các ký tự đặc biệt. Có 2 cách khai báo thực thể:
 Khai báo thực thể cục bộ (An Internal Entity Declaration)
1.7 Tìm hiểu về DTDs
 1.7.4 Các dang khai báo trong DTD
 1.7.4.3 Khai báo thực thể
 Chú ý: Mỗi thực thể khi được sử dụng phải gồm có 3
phần: dấu “&, tên thực thể và dấu “;”.
 Khai báo tham chiếu ngoài (An External Entity
Declaration)
1.7 Tìm hiểu về DTDs
 1.7.4.4 Bộ phân tích dữ liệu Tất cả dữ liệu dạng text
trong tài liệu XML đều được bộ phân tích xử lý.
Nhưng nội dung dữ liệu text bên trong phần CDATA sẽ
bị bỏ qua, không được xử lý bởi bộ phân tích.
 PCDATA - Parsed Character Data Khi các phần tử XML
được phân tích xử lý, các dữ liệu dạng văn bản text nằm
giữa các tag đều được xử lý:
<message> this text is also parsed </message>
 Parsed Character Data (PCDATA) là thuật ngữ được sử
dụng cho các dữ liệu văn bản dạng text mà nó sẽ được
phân tích xử lý bởi bộ XML parser.
1.7 Tìm hiểu về DTDs
 1.7.4.4 Bộ phân tích dữ liệu
 CDATA - (Unparsed) Character Data Thuật ngữ CDATA được
sử dụng cho các dữ liệu văn bảng dạng text mà nó không được
phân tích xử lý bởi XML parser.
 Các ký tự như "<" và "&" là bất hợp lệ khi được sử dụng trong các
phần tử XML
 Ký tự "<" sẽ gây ra lỗi vì bộ phân tích ngầm hiểu nó bắt đầu 1 phần
tử mới.
 Ký tự "&" sẽ gây ra lỗi vì bộ phân tích này hiểu nó bắt đầu của 1 thực
thể.
 Khi bạn chèn vài dòng lệnh như JavaScript mà nó chưa nhiều
ký tự "<" hoặc "&" để tránh gây ra lỗi trong trường hợp đó, ta
phải khai báo nó là kiểu CDATA. Nội dung được đặt trong
CDATA sẽ được bỏ qua, không được xử lý bởi bộ phân tích
1.7 Tìm hiểu về DTDs
 1.7.4.4 Bộ phân tích dữ liệu
 Cấu trúc khai báo

 Chú ý: Nội dung khai báo trong CDATA không được


chưa chuỗi "]]>" bởi vì chuỗi ký tự "]]>" được ngầm hiểu
là kết thúc nội dung khai báo trong CDATA.
1.8 Tìm hiểu giản đồ XML
 1.8.1 Giới thiệu chung Lược đồ XML: cũng giống
như DTD, cho phép định nghĩa cấu trúc lệnh của một
tài liệu XML, nhưng sự ra đời nhằm thay thế và khắc
phục những hạn chế của DTD. XSD ( XML Schema
Definition) được sử dụng để định nghĩa 1 lược đồ
XML.
1.8 Tìm hiểu giản đồ XML
 1.8.1 Giới thiệu chung Lược đồ XML
 Ví dụ
1.8 Tìm hiểu giản đồ XML
 1.8.1 Giới thiệu chung Lược đồ XML
 Ví dụ
 Trong ví dụ trên, định nghĩa một giản đồ XML có 1 phần
tử gốc <note> có 4 phần tử con là <to>, <from>,
<heading>, <body> và lược đồ cũng chỉ ra thứ tự sắp xếp
của các phần tử và mỗi phần tử có kiểu dữ liệu là
“string”
1.8 Tìm hiểu giản đồ XML
 1.8.2 Ưu điểm của lược đồ XML
Lược đồ XML sẽ nhanh chóng được sử dụng rộng rãi
trong các ứng dụng website thay thế cho các DTDs bởi
Hỗ trợ nhiều kiểu dữ liệu: Đây là một trong những điểm
mạnh của lược đồ XML bởi với sự hỗ trợ này:
 Cho phép dễ dàng mô tả kiểu dữ liệu chính xác của nội dung
cần mô tả được chỉ định cho một phần tử hoặc thuộc tính.
 Cho phép dễ dàng kiểm tra nội dung dữ liệu có phù hợp với
phần tử được định nghĩa trong lược đồ.
 Dễ dàng làm việc với dữ liệu của các cơ sở dữ liệu khác như
SQL Server…
 Cho phép chuyển đổi giữa các kiểu dữ liệu.
 Cho phép định nghĩa các khuôn mẫu dữ liệu.
1.8 Tìm hiểu giản đồ XML
 1.8.2 Ưu điểm của lược đồ XML
Sử dụng cú pháp của XML Một điểm mạnh khác
của lược đồ XML là sử dụng nguyên cú pháp hiện có
của XML do đó việc tìm hiểu một ngôn ngữ mới là
không cần thiết. Các trình phân tích XML hiện có dễ
dàng phân tích các lược đồ XML cho chúng ta định
nghĩa, cũng như chúng ta có thể tương tác với XML
DOM.
Cho phép thông nhất qui tắc giữa nhiều cá nhân
hay tổ chức cùng tham gia làm việc với nhau.
1.8 Tìm hiểu giản đồ XML
 1.8.2 Ưu điểm của lược đồ XML
Ví dụ: Ngày sản xuất của một sản phẩm có dạng như
sau: "03-11-2012", một số nước có thể hiểu ngày 3/11
(3.November) và một số nước khác có thể hiểu là ngày
11/3. Tuy nhiên, nếu một phần tử XML có giá trị như
sau

Phần tử <date> được định nghĩa có định dạng "YYYY-


MM-DD" sẽ đảm bảo thống nhất cách hiểu chung.
1.8 Tìm hiểu giản đồ XML
 Lược đồ XML cho phép mở rộng: có thể sử dụng lại
lược đồ XML được định nghĩa trước đó trong lược đồ
XML khác hay định nghĩa một kiểu dữ liệu mới dẫn
xuất từ kiểu dữ liệu mà lược đồ XML cung cấp sẵn và
nó cho phép tham chiếu nhiều lược đồ XML trong
cùng 1 tài liệu.
1.8 Tìm hiểu giản đồ XML
 1.8.3 Tham chiếu lược đồ XML: Tài liệu XML có thể
tham chiếu tới DTDs hoặc lược đồ XML (XML
Schema). Ví dụ sau là nội dung của 1 file "note.xml“

 Một file dtd "note.dtd" được định nghĩa tương ứng với
file “note.xml” A DTD File
1.8 Tìm hiểu giản đồ XML
 Với cách định nghĩa của DTD ở trên, ta thấy sẽ có phần tử gốc
“note”, và nó chứa 4 phần tử con là "to, from, heading, body"
mỗi phần tử con có kiểu dữ liệu là "#PCDATA".
 Lược đồ XML sẽ được định nghĩa trong file "note.xsd" tương
ứng với nội dung dữ liệu được định nghĩa trong ("note.xml")
1.8 Tìm hiểu giản đồ XML
 Lược đồ trên định nghĩa phần tử “note” có kiểu là “complex
type”, cho phép chứa các thuộc tính hoặc các phần tử khác (to,
from, heading, body). Các phần tử (to, from, heading, body) có
kiểu “simple types”, không cho phép chứa bất từ các phần tử
khác hay các thuộc tính khác.
1.8 Tìm hiểu giản đồ XML
1.8 Tìm hiểu giản đồ XML
 1.8.4 Cách khai báo các phần tử, thuộc tính cho lược
đồ XML
 1.8.4.1 Kiểu dữ liệu đơn giản – Simple Type
 Khai báo phần tử
 Định nghĩa: Các phần tử XML được khai báo thuộc kiểu simple
type chỉ có thể chưa dữ liệu dạng text và không thể chứa bất kỳ
một phần tử hay thuộc tính nào khác. Lược đồ XML hỗ trợ một số
kiểu dữ liệu như boolean, string, date, ... hoặc có thể định nghĩa
một kiểu dữ liệu mới để chỉ định.
 Cấu trúc khai báo
Để định nghĩa một phần tử có kiểu Simple Type
1.8 Tìm hiểu giản đồ XML
Lược đồ XML hỗ trợ một số kiểu dữ liệu:
 xs:string
 xs:decimal
 xs:integer
 xs:boolean
 xs:date
 xs:time
1.8 Tìm hiểu giản đồ XML
 Định nghĩa giá trị mặc định (Default value) & Giá trị cố
định ( Fixed value) Giá trị mặc định là giá trị được tự động
gán cho các phần tử khi mà không có giá trị nào được chỉ định
cho phần tử. Cấu trúc định nghĩa giá trị mặt định:

<xs:element name=“color” type=“xs:string” default=“red”>

 Giá trị cố định cũng tự động gán cho các phần tử và bạn không
thể chỉ định một giá trị khác cho phần tử. Ví dụ:

<xs:element name=“color” type=“xs:string” fixed=“red”>


1.8 Tìm hiểu giản đồ XML
 Khai báo thuộc tính Tất cả các thuộc tính đều được khai
báo như là kiểu simple type.
 Cấu trúc khai báo: Các thuộc tính được khai báo theo cấu trúc
sau: <xs:attribute name=“xxx” type=“yyy”/>
Trong đó xxx là tên thuộc tính và yyy là kiểu dữ liệu được chỉ
định cho thuộc tính đó.
 Lược đồ XML hỗ trợ các kiểu dữ liệu dành cho các thuộc tính
tương tự như các kiểu dữ khai báo cho các phần tử. Ví dụ:
<lastname lang=“EN”>Smith</lastname>
 Tương ứng với khai báo thuộc tính:
<xs:attribute name=“lang” type=“xs:string”>
1.8 Tìm hiểu giản đồ XML
 Định nghĩa giá trị mặc định và giá trị cố định cho thuộc tính
Giá trị mặc định được tự động gán cho giá trị khi không có giá
trị nào được gán cho thuộc tính. Ví dụ sau định nghĩa giá trị
mặc định cho thuộc tính “lang” có giá trị "EN":
<xs:attribute name=“lang” type=“xs:string”
default=“EN”/>

 Giá trị cố định cũng được tự động gán cho thuộc tính và không
thể chỉ định một giá trị khác cho thuộc tính.Ví dụ sau định
nghĩa giá trị cố định cho thuộc tính “lang” có giá trị "EN":
<xs:attribute name=“lang” type=“xs:string”
fixed=“EN”/>
1.8 Tìm hiểu giản đồ XML
 Thuộc tính bắt buộc (Required) hay tùy chọn (Optional) Mặc
định giá trị của thuộc tính là tùy chọn (optional), để chỉ định một
thuộc tính là bắt buộc (required) ta sử dụng thêm thuộc tính "use"
trong định nghĩa của thuộc tính:

<xs:attribute name=“lang” type=“xs:string”


use=“required”/>
1.8 Tìm hiểu giản đồ XML
 Nếu một phần tử được khai báo có kiểu dữ liệu là “xs:date”
nhưng lại chứa dữ liệu “Chào bạn”, giá trị của phần tử đó là
không hợp lệ.

 Để tránh trường hợp người dùng cung cấp các dữ liệu sai,
không hợp lệ, lược đồ XML hỗ trợ cho phép hạn chế và ngăn
ngừa điều này xảy ra.

Giới hạn về nội dung giá trị cho phép


1.8 Tìm hiểu giản đồ XML
 Ví dụ sau định nghĩa 1 phần tử “age” có giá trị cho phép nhỏ
nhất là 0 và lớn nhất là 120. Giá trị của “age” không chấp nhận
giá trị nhỏ hơn 0 và lớn hơn 120:
1.8 Tìm hiểu giản đồ XML
Hoặc ví dụ dưới đây định nghĩa danh sách các giá trị nôi dung
cho phép của một phần tử. Phần tử “car” chỉ chấp nhận các giá
trị sau: Audi, Golf, BMW.

Hoặc

Chú ý: Với cách định nghĩa thứ 2, cho phép phần tử khác có thể
sử dụng kiểu dữ liệu “carType” mới được định nghĩa.
1.8 Tìm hiểu giản đồ XML
 Giới hạn về định dạng dữ liệu
Để chỉ định nội dung của một phần tử XML chỉ có thể là một
chuỗi số hoặc là một chuỗi các ký tự, ta có thể định nghĩa các
khuôn mẫu dữ liệu. Ví dụ sau mô tả phần tử “letter” chỉ chấp
nhận 1 ký tự duy nhất là chữ thường (a → z):
1.8 Tìm hiểu giản đồ XML
 Ví dụ sau mô tả phần tử “initials” chỉ chấp nhận các giá trị có 3
ký tự là chữ hoa (A→Z): giới hạn về định dạng dữ liệu
1.8 Tìm hiểu giản đồ XML
 Ví dụ sau mô tả phần tử “initials” chỉ chấp nhận các giá trị có 3
ký tự có thể là chữ hoa (A → Z) hoặc chữ thường (a → z):
1.8 Tìm hiểu giản đồ XML
 Ví dụ sau mô tả phần tử “ID chỉ chấp nhận các giá trị có 5 ký tự
số (0-9):
1.8 Tìm hiểu giản đồ XML
 Ví dụ sau mô tả một phần tử “letter” chỉ chấp nhận giá trị có
kiểu là ký tự (a-z). Dấu “*” mô tả số ký từ cho phép lớn hơn
hoặc bằng 0, tức là có thể nhập hoặc không nhập giá trị cho
phần tử này.
1.8 Tìm hiểu giản đồ XML
 Ví dụ sau định nghĩa phần tử “letter” với các giá trị là 1 hoặc
nhiều cặp ký tự, mỗi cặp ký tự bao gồm 1 ký tự thường và 1 ký
tự in hoa. Nếu kết quả "sToP" là hợp lệ nhưng nếu kết quả có
giá trị là “Stop" hoặc "STOP" hoặc "stop" là không hợp lệ:
1.8 Tìm hiểu giản đồ XML
 Ví dụ sau mô tả phần tử “gender” chỉ chấp nhận 1 trong 2 giá
trị sau “male” hoặc “female”:

 Ví dụ sau định nghĩa 1 phần tử "password" có 8 ký tự có thể là


chữ hoa, hoặc chữ thường (a-z) hoặc là số (0-9):
1.8 Tìm hiểu giản đồ XML
 Giới hạn về độ dài
Để giới hạn về độ dài của một giá trị của 1 phần tử, ta có thể sử
dụng các thuộc tính length, maxLength, và minLength.
Ví dụ sau yêu cầu phần tử "password" phải có độ dài chính xác
là 8 ký tự:
1.8 Tìm hiểu giản đồ XML
 Giới hạn về độ dài
Ví dụ sau định nghĩa một phần tử khác "password" thỏa mãn
điều kiện tối thiểu là 5 ký tự và tối đa là 8 ký tự:
1.8 Tìm hiểu giản đồ XML
 1.8.4.2 Kiểu dữ liệu phức hợp – Complex Type
 Khai báo phần tử: Các phần tử được khai báo kiểu
complex type có thể chứa một hoặc nhiều phần tử hoặc
thuộc tính con bên trong nó.
 Phân loại:
 Phần tử rỗng.
 Phần tử chỉ chứa các phần tử con khác.
 Phần tử chỉ chứa dữ liệu văn bản.
 Phần tử vừa chứa các phần tử con khác vừa chứa dữ liệu văn bản.
1.8 Tìm hiểu giản đồ XML
 1.8.4.2 Kiểu dữ liệu phức hợp – Complex Type
1.8 Tìm hiểu giản đồ XML
 1.8.4.2 Kiểu dữ liệu phức hợp – Complex Type
 Cách định nghĩa một phần tử thuộc kiểu Complex
Element .
 Ví dụ:
<employee>
<firstname>john</firstname>
<lastname>smith </lastname>
</employee>
1.8.4.2 Kiểu dữ liệu phức hợp –
Complex Type
 Có 2 cách để khai báo một phần tử “employee” thuộc
kiểu “complex type”
1.8.4.2 Kiểu dữ liệu phức hợp –
Complex Type
 Có 2 cách để khai báo một phần tử “employee” thuộc
kiểu “complex type”
1.8.4.2 Kiểu dữ liệu phức hợp –
Complex Type
 Với cách người dùng tự định nghĩa, các phần tử
khác có thể sử dụng lại kiểu đã được định nghĩa
trước đó
1.8.4.2 Kiểu dữ liệu phức hợp –
Complex Type
 Lược đồ XML cho phép bạn mở rộng định nghĩa kiểu dữ
liệu, kế thừa từ kiểu dữ liệu được định nghĩa trước đó
1.8.4.2 Kiểu dữ liệu phức hợp –
Complex Type
 Phân loại
 Phần tử rỗng – Empty elements: Các phần tử rỗng
không thể chứa bất kỳ một phần tử nào khác hay dữ liệu
nào ngoại trừ chứa các thuộc tính. Ví dụ:
<product prodid="1345" />
 Để định nghĩa phần tử rỗng “product” như trên, ta mô tả
như các khai báo thông thường nhưng bên trong ta không
định nghĩa bất kỳ phần tử con nào khác ngoại trừ các
thuộc tính.
1.8.4.2 Kiểu dữ liệu phức hợp –
Complex Type
 Định nghĩa

 Hoặc có thể định nghĩa 1 kiểu mới


1.8.4.2 Kiểu dữ liệu phức hợp –
Complex Type
 Phần tử chỉ chứa các phần tử con khác – lements_only Xét ví dụ
sau:
<person>
<firstname>John</firstname> <lastname>Smith</lastname>
</person>
Lược đồ xml sẽ như sau:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
1.8.4.2 Kiểu dữ liệu phức hợp –
Complex Type
 Chú ý: Tag <xs:sequence> được mô tả ở đây nhằm yêu cầu
thứ tự được sử dụng của 2 phần tử con “firstname” và
“lastname” bên trong phần tử cha “person”. Hoặc có thể định
nghĩa một kiểu dữ liệu mới “persontype”:
<xs:element name="person" type="persontype"/>
<xs:complexType name="persontype">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
1.8.4.2 Kiểu dữ liệu phức hợp –
Complex Type
 Phần tử chỉ chứa dữ liệu dạng văn bản và thuộc tính: Các
phần tử thuộc loại này chỉ cho phép chứa dữ liệu dạng text và
các thuộc tính, do đó chúng ta có thể định nghĩa nội dung các
phần tử con trong thẻ tag <xs:simpleContent>. Khi định nghĩa
các phần tử chỉ chứa dữ liệu dạng text hay các thuộc tính, thì
phải sử dụng các thẻ tag <xs:extension> hoặc <xs:restriction>
nằm bên trong thẻ <xs:simpleContent> như ví dụ bên dưới:
1.8.4.2 Kiểu dữ liệu phức hợp –
Complex Type
 Phần tử chỉ chứa dữ liệu dạng văn bản và thuộc tính:
<xs:element name="somename">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="basetype">
....
....
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
1.8.4.2 Kiểu dữ liệu phức hợp –
Complex Type
 Phần tử chỉ chứa dữ liệu dạng văn bản và thuộc tính:
Hoặc
<xs:element name="somename">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="basetype">
....
....
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
1.8.4.2 Kiểu dữ liệu phức hợp –
Complex Type
 Phần tử chỉ chứa dữ liệu dạng văn bản và thuộc tính:
Chú ý: Khi định nghĩa các phần tử “ extension/restriction” để
mở rộng hoặc giới hạn cho các phần tử chỉ chứa các thuộc tính
và dữ liệu dạng text.
Ví dụ sau định nghĩa phần tử chỉ chứa dữ liệu dạng text “35” và
thuộc tính “country” có giá trị “france”:
<shoesize country="france">35</shoesize>
1.8.4.2 Kiểu dữ liệu phức hợp –
Complex Type
 Phần tử chỉ chứa dữ liệu dạng văn bản và thuộc tính:
Ví dụ sau mô tả cấu trúc định nghĩa một phần tử "shoesize":
<xs:element name="shoesize">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="country" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
1.8.4.2 Kiểu dữ liệu phức hợp –
Complex Type
 Phần tử chỉ chứa dữ liệu dạng văn bản và thuộc tính:
Hoặc có thể định nghĩa như sau:
<xs:element name="shoesize" type="shoetype"/>
<xs:complexType name="shoetype">
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="country" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
1.8.4.2 Kiểu dữ liệu phức hợp –
Complex Type
 Phần tử hỗn hợp: Kiểu phần tử hỗn hợp có thể chứa nhiều
thuộc tính, phần tử và dữ liệu dạng văn bản (text). Ví dụ sau
mô tả phần tử "letter” vừa chứa các thuộc tính con và dữ liệu
dạng văn bản.
<letter>
Dear Mr.<name>John Smith</name>
Your order <orderid>1032</orderid>
<shipdate>2001-07-13</shipdate>
</letter>
1.8.4.2 Kiểu dữ liệu phức hợp –
Complex Type
 Phần tử hỗn hợp:
Lược đồ XML mô tả phần tử "letter" như sau:
<xs:element name="letter">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="orderid" type="xs:positiveInteger"/>
<xs:element name="shipdate" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:element>
1.8.4.2 Kiểu dữ liệu phức hợp –
Complex Type
 Phần tử hỗn hợp:
Chú ý: Để đảm báo các dữ liệu của kiểu phần tử hỗn hợp "letter" có
thể chứa các phần tử con, thuộc tính “mixed” phải được thiết lập là
"true".
Có thể định nghĩa phần tử hỗn hợp "letter" như dưới đây:
<xs:element name="letter" type="lettertype"/>
<xs:complexType name="lettertype" mixed="true">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="orderid" type="xs:positiveInteger"/>
<xs:element name="shipdate" type="xs:date"/>
</xs:sequence>
</xs:complexType>
1.8.5 Chỉ định hướng
 1.8.5 Chỉ định hướng - XSD Indicators: Lược đồ XML cho phép
chỉ định cách các phần tử được sử dụng như thế nào thông qua bộ
chỉ định “Indicator” Phân loại: có 7 loại
 Thứ tự xuất hiện
 All
 Choice
 Sequence
 Số lần sử dụng:
 maxOccurs
 minOccurs
 Tạo nhóm chỉ định
 Group name
 attributeGroup name
1.8.5 Chỉ định hướng
 1.8.5 Chỉ định hướng
 Thẻ tag<xs:all>: được sử dụng để chỉ định hướng cho các thẻ tag con
có thể xuất hiện một cách tùy ý và mỗi thẻ chỉ được xuất hiện một lần.
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
Chú ý: Khi sử dụng tag chỉ định <all>, bạn có thể chỉ định giá trị cho
các thẻ <minOccurs> là 0 hoặc 1 và thẻ <maxOccurs> chỉ có thẻ là
1.
1.8.5 Chỉ định hướng
 1.8.5 Chỉ định hướng
 Thẻ tag <xs:choice>: dùng để định nghĩa một phần tử có cấu trúc
lựa chọn, hoặc phần tử này hoặc phần tử khác:
<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element name="employee" type="employee"/>
<xs:element name="member" type="member"/>
</xs:choice>
</xs:complexType>
</xs:element>
1.8.5 Chỉ định hướng
 1.8.5 Chỉ định hướng
 Thẻ tag <xs:sequence> cho phép định nghĩa các phần tử con theo
thứ tự xác định:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
1.8.5 Chỉ định hướng
 1.8.5.2 Chỉ định số lần sử dụng
Dùng để chỉ định số lần phần tử được chỉ định. Chú ý: Đối với
các chỉ định “Thứ tự xuất hiện” hoặc “Nhóm” (any, all,
choice, sequence, group name và group reference) giá trị mặc
định của <xs:maxOccurs> và <xs:minOccurs> là 1.
1.8.5 Chỉ định hướng
 Chỉ định <xs:maxOccurs> dùng để chỉ định số lần tối đa phần tử
xuất hiện:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
maxOccurs="10"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Ví dụ trên chỉ định phần tử "child_name" có thể được định nghĩa tối
thiểu 1 lần (giá trị mặc định) và tối đa là 10 lần bên trong phần tử
“person”.
1.8.5 Chỉ định hướng
 Thẻ tag <xs:minOccurs> dùng để chỉ định số lần tối thiểu phần tử
có thể được định nghĩa:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
maxOccurs="10" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Ví dụ bên dưới, chỉ định phần tử "child_name" có thể không cần định
nghĩa hoặc có thể định nghĩa tối đa là 10 lần bên trong phần tử
"person".
1.8.5 Chỉ định hướng
 Chú ý: Để chỉ định một phần tử có thể xuất hiện nhiều lần,
không giới hạn mức tối đa có thể định nghĩa có thể sử dụng
thuộc tính “maxOccurs” với giá trị "unbounded”
1.8.5 Chỉ định hướng
 Ví dụ: Định nghĩa một file XML có tên như sau "Myfamily.xml":
<?xml version="1.0" encoding="ISO-8859-1"?>
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="family.xsd">
<person>
<full_name>Hege Refsnes</full_name>
<child_name>Cecilie</child_name>
</person>
<person>
<full_name>Tove Refsnes</full_name> <child_name>Hege</child_name>
<child_name>Stale</child_name> <child_name>Jim</child_name>
<child_name>Borge</child_name>
</person>
<person>
<full_name>Stale Refsnes</full_name>
</person>
</persons>
1.8.5 Chỉ định hướng
 Mô tả cho file XML - "family.xsd":
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="persons">
<xs:complexType>
<xs:sequence>
<xs:element name="person" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
minOccurs="0" maxOccurs="5"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
1.8.5 Chỉ định hướng
 1.8.5.3 Nhóm chỉ định - “Nhóm chỉ định” được dùng để định
nghĩa tập hợp các phần tử có mối quan hệ với nhau.
 Element Groups
Cấu trúc định nghĩa:
<xs:group name="groupname">
...
</xs:group>
1.8.5 Chỉ định hướng
 1.8.5.3 Nhóm chỉ định
Ví dụ sau định nghĩa một phần tử “persongroup” với 3 phần tử
con có thứ tự xuất hiện như bên dưới:
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
1.8.5 Chỉ định hướng
 1.8.5.3 Nhóm chỉ định
Ta có thể tham chiếu tới nó trong một khai báo khác, như ví dụ :
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
<xs:element name="person" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:group ref="persongroup"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
1.8.5 Chỉ định hướng
 1.8.5.3 Nhóm chỉ định
Attribute Groups
Thuộc tính của nhóm được định nghĩa với thẻ tag
<xs:attributeGroup name="groupname">
...
</xs:attributeGroup>
1.8.5 Chỉ định hướng
 1.8.5.3 Nhóm chỉ định
Attribute Groups
Ví dụ theo sau định nghĩa một thuộc tính có tên là
"personattrgroup":
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
1.8.5 Chỉ định hướng
 Attribute Groups: có thể tham chiếu tới nó trong một định
nghĩa khác, xem ví dụ sau:
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
<xs:element name="person">
<xs:complexType>
<xs:attributeGroup ref="personattrgroup"/>
</xs:complexType>
</xs:element>
1.8.6 Ví dụ lược đồ XML
Hãy nhìn vào file XML dưới đây "shiporder.xml":
<?xml version="1.0" encoding="ISO-8859-1"?>
<shiporder orderid="889923" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
<orderperson>John Smith</orderperson>
<shipto>
<name>Ola Nordmann</name>
<address>Langgt 23</address>
<city>4000 Stavanger</city>
<country>Norway</country>
</shipto>
<item>
<title>Empire Burlesque</title>
<note>Special Edition</note>
<quantity>1</quantity>
<price>10.90</price>
</item>
<item>
<title>Hide your heart</title>
<quantity>1</quantity>
<price>9.90</price>
</item>
</shiporder>
1.8.6 Ví dụ lược đồ XML
Khai báo xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" nói với bộ phân tích hãy kiểm tra tài liệu này theo
lược đồ đã được định nghĩa.
Đoạn lệnh xsi:noNamespaceSchemaLocation="shiporder.xsd"
chỉ định đường dẫn chỉ định file lược đồ được định nghĩa (
Chỉ file shiporder.xsd trong cùng thư mục hiện tại).
1.8.6 Ví dụ lược đồ XML
Tạo một lược đồ XML: Để tạo một lược đồ XML có tên là
“shiporder.xsd”, ta định nghĩa cấu trúc chung ban đầu như
sau: Tạo một file có tên "shiporder.xsd". Để tạo lược đồ, đơn
giản chỉ cần đảm bảo cấu trúc tài liệu XML. Định nghĩa tài
liệu XML như sau:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
</xs:schema>
Lược đồ trên, sử dụng không gian tên chuẩn (xs). Lược đồ trên
sử dụng không gian tên có giá trị:
“http://www.w3.org/2001/XMLSchema”.
1.8.6 Ví dụ lược đồ XML
Tạo một lược đồ XML:
Tiếp tục, định nghĩa phần tử "shiporder". Phần tử này chứa một
thuộc tính và nó chưa các phần tử khác, do đó chúng ta có thể
xem xét nó như kiểu dữ liệu hỗn hợp. Các phần tử con của
“shiporder” được đặt bên trong thẻ <xs:sequence> để định
nghĩa thứ tự của các phần tử con.

<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
...
</xs:sequence>
</xs:complexType>
</xs:element>
1.8.6 Ví dụ lược đồ XML
Tạo một lược đồ XML:
Tiếp theo, định nghĩa phần tử “orderperson”
<xs:element name="orderperson" type="xs:string"/>
Tiếp tục, định nghĩa 2 phần tử kiểu hỗn hợp: "shipto" và "item".
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
1.8.6 Ví dụ lược đồ XML
Tạo một lược đồ XML:
Phần tử “item” được định nghĩa dưới :
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string"
minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
1.8.6 Ví dụ lược đồ XML
Tạo một lược đồ XML:
Để chỉ định một thuộc tính bắt buộc phải được định nghĩa, có thể
khai báo theo cấu trúc như sau. Thuộc tính "shiporder" được thiệt
lập giá trị use="required". Chú ý: Khai báo của thuộc tính phải
được đặt sau cùng.
<xs:attribute name="orderid" type="xs:string" use="required"/>
1.8.6 Ví dụ lược đồ XML
 Tách lược đồ XML Cách khai báo dưới dây, cho phép tách riêng
giữa phần lược đồ và nội dung định nghĩa file xml trở nên tách
riêng, dễ dàng cho việc xử lý.
<!-- definition of simple elements -->
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
1.8.6 Ví dụ lược đồ XML
 Tách lược đồ XML
<!-- definition of attributes -->
<xs:attribute name="orderid" type="xs:string"/>
<!-- definition of complex elements -->
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="address"/>
<xs:element ref="city"/>
<xs:element ref="country"/>
</xs:sequence>
</xs:complexType>
</xs:element
1.8.6 Ví dụ lược đồ XML
 Tách lược đồ XML
<xs:element name="item">
<xs:complexType>
<xs:sequence>
<xs:element ref="title"/>
<xs:element ref="note" minOccurs="0"/>
<xs:element ref="quantity"/>
<xs:element ref="price"/>
</xs:sequence>
</xs:complexType>
</xs:element>
1.8.6 Ví dụ lược đồ XML
 Tách lược đồ XML
<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element ref="orderperson"/>
<xs:element ref="shipto"/>
<xs:element ref="item"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute ref="orderid" use="required"/>
</xs:complexType>
1.8.7 Định nghĩa kiểu dữ liệu người
dùng
 Với 2 cách định nghĩa trên các kiểu dữ liệu giống nhau được
định nghĩa nhiều lần, điều này làm cho chương trình trở nên dài
và phức tạp hơn. Với các thẻ tag <xs:simpleType> và
<xs:complexTypes> cho phép người dùng định nghĩa các kiểu
dữ liệu mới, cho phép người dùng tái sử dụng các kiểu dữ liệu
nhiều lần.
<xs:simpleType name="stringtype">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="orderidtype">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{6}"/>
</xs:restriction>
</xs:simpleType>
1.8.7 Định nghĩa kiểu dữ liệu người
dùng
<xs:complexType name="shiptotype">
<xs:sequence>
<xs:element name="name" type="stringtype"/>
<xs:element name="address" type="stringtype"/>
<xs:element name="city" type="stringtype"/>
<xs:element name="country" type="stringtype"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="itemtype">
<xs:sequence>
<xs:element name="title" type="stringtype"/>
<xs:element name="note" type="stringtype" minOccurs="0"/>
<xs:element name="quantity" type="inttype"/>
<xs:element name="price" type="dectype"/>
</xs:sequence>
</xs:complexType>
1.8.7 Định nghĩa kiểu dữ liệu người
dùng
<xs:complexType name="shipordertype">
<xs:sequence>
<xs:element name="orderperson" type="stringtype"/>
<xs:element name="shipto" type="shiptotype"/>
<xs:element name="item" maxOccurs="unbounded"
type="itemtype"/>
</xs:sequence>
<xs:attribute name="orderid" type="orderidtype"
use="required"/>
</xs:complexType>
<xs:element name="shiporder" type="shipordertype"/>
</xs:schema>
1.8.7 Định nghĩa kiểu dữ liệu người
dùng
 Thẻ tag <xs:restriction> được sử dụng nhằm giới hạn
giá trị của các phần tử. Xem ví dụ sau định nghĩa phần
tử “orderidtype” có những ràng buộc dữ liệu:
<xs:simpleType name="orderidtype">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{6}"/>
</xs:restriction>
</xs:simpleType>
Giá trị được chỉ định cho phần tử hoặc thuộc tính
phải là string, và nó phải có đủ 6 ký tự và mỗi ký tự là
số từ 0-9.

You might also like