Chương 2 Ngôn ngữ mô hình hoá đặc tả ràng buộc thời gian
2.3 Ngôn ngữ XML (eXtensible Markup Language)
2.3.1 Cơ bản về XML
XML kết hợp những ưu điểm của các ngôn ngữ trước đó (sự đơn giản của HTML và cấu trúc mô tả tài liệu của SGML), có khả năng mô tả nhiều loại dữ liệu khác nhau với mục đích là đơn giản hóa việc chia sẻ dữ liệu giữa các hệ thống khác nhau, đặc biệt là các hệ thống được kết nối với Internet. XML là ngôn ngữ đánh dấu với mục đích chung cho W3C đề nghị [6].
XML là một ngôn ngữ đánh dấu, nó gần giống với HTML (Hypertext markup Language). Nó cung cấp một phương tiện dùng văn bản để mô tả thông tin và áp dụng một cấu trúc kiểu cây cho thông tin đó. Mọi thông tin đều hiển thị dưới dạng văn bản (text), chen giữa các thẻ đánh dấu (markup) với nhiệm vụ ký hiệu sự phân chia thông tin thành một cấu trúc có thứ bậc của các dữ liệu ký tự [6].
Nội dung của một tài liệu XML gồm hai phần chính:
- Nội dung chính: Hệ thống các thẻ đánh dấu tương ứng với các thông tin cần biểu diễn và có một node gốc.
- Nội dung phụ: Bổ sung thông tin cho tài liệu XML, một số thẻ phụ: o Thẻ khai báo tham số: <?xml Ten1=“Giatri1”… ? >
Một số tham số thường dùng như: tham số version (phiên bản chỉ định của XML), tham số encoding (cách mã hóa các ký tự), tham số
o Thẻ chỉ thị xử lý: Mô tả một số thông tin cho tài liệu XML nhưng có ý nghĩa riêng đối với một vài công cụ xử lý nào đó. Cấu trúc:
<? Bo_Xu_Ly_Du_Lieu >
Ví dụ: <?xml-stylesheet type=“text/css” href=“a.css” ?>
Định dạng thể hiện tài liệu XML với “chương trình định dạng” theo ngôn ngữ CSS được lưu trữ bên trong tệp tin a.css. Thẻ này có ý nghĩa với một số trình duyệt như IE5, Netscape.
o Thẻ ghi chú: Không ảnh hưởng đến tài liệu XML. Cấu trúc: <-- Nội dung ghi chú -->
o Thẻ CDATA: Yêu cầu các bộ phân tích tài liệu XML bỏ qua không phân tích vào nội dung bên trong của thẻ này. Mục đích chính của thẻ này là cho phép sử dụng trực tiếp bên trong thẻ một số ký hiệu không được phép sử dụng bên ngoài. Ví dụ các ký tự „<‟, „>‟.
Cấu trúc: <![CDATA [Nội dung]]>.
o Thẻ khai báo thực thể: cho phép tài liệu XML tham chiếu đến một tập hợp các giá trị đã chuẩn bị trước dưới dạng một tên gợi nhớ (tên thực thể).
Khai báo: <!DOCTYPE Ten_goc[ Khai báo thực thể tên X
Khai báo thực thể tên Y] o Thẻ khai báo cấu trúc.
Các thẻ XML không được định nghĩa trước trong cú pháp XML, người sử dụng có thể tự định nghĩa theo các thẻ theo ý thích khi sử dụng XML. XML sử dụng DTD hoặc XML schema để mô tả dữ liệu. XML biểu diễn dữ liệu bằng cách sử dụng các thành phần XML, trong đó chứa một trong các thành phần sau đây:
- Thẻ bắt đầu: Chứa tên của thành phần.
- XML attributes: Các thuộc tính, mỗi thuộc tính có tên và giá trị
- Nội dung: Có thể chứa một đoạn văn bản hoặc thuộc tính, cũng có thể chứa cả hai. - Thẻ kết thúc, giống với tên của thẻ bắt đầu.
Ví dụ về một tài liệu XML: <?xml version="1.0" encoding="UTF-8"?> <edge type="directed "> <from id="n1"/> <to id="n2"/> </edge>
<comment> An edge of one graph</comment>
Có 6 thành phần XML trong tài liệu này. Đầu tiên là chỉ thị xử lý, Phần tử edge chứa thuộc tính có tên là type và giá trị là directed. Phần tử edge chứa hai phần tử con là from
và to chúng có hai thuộc tính là id. Phần tử comment chứa nội dung là một đoạn văn bản (text).
XML đã trở thành một công cụ rất mạnh và đơn giản để lưu trữ dữ liệu trên các file. Nó cho phép bạn lưu trữ dữ liệu theo mẫu và có thể truy xuất được bằng các ứng dụng khác nhau, nhưng nó không thể tạo ra dữ liệu. Bằng cách sử dụng các API như DOM, SAX, bạn có thể truy xuất dữ liệu từ một tài liệu XML rất dễ dàng.
2.3.2 XML DOM 2.3.2.1 DOM
“The W3C Document Object Model (DOM) is a platform and language-neutral
interface that allows programs and scripts to dynamically access and update the content,
structure, and style of a document” [http://www.w3.org/]. DOM gồm ba phần riêng biệt:
- Core DOM: Định nghĩa các đối tượng chuẩn cho các tài liệu có cấu trúc.
- XML DOM: Định nghĩa tập hợp các đối tượng chuẩn cho tài liệu XML
- HTML DOM: Định nghĩa tập các đối tượng chuẩn cho tài liệu HTML.
2.3.2.2 XML DOM
XML DOM định nghĩa các đối tượng và thuộc tính của tất cả các thẻ của tài liệu XML và các phương thức (giao diện) để truy xuất chúng. Nó là một chuẩn để truy xuất, thêm, xóa, sửa các thẻ XML.
Trong DOM, mọi thứ trong tài liệu đều là nút (node):
- Toàn bộ tài liệu là một nút tài liệu (document node) – cây node
o Một cây gồm nhiều node. o Node cao nhất gọi là root.
o Mỗi node, trừ root ra có chính xác một node cha. o Một node có nhiều node con.
o Node lá là node không có node con. - Mọi thẻ XML là một nút thẻ (element node). - Text trong các thẻ XML là nút text (text node). - Mọi thuộc tính là nút thuộc tính (attribute node). - Ghi chú là nút ghi chú (comment node).
2.3.2.3 XML DOM Parser
Để đọc, cập nhật và thao tác trên một tài liệu XML ta cần một XML Parser. Có nhiều XML Parser được hỗ trợ trong hầu hết các ngôn ngữ (Java, .Net…). Parser nạp tài liệu XML vào trong bộ nhớ của máy tính và được xem dưới dạng cây node. Sau đó dữ liệu sẽ được thao tác và xử lý thông qua tập hàm XML DOM API.
Hình 2.6: XML DOM Parser 2.3.2.4 XML DOM API 2.3.2.4 XML DOM API
Cung cấp các phương thức xử lý tài liệu XML. Trong XML DOM API có rất nhiều phương thức để có thể thao tác với tài liệu XML, ở đây tôi xin chỉ ra một số phương thức thường sử dụng nhất để thao tác với tài liệu XML:
- Duyệt node:
o ParentNode: Lấy node cha của node hiện tại o ChildNodes: Lấy các node con của node hiện tại o firstChild: Lấy node con đầu tiên của node hiện tại o lastChild: Lấy node con cuối cùng của node hiện tại o nextSibling: Lấy node kế tiếp node hiện tại.
o previousSibling: Lấy node trước node hiện tại. - Thao tác trên các node:
o getElementsByTagName(String tagname): Trả về một tập các node có thuộc tính tên là: tagname.
o getElementById(String id): Trả về một node có thuộc tính id là: id
o setAttribute(String name, String value): Đặt thuộc tính cho node với tên thuộc tính là name, giá trị là value.
o getAttribute(String name): lấy giá trị của thuộc tính có tên là
name
o removeChild: Xóa node con của node hiện tại
o removeAttribute: Xóa bỏ thuộc tính của node hiện tại
o replaceChild: Thay thế node con của node hiện tại bằng một
node mới.
o createNode: Dùng để tạo ra tất cả các loại node.
o createElement: = createNode với loại element node.
o createTextNode: = createNode với loại text node
o createAttribute: = createNode với loại attribute node.
o nodeCha.appendChild: thêm vào phần tử cuối cùng của danh
sách các node con của nodeCha.
o nodeCha.insertBefore: thêm node mới vào trước node nào đó trong danh sách node con của nodeCha.