xml - 对 XML 中的列表使用容器元素有什么好处?

标签 xml coding-style

在指定包含项目列表的 XML 格式时,通常至少有两种不同的样式可供选择。一个使用列表的容器元素,另一个不使用。例如:如果指定一个包含多个页面的文档,可以这样做:

<document>
  <title>...</title>
  <pages>
    <page>...</page>
    <page>...</page>
  </pages>
</document>

或者只是这样:

<document>
  <title>...</title>
  <page>...</page>
  <page>...</page>
</document>

每种方法的优缺点是什么?

我能想到的有:

  • 前者允许表达一个明确的空列表(如果列表本身是一个概念实体则很有用)
  • 前者在错误恢复方面可能稍微好一些(尽管如果使用 XSD 验证那应该无关紧要)
  • 后者更简洁
  • 后者不需要区分添加第一个元素还是任何后续元素(不管理容器元素)

编辑

澄清一下:我假设 pages 元素没有任何意义。里面没有其他元素,没有附加属性,很难找到除“pages”、“pageList”或类似名称之外的任何其他名称。

编辑 2

我找到了 another entry关于同一个问题。虽然答案都是针对容器/父元素的,但似乎归结为将容器视为实际对象,或者假设通过拥有额外的容器元素更容易对模式建模(我倾向于不同意)。

最佳答案

在您给出的示例中,差别很小,但是这两个示例实际上代表了完全不同的事物:

  • 第二个例子是一个有标题和很多页的文档
  • 然而,第一个示例是一个带有标题页面集合的文档

正如我所说,在您的示例中,差异是多余的,因此很容易被忽略,因此请考虑以下细微变化:

<document>
  <title>...</title>
  <contents>
    <page>...</page>
    <page>...</page>
  </contents>
  <chapter name="chapterName">
    <page>...</page>
    <page>...</page>
  </chapter>
  <index>
    <page>...</page>
    <page>...</page>
  </index>
</document>

在这种情况下,文档有许多 页面集合。 (当然,有些人可能会争辩说您同样可以用不同的方式表示):

<document>
  <title>...</title>
  <page section="contents">...</page>
  <page section="chapter1">...</page>
  <page section="index">...</page>
</document>

但是,您将不得不更改 page 元素,在上面的示例中,我认为情况更糟(为什么要page必须知道它包含什么?)

另一个微妙的考虑是,元素的排序通常意味着:

<document>
  <page>...</page>
  <title>...</title>
  <page>...</page>
  <page>...</page>
</document>

在这个例子中,我们(无论出于何种原因)在标题之前有一个页面——显然在使用集合时是不可能的。另一个考虑因素是每个集合也可能(例如)有一个 title

我的观点是,它们代表不同的事物 - 这并不是真正的赞成与反对的情况,而是选择与您的数据模型最匹配的格式的情况。

关于xml - 对 XML 中的列表使用容器元素有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3713609/

相关文章:

xml - 使用 XML::Simple 解析 XML 的 Perl 脚本

python - 将项目根目录添加到 sys.path 是一个好习惯吗?

mysql 我应该在 mysql 查询中使用撇号吗?

php - 由带有换行符的 DOMDocument 生成的 XML

xml - XSD 限制 - whiteSpace "replace",但不允许有空格

javascript - 将我的 XML 文件的内容加载到 Javascript 数组中的脚本

java - 如何将第一个文件中的标签导入到第二个文件中的所有标签

latex - 创建自己的BibTeX样式还是自定义现有样式?

java - Java 类文件中 main() 方法的首选位置

java - 我应该如何处理第三方输入/输出流?