【问题标题】:Case conventions on element names?元素名称的大小写约定?
【发布时间】:2010-11-07 15:34:48
【问题描述】:

对于 XML 中的元素大小写是否有任何正式的建议?

我知道 XHTML 使用小写的元素名称(而不是 HTML 规范使用大写但不区分大小写。)

但我说的是通用内容的 XML。

小写:

<customer> 
   <accountnumber>619</accountnumber>
   <name>Shelby Lake</name>
</customer>

驼峰式:

<customer> 
   <accountNumber>619</accountNumber>
   <name>Shelby Lake</name>
</customer>

帕斯卡大小写:

<Customer> 
   <AccountNumber>619</AccountNumber>
   <Name>Shelby Lake</Name>
</Customer>

大写:

<CUSTOMER> 
   <ACCOUNTNUMBER>619</ACCOUNTNUMBER>
   <NAME>Shelby Lake</NAME>
</CUSTOMER>

注意:我正在寻找引用的指南而不是意见。但是,获得最高票数的意见可以被视为指导方针。

【问题讨论】:

标签: xml case-sensitive


【解决方案1】:

骆驼案得到我的投票。

至于引用的例子,也许这个问题可以来自人们引用的链接。

【讨论】:

    【解决方案2】:

    这并不重要,但我一直偏爱 PascalCase 的 Elements 和 camelCase 的属性:

    <Root>
      <ParentElement attributeId="1">
        <ChildElement attributeName="foo" />
      </ParentElement>
    </Root>
    

    【讨论】:

      【解决方案3】:

      没有正式的推荐。

      由于 XML 的设计具有保存文档在不同系统之间交换信息的双重目的,因此它被设计为能够匹配 em> 使用它的应用程序。

      所以 .Net XML 倾向于使用 ProperCasing(见证 XAML),而其他 XML 将使用 camelCasing、python_conventions、dot.naming 甚至 COBOL-CONVENTIONS。 W3C 似乎更喜欢小写加破折号(例如 XSLT)或只是小写单词混合在一起(例如 MathML)。

      我喜欢全部小写且没有下划线,因为这意味着较少使用 [Shift] 键,而且我的手指有点懒惰。 :)

      【讨论】:

      • 似乎如果它有“交换信息”的目的,那么命名约定的标准是绝对需要的。这也适用于由多个特定实现使用的任何文档(例如,不是一次性序列化)。
      【解决方案4】:

      大多数源自 W3C 的 XML 标准倾向于使用带有连字符的小写字母。

      将 XML 视为平台中立文档的格式(W3C 标准试图鼓励这种格式)与将 XML 视为平台特定对象图的序列化的语言(如 XAML)之间存在哲学上的区别。

      如果您不将 XML 用作平台中立的文档格式,而是用作特定于应用程序的序列化,那么您不妨省去一些麻烦,并在 XML 名称和平台特定名称之间建立 1:1 的对应关系。但几乎任何其他对象图格式都比 XML 更好。

      如果你是,那么你可能想要适应 XHTML、XSLT、SVG、XProc、RelaxNG 和其他。

      【讨论】:

      • 这是否意味着建议或不建议使用带连字符的小写?
      • @WarFox 我认为没有人提出官方建议。 IME,来自 w3c 的互操作性格式往往采用连字符样式;来自 Microsoft 和其他一些格式的格式往往与实现和用于实现的语言中的对象名称约定紧密耦合。如果您使用 XML 来解耦系统,那么不将您的 XML 耦合到该系统的一个组件的语言样式可能会迫使您考虑消息而不是对象,因此我建议使用小写和连字符样式。跨度>
      • 请注意,“带连字符的小写”在 XSLT 中存在一些问题。具体来说,很容易将名为“year-from-age”的节点与公式“year-age”混淆(例如,从年份中减去年龄)
      • @RichardKennard 这种混淆可能只存在于人类层面吗?对于 xslt,运算符周围所需的空格(?)提供了清晰明确的区别,对吗?
      • @KarlKieninger 确实如此,但恕我直言,人类层面的混乱是一个重大问题。请参阅下面的扩展答案。
      【解决方案5】:

      XML 大小写的最初意图是带有连字符的小写。它区分大小写,并且不需要您遵循该约定——因此您可以做任何您想做的事情。我没有引用,抱歉。

      【讨论】:

        【解决方案6】:

        我不会说 HTML “规范地”使用大写。我认为最初使用大写字母更容易在视觉上将 HTML 与内容分开。现在有了语法高亮,这就没有必要了。

        我转向小写字母,必要时使用破折号(也可以更快地输入)。在 XML 中混合大小写对我来说是错误的。

        【讨论】:

        • HTML 不区分大小写。这不是同一个 XML/XHTML。
        【解决方案7】:

        请参阅UN/CEFACT XML Naming and Design Rules Technical Specification Version 3.0 第 23 页,了解多个标准中使用的一些示例规则。

        详细信息(来自 2009 年 12 月 17 日版本 3.0 的第 23 页):

        • 必须使用小写字母 (LCC) 来命名属性。
        • 必须使用大写驼峰 (UCC) 来命名元素和类型。
        • 元素、属性和类型名称必须是单数形式,除非概念本身是复数形式。

        (other link, Swedish site)

        【讨论】:

        • -1:您的链接已损坏 - 也许它是一个内部 URL?请修复它,我将删除反对票。
        • 虽然很有趣,但此特定部分/页面中引用的文档建立了 XML Schemas 的规则,而不是遵循此模式的解析器/xml 文档。这是两个不同的东西。
        • 对于任何想知道 LowerCamelCase 和 UpperCamelCase 有什么区别的人:mySettingName 是 LowerCamelCase 的一个示例(调用 lowerCamelCase 可能更聪明),而 MySettingName 是 UpperCamelCase 的一个示例。
        【解决方案8】:

        添加到 Metro Smurf 的答案。

        国家信息交换模型 (NIEM: http://en.wikipedia.org/wiki/National_Information_Exchange_Model) 说要使用:

        • 元素的大驼峰式 (PascalCase)。
        • (下)属性的驼峰式。

        当您希望符合某些标准时,NIEM 是一个不错的选择。

        【讨论】:

        【解决方案9】:

        Google's style guide 建议(甚至强制要求)所有元素名称和属性名称都使用驼峰命名法:

        所有名称必须使用lowerCamelCase。也就是说,它们以小写字母开头,然后名称中的每个新单词都以大写字母开头。

        基本原理:采用单一样式可提供一致性,这有助于在提及名称时提供帮助,因为大小写是已知的,因此不必记住。它匹配Java风格,其他语言可以使用自动名称转换来处理。

        【讨论】:

          【解决方案10】:

          扩展my comment above:在 XSLT 中使用“带连字符的小写”有一些问题。具体来说,很容易将名为“year-from-age”的节点与公式“year-age”混淆(例如,从年份中减去年龄)。

          正如@KarlKieninger 指出的那样,这只是人类层面的问题,而不是 XSLT 解析器的问题。但是,由于这通常不会产生错误,因此使用“带连字符的小写字母”作为标准是自找麻烦,恕我直言。

          一些相关的例子:

          <a>1</a><b>1</b>
          <xsl:value-of select="a+b"/>
          outputs 2, as expected
          
          <a>1</a><b>1</b>
          <xsl:value-of select="a-b"/>
          DOES NOT ERROR, BUT OUTPUTS NOTHING AT ALL
          

          在上面的代码中,减法运算符前必须至少放一个空格,但加法运算符没有这样的要求。

          <a-b>1</a-b><c>1</c>
          <xsl:value-of select="a-b -c"/>
          outputs 0, as expected
          

          但是请注意上面的内容是多么令人困惑!

          <a>1</a><a-b>3</a-b><b>2</b>
          <xsl:value-of select="a-b"/>
          outputs 3
          
          <a>1</a><a-b>3</a-b><b>2</b>
          <xsl:value-of select="a -b"/>
          outputs -1
          

          单个空格的存在会改变上面的输出,但两种变体都不是错误。

          【讨论】:

          • 已售出。此外,MS .NET 代码生成工具 (xsd.exe) 在创建反序列化类时会简单地删除连字符。因此,如果像“alpha-beta”这样的属性,你会得到“alphabeta”。因此,这些名称不仅翻译不准确,而且更难阅读。如果您需要使用 MS SQL 连字符构建 xml,那也很麻烦。 MS 特定的东西不应该规定一个标准,但它的用途足够广泛,我认为它可以算作一个考虑因素。它引导我使用下划线分隔的小写或混合大小写。
          • 看起来 XSD.exe 现在为大多数属性添加了 XmlElementAttribute,如果有连字符,它会显式添加 ElementName 字符串作为第一个参数,以便澄清。我发现的问题是,根据您的 .NET 库,这可能无关紧要 - 该元素仍然不会在某些系统上反序列化。它可以在 Win7 上的 VS2012 中运行,但不能在 2008 服务器上作为 EXE 运行。
          猜你喜欢
          • 1970-01-01
          • 2017-01-06
          • 1970-01-01
          • 1970-01-01
          • 2017-08-22
          • 2012-07-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多