XML记录计数属性或元素

时间:2011-10-26 10:43:19

标签: xml xsd

虽然我对XML和XML Schema了解不多,但我已经很久没有使用它了,并且从未特别使用它。 因此,对以下内容的一点帮助将非常感激。

我们目前收到分隔数据文件,并希望切换到XML Schema验证的XML文件。 当前分隔文件包含一个包含记录计数的预告片记录。

例如:TRL0000155

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

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

或作为<data_file>

的子元素
<data_file>
   <record_count>155</record_count>
   <record>
      record XML...
   </record>
   <record>
      record XML...
   </record>
   ...
<data_file>

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

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

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

提前致谢...

2 个答案:

答案 0 :(得分:2)

由于每个记录都有一个<record>元素,因此技术上不需要显式记录计数。当然,你仍然可以拥有它,例如,如果它有助于提高性能。但另一方面,它引入的问题是它必须与<record>元素的数量保持一致。

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

如果您可以将XPath应用于XML文件,那么确定记录优势很容易;这只是count(/data_file/record)。在这种情况下,确实没有必要明确地存储该值。

答案 1 :(得分:1)

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

从语义上讲,当您想要对某个元素或结构说 about 时,我更喜欢使用属性。名称本身就是这样说的:它是包含元素的属性。既然你打算说一下你的data_file,即记录的数量,那么使用一个属性很有意义。

除此之外,这是我在做出决定时使用的其余资格:

  • 文件是由人类阅读还是手动编辑,就像(X)HTML一样?如果是这种情况并且属性很少,那就没关系。但是如果你开始获得很多属性,那么易读性就会受到影响,因为使用嵌套元素可以更好地处理漂亮的打印。
  • 是否涉及名称空间?通常,模式往往会使属性名称不合格,这可能会导致混淆或错误。此外,合格的属性往往看起来很混乱。
  • 属性值是否有可能变得小于单数值,这意味着它需要自己的结构或元数据?如果您认为两个或多个属性相关,则最好将它们转换为单独的基于元素的结构。