XML: Bài 4.1. Lược đồ XML
Tổng quan về mô-đun
Chào mừng bạn đến với mô-đun, Lược đồ XML. Mô-đun này tập trung vào khám phá lược đồ XML và các tính năng của nó. Cấu trúc của một tài liệu XML với sự trợ giúp của lược đồ cũng được thảo luận đến. Mô-đun này nhằm mục đích cung cấp sự hiểu biết rõ ràng về các phần tử và kiểu dữ liệu khác nhau được hỗ trợ bởi một lược đồ XML.
Trong mô-đun này, bạn sẽ tìm hiểu về:
- Lược đồ XML
- Khám phá các lược đồ XML
- Làm việc với các loại phức tạp
- Làm việc với các loại đơn giản
4.1. Lược đồ XML
Trong bài học đầu tiên này, Lược đồ XML, bạn sẽ học cách:
- Xác định và mô tả ý nghĩa của lược đồ.
- Xác định sự cần thiết của lược đồ.
- So sánh và phân biệt các đặc điểm của ĐDDH và lược đồ.
4.1.1. Lược đồ
DTD xác định cấu trúc tài liệu và xác thực tài liệu XML, nhưng có một số hạn chế. Do đó, một giải pháp thay thế dựa trên XML cho DTD, được gọi là lược đồ XML đã được giới thiệu, với mục tiêu khắc phục những hạn chế của DTD.
Từ lược đồ (schema) có nguồn gốc từ một từ Hy Lạp tượng trưng cho hình thức hoặc hình dạng. Nghĩa từ điển của lược đồ là: "Biểu diễn theo sơ đồ; phác thảo hoặc mô hình". Ban đầu, từ lược đồ được sử dụng bởi các triết gia cho đến khi nó đi vào lĩnh vực khoa học máy tính. Trong ngữ cảnh của phần mềm, lược đồ thường được hiểu là một mô hình được sử dụng để mô tả cấu trúc của cơ sở dữ liệu. Nó xác định các cấu trúc bên trong như bảng, trường và mối quan hệ giữa chúng.
Tuy nhiên, trong ngữ cảnh của XML, như được định nghĩa bởi W3C, một lược đồ là "một tập hợp các quy tắc để ràng buộc cấu trúc và trình bày rõ ràng tập thông tin của các tài liệu XML". Một lược đồ mô tả một mô hình cho toàn bộ lớp tài liệu. Mô hình mô tả cách dữ liệu được đánh dấu và cũng chỉ định cách sắp xếp các thẻ và văn bản có thể có trong một tài liệu hợp lệ. Một lược đồ có thể được coi là một từ vựng phổ biến cần thiết để trao đổi tài liệu giữa các tổ chức khác nhau.
Lược đồ XML xác định các khối xây dựng hợp lệ của một tài liệu XML. Có thể coi đây là vốn từ vựng chung mà các tổ chức khác nhau có thể dùng chung để trao đổi tài liệu. Ngôn ngữ lược đồ XML được gọi là Định nghĩa lược đồ XML (XML Schema Definition-XSD).
Hình 4.1 mô tả xác thực dữ liệu XML.
Hình 4.1: Xác thực dữ liệu XML
Đoạn mã XML sau thể hiện một thực thể 'BOOK'. Khi tài liệu này được truy cập thông qua trình duyệt, nó sẽ đại diện cho các chi tiết của một cuốn sách.
Đoạn mã:
<Book> <Title>Path To Paradise</Title> <Author>David White</Author> <Theme>Philosophy</Theme> <Publisher>ABC Publication</Publisher> <ISBN>11</ISBN> <Price>$12481</Price> <Edition>June 2000</Edition> </Book>
Suy luận logic sẽ so sánh các thuộc tính của 'SÁCH' này với các thuộc tính của một cuốn sách nói chung. Nói cách khác, kiến thức trước đây của một người về cuốn sách là gì và các thuộc tính của nó có thể là một loại lược đồ, dùng để so sánh với 'SÁCH' này. Điều này sẽ giúp xác thực các thuộc tính của cuốn sách.
4.1.2. Định nghĩa Lược đồ XML
Mục tiêu của một Lược đồ XML là xác định cấu trúc hợp lệ của một tài liệu XML, tương tự như một DTD. Lược đồ XML định nghĩa:
- các phần tử và thuộc tính có thể xuất hiện trong tài liệu
- phần tử nào là phần tử con
- thứ tự và số lượng phần tử con
- liệu một phần tử trống hay có thể bao gồm văn bản
- kiểu dữ liệu cho các phần tử và thuộc tính
- giá trị mặc định và cố định cho các phần tử và thuộc tính
Các lược đồ khắc phục những hạn chế của DTD và cho phép các ứng dụng Web trao đổi dữ liệu XML mạnh mẽ hơn mà không cần dựa vào các công cụ xác thực đặc biệt.
Một số tính năng cơ bản mà lược đồ XML cung cấp là:
- Cú pháp XML được sử dụng làm cơ sở để tạo các tài liệu lược đồ XML. Nó không yêu cầu học một ngôn ngữ khó hiểu mới như trường hợp của các DTD.
- Các lược đồ XML có thể được thao tác giống như bất kỳ tài liệu XML nào khác.
Hình 4.2 mô tả lược đồ XML.
Hình 4.2: Lược đồ XML
4.1.3. Viết một lược đồ XML
Để bắt đầu khám phá các lược đồ với ví dụ Hello World, ta cần hai tệp sau:
Ø Tệp XML
Tài liệu XML đã cho có chứa một phần tử duy nhất, <Message>. Một lược đồ cho tài liệu này phải khai báo phần tử <Message>.
Ø Tệp XSD
Để lưu trữ tài liệu lược đồ, tệp được lưu với ".xsd" làm phần mở rộng. Tài liệu lược đồ là tài liệu XML và có thể có các khai báo DTD, DOCTYPE.
Hình 4.3 mô tả tệp XSD.
Hình 4.3: Tệp XSD
Đoạn mã sau thể hiện các thuộc tính của lược đồ XML.
Đoạn mã :
Tệp message.xml
<? xml version = "1.0" ?> < Tin nhắn > Chào thế giới! </ Tin nhắn >Tệp: message.xsd
<? xml version = "1.0" ?> < xsd : schema xmlns: xsd = "http://www.w3.org/2001/XMLSchema" > < xsd : element name = "MESSAGE" type = "xsd: string" /> </ xsd : schema >
Tệp XSD ở trên là một lược đồ cho các phần tử <Message>. Tệp được lưu trữ dưới dạng message.xsd. Nó là một tài liệu XML và do đó nó có một khai báo XML. Tệp lược đồ này cũng có thể khai báo các phần tử khác, kể cả những phần tử không có trong tệp XML này, nhưng ít nhất nó phải khai báo phần tử <Message>.
4.1.4. Các đặc điểm của lược đồLược đồ XML cho phép các ứng dụng Web trao đổi dữ liệu XML mạnh mẽ hơn bằng cách sử dụng một loạt các tính năng mới như sau:
Ø Hỗ trợ các kiểu dữ liệu
Sự hỗ trợ của lược đồ XML đối với các kiểu dữ liệu và khả năng tạo các kiểu dữ liệu cần thiết đã khắc phục được những hạn chế của DTD. Nó có nghĩa là dễ dàng xác định và xác nhận nội dung tài liệu hợp lệ và các định dạng dữ liệu. Một nhà phát triển có thể thấy đơn giản khi làm việc với dữ liệu từ cơ sở dữ liệu. Nó cũng có thể dễ dàng thực hiện các hạn chế về dữ liệu.
Ø Linh hoạt và hiệu quả
Các lược đồ có tính linh hoạt và hiệu quả vì chúng sử dụng cùng một cú pháp XML. Do đó, không cần phải học bất kỳ ngôn ngữ mới hoặc bất kỳ trình soạn thảo nào để chỉnh sửa tệp lược đồ. Một trình phân tích cú pháp XML tương tự có thể được sử dụng để phân tích cú pháp các tệp Lược đồ.
Ø Truyền dữ liệu an toàn
Trong quá trình truyền dữ liệu, điều cần thiết là cả người gửi và người nhận phải có cùng "từ vựng". Với Lược đồ XML, người gửi có thể chỉ định dữ liệu theo cách mà người nhận sẽ hiểu.
Ø Lược đồ có thể mở rộng
Một định nghĩa lược đồ có thể được mở rộng; do đó, có thể sử dụng lại một lược đồ hiện có để tạo một lược đồ khác. Nhà phát triển có thể tạo các kiểu dữ liệu của riêng mình bắt nguồn từ các kiểu tiêu chuẩn. Các lược đồ cũng hỗ trợ tham chiếu nhiều lược đồ trong cùng một tài liệu.
Ø Bắt lỗi cấp cao hơn
XML kiểm tra tính ổn định của một tài liệu XML để xác thực cú pháp cơ bản. Một tài liệu được cho là có cấu trúc tốt nếu nó có khai báo XML, phần tử gốc duy nhất, thẻ bắt đầu và thẻ kết thúc phù hợp, các phần tử lồng nhau đúng cách, v.v. Một tài liệu được định dạng tốt vẫn có thể có lỗi. Lược đồ XML có thể mắc các lỗi cấp cao hơn phát sinh, chẳng hạn như trường thông tin bắt buộc bị thiếu hoặc ở định dạng sai hoặc tên phần tử bị viết sai chính tả.
Ø Hỗ trợ Namespace
Sự hỗ trợ cho Không gian tên XML cho phép lập trình viên xác thực các tài liệu sử dụng đánh dấu từ nhiều không gian tên. Nó có nghĩa là các cấu trúc có thể được sử dụng lại từ các lược đồ đã được xác định trong một không gian tên khác.
Dưới đây là các tính năng bổ sung của lược đồ:
Ø Kiểu dữ liệu phong phú hơn
Bản thảo lược đồ xác định boolean, ngày tháng và thời gian, URI, khoảng thời gian và cả các kiểu số như số thập phân, số nguyên, byte, long, v.v.
Ø Kiểu mẫu
Một kiểu mẫu được sử dụng để xác định kiểu dữ liệu có tên tùy chỉnh từ các kiểu dữ liệu đã có từ trước. Ví dụ: kiểu dữ liệu 'Danh sách liên hệ' được xác định và sau đó là hai phần tử, 'Danh sách bạn bè' và 'Danh sách chính thức' được xác định theo kiểu đó.
Ø Nhóm thuộc tính
Có thể có các thuộc tính chung áp dụng cho tất cả các phần tử hoặc một số thuộc tính bao gồm các phần tử đồ họa hoặc bảng. Nhóm thuộc tính cho phép tác giả lược đồ làm cho mối quan hệ này giữa các phần tử được rõ ràng. Thực thể tham số hỗ trợ nhóm trong DTD, điều này giúp đơn giản hóa quá trình tạo DTD, nhưng thông tin không được chuyển cho bộ xử lý.
Ø Kiểu mẫu có thể tinh chỉnh
Một DTD tuân theo kiểu mô hình nội dung 'đóng'. Mô hình nội dung được định nghĩa là ràng buộc về nội dung của các phần tử trong một tài liệu XML thể hiện. Mô hình nội dung 'đóng' mô tả tất cả và chỉ những phần tử và thuộc tính có thể xuất hiện trong nội dung của phần tử. Lược đồ XML cho phép thêm hai khả năng:
- Mô hình nội dung loại mở
- Mô hình nội dung có thể tinh chỉnh
Trong mô hình nội dung 'mở', các phần tử khác với các phần tử bắt buộc cũng có thể có mặt. Mô hình nội dung mở cho phép bao gồm các phần tử con và các thuộc tính bên trong một phần tử không được khai báo trong lược đồ của tài liệu. DTD chỉ hỗ trợ các mô hình nội dung đóng, yêu cầu khai báo tất cả các phần tử và thuộc tính để sử dụng chúng trong một tài liệu. Các phần tử bổ sung có thể có trong mô hình nội dung 'có thể tái tạo lại', nhưng lược đồ phải xác định các phần tử bổ sung đó.
4.1.5. So sánh DTD và Lược đồ
XML kế thừa khái niệm DTD từ Ngôn ngữ Đánh dấu Tổng quát Chuẩn (SGML), là một tiêu chuẩn quốc tế cho các ngôn ngữ đánh dấu. DTD được sử dụng để xác định mô hình nội dung, lồng các phần tử theo thứ tự hợp lệ và cung cấp hỗ trợ hạn chế cho các kiểu dữ liệu và thuộc tính. Hạn chế của việc sử dụng DTD là:
Ø DTD được viết bằng cú pháp không phải XML
Các DTD không sử dụng ký hiệu XML và do đó chúng rất khó viết và sử dụng.
Ø DTD không thể mở rộng
DTD không thể mở rộng. Ví dụ: nếu có một Địa chỉ DTD để lập danh mục bạn bè và một người muốn thêm một phần mới vào mã cho các liên hệ chính thức, thì toàn bộ DTD phải được viết lại.
Ø DTD không hỗ trợ không gian tên
Không gian tên có thể được sử dụng để giới thiệu một loại phần tử vào tài liệu XML. Tuy nhiên, không gian tên không thể được sử dụng để tham chiếu đến một phần tử hoặc một khai báo thực thể trong DTD. Nếu không gian tên được sử dụng, thì DTD phải được sửa đổi để bao gồm bất kỳ phần tử nào được lấy từ Không gian tên.
Ø DTD cung hạn chế trong việc nhập dữ liệu
DTD chỉ có thể thể hiện kiểu dữ liệu của thuộc tính dưới dạng liệt kê rõ ràng và một vài định dạng chuỗi thô. DTD không có cơ sở để mô tả số, ngày tháng, giá trị tiền tệ, v.v. Hơn nữa, các DTD không có khả năng thể hiện kiểu dữ liệu của dữ liệu ký tự trong các phần tử. Ví dụ, một phần tử <Zip> có thể được định nghĩa để chứa CDATA. Tuy nhiên, phần tử không thể bị giới hạn chỉ là các chữ số khi nó sử dụng DTD.
Hình 4.4 cho thấy một DTD mẫu.
Hình 4.4: Một DTD mẫu
Đoạn mã sau minh họa một tệp DTD bên ngoài mẫu: program.dtd
Đoạn mã:
<!ELEMENT program (comments, code)> <!ELEMENT comments (#PCDATA)> <!ELEMENT code (#PCDATA)>
Đoạn mã sau minh họa Tệp XML mẫu có tham chiếu đến dtd: program.xml
Đoạn mã:
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE program SYSTEM "program.dtd"> <program> <comments> This is a simple Java Program. It will display the message "Hello world!" on execution. </comments> <code> public static void main(String[] args) System.out.println("Hello World!"); // Display the string. </code> </program>
Ngoài ra, các ví dụ được hiển thị ở đây để chứng minh cách DTD và lược đồ được tham chiếu.
Tài liệu XML đơn giản: Book.xml
Đoạn mã sau minh họa một tài liệu XML đơn giản có tên " Book.xml ":
Đoạn mã:
<?xml version="1.0"?> <Book> <Title> Million Seconds </Title> <Author> Kelvin Brown </Author> <Chapter> The plot of the story starts from here. </Chapter> </Book>
Tệp DTD cho Book.xml
Đoạn mã sau minh họa một tệp DTD có tên "Book.dtd" xác định các phần tử của Tài liệu book.xml.
Đoạn mã:
<!ELEMENT Book (Title, Author, Chapter)> <!ELEMENT Title (#PCDATA)> <!ELEMENT Author (#PCDATA)> <!ELEMENT Chapter (#PCDATA)>
Dòng đầu tiên của đoạn mã xác định phần tử Book là phần tử gốc, lần lượt bao gồm ba phần tử con: 'Title', 'Author' và 'Chapter'. Phần còn lại của đoạn mã xác định các phần tử 'Title', 'Author' và 'Chapter' thuộc loại "#PCDATA".
Lược đồ XML cho Book.xml
Đoạn mã sau thể hiện tệp Lược đồ XML tương ứng được gọi là "Book.xsd" xác định các phần tử của tài liệu XML Book.xml.
Đoạn mã:
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.booksworld.com" xmlns="http://www.booksworld.com" elementFormDefault="qualified"> <xs:element name="Book"> <xs:complexType> <xs:sequence> <xs:element name="Title" type="xs:string"/> <xs:element name="Author" type="xs:string"/> <xs:element name="Chapter" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Phần tử Book phức tạp vì nó bao quanh các phần tử khác. Các phần tử con Title, Author, Chapter đơn giản hơn vì chúng không chứa các phần tử khác.
Tham chiếu đến Book.DTD trong tài liệu cá thể có tên Book.xml
Đoạn mã sau thể hiện tham chiếu đến tài liệu "Book.dtd" được đặt bên trong tài liệu XML có tên Book.xml.
Đoạn mã:
<?xml version="1.0"?> <!DOCTYPE note SYSTEM "http://www.booksworld.com/dtd/Book.dtd"> <Book> <Title>Million Seconds</Title> <Author>Kelvin Brown</Author> <Chapter>The plot of the story starts from here.</Chapter> </Book>
Tham chiếu đến XML Schema Book.xsd trong tài liệu cá thể có tên Book.xml
Tài liệu XML này có tham chiếu đến một Lược đồ XML.
Đoạn mã sau cùng với đoạn mã trước chứng minh cách lược đồ và DTD được khai báo và tham chiếu trong các tài liệu XML thể hiện.
Đoạn mã:
<?xml version="1.0"?> <Book xmlns="http://www.booksworld.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.booksworld.com/Book.xsd"> <Title>Million Seconds</Title> <Author>Kelvin Brown</Author> <Chapter>The plot of the story starts from here.</Chapter> </Book>
Các lược đồ khắc phục những hạn chế của DTD và cho phép các ứng dụng Web trao đổi dữ liệu XML mạnh mẽ hơn mà không cần dựa vào các công cụ xác thực đặc biệt.
4.1.6. Ưu điểm của lược đồ XML so với DTD
Lược đồ XML cung cấp một loạt các tính năng mới:
Ø Kiểu dữ liệu Richer
Bản thảo lược đồ xác định các kiểu boolean, số, ngày và giờ, URI, số nguyên, số thập phân, số thực và cả khoảng thời gian.
Ø Kiểu mẫu
Một kiểu mẫu cho phép xác định kiểu dữ liệu được đặt tên riêng từ các kiểu dữ liệu đã có từ trước. Ví dụ: người ta có thể xác định kiểu dữ liệu 'Danh sách liên hệ', sau đó xác định hai phần tử, "Danh sách bạn bè" và 'Danh sách chính thức' theo kiểu đó.
Ø Nhóm thuộc tính
Có thể có các thuộc tính chung áp dụng cho tất cả các phần tử hoặc một số thuộc tính bao gồm các phần tử đồ họa hoặc bảng. Nhóm thuộc tính cho phép tác giả lược đồ làm cho mối quan hệ này rõ ràng.
Ø Các kiểu mẫu có thể xác định lại
Một DTD tuân theo kiểu mô hình 'đóng'. Nó mô tả tất cả, và chỉ những phần tử và thuộc tính có thể xuất hiện trong nội dung của phần tử. Lược đồ XML cho phép thêm hai khả năng: 'mở' và 'có thể nạp lại'. Trong mô hình nội dung 'mở', các phần tử khác với các phần tử bắt buộc cũng có thể có mặt. Các phần tử bổ sung có thể có trong mô hình nội dung có thể tái tạo lại, nhưng lược đồ phải xác định các phần tử bổ sung đó.
Đoạn mã:
Đoạn mã sau minh họa một tệp lược đồ mẫu: mail.xsd
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.abc.com" xmlns="http://www.abc.com" elementFormDefault="qualified"> <xs:element name="mail"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="header" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Đoạn mã sau minh họa Tệp XML mẫu có tham chiếu đến giản đồ: mail.xml
<?xml version="1.0"?> <mail xmlns="http://www.abc.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.abc.com mail.xsd"> <to>John</to> <from>Jordan</from> <header>Scheduler</header> <body>3rd March Monday, 7:30 PM: board meeting!</body> </mail>
Kiểm tra kiến thức bài 4.1
1. Câu nào trong số các câu sau về lược đồ là đúng và câu nào là sai?
(A) |
Lược đồ XML xác định cấu trúc của một tài liệu XML. |
(B) |
Lược đồ XML là một tiện ích bổ sung dựa trên XML cho các DTD. |
(C) |
Cú pháp XML được sử dụng làm cơ sở để tạo một lược đồ, vì vậy nó có thể được lưu trữ với cùng một phần mở rộng .xml (dot XML). |
(D) |
Lược đồ XML xác định số lượng phần tử con có thể xuất hiện trong một tài liệu XML. |
(LÀ) |
Một Lược đồ XML xác định xem một phần tử trống hay có thể bao gồm văn bản. |
2. Bạn có thể kết hợp các tính năng khác nhau cho DTD và lược đồ với mô tả tương ứng của chúng không?
Sự miêu tả |
Đặc tính |
||
(A) |
Cho phép xác định kiểu dữ liệu được đặt tên riêng từ các kiểu dữ liệu đã có từ trước. |
(1) |
Nhóm thuộc tính |
(B) |
Cho phép tác giả giản đồ làm cho các thuộc tính chung áp dụng cho tất cả các phần tử hoặc một số thuộc tính bao gồm các phần tử đồ họa hoặc bảng. |
(2) |
Hỗ trợ không gian tên |
(C) |
Mô tả các phần tử không bắt buộc phải có trong tài liệu XML. |
(3) |
Mô hình đóng |
(D) |
Chỉ mô tả những phần tử và thuộc tính có thể xuất hiện trong nội dung của phần tử. |
(4) |
Cổ mẫu |
(LÀ) |
Cho phép xác thực các tài liệu sử dụng đánh dấu từ nhiều không gian tên. |
(5) |
Mở mô hình |