Học tập‎ > ‎Mạng Máy Tính‎ > ‎

Kiến thức cơ sở về XML

Không thể tìm thấy URL thông số tiện ích

XML được thiết kế để mô tả dữ liệu và xác định dữ liệu là gì. Tại sao lại là XML?

* XML viết tắt của eXtensible Markup Language
* XML là một ngôn ngữ đánh dấu như HTML
* XML được thiết kế để mô tả dữ liệu
* Các thẻ XML không được định nghĩa lại. Bạn phải định nghĩa các thẻ của riêng bạn
* XML sử dụng môt Đặc tả Kiểu Dữ liệu (Data Type Definition - DTD) hoặc một schema để mô tả dữ liệu
* XML với một DTD hoặc một Schema được thiết kế để mô tả bản thân
* XML là chuẩn của W3C

XML trong tương lai của việc phát triển Web. XML sẽ ở khắp mọi nơi.
Chúng ta sẽ thấy ngạc nhiên khi thấy được chuẩn XML được phát triển nhanh chóng như thế nào va số lượng các nhà cung cấp phần mềm tuân theo chuẩn này lớn thế nào. Chúng ta tin tưởng rằng XML sẽ trở nên quan trọng trong tương lai của Web và XML sẽ trở thành công cụ chuẩn cho tất cả việc thực thi dữ liệu và trao đổi dữ liệu

01/ Mở đầu về XML

Phần cuối cùng về lập trình Web là ta học về XML. Dưới đây là một file document.xml cơ bản nhất
PHP Code: 

<?xml version="1.0" encoding="UTF-8"?>
<document>
<greeting>
Hello
</greeting>
<message>
Welcome
</message>
</document>

* Internal DTD (đặc tả dữ liệu nội)

file này muốn sử dụng cần có phần đặc tả dữ liệu (Data Type Definition-DTD) nội
PHP Code: 

