XML 属性与元素

标签 xml schema modeling

这个问题在这里已经有了答案:





XML attribute vs XML element

(20 个回答)


7年前关闭。




什么时候应该使用 XML 属性,什么时候应该使用 XML 元素?

例如

<customData>
  <records>
    <record name="foo" description="bar" />
  </records>
</customData>

或者
<customData>
  <records>
    <record>
      <name>foo</name>
      <description>bar</description>
    </record>
  </records>
</customData>

最佳答案

IBM 网站上有一篇题为“Principles of XML design: When to use elements versus attributes”的文章。

虽然似乎没有很多硬性规定,但帖子中提到了一些很好的指导方针。例如,建议之一是在您的数据不得针对空白进行规范化时使用元素,因为 XML 处理器可以规范化属性内的数据,从而修改原始文本。

我发现自己在开发各种 XML 结构时不时会引用这篇文章。希望这对其他人也有帮助。

编辑 - 从网站:

核心内容原理

如果您认为相关信息是在 XML 中表达或传达的基本 Material 的一部分,请将其放入元素中。对于人类可读的文档,这通常意味着要传达给读者的核心内容。对于面向机器的记录格式,这通常意味着直接来自问题域的数据。如果您认为信息是主要通信的外围信息或附带信息,或者纯粹用于帮助应用程序处理主要通信,请使用属性。这避免了用辅助 Material 弄乱核心内容。对于面向机器的记录格式,这通常意味着来自问题域的主要数据上的特定于应用程序的符号。

例如,我见过许多 XML 格式,通常是企业内部开发的,其中文档标题被放置在一个属性中。我认为标题是文档交流的一个基本部分,它应该始终位于元素内容中。另一方面,我经常看到将内部产品标识符作为元素放入产品描述性记录中的情况。在其中一些情况下,属性更合适,因为特定的内部产品代码对文档的大多数读者或处理者来说不是主要兴趣,尤其是当 ID 的格式很长或难以理解时。

您可能听说过原则数据在元素中,元数据在属性中。上面两段确实表达了相同的原则,只是用了更深思熟虑和更少模糊的语言。

结构化信息原理

如果信息以结构化形式表达,特别是如果结构可以扩展,请使用元素。另一方面:如果信息表示为原子标记,请使用属性。元素是在 XML 中表达结构的可扩展引擎。几乎所有 XML 处理工具都是围绕这一事实设计的,如果您将结构化信息正确地分解为元素,您会发现您的处理工具补充了您的设计,从而提高了生产力和可维护性。属性旨在表达元素中表示的信息的简单属性。如果您通过将结构化信息硬塞进属性来反对 XML 的基本体系结构,您可能会获得一些似是而非的简洁性和便利性,但您可能会付出维护成本。

日期就是一个很好的例子:日期具有固定的结构,通常充当单个标记,因此作为属性(最好用 ISO-8601 表示)是有意义的。另一方面,代表个人姓名是我看到这个原则让设计师感到惊讶的一个例子。我经常在属性中看到名字,但我一直认为个人名字应该在元素内容中。人名具有惊人的可变结构(在某些文化中,您可能会通过省略敬语或假设名称各部分的顺序而引起混淆或冒犯)。个人名称也很少是原子标记。例如,有时您可能希望按名字搜索或排序,有时按姓氏进行搜索或排序。我应该指出,将全名硬塞到单个元素的内容中与将其放在属性中一样有问题。

关于XML 属性与元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/152313/

相关文章:

XML 架构检查错误

mysql - 代表单个食品订单中的多个菜肴的最佳数据结构/数据库架构是什么?

properties - OWL:为什么数据属性不能是 InverseFunctionalProperty?

java - @ManyToMany 额外列

c# - 在 C# 中,有没有一种方法可以在不先加载 XML 节点的情况下将其添加到磁盘上的文件中?

xml - Ruby XML Builder 的特殊字符

java - 沿 TextView 宽度的波纹效果

java - TOMCAT 在更新 web.xml 时显示 java.lang.IndexOutOfBoundsException

python - 使用 Marshmallow 的嵌套模式自动字典键解析

functional-programming - 建模/记录功能程序