Tải bản đầy đủ (.pdf) (20 trang)

Bài giảng chuyên đề công nghệ xml và ứng dụng phần 2 trường đh công nghiệp quảng ninh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (399.87 KB, 20 trang )

Chương 5

LƯỢC ĐỒ XML
 Mục tiêu học tập: Sau khi học xong chương này người học sẽ:
-

Hiểu được lược đồ XML là gì, lược đồ theo chuẩn W3C.

-

Định nghĩa được kiểu dữ liệu cho các phần tử trong lược đồ (kiểu đơn giản
và kiểu phức hợp)

- Ứng dụng được lược đồ vào tài liệu XML.
Tóm tắt chương
Để tài liệu XML của chúng ta hợp lệ, chúng ta phải định nghĩa kiểu tư liệu cho
các phần tử. Chúng ta có thể sử dụng khai báo DTD cho mục đích này, tuy nhiên DTD
không phải là cách duy nhất. Định nghĩa kiểu tư liệu cịn có thể dựa vào lược đồ
(schema). Chương này chúng ta sẽ tìm hiểu khái niệm và cách sử dụng lược đồ để khai
báo kiểu tư liệu cho các phần tử thay cho định nghĩa DTD.
5.1 Tại sao chúng ta nên dùng XML Schema?
Xuất phát từ những hạn chế của DTD như: DTD sử dụng cú pháp khác so với
cú pháp dùng trong trang XML làm cho người dùng phải nhớ nhiều cú pháp; DTD chỉ
hỗ trợ được 10 kiểu dữ liệu. Ngồi ra DTD cịn hạn chế về khả năng định nghĩa các
ràng buộc dữ liệu.
-

XML Schema sử dụng cùng cú pháp với trang XML làm cho người dùng dễ

nhớ ngồi ra nó cịn hỗ trợ được 44 kiểu dữ liệu. XML schema cho phép người dùng
tự định nghĩa kiểu dữ liệu mới, định nghĩa các ràng buộc dữ liệu. XML schema bảo


toàn sự giao tiếp dữ liệu, ràng buộc các khóa và tham chiếu mạnh hơn so với DTD
đồng thời nó cịn tích hợp được với không gian tên (namespace).
-

XML Schema mô tả:
+ Các phần tử và thuộc tính trong tài liệu XML
+ Thứ tự và số lượng các phần tử con
+ Các kiểu dữ liệu của phần tử và thuộc tính

5.2 Các thành phần trong một XML Schema
Trong một XML Schema có các thành phần sau:
- Thành phần schema
- Element

Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

54


- Các thuộc tính có thể xuất hiện trong trang XML
- Định nghĩa các kiểu dữ liệu
5.2.1 Thành phần schema
Điểm cơ bản nhất để hiểu về lược đồ XML là hiểu khái niệm sử dụng kiểu đơn
giản và kiểu phức hợp trong khai báo kiểu cho các phần tử XML.
Để chỉ định kiểu cho các phần tử, chúng ta phải bảo đảm kiểu đã được định
nghĩa trước đó. Như đã nêu trên, kiểu phức hợp là kiểu chứa các phần tử con trong nó
hoặc chứa thêm thuộc tính trong khi kiểu giản đơn thì khơng. Kiểu giản đơn là kiểu
nội tại đã được định nghĩa sẵn và chúng ta có thể dùng tự do trong lược đồ XML.
Schema là phần tử gốc (element root) của mỗi trang tài liệu.
- Khai báo:

xmlns:xsd= />targetNamespace=
xmlns=
elementFormDefault=“qualifed”>
<!-- nội dung của schema -->
</xsd:schema>

Mỗi XML Schema được bắt đầu bằng thành phần (element root)
xmlns:xsd= version=“1.0”>

- Các thành phần và các kiểu dữ liệu trong schema như:
- schema, element, complexType, sequence, string nằm trong namespace:
http://.../XML schema
- targetNamespace= namespace của những thành phần
định nghĩa trong schema
- Ví dụ như Book, Title, Author, date, ISBN, Publisher nằm trong
namespace
elementFormDefault=“qualified” kiểm tra tính hợp lệ của tất cả các elements trong
trang XML
elementFormDefault=“unqualified” chỉ kiểm tra tính hợp lệ của các global element

Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

