XML入門的小介紹
一、小格式
格式自是不用說了。稍有基礎的人應該看懂如下最簡單的表示:
<?xml version="1.0"?>
<address>
<name>
<title>cc</title>
<first-name>
cc
</first-name>
<last-name>
McGoon
</last-name>
</name>
<street>
1401 Main Street
</street>
</address>
二、定義文件規範
但實際上,我們在寫上面程式碼的時候要先定義XML的格式(語法規則),就好像要先生命變數再給變數賦值一樣。
一種語法規則是DTD,DTD 語法不同於普通的 XML 語法。
另一種是XML Schema ,相對比較複雜的定義,XML Schema本身就是XML。
這是DTD的格式:
<!-- address.dtd -->
<!ELEMENT address (name, street)>
<!ELEMENT name (title? first-name, last-name)>
<!ELEMENT title (PCDATA)>
<!ELEMENT first-name (PCDATA)>
<!ELEMENT last-name (PCDATA)>
<!ELEMENT street (PCDATA)>
這是XML Schema的格式:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="address">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="name"/>
<xsd:element ref="street"/>
<xsd:element ref="city"/>
<xsd:element ref="state"/>
<xsd:element ref="postal-code"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="name">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="title" minOccurs="0"/>
<xsd:element ref="first-Name"/>
<xsd:element ref="last-Name"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="first-Name" type="xsd:string"/>
<xsd:element name="last-Name" type="xsd:string"/>
<xsd:element name="street" type="xsd:string"/>
</xsd:schema>
看起來啊XML Schema是很強大的定義語言。裡面可以包含一些構造XML的邏輯,這裡先不說了,大體上先有個印象吧。實際上一般的應用使用DTD足以了,我是比較喜歡用DTD定義。
以上的這些定義語句,放在XML檔案的最上部分。例如:
<?xml version="1.0"?>
<!-- address.dtd -->
<!ELEMENT address (name, street)>
<!ELEMENT name (title? first-name, last-name)>
<!ELEMENT title (PCDATA)>
<!ELEMENT first-name (PCDATA)>
<!ELEMENT last-name (PCDATA)>
<!ELEMENT street (PCDATA)>
<address>
<name>
<title>cc</title>
<first-name>
cc
</first-name>
<last-name>
McGoon
</last-name>
</name>
<street>
1401 Main Street
</street>
</address>
三、解析器
XML定義完成以後,要想在java中使用,必須用解析器。解析器有標準的JDOM,SAX。
JDOM 的主要特性是它極大地減少了編寫的程式碼數量。網上有jar包下載,例如jive論壇中的配置檔案就有使用。仔細看看jive中如何使用Jdom的會比較受啟發。我確實把jive中的那部分抽象提取出來了,作為自己的配置檔案讀取器。
四、疑點
名稱空間-當你的XML釋出在網際網路上後,你自己定義的address會跟其他很多人的address重複。怎麼區分呢?
<?xml version="1.0"?>
<customer_summary
xmlns:addr="http://www.xyz.com/addresses/"
xmlns:books="http://www.zyx.com/books/"
xmlns:mortgage="http://www.yyz.com/title/"
>
... <addr:name><title>Mrs.</title> ... </addr:name> ...
... <books:title>Lord of the Rings</books:title> ...
... <mortgage:title>NC2948-388-1983</mortgage:title> ...
最後要指出的是:名稱空間定義中的字串僅僅是字串。對,這些字串看似 URL,其實不是。您可以定義 xmlns:addr="mike",那也是有效的。名稱空間唯一的重要性在於其唯一性;這就是為什麼大多數名稱空間定義看起來象 URL 的原因。XML 解析器不會到http://www.zyx.com/books/ 去搜尋 DTD 或模式,它只是把那個文字作為字串使用。這有些令人困惑,但名稱空間就是這樣工作的。
還是理解不出名稱空間的意義有多大!?誰能說一下啊??
<p class="indent">
|