<?xml version="1.0" standalone="yes" encoding="UTF-8"?>
<!DOCTYPE document [
<!ELEMENT document (greeting,message)>
<!ELEMENT greeting (#PCDATA)>
<!ELEMENT message (#PCDATA)>
]>
<document>
<greeting>
Hello
</greeting>
<message>
Welcome
</message>
</document>

* External DTD (đặc tả dữ liệu ngoại)

Mặc định của standalone đã là yes rồi. Nếu muốn sử dụng tập tin .dtd ngoại thì khai báo
PHP Code: 

<?xml version="1.0" standalone="no"?>
<!DOCTYPE document SYSTEM "mydtd.dtd">
<document>
<greeting>
Hello
</greeting>
<message>
Welcome
</message>
</document>


Nội dung của file mydtd.dtd
PHP Code: 

<!ELEMENT document (greeting,message)>
<!
ELEMENT greeting (#PCDATA)>
<!ELEMENT message (#PCDATA)> 

* Định nghĩa thẻ rỗng (không mang dữ liệu)
PHP Code: 

<?xml version="1.0"?>
<!DOCTYPE document [
<!ELEMENT document (greeting)>
<!ELEMENT greeting EMPTY>
]>
<document>
<greeting/>
</document>


* Các tham chiếu thực thể được định nghĩa trước
PHP Code: 

< > ' " &
&lt &gt &apos &quot &amp

<?xml version="1.0"?>
<document>
<greeting>This text is inside the &lt;greeting&gt;</greeting>
</document>


02/ Qui tắc về kí tự đại diện

a* đại diện cho nhiều a hoặc không có a nào
a+ đại diện cho nhiều a hoặc ít nhất một a nào
a|b chỉ được chứa a hay b nhưng không được chứa cả 2

Ví dụ bạn khai báo
PHP Code: 

<!ELEMENT person(name)*> 

thì khi đó tài liệu xml của bạn được phép có nhiều cặp thẻ name hoặc không có cặp nào cũng được
Nhưng nếu bạn khai báo
PHP Code: 

<!ELEMENT person(name)+> 

thì khi đó tài liệu xml của bạn được phép có nhiều cặp thẻ name nhưng ít nhất phải có một cặp thẻ


03/ Hiển thị XML trên trình duyệt dùng CSS
PHP Code: 

<?xml version="1.0" standalone="yes"?>
<?xml
-stylesheet type="text/css" href="hocsinh.css"?>
<!DOCTYPE hocsinh [
<!ELEMENT hocsinh (name,class)*>
<!ELEMENT name (#PCDATA)>
<!ELEMENT class (#PCDATA)>
]>
<hocsinh>
<name>Bill Gates</name>
<class>First</class>
</hocsinh>

Nội dung file hocsinh.css của bạn
PHP Code: 

name
{
colorred;
font-styleitalic;
}
class
{
font-weightbold;
font-size24;


Sau đó hãy dùng trình duyệt để hiển thị file hocsinh.xml của bạn. Trình duyệt sẽ không hiển thị mã nữa mà hiển thị nội dung đã được định dạng bằng hocsinh.css
Bạn cũng có thể khai báo luôn nội dung CSS trong trang XML như sau
PHP Code: 

<?xml version="1.0" standalone="yes"?>
<?xml
-stylesheet
name
{
colorred;
font-styleitalic;
}
class
{
font-weightbold;
font-size24;
}
?>
<!DOCTYPE hocsinh [
<!ELEMENT hocsinh (name,class)*>
<!ELEMENT name (#PCDATA)>
<!ELEMENT class (#PCDATA)>
]>
<hocsinh>
<name>Bill Gates</name>
<class>First</class>
</hocsinh>

04/ Khai báo thực thể ENTITY
PHP Code: 

<?xml version="1.0"?>
<!DOCTYPE document [
<!ELEMENT document (master,date)>
<!ELEMENT master (#PCDATA)>
<!ELEMENT date (#PCDATA)>
<!ENTITY today "January 21,2004">
]>
<document>
<master>
Mr.John
</master>
<date>
&today;
</date>
</document>

Khi đó date có giá trị là "January 21,2004"

05/ Danh sách thuộc tính ATTLIST


Cũng giống như HTML, thẻ trong XML có thuộc tính, ví dụ <student name="Peter">
PHP Code: 

<?xml version="1.0"?>
<!DOCTYPE hocsinh [
<!ELEMENT hocsinh (item)*>
<!ELEMENT item (#PCDATA)>
<!ATTLIST item
hsid CDATA #REQUIRED
hsname CDATA #REQUIRED
hsage CDATA "18"
>
]>
<hocsinh>
<item hsid="001" hsname="Tracy"></item>
</hocsinh>

Hoàn toàn tương đương với dữ liệu sau
PHP Code: 

<?xml version="1.0"?>
<!DOCTYPE hocsinh [
<!ELEMENT hocsinh (item)*>
<!ELEMENT item (hsid,hsname,hsage)>
<!ELEMENT hsid (#PCDATA)>
<!ELEMENT hsname (#PCDATA)>
<!ELEMENT hsage (#PCDATA)>
]>
<hocsinh>
<item>
<hsid>"001"</hsid>
<hsname>"Tracy"</hsname>
<hsage>"18"</hsage>
</item>
</hocsinh>


* Định nghĩa tổng quát
PHP Code: 

<!ATTLIST item
hsid CDATA DEFAULT_VALUE
hsname CDATA DEFAULT_VALUE
hsage CDATA DEFAULT_VALUE

trong đó CDATA là dữ liệu văn bản đơn giản không có phần định dạng còn DEFAULT_VALUE bao gồm
- giá trị mặc định của thuộc tính
- #REQUIRED:không có giá trị mặc định nhưng thuộc tính này bắt buộc phải có giá trị
- #IMPLIED:không có giá trị mặc định nhưng thuộc tính này không nhất thiết phải có giá trị

* Ngoài CDATA còn có các kiểu sau đây

- Kiểu danh sách các giá trị mà thuộc tính được phép mang
PHP Code: 

<!ATTLIST item
sex 
(male|female"male"

Trong khai báo vừa rồi thì thuộc tính sex chỉ được mang 1 trong 2 giá trị male hay female và mặc định là "male"


- Kiểu ENTITY
PHP Code: 

<?xml version="1.0"?>
<!DOCTYPE hocsinh [
<!ELEMENT hocsinh (item)*>
<!ELEMENT item (#PCDATA)>
<!ATTLIST item
birthday ENTITY #IMPLIED
>
<!ENTITY today "January 21,2004">
]>
<hocsinh>
<item birthday="today"></item>
</hocsinh>

Đưa dữ liệu non-XML vào tài liệu XML

Có rất nhiều loại dữ liệu non-XML mà ta cần đưa vào như hình ảnh, âm thanh, file thực thi ... dùng cú pháp sau

<!ENTITY tên SYSTEM giá_trị NDATA loại> với loại chẳng qua là ta tự đặt để dễ nhớ
PHP Code: 

<!ENTITY snapshot SYSTEM "image.gif" NDATA GIF>
<!
ENTITY runnable SYSTEM "setup.exe" NDATA EXE>


Comments