55


* Chú ý:
- Thuộc tính targetNamespace là một tùy chọn có thể khơng cần chỉ ra
targetNamespace cho một schema

5.2.2 Tham chiếu đến schema từ trang XML
<?xml version =“1.0”?>
xmlns:xsl= /><book> xsl:schemaLocation=: BookStore.xsd”
<title>My life and Times</title>
<author>Paul MeCartney</author>
<date>July, 1998</date>
<ISBN>94303-12021-43892</ISBN>
MeMilin Puplishing</puplisher>
</book>
</BookStore>

-

Khai báo namespace mặc định, thông báo cho schema- validator biết tất cả các

thành phần khai báo trong trang XML là có trong namespace
-

Thơng báo cho schema-validator biết rằng thuộc tính schemaLocation là nằm

trong XMLschema-instance namespce
-

Với schemaLocation thông báo cho schema - validator biết rằng

namespace là được định nghĩa trong BookStore.xsd
5.3 Quá trình kiểm tra tính hợp lệ của một trang XML

BookStore.xml


BookStore.xsd

XMLSchema.xsl

Đầu tiên trình duyệt sẽ kiểm tra tính hợp lệ của dữ liệu trong trang XML trước,
căn cứ vào cấu trúc dữ liệu khai báo trong trang BookStore.xsd. Sau đó tiếp tục kiểm
tra tính hợp lệ của trang BookStore.xsd, căn cứ vào các luật mô tả trong
XMLSchema.xsd.

Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

56


Ví dụ:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd=“ />targetNamespace=“”
xmlns=“”
elementFormDefault="qualified">
<xsd:element name="note">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="to" type="xsd:string"/>
<xsd:element name="from" type="xsd:string"/>
<xsd:element name="heading" type="xsd:string"/>
<xsd:element name="body" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

</xsd:schema>

5.4 Lược đồ và không gian tên
<schema xmlns= />targetNamespace=“”>
…..
</schema>

- namespace của các từ khóa dùng trong sự
xác định lược đồ XML, ví dụ: schema, targetNamespace,…
- targetNamespace: định nghĩa namespace của lược đồ được xác định trong tài
liệu <schema>…</schema> trên
5.5 Xây dựng lược đồ từ nhiều thành phần
<schema xmlns= />targetNamespace=“ /><include schemaLocation=“ /><include schemaLocation=“ /><include schemaLocation=“ />….
</schema>

<include>: giống như #include trong ngôn ngữ C
schemaLocation: cho biết nơi để lấy thông tin
Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

57


5.6 Khai báo phần tử trong XML Schema
Phần tử <schema> là phần tử gốc trong các tài liệu XML Schema.
<?xml version="1.0"?>
<xsd:schema xmlns:xsd= />targetNamespace=
xmlns=
elementFormDefault="qualified">
......
</xsd:schema>

xmlns:xsd=" />
Phần tử và loại dữ liệu trong lược đồ được khai báo trong namespace
và có tiền tố là xsd
targetNamespace=

Các phần tử được định nghĩa trong lược đồ từ namespace
xmlns=""
namespace mặc định là xmlns=""
elementFormDefault="qualified”

Bất kỳ phần tử nào được sử dụng trong tài liệu XML phải từ namespace đảm
bảo chất lượng.
5.7 Các kiểu phần tử
- Kiểu giản đơn (Simple type): là một phần tử XML chỉ có kiểu dữ liệu text, mà
khơng có thuộc tính hoặc khơng thể chứa các phần tử khác. Kiểu text cũng có thể có
nhiều loại:
+ Built-in data type
+ User-defined data type
Người dùng có thể thêm ràng buộc cho kiểu dữ liệu để giới hạn nội dung của
nó, hoặc yêu cầu dữ liệu thỏa mãn một mẫu nào đó.
- Kiểu phức hợp (Complex type): là một phần tử XML có thuộc tính, hoặc chứa
các phần tử con khác.
5.7.1 Định nghĩa một phần tử giản đơn
<xsd:element name="xxx" type="yyy"/>

xxx: tên của phần tử
yyy: kiểu dữ liệu của phần tử
Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

58



5.7.2 Các kiểu dữ liệu thông dụng:
Kiểu

Mô tả

