上一节:
下一节:

  DTD 元素属性比较

  • 定义和使用

    在 XML 中,没有关于何时使用属性以及何时使用子元素的规则。
    数据可以存储在子元素或属性中。
    看下面的例子:
    <person sex="female">
      <firstname>Anna</firstname>
      <lastname>Smith</lastname>
    </person>
    <person>
      <sex>female</sex>
      <firstname>Anna</firstname>
      <lastname>Smith</lastname>
    </person>
    在第一个示例中,性别是一种属性。 最后,sex 是 child 的元素。 这两个示例提供了相同的信息。
    没有关于何时使用属性以及何时使用子元素的规则。 经验总结是属性在HTML中很方便,但是在XML中,您应尽量避免使用它们;如果信息感觉像数据,请使用子元素。
  • 我最喜欢的方式

    我喜欢将数据存储在子元素中。
    以下三个 XML 文档包含完全相同的信息:
    在第一个示例中使用 date 属性:
    <note date="12/08/2020">
      <to>Tove</to>
      <from>Jani</from>
      <heading>Reminder</heading>
      <body>这个周末别忘了我!</body>
    </note>
    在第二个示例中使用 date 元素:
    <note>
      <date>12/08/2020</date>
      <to>Tove</to>
      <from>Jani</from>
      <heading>Reminder</heading>
      <body>这个周末别忘了我!</body>
    </note>
    在第三个中使用扩展日期元素:
    <note>
      <date>
        <day>12</day>
        <month>11</month>
        <year>2002</year>
      </date>
      <to>Tove</to>
      <from>Jani</from>
      <heading>Reminder</heading>
      <body>这个周末别忘了我!</body>
    </note>
  • 避免使用属性?

    您应该避免使用属性吗?
    属性存在的一些问题是:
    • 属性不能包含多个值(子元素可以)
    • 属性不容易扩展(用于将来的更改)
    • 属性不能描述结构(子元素可以)
    • 程序代码更难以操纵属性
    • 属性值不容易针对DTD进行测试
    如果将属性用作数据的容器,则最终会导致文档难以阅读和维护;尝试使用元素来描述数据;仅使用属性来提供与数据无关的信息。
    不要这样结束(这不是应该使用XML的方式):
    <note day="12" month="08" year="2020"
      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>这个周末别忘了我!</body>
    </note>
    
    <note id="p502">
      <to>Jani</to>
      <from>Tove</from>
      <heading>Re: Reminder</heading>
      <body>我不会!</body>
    </note>
    </messages>
    这些示例中的ID只是一个计数器或唯一标识符,用于标识XML文件中的不同注释,而不是注释数据的一部分。
    这里要说的是元数据(有关数据的数据)应作为属性存储,而数据本身应作为元素存储。
上一节:
下一节: