XML 属性
XML 属性
Section titled “XML 属性”XML 元素可以拥有属性(attribute),属性为元素提供了额外的信息。
属性定义在元素的开始标签(start tag)内,由一个名称-值(name-value)对组成。
属性直接在元素的开始标签内指定:
<file type="image/gif" size_kb="15"> computer.gif</file>
<link rel="stylesheet" href="styles.css"/>在第一个示例中,type 和 size_kb 是 file 元素的属性。在第二个示例中,rel 和 href 是空 link 元素的属性。
属性通常提供元数据(metadata)(关于元素内容的数据)或配置细节,而不是主要内容本身。
属性值的引用
Section titled “属性值的引用”与一些旧的 HTML 做法不同,XML 中的属性值必须总是用引号括起来。
你可以使用单引号(')或双引号(")。选择其中一种并保持一致。
使用双引号:
<person gender="female">使用单引号:
<person gender='female'>如果属性值本身需要包含用于括起的引号字符,你必须使用另一种类型的引号或使用字符实体(character entity):
使用交替的引号:
<gangster name='George "Shotgun" Ziegler'>使用字符实体(" 代表 ",' 代表 '):
<gangster name="George "Shotgun" Ziegler">属性与子元素:使用指南
Section titled “属性与子元素:使用指南”一个常见的问题是何时将信息存储为属性,何时存储为子元素。没有单一的严格规则,但这里有一些广泛接受的指南:
考虑以下两种表示相同信息的方式:
使用属性表示 gender:
<person gender="female"> <firstname>Anna</firstname> <lastname>Smith</lastname></person>使用元素表示 gender:
<person> <gender>female</gender> <firstname>Anna</firstname> <lastname>Smith</lastname></person>何时优先使用属性:
- 元数据(Metadata): 关于元素内容的信息,而不是内容本身(例如,
id、status、unit、language)。 - 简单、原子值(Atomic Value): 不包含子结构或多个值的数据。
- 标识符(Identifier): 用于引用元素的唯一 ID(标准做法是使用
xml:id)。 - 配置标志(Configuration Flag): 控制行为的简单布尔值或枚举值。
何时优先使用子元素:
- 核心内容(Core Content): 元素表示的主要数据。
- 结构化数据(Structured Data): 具有内部结构的信息(例如,包含街道、城市、邮政编码的地址)。
- 多个值(Multiple Values): 如果一个项可以出现多次(例如,多个电话号码)。
- 可读性/可维护性(Readability/Maintainability): 如果在属性中放置过多信息导致开始标签过长且难以阅读。
- 未来扩展潜力(Future Expansion): 元素通常更容易在以后通过添加更多子元素来扩展。
示例:表示日期
Section titled “示例:表示日期”选项 1:日期作为属性(简单,但结构性较差)
<note date="2024-07-01"> ...</note>选项 2:日期作为简单元素(分离更清晰)
<note> <date>2024-07-01</date> ...</note>选项 3:日期作为结构化元素(最灵活,最容易解析特定部分)
<note> <date> <year>2024</year> <month>07</month> <day>01</day> </date> ...</note>最佳选择通常取决于具体上下文以及数据将如何使用。
使用属性表示元数据和 ID
Section titled “使用属性表示元数据和 ID”属性的一个主要用例是存储元数据,例如唯一标识符(unique identifier)。用于此的标准属性是 xml:id。
<?xml version="1.0" encoding="UTF-8"?><messages xmlns:xml="http://www.w3.org/XML/1998/namespace"> <note xml:id="msg501"> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> <note xml:id="msg502"> <to>Jani</to> <from>Tove</from> <heading>Re: Reminder</heading> <body>I will not</body> </note></messages>在这里,xml:id 为每个便签(note)提供了一个唯一标识符,它是关于便签的数据,而不是消息内容本身的一部分。这是属性的恰当用法。
总而言之,明智地使用属性表示元数据和简单配置,而优先使用元素表示核心内容和结构化数据。