Binary

Kiểu dữ liệu nhị phân

Boolean

Kiểu luận lý

Byte

Kiểu byte

Century

Kiểu thế kỷ

Date

Kiểu ngày

Decemal

Kiểu thập phân


Double

Kiểu số thực 64bit

ENTITY

Kiểu thực thể

ENTITIES

Kiểu đa thực thể

ID

Kiểu định danh

Int, Integer

Kiểu số nguyên

IDREF

Kiểu tham chiếu định danh

NOTATION

Kiểu ghi chú

MNTOKEN


Kiểu token đơn

MNTOKENS

Kiểu đa token

Month

Kiểu tháng

String

Kiểu chuỗi

5.7.3 Ví dụ
Các phần tử XML:
<lastname>Refsnes</lastname>
<age>36</age>
<dateborn>1970-03-27</dateborn>

Định nghĩa phần tử đơn giản:
<name="lastname" type="xsd:string"/>
<name="age" type="xsd:integer"/>
<name="dateborn" type="xsd:date"/>

5.8 Giá trị mặc định và cố định
Giá trị mặc định:
<xsd:element name="color" type="xsd:string" default="red"/>


Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

59


Giá trị cố định:
<xsd:element name="color" type="xsd:string" fixed="red"/>

Trong đó:
Thuộc tính trong XSD được khai báo như một kiểu giản đơn. Các phần tử giản đơn
khơng thể có thuộc tính. Nếu một phần tử có thuộc tính, thì phần tử đó được xem là
phần tử phức hợp.
5.9 Khai báo thuộc tính và các ràng buộc
<xsd:attribute name="xxx" type="yyy"/>

xxx: tên của thuộc tính
yyy: kiểu dữ liệu của thuộc tính.
Ví dụ:
Phần tử XML có thuộc tính:
<lastname lang="EN">Smith</lastname>

5.9.1 Định nghĩa thuộc tính trong XSD
<xsd:attribute name="lang" type="xsd:string"/>

5.9.2 Khai báo loại thuộc tính
Khai báo default:
<xsd:attribute name="lang" type="xsd:string" default="EN"/>

Khai báo fixed:


fixed="EN"/>

Khai báo requyred:

use="requyred"/>

5.9.3 Ràng buộc nội dung
- Khi một phần tử hay thuộc tính đã định nghĩa kiểu dữ liệu, phần tử hay thuộc tính
đó đã có ràng buộc về nội dung.
- Người dùng có thể thêm các ràng buộc cho phần tử hay thuộc tính.
5.9.4 Ràng buộc giá trị
Kiểu miền con:
<xsd:element name="age">
<xsd:simpleType>

Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

60


<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="0"/>
<xsd:maxInclusive value="120"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>

Kiểu liệt kê:

<xsd:element name="car">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Audi"/>
<xsd:enumeration value="Golf"/>
<xsd:enumeration value="BMW"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>

Giới hạn giá trị:
<xsd:element name="letter">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="[a-z]"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>

Hoặc:
<xsd:element name="initials">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>

Hoặc dùng ký tự đại diện:


name="letter">

<xsd:simpleType>
<xsd:restriction base="xsd:string">
Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

61


<xsd:pattern value="([a-z])*"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="letter">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="([a-z][A-Z])+"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="gender">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="male|female"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="password">
<xsd:simpleType>

<xsd:restriction base="xsd:string">
<xsd:pattern value="[a-zA-Z0-9]{8}"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>

5.9.5 Ràng buộc về ký tự dấu cách
<xsd:element name="address">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:whiteSpace value="preserve"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>

Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

62


<xsd:whiteSpace value="preserve"/>: XML parser sẽ không loại bỏ bất kỳ ký
tự dấu cách nào.
<xsd:whiteSpace value=“replace"/>: XML parser sẽ thay thế tất cả ký tự dấu
cách (line feed, tab, space, carriage return) bằng khoảng trắng.
<xsd:whiteSpace value=“collapse"/>: XML parser sẽ loại bỏ tất cả ký tự dấu
cách dư (line feed, tab, space, carriage return) bằng khoảng trắng.
5.9.6 Ràng buộc về độ dài
<xsd:element name="password">
<xsd:simpleType>
<xsd:restriction base="xsd:string">

<xsd:length value="8"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>

Hoặc:
<xsd:element name="password">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:minLength value="5"/>
<xsd:maxLength value="8"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>

5.9.7 Định nghĩa phần tử phức hợp
Phần tử phức hợp là một phần tử XML chứa các phần tử khác hoặc có thuộc tính.
Có 4 loại phần tử phức hợp:
- Phần tử rỗng
- Phần tử chỉ chứa các phần tử khác
- Phần tử chỉ chứa văn bản
- Phần tử vừa chứa các phần tử khác, vừa chứa văn bản
Ví dụ:

<employee>
<firstname>John</firstname>
Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

63



<lastname>Smith</lastname>
</employee>
<food type="dessert">Ice cream</food>
<description>
It happened on <date lang="norwegian">03.03.99</date>
....
</description>

5.9.7.1 Định nghĩa một phần tử phức hợp trong XSD
Trong tài liệu XML
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>

Có nhiều cách để định nghĩa phần tử employee…
Cách 1:
<xsd:element name="employee">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="firstname" type="xsd:string"/>
<xsd:element name="lastname" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

Cách 2:
<xsd:element name="employee" type="personinfo"/>
<xsd:complexType name="personinfo">

<xsd:sequence>
<xsd:element name="firstname" type="xsd:string"/>
<xsd:element name="lastname" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>

5.9.7.2 Định nghĩa phần tử rỗng

<xsd:element name="product">

Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

64


<xsd:complexType>
<xsd:attribute name="prodid" type="xsd:positiveInteger"/>
</xsd:complexType>
</xsd:element>

5.9.7.3 Định nghĩa phần tử chỉ chứa phần tử con

<firstname>John</firstname>
<lastname>Smith</lastname>
</person>

Ví dụ:
<xsd:element name="person">
<xsd:complexType>
<xsd:sequence>

<xsd:element name="firstname" type="xsd:string"/>
<xsd:element name="lastname" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

5.10 Ví dụ về XML, XSD VÀ XSL
Tập tin person.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="person.xsl"?>
<PersonInfo xmlns:xsd=" />xsd:schemaLocation="person.xsd">
<Person>
<name>Nguyễn Phương Lan</name>
<address>Quận 5</address>
<city>Hồ Chí Minh</city>
<gender>F</gender>
</Person>
<Person>
<name>Đồn Văn Ban</name>
<address>Cầu Giấy</address>
<city>Hà Nội</city>
<gender>M</gender>
</Person>
Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

65


</PersonInfo>


Tập tin person.xsd
<xsd:schema xmins xsd=" version="1.0">
<xsd:element name="PersonInfo">
<xsd:complexType>
<xsd:element name="Person">
<xsd:complexTye>
<xsd:sequence>

name="name"

type="xsd:string"

maxOccurs="1"

minOccurs="1"/>
minOccurs="0"/>

name="city"

type="xsd:string"

maxOccurs="unbounded"

minOccurs="0"/>
<xsd:simpleType name="gender">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="F"/>

</xsd:restriction>
</xsd:simplpeType>
</xsd:sequence>
</xsd:complexTye>
</xsd:element>
</xsd:schema>

Tập tin person.xsl
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsl=" /><xsl:template match="/">
<html>
<head>
<title>Tac gia</title>
</head>
<body>

Danh sách các tác giả


Nhà sách Minh Khai


<table border="1">
<tr> <th>Name</th>
Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

66


<th colspan="2">Addresses</th>
<th colspan="2">City</th>
<th>Gender</th>
</tr>
<xsl:for-each select="PersonInfo/Person">

<tr>
<td><b><i><xsl:value-of select="name"/> </i></b></td>
<td>
<xsl:for-each select="address">
<td><xsl:value-of select="."/></td>
</xsl:for-each>
</td>
<td>
<xsl:for-each select="city">
<td><xsl:value-of select="."/></td>
</xsl:for-each>
</td>
<td><b><i><xsl:value-of select="gender"/> </i></b></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Kết quả được hiển thị trên trình duyệt như sau:

Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

67


Kết chương
Chúng ta đã tìm hiểu qua về khái niệm và định nghĩa kiểu tư liệu cho các phần

