IBM 的网站上有一篇题为“ XML 设计原则:何时使用元素与属性”的文章。
尽管似乎没有很多硬性规定,但帖子中提到了一些很好的指导方针。例如,当您的数据不能针对空白进行规范化时,建议之一是使用元素,因为 XML 处理器可以规范化属性内的数据,从而修改原始文本。
在开发各种 XML 结构时,我发现自己时常参考这篇文章。希望这对其他人也有帮助。
编辑 - 从网站:
核心内容原则
如果您认为所讨论的信息是在 XML 中表达或交流的基本材料的一部分,请将其放在一个元素中。对于人类可读的文档,这通常意味着正在传达给读者的核心内容。对于面向机器的记录格式,这通常意味着直接来自问题域的数据。如果您认为信息是主要通信的外围信息或附带信息,或者纯粹是为了帮助应用程序处理主要通信,请使用属性。这避免了核心内容与辅助材料的混乱。对于面向机器的记录格式,这通常意味着对来自问题域的主要数据的应用程序特定的符号。
例如,我见过许多 XML 格式,通常是企业内部开发的,其中文档标题放置在属性中。我认为标题是文档交流的基本组成部分,它应该始终包含在元素内容中。另一方面,我经常看到将内部产品标识符作为元素放入产品描述性记录中的情况。在其中一些情况下,属性更合适,因为特定的内部产品代码对于文档的大多数读者或处理者来说不是主要兴趣,尤其是当 ID 的格式非常长或难以理解时。
您可能听说过元素中的主要数据,属性中的元数据。上面两段确实表达了相同的原则,但语言更刻意,更少模糊。
结构化信息原理
如果信息以结构化的形式表达,特别是如果该结构是可扩展的,则使用元素。另一方面:如果信息表示为原子标记,则使用属性。元素是在 XML 中表达结构的可扩展引擎。几乎所有 XML 处理工具都是围绕这一事实设计的,如果您将结构化信息正确地分解为元素,您会发现您的处理工具补充了您的设计,从而提高了生产力和可维护性。属性旨在表达元素中表示的信息的简单属性。如果您通过将结构化信息硬塞到属性中来反对 XML 的基本体系结构,您可能会获得一些似是而非的简洁性和便利性,但您可能会付出维护成本。
日期就是一个很好的例子:日期具有固定的结构并且通常充当单个标记,因此它作为一个属性是有意义的(最好用 ISO-8601 表示)。另一方面,代表个人姓名是我看到这个原则让设计师感到惊讶的一个案例。我经常在属性中看到名称,但我一直认为个人名称应该出现在元素内容中。人名具有令人惊讶的可变结构(在某些文化中,您可能会通过省略敬语或假设名称部分的顺序而引起混淆或冒犯)。个人名字也很少是原子标记。例如,有时您可能希望按名字搜索或排序,有时按姓氏搜索或排序。我应该指出,将全名硬塞到单个元素的内容中与将其放入属性中一样有问题。