XML入門的小介紹

cc發表於2003-05-31

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

相關文章