最新的Web開發教程
 

XML元素與屬性


在XML中,不存在有關何時使用的屬性,以及何時使用子元素的規則。


元素與屬性的使用

數據可以存儲在子元素或屬性。

看看這些例子:

<person sex="female">
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

<person>
  <sex>female</sex>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

在第一例性是一個屬性。 在過去,性是一個子元素。 兩個例子都提供相同的信息。

沒有關於何時使用屬性,以及何時使用子元素的規則。 我的經驗是屬性是方便在HTML中,但在XML中,你應該盡量避免。 使用子元素,如果信息感覺像數據。


我最喜歡的方式

I like to store data in child elements.

下面的三個XML文檔包含完全相同的信息:

一個日期屬性是在第一實施例中使用:

<note date="12/11/2002">
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

一個日期元素在第二個例子中使用:

<note>
  <date>12/11/2002</date>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

擴展的日期元素在第三個使用: (THIS IS MY FAVORITE)

<note>
  <date>
    <day>12</day>
    <month>11</month>
    <year>2002</year>
  </date>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

避免使用屬性?

應避免使用屬性?

一些與屬性的問題是:

  • 屬性不能包含多個值(child elements can)
  • 屬性不容易擴展(for future changes)
  • 屬性不能描述結構(child elements can)
  • 屬性比較難被程序代碼操作
  • 屬性值是不容易的,以測試針對DTD

如果你使用屬性作為數據容器,你最終是難以閱讀和維護文檔。 盡量使用elements來描述數據。 僅使用屬性來提供不相關的數據的信息。

最終不會像這樣(this is not how XML should be used)

<note day="12" month="11" year="2002"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note>

一個例外,我的屬性規則

規則總是有例外。

我的關於屬性的規則也有一個例外:

有時候,我分配到的元素ID引用。 這些ID引用可以用來訪問XML元素在大致相同的方式名稱或ID,在HTML屬性。 這個例子說明了這一點:

<messages>
<note id="p501">
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

<note id="p502">
  <to>Jani</to>
  <from>Tove</from>
  <heading>Re: Reminder</heading>
  <body>I will not!</body>
</note>
</messages>

在這些實施例中的ID僅僅是一個計數器或一個唯一的標識符,以識別該XML文件中的不同的音符,而不是音符數據的一部分。

我想在這裡說的是,元數據(data about data)應當存儲為屬性,而數據本身應當存儲為元素。