在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)應當存儲為屬性,而數據本身應當存儲為元素。