tử trong tài liệu XML thông qua lược đồ. Lược đồ XML là một sự cố gắng nhằm
chuẩn hóa và đem lại sự linh động thay thế cho DTD. Mặc dù lược đồ XML chưa
được phổ biến rộng rãi và đang trong giai đoạn phát triển đặc tả nhưng chắc chắn nó sẽ
trở thành một định nghĩa chuẩn trong tương lai.
 Câu hỏi củng cố:
1. Hãy cho biết những ưu, nhược điểm của lược đồ trong XML?
2. So sánh lược đồ XML và DTD?
3. Định nghĩa, khai báo các phần tử trong lược đồ?
4. Ứng dụng lược đồ để xây dựng một ứng dụng thực tế.

Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

68


Chương 6

DOM VÀ XỬ LÝ XML VỚI JAVASCRIPT
 Mục tiêu học tập: Sau khi học xong chương này người học sẽ:
- Hiểu được mơ hình DOM, cách nạp và xử lý dữ liệu.
- Biết cách truy xuất nội dung và thuộc tính của các nút dữ liệu, thay đổi nội
dung XML bằng JavaScript.
- Ứng dụng JavaScript vào XML.
Tóm tắt chương
Chương này giới thiệu cách dùng JavaScript để xử lý dữ liệu XML theo mơ
hình DOM. Mặc dù DOM xử lý và truy xuất được mọi dữ liệu trong tài liệu XML,
nhưng mơ hình khá phức tạp vì phải lần theo các nút trong cây tài liệu.
6.1 Mơ hình DOM
W3C định nghĩa tài liệu XML theo mơ hình đối tượng tài liệu DOM (Document
Object Model). Mơ hình này, tài liệu của chúng ta là một cây bao gồm các nút (node).

Nội dung các nút này có thể chứa các phần tử (element), dữ liệu văn bản (text), thuộc
tính (attribute)… và các nút con khác.
Các nút trong mơ hình DOM:
Nút

Mơ tả

Element

Phần tử XML

Attribute

Thuộc tính

Text

Dữ liệu text

CDATA section

Phân đoạn CDATA

Entity reference

Tham chiếu thực thể

Entity

Thực thể


Processing Instruction

Chỉ thị xử lý

Comment

Chú thích

Document

Tài liệu

Document Type

Kiểu tư liệu

Document fragment

Đoạn tài liệu

Notation

Ghi chú

Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

69



Ví dụ: Chúng ta có tài liệu XML sau:
<?xml version=”1.0” encoding=”UTF-8”?>
<DOCUMENT>
<GREETING>
Hello From XML
</GREETING>
<MESSAGE>
Welcome to the wild and woolly word of XML
</MESSAGE>
</DOCUMENT>

Tài liệu trên có thể phân theo cấu trúc hình cây bao gồm các nút đối tượng.
<DOCUMENT>

<GREETING>

Hello From XML

<MESSAGE>

Welcome to the wild and woolly word
of XML

Phần tử <DOCUMENT> là một nút bao gồm hai nút con là <GREETING> và
<MESSAGE>. Hai nút <GREETING> và <MESSAGE> lần lượt chứa nút con khác
lưu dữ liệu dạng text với nội dung “Hello From XML” và “Welcome to the wild and
woolly word of XML”. Toàn bộ cấu trúc trên chính là mơ hình DOM.
Khi phân tích cây tài liệu DOM ta xem mỗi nút là một đối tượng (object). DOM
còn cung cấp các phương thức như nextChild(), lastSibling()… để đi đến toàn bộ các
nút con khác.

6.2 Nạp tài liệu XML cần xử lý bằng JavaScript
Có hai cách nạp dữ liệu XML vào trình duyệt IE bằng JavaScript.
- Cách 1: Dùng lớp đối tượng Microsoft.XMLDOM
- Cách 2: Dùng phần tử nạp dữ liệu <XML>
Chúng ta sử dụng ví dụ (tập tin meetings.xml) sau để xử lý bằng Java Script theo
mơ hình DOM. (Tạo tập tin meetings.xml chứa thông tin của những người tham gia cuộc
họp)

Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

70


