Java và XML (phần 1)

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

<?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

<?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

<?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

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

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

<?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

< > ‘ ” &
&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

<!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

<!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

<?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

 

name
{
color: red;
font-style: italic;
}
class
{
font-weight: bold;
font-size: 24;
}

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

<?xml version=”1.0″ standalone=”yes”?>
<?xml-stylesheet
name
{
color: red;
font-style: italic;
}
class
{
font-weight: bold;
font-size: 24;
}
?>
<!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

<?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”>

<?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

<?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

<!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

<!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

<?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ớ

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