<img src="computer.gif"><a href="demo.html">
屬性通常提供不屬於資料組成部分的資訊。在下面的實例中,文件類型與資料無關,但是對需要處理這個元素的軟體來說卻很重要:
<file type="gif">computer.gif</file>
屬性值必須被引號包圍,不過單引號和雙引號皆可使用。例如一個人的性別,person 元素可以這樣寫:
<person sex="female">
或者這樣也可以:
<person sex='female'>
如果屬性值本身包含雙引號,您可以使用單引號,就像這個實例:
<gangster name='George "Shotgun" Ziegler'>
或者您可以使用字元實體:
<person sex="female"><firstname>Anna</firstname><lastname>Smith</lastname></person>
<person><sex>female</sex><firstname>Anna</firstname><lastname>Smith</lastname></person>
在第一個實例中,sex 是一個屬性。在第二個實例中,sex 是一個元素。這兩個實例都提供相同的資訊。
沒有什麼規矩可以告訴我們什麼時候該使用屬性,而什麼時候該使用元素。我的經驗是在HTML 中,屬性用起來很便利,但在XML 中,您應該盡量避免使用屬性。如果資訊感覺起來很像數據,那麼請使用元素吧。
下面的三個XML 文件包含完全相同的資訊:
第一個實例中使用了date 屬性:
<note date="10/01/2008"><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body ></note>
在第二個實例中使用了date 元素:
<note><date>10/01/2008</date><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend! </body></note>
第三個實例中使用了擴充的date 元素(這是我的最愛):
<note><date><day>10</day><month>01</month><year>2008</year></date><to>Tove</to><from>Jani</from> <heading>Reminder</heading><body>Don't forget me this weekend!</body></note>
因使用屬性而引起的一些問題:
屬性不能包含多個值(元素可以)
屬性不能包含樹狀結構(元素可以)
屬性不容易擴展(為未來的變化)
屬性難以閱讀和維護。請盡量使用元素來描述資料。而僅使用屬性來提供與資料無關的資訊。
不要做這樣的蠢事(這不是XML 應該被使用的方式):
<note day="10" month="01" year="2008"to="Tove" from="Jani" heading="Reminder"body="Don't forget me this weekend!"></note>
有時候會向元素分配ID 引用。這些ID 索引可用來識別XML 元素,它運作的方式與HTML 中id 屬性是一樣的。這個實例向我們示範了這種情況:
<messages><note id="501"><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body> </note><note id="502"><to>Jani</to><from>Tove</from><heading>Re: Reminder</heading><body>I will not</body></note></messages>
上面的id 屬性只是一個標識符,用來標識不同的便籤。它並不是便籤資料的組成部分。
在此我們極力向您傳遞的理念是:元資料(有關資料的資料)應儲存為屬性,而資料本身應儲存為元素。
以下是總結性的XML 屬性需要遵循的規則:
屬性名稱不能在同一起始標籤或空元素標籤中出現一次
一個屬性必須使用屬性表聲明的文檔類型定義(DTD)的聲明
屬性值不能包含直接或間接的實體引用外部實體
任何實體的替換文字稱為直接或間接的屬性值不能包含任何小於號