屬性是 XML 元素的一部分。一個元素可以有多個唯一屬性。屬性提供了 XML 元素的更多信息。更准確地說,它們定義了元素的屬性(property)。XML 屬性始終是一個_名-值_對。
語法
XML 屬性語法如下:
XML/HTML Code復制內容到剪貼板
- <element-name attribute1 attribute2 >
- ....content..
- </element-name>
其中 attribute1 和 attribute2 具有以下形式:
XML/HTML Code復制內容到剪貼板
- name = "value"
value 必須使用雙引號(" ")或單引號(' ')包裹。這裡 attribute1 和 attribute2 都是唯一的屬性標簽。
屬性被用來給元素添加一個唯一標簽,分類標簽,添加布爾值屬性或者關聯一些字符串數據。下面的示例演示了如何使用屬性:
XML/HTML Code復制內容到剪貼板
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE garden [
- <!ELEMENT garden (plants)*>
- <!ELEMENT plants (#PCDATA)>
- <!ATTLIST plants category CDATA #REQUIRED>
- ]>
- <garden>
- <plants category="flowers" />
- <plants category="shrubs">
- </plants>
- </garden>
屬性被用來區分同名元素。當我們不希望為每種情況都創建一個新元素時。我們可以使用屬性添加更多的細節以區分兩個或多個類似的元素。
在上面的例子中,我們通過包含 category 屬性分類了植物,並且給每個元素分配了不同的值。因此我們就有了兩個 plants 類別,一個是 flowers,另一個是 color。這樣我們都得到了兩個帶有不同屬性的 plants 元素。
你還可以看到我們在 XML 的開頭定義了這個屬性。
屬性類型
下表列出了屬性的類型:
屬性類型 |
描述 |
StringType
接受字符串值作為值。CDATA 是一個 StringType。CDATA 也是字符數據。這也意味著任何非標記字符都是合法的屬性。
TokenizedType
這是一個限制類型。語法中指出的有效性約束會在屬性值規范化之後應用。下面是 TokenizedType 屬性:
- ID:用來指定元素是唯一的。
- IDREF:用來引用一個ID,該ID命名了另一個元素。
- IDREFS:用來引用一個元素的所有 IDs。
- ENTITY:指示屬性將表示文檔中的一個外部實體。
- ENTITYS:指示屬性將表示文檔中的一個外部實體。
- NMTOKEN:類似限制哪些數據可以是屬性一部分的CDATA。
- NMTOKENS:類似限制哪些數據可以是屬性一部分的CDATA。
EnumeratedType
在它的聲明中包含一個預定義的值列表。在這裡,它必須分配一個值。有兩種類型的枚舉屬性:
- NotationType:它聲明元素在 XML 文檔的某些地方將被引用為一個 NOTATION 聲明。
- Enumeration:枚舉允許我們定義一個特定值列表,屬性值必須與之匹配。
元素屬性規則
以下是定義屬性需要遵循的規則:
同一起始標簽或者空元素標簽中屬性名只能出現一次。
屬性必須使用屬性屬性列表聲明(Attribute-List Declaration)定義在文檔類型定義(DTD)中。
屬性值中不能直接或者間接引用包含外部實體。
屬性值中被直接或間接提及的任何實體的替代文本都不能包含小於號(<)。
將數據存儲在子元素中
一個案例中使用了日期屬性:
XML/HTML Code復制內容到剪貼板
- <note date="12/11/2002">
- <to>Tove</to>
- <from>Jani</from>
-
- <heading>Reminder</heading>
- <body>Don't forget me this weekend!</body>
- </note>
第二個案例中使用了日期元素:
XML/HTML Code復制內容到剪貼板
- <note>
- <date>12/11/2002</date>
-
- <to>Tove</to>
- <from>Jani</from>
- <heading>Reminder</heading>
- <body>Don't forget me this weekend!</body>
- </note>
第三個案例中使用了擴展日期元素(這是我們常用的方法):
XML/HTML Code復制內容到剪貼板
- <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>