XML 元素 對比 屬性
在 XML 中,沒有關於何時使用屬性以及何時使用子元素的規則。
元素與屬性的使用
資料可以儲存在子元素中,也可以儲存在屬性中。
請看這些示例
<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 文件包含完全相同的資訊
第一個示例使用日期屬性
<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>
第三個示例使用擴充套件的日期元素:(這是我最喜歡的方式)
<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>
避免使用屬性?
您應該避免使用屬性嗎?
屬性的一些問題是
- 屬性不能包含多個值(子元素可以)
- 屬性不易擴充套件(用於未來的更改)
- 屬性不能描述結構(子元素可以)
- 屬性更難透過程式程式碼進行操作
- 屬性值不容易針對 DTD 進行測試
如果將屬性用作資料容器,則最終會得到難以閱讀和維護的文件。嘗試使用 元素 來描述資料。僅使用屬性來提供與資料無關的資訊。
不要變成這樣(這不是 XML 的使用方式)
<note day="12" month="11" year="2002"
to="Tove" from="Jani" heading="Reminder"
body="別忘了這個週末我!">
</note>
我的屬性規則的一個例外
規則總有例外。
我的屬性規則有一個例外
有時我將 ID 引用分配給元素。這些 ID 引用可以用來訪問 XML 元素,就像 HTML 中的 NAME 或 ID 屬性一樣。此示例演示了這一點
<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: 提醒</heading>
<body>我不會!</body>
</note>
</messages>
這些示例中的 ID 只是一個計數器,或一個唯一的識別符號,用於識別 XML 檔案中的不同註釋,而不是註釋資料的一部分。
我在這裡想說的是,元資料(關於資料的資料)應該儲存為屬性,而資料本身應該儲存為元素。