XML:用作列表分隔符的内容

时间:2010-04-19 10:47:16

标签: xml xsd

有两种方法可以在XML中指定值列表。变式1:

<Database Name="myDatabase">
    <Table Name="myTable1" />
    <Table Name="myTable2" />
    <Table Name="myTable3" />
    ...
</Database>

变式2:

<Database Name="myDatabase" Tables="myTable1 myTable2 myTable3 ..." />

显然,Variant 1更清晰,可以更容易扩展,但在很多情况下,Variant 2更具可读性和“用户友好性”。

使用Variant 2时,应该使用什么作为分隔符? The XML Schema standard似乎更喜欢空白,而some real-world examples则使用逗号

是否有特别的理由选择其中一个(假设值既不包含空格也不包含逗号)?

4 个答案:

答案 0 :(得分:2)

作为程序员,我在查看列表时似乎忽略了空格。 它看起来有些不对劲。

我会选择Commas作为分隔符对我来说更自然。

另一方面,XML(或其他标记语言)更喜欢将空格作为分隔符,就像在

中一样
<Database Name="myDatabase" Tables="myTable1 myTable2 myTable3 ..." />

没有逗号分隔不同的名称(名称,表格)等。

在解析方面,任何选项都没有明显的优势,因为在这两种情况下你都需要摆脱项目之间的额外空格(myTable1,myTable2,myTable3)或(myTable1 myTable2 myTable3)。

答案 1 :(得分:2)

为了分割值,理想情况下应该使用编程语言(即使XPath和XSLT提供函数),白色空间似乎是XML中的自然分隔符,但CSS使用分号,另一个常见的分隔符是逗号,虽然它们几乎都不像白色空间那样XML友好,因为W3C XML Schema建议有一些列表(<xs:list>),其中允许的值由空格分隔。

要使整个问题毫无意义,请使用变体1.正如其他人所提到的,它更易于访问,而且还可以更方便地使用它进行编程。

答案 2 :(得分:1)

您的Variant 1允许通过XPath和解析更有效地提取结构信息。

变体2对于人类来说可能稍微容易阅读,但我肯定会选择#1。

如果您确实选择使用该属性,我怀疑分隔符的选择很重要。

除了你可能想避免使用'&lt;'字符,在属性值中无效......

答案 3 :(得分:1)

既不!

我认为你应该使用Variant 3:

<Database Name="myDatabase"> 
    <Tables>myTable1 myTable2 myTable3</Tables>
    ... 
</Database> 

认真!

如果你有一堆属于<Database>元素所代表的实体的元数据,那么将“某些”数据放入属性,而“其他”数据表示为附加子元素则没有任何理由元素,如...所示。

我认为XML形状的主要标准必须是效用:

  • 如果您有关于每个表的其他数据 - 例如,表中列的名称和类型 - 那么您将希望表的内容为元素,以便您可以将所有数据附加到特定的表,您可以将模式应用于该数据。这意味着变体1。

  • 如果表是表示中唯一的“叶子”节点 - 换句话说,如果没有为每个表定义辅助数据,并且没有为数据库定义其他数据 - 那么将表列表存储为XML属性中的xs:list(变体2)对我来说似乎很好。

  • 如果表是叶节点,但是同一级别还有其他叶节点,则应使用Variant 3.

一些人对“看起来的样子”的反对意见对我来说似乎是毫无根据的,类似于为什么婴儿男孩需要被限制的共同理性化。那里有一种非理性的偏见。