Ví dụ:
<?xml version = “1.0”?>
<MEETINGS>
<MEETING TYPE = “informal”>
<MEETING_TITLE> XML In The Real Word </MEETING_TITLE>
<MEETING_NUMBER> 2079 </MEETING_NUMBER>
<SUBJECT> XML</SUBJECT>
<DATE> 6/1/2002 </DATE>
<PEOPLE>
<PERSON ATTENDENCE= “present”>
<FIRST_NAME> Edward </FIRST_NAME>
<LAST_NAME> Edward </LAST_NAME>
</PERSON>
<PERSON ATTENDENCE= “absent”>
<FIRST_NAME> Ernestine </FIRST_NAME>
<LAST_NAME> Johnson </LAST_NAME>
</PERSON>

<PERSON ATTENDENCE= “present”>
<FIRST_NAME> Betty </FIRST_NAME>
<LAST_NAME> Richardson </LAST_NAME>
</PERSON>
</PEOPLE>
</MEETING>
</MEETINGS>

Tiếp theo, chúng ta tạo tài liệu viewdata.html bên dưới chứa đoạn mã JavaSript
để đọc và phân tích tài liệu XML trên. Trước hết ta cần tạo ra đối tượng xử lý DOM
của Microsoft. Như vậy, để thực hiện được điều này, ta gọi toán tử new để tạo mới đối
tượng ActiveXObject với tên lớp là Microsoft.XMLDOM.
<HTML>
<HEAD>
<TITLE>
Reading XML element values
</TITLE>
<SCRIPT LANGUAGE = “JavaScript”>
Function readXMLDocument()
{
var xmldoc

Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

71


xmldoc = new ActiveXObject (“Microsoft.XMLDOM”)
.
.

.
</SCRIPT>
</HEAD>
</HTML>

Tiếp đến chúng ta nạp tài liệu meetings.xml cần xử lý vào trình duyệt
<HTML>
<HEAD>
<TITLE>
Reading XML element values
</TITLE>
<SCRIPT LANGUAGE = “JavaScript”>
Function readXMLDocument()
{
var xmldoc
xmldoc = new ActiveXObject (“Microsoft.XMLDOC”)
xmldoc.load (“meetings.xml”);
.
.
.
</SCRIPT>
</HEAD>
</HTML>

Để duyệt qua tất cả các nút trong cây tài liệu theo mơ hình DOM, ta cần xuất
phát từ nút gốc. Trong tài liệu meetings.xml ở trên ta thấy <MEETINGS> là phần tử
gốc của tài liệu. Chúng ta gọi phương thức documentElement để đến nút gốc của tài
liệu DOM như sau:
<HTML>
<HEAD>

<TITLE>
Reading XML element values
</TITLE>
<SCRIPT LANGUAGE = “JavaScript”>
Function readXMLDocument()

Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

72


{
var xmldoc, meetingsNode
xmldoc = new ActiveXObject (“Microsoft.XMLDOM”)
xmldoc.load (meetings.xml);
meetingsNode = xmldoc.documentElement
.
.
.
</SCRIPT>
</HEAD>
</HTML>

Chúng ta khai báo thêm biến meetingsNode để lưu giữ nút gốc. Lúc này chúng ta
hồn tồn có thể duyệt tồn bộ tài liệu bằng cách đi qua các nút của cấu trúc cây DOM.
* Các phương thức duyệt qua các nút:
firstChild: lấy nút con đầu tiên
nextChild: lấy nút con kế tiếp
previousChild: lấy nút con trước đó
lastChild: lấy nút con sau cùng

* Ngồi ra cịn có các phương thức:
firstSibling: trả về nút con cùng cấp đầu tiên
nextSibling: trả về nút con cùng cấp kế tiếp
previousSibling: trả về nút con cùng cấp trước đó
lastSibling: trả về nút con cùng cấp sau cùng
Ví dụ như <MEETING> là nút con của nút gốc <MEETINGS> và ta có thể gọi
phương thức fistChild để chuyển đến nút này như sau:
<HTML>
<HEAD>
<TITLE>
Reading XML element values
</TITLE>
<SCRIPT LANGUAGE = “JavaScript”>
Function readXMLDocument()
{
var xmldoc, meetingsNode, meetingNode
xmldoc = new ActiveXObject (“Microsoft.XMLDOM”)

Tài liệu giảng dạy môn: Chuyên đề Công nghệ XML và Ứng dụng

73



×