XML基礎入門(一)

基本XML<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

討論xml文件以前我們先看一個例子:

<person>

  Alan Turing

</person>

這就是一個標記完好的xml文件,<person></person>分別是開始標記和結束標記。

l        開始標記:以<開始,以>結束,中間是標記名稱。

l        結束標記:以</開始,以>結束,中間是標記名稱。

注意:開始標記和結束標記對應的標記名稱必須相同,但是具體使用什麼作爲名稱就沒有規定,這個和html是不同的(html的標記名是若干個確定的),你可以使用person來標記一個人,使用cat來標記一隻貓。

標記中間的Alan Turing就是數據,其中AlanTuring之間的空格也是數據,也就是說標記裏面的數據中的空格不會別忽略。

有時候我們也許需要沒有任何數據的元素(元素指開始標記和結束標記之間的內容,包含開始標記和結束標記,比如上面提到的例子就是一個元素),例如下面的:

         <person></person>

這是一個空標記,但是我們有另外更簡捷的標記表示空標記:

         <person/>

注意:xml是區分大小寫的,這與html不同。<Person><PERSON>是不同標記,比如你有一個元素以<person>開始,那麼你就不能使用</ Person >作爲結束標記。

       上面的例子指含有一個元素,我們現在給出一個複雜點的例子,然後給出xml樹的概念。

  <name>

    <first_name>Alan</first_name>

    <last_name>Turing</last_name>

  </name>

  <profession>computer scientist</profession>

  <profession>mathematician</profession>

  <profession>cryptographer</profession>

</person>

顯然上面的例子外層仍然是一個person元素,但是與先前不同的是這個元素含有4個子元素,1name元素和3profession元素。我們稱personname的父元素,顯然他也是profession的父元素,同樣我們可以看到namefirst_namelast_name的父元素。

上面的例子我們發現標記進行了嵌套,這是允許的。但是重疊標記是非法的,比如:
<strong><em>this common example from HTML</strong></em>

應該是:

<strong><em>this common example from HTML</em></strong>

根據上面的例子中父子元素的關係以及注意到任何xml文件只能且只能含有一個根元素(也就是沒有父元素的元素)看起來很象一個樹,如圖:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

       現在我們給出一個混合數據的xml文件的例子,

 

 

 

上面的例子我不作解釋,但是你要知道他是一個合法的xml文件,也就是說標記和內容可以混排。但是這樣格式的xml文件在程序的處理上就很麻煩,所以不推薦使用。

接着我們談談屬性(Attributes)。看例子:

<person born="<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1912-06-23" died="1954-06-07">

  Alan Turing

</person>

其中紅色標記的borndied就是屬性。其中born是屬性名,1912-06-23是屬性值,屬性值是用筐起來的,當然也可以用單引號筐起來。

<person died = '1954-06-07'  born = '1912-06-23' >

  Alan Turing

</person>

使用單引號的作用是你可以在屬性的值裏面添加雙引號。

    到這裏我們發現一個問題:

<person>

  <name first="Alan" last="Turing"/>

  <profession value="computer scientist"/>

  <profession value="mathematician"/>

  <profession value="cryptographer"/>

</person>

這個例子中我在person元素裏面添加了4個子元素,每個元素有自己的屬性,以及對應的值,然後這4個元素都是空元素。對照前面我們給出的對應的例子,你覺得是把值限定在屬性裏面好還是直接放在標記之間好呢?這是一個爭論不休的問題,我的看法是由你自己定,看哪個爽就使用哪個。但是要注意對同一個元素,他不能同時含有幾個相同名稱的屬性。

<person born="1912-06-23" born="1954-06-07">

  Alan Turing

</person>

上面的是非法的xml文件

接着我們看看特殊字符帶來的問題。由於<>是作爲標記使用的,所以一般情況下我們不能在數據部分直接包含<>,而是使用&lt;&gt; ,其實這個問題在html裏面就有了,處理方式也是和html一樣,比如&我們使用&amp; ,雙引號使用&quot;等。

再看看註釋,方法和html是一樣的:

<!-- 左邊的是註釋開始標記,右邊的是結束標記 -->

但是注意註釋的內容不能包含  -- ,同時註釋裏面的任何標記都會被忽略!同時需要注意的是註釋不能出現在一個元素的標記裏面。

 

現在我們從整體上來看xml

1. xml聲明

所有的xml文檔可能(也應該!)由一個xml聲明(XML Declaration)開始。雖然文檔聲

明使用的是同指令處理類似的語法,但從技術上講,根據X M L推薦標準它們並不是一回事,因

爲聲明是xml中的保留部分。

<?xml version="1.0" encoding="ASCII" standalone="yes"?>

<person>

  Alan Turing

</person>

如果包括X M L聲明,它必須處在文檔最前面—前面不允許有任何空白或註釋。嚴格地講,

X M L當中這種聲明並不是必須的,但我們後面會看到,當處理文檔時,它確實會起到一些優化的作用。

這些屬性已經在XML 1.0規範中做出了定義:

? version—不能省略;值必須爲“ 1 . 0;該屬性用來保證對X M L未來版本的支持。

? e n c o d i n g—可選;值必須是一種合法的字符編碼,例如“ U T F - 8、“U T F - 1 6或者

I S O - 8 8 5 9 - 1”(即L a t i n - 1字符編碼)。所有X M L解析器都要求至少支持U T F - 8U T F - 1 6

如果沒有包含這個屬性,就假設是“ U T F - 8”或“ U T F - 1 6”編碼,這取決於開始的“< ? x m l”字符串的格式。

? s t a n d a l o n e—可選;值必須是“ y e s”或“n o”;如果是“y e s”就意味着所有必須的實體聲明都包含在文檔中,如果是“ n o”就意味着需要外部的D T DDTD將在後面介紹。

 

最後給出好的xml的相關要求:

1.      每個開始標記必須有一個結束標記匹配

2.      標記可以嵌套但是不能重疊

3.      每個xml文件只有一個根元素

4.      一個元素不能含有兩個相同名字的屬性

5.      註釋不能出現在元素標記裏面

6.      沒有<或者&等類似的字符出現在元素值或者屬性值裏面

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章