Javanâng cao
Java vàXML (phần 1)
16:51:55 20-06-2005
XML được thiết kế để mô tả dữ liệuvà 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ệuvà 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
< > ' " &
< > &apos " &
<?xml version="1.0"?>
<document>
<greeting>This text is inside the <greeting></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àiliệuxml 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àiliệuxml 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àiliệ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>
Java nâng cao
Java vàXML (phần 2)
16:22:50 21-06-2005
06/ Hiển thị XML trong một trang HTML
* XML nằm trong HTML
Ta dùng thẻ xml để báo cho IE biết là nội dung là mã XML
<xml id=xmldso>
<!DOCTYPE hocsinh [
<!ELEMENT hocsinh (name,class)*>
<!ELEMENT name (#PCDATA)>
<!ELEMENT class (#PCDATA)>
]>
<hocsinh>
<name>Bill Gates</name>
<class>First</class>
</hocsinh>
</xml>
// mã HTML như bình thường
* XML nằm ngoài HTML
Bạn muốn dùng hocsinh.html để hiển thị hocsinh.xml dùng table để hiển thị dữ liệu. Bạn viết
trang hocsinh.html như sau
<xml id=xmldso src=hocsinh.xml></xml>
<table id=table1 dataSrc=#xmldso border=1 width=100%>
<tr>
<td width=50%>
<p align=center>
<span dataFld=name></span>
</p>
</td>
<td width=50%>
<p align=center>
<span dataFld=class></span>
</p>
</td>
</tr>
</table>
07/ XML Object Model
- Nạp tàiliệu XML
<xml id=xmldso src=person.xml></xml>
<script>
xmldoc=document.all.xmldso
- Lấy nút gốc của XML
rootNode=xmldoc.documentElement
- Lấy nút con đầu tiên
firstNode=rootNode.firstChild
- Lấy nút con cuối cùng
lastNode=rootNode.lastChild
- Lấy nút cùng cấp tiếp theo
nextNode=firstNode.nextSibling
- Lấy nút cùng cấp trước đó
previousNode=lastNode.previousSibling
- Lấy giá trị text của một nút
firstNode.text
- Lấy tên của một nút
firstNode.nodeName
* Dưới đây là tàiliệu person.xml
<?xml version="1.0"?>
<!DOCTYPE person [
<!ELEMENT person (item)*>
<!ELEMENT item (name, sur, age)*>
<!ELEMENT name (#PCDATA)>
<!ELEMENT sur (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
<person>
<item>
<name>James</name>
<sur>Surlivan</sur>
<age>26</age>
</item>
<item>
<name>Henry</name>
<sur>Heartrow</sur>
<age>32</age>
</item>
</person>
* Ta sẽ lấy ra tên người thứ 2
<xml id=xmldso
<script>
xmldoc=document.all.xmldso
rootNode=xmldoc.documentElement
lastNode=rootNode.lastChild
document.write(lastNode.firstChild.text)
</script>
Nó sẽ ra "Henry"
. Java nâng cao
Java và XML (phần 1)
16:51:55 20-06-2005
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. XML Object Model
- Nạp tài liệu XML
< ;xml id=xmldso src=person .xml& gt;< /xml& gt;
<script>
xmldoc=document.all.xmldso
- Lấy nút gốc của XML