代码之家  ›  专栏  ›  技术社区  ›  Heinzi

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

  •  3
  • Heinzi  · 技术社区  · 16 年前

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

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

    变体2:

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

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

    有没有特别的理由选择一个而不是另一个(假设值既不包含whitspace也不包含逗号)?

    4 回复  |  直到 16 年前
        1
  •  1
  •   Cheeso    16 年前

    我认为你应该使用变体3:

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

    如果有一堆元数据属于 <Database> 元素,则几乎没有理由将“some”数据放在属性中,而“other”数据则表示为附加的子元素,如 ... .

    • 如果您有与每个表相关的其他数据(例如,表中列的名称和类型),那么您将希望表中的内容成为元素,这样您就可以将所有这些数据附加到特定的表中,并且可以对这些数据应用模式。这意味着变量1。

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

    有些人对“看起来的样子”的反对意见似乎是毫无根据的,在我看来,这类似于为什么需要绕过男婴的一般合理化。那里有一种非理性的偏见。

        2
  •  2
  •   Sakin    16 年前

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

    我会选择逗号作为分隔符。

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

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

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

        3
  •  2
  •   Dustin    16 年前

    对于拆分值,理想情况下应该用编程语言来完成(即使XPath和XSLT确实提供函数),空格在XML中似乎是一个自然的分隔符,但是CSS使用分号,另一个常用的分隔符是逗号,尽管两者都不像空白那样对XML友好,因为w3cxmlschema建议中有用于列表的内容( <xs:list> )其中允许的值用空格隔开。

        4
  •  1
  •   Don Roby    16 年前

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

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

    如果你选择使用属性,我怀疑分隔符的选择有多重要。

    除非您可能希望避免使用'<'字符,在属性值中无效。。。