【问题标题】:XML record count attribute or elementXML 记录计数属性或元素
【发布时间】:2011-10-26 10:43:19
【问题描述】:

虽然我对 XML 和 XML Schema 知之甚少,但我已经很久没有使用过它了,也从来没有特别擅长使用它。 因此,我们将非常感谢您对以下内容的一点帮助。

我们目前收到分隔的数据文件,并希望切换到通过 XML 架构验证的 XML 文件。 当前分隔文件包含一个包含记录计数的尾部记录。

例如:TRL0000155

在 XML 版本中,是否应将此记录计数作为主要 <data_file> 元素的属性包含在内

 <data_file record_count="155">
    <record>
       record XML...
    </record>
    <record>
       record XML...
    </record>
    ...
 </data_file>

或作为&lt;data_file&gt;的子元素

<data_file>
   <record_count>155</record_count>
   <record>
      record XML...
   </record>
   <record>
      record XML...
   </record>
   ...
<data_file>

或者也许我做错了,你可以给我一个关于完全替换记录计数的正确方法的提示。

我确实认识到元素和属性之间的区别,但在这种情况下,我希望这是许多人以前遇到过的问题,并且可以很好地解释为什么一个是首选解决方案。

FWIW 我更倾向于属性解决方案,因为计数是关于 &lt;data_file&gt; 元素的元数据,但我很乐意遵循更多专家的指导。

提前谢谢...

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

    由于每条记录都有一个&lt;record&gt; 元素,因此技术上不需要明确记录计数。当然,您仍然可以拥有它,例如,如果它有助于提高性能。但另一方面,它引入了必须与&lt;record&gt;元素的数量保持一致的问题。

    如果您决定存储记录数,那么您的两种方法(属性和元素)都可以。主要区别在于,当您(if 您)构建文件的字符串内容时,属性将被忽略,而元素中的文本节点则不会。所以计数会出现在第二种情况下,但不会出现在第一种情况下。

    如果您可以将 XPath 应用于 XML 文件,那么确定记录数很容易;那就是count(/data_file/record)。在这种情况下,确实不需要显式存储值。

    【讨论】:

    • 皮带和大括号记录计数是为了确保发件人认为他们发送的内容与他们实际发送的内容相匹配(记录方面)。为什么一种方法比另一种更可取?
    • 这没有错。如上所述,您可以使用属性或元素来计算记录数。
    【解决方案2】:

    属性或元素...通常你会发现它们是完全可以互换的。一个主要区别是元素可以重复,而一个元素上只能出现一个具有该限定名称的属性。

    从语义上讲,当你想表达关于一个元素或结构的内容时,我更喜欢使用属性。名称本身就说明了这一点:它是包含元素的 属性。由于您打算对您的 data_file 说些什么,即记录数,因此使用属性很有意义。

    除此之外,以下是我在尝试做出决定时使用的剩余条件:

    • 文件是由人工读取还是手动编辑,就像 (X)HTML 一样?如果是这样,而且属性很少,那也没关系。但是,如果您开始获取大量属性,则易读性会受到影响,因为漂亮的印刷品更适合嵌套元素。
    • 是否涉及命名空间?很多时候,模式往往会留下不合格的属性名称,这可能会导致混淆或错误。此外,合格的属性最终往往看起来很乱。
    • 属性值是否有可能变得比奇异值小,这意味着它需要自己的结构或元数据?如果您觉得两个或多个属性相关,最好将它们转换为单独的基于元素的结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 2020-05-14
      • 1970-01-01
      相关资源
      最近更新 更多