有两种方法可以在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则使用逗号。
是否有特别的理由选择其中一个(假设值既不包含空格也不包含逗号)?
答案 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.
一些人对“看起来的样子”的反对意见对我来说似乎是毫无根据的,类似于为什么婴儿男孩需要被限制的共同理性化。那里有一种非理性的偏见。