元素名称的命名规范是什么?

130

是否有关于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>

注意: 我正在寻找引用的准则,而不是个人意见。但是获得最多赞的意见可以被视为准则。


1
可能是XML元素的命名约定是否有标准?的重复问题。 - Basil Bourque
10个回答

92
大多数源自W3C的XML标准倾向于使用连字符的小写字母。 在看待XML作为跨平台文档格式的观念上,W3C标准试图鼓励这种区别哲学,而像XAML这样的语言,则将XML视为特定平台对象图的序列化。 如果您没有将XML用作平台中立文档格式,而是用作应用程序特定的序列化,则最好将XML名称与特定平台名称一一对应,但几乎任何其他对象图格式都比XML更适合此目的。 如果您正在使用XML作为平台中立文档格式,则可能想要与XHTML、XSLT、SVG、XProc、RelaxNG等技术相协调。

7
这是否意味着推荐使用带连字符的小写字母,还是不推荐使用? - WarFox
9
我认为没有任何官方的建议。根据我的经验,来自w3c用于互操作性的格式通常采用连字符样式;而来自Microsoft和其他一些公司的格式则倾向于紧密耦合至实现,并使用实现语言中的对象命名约定。如果您正在使用XML来解耦系统,则不将您的XML与该系统组件的语言风格耦合可能会迫使您从消息的角度思考,而非对象,因此我建议使用小写和连字符样式。 - Pete Kirkham
6
请注意,“带连字符的小写字母”在XSLT中存在一些问题。具体来说,很容易混淆一个名为“year-from-age”的节点和一个公式“year - age”(例如从年份中减去年龄)。 - Richard Kennard
3
这种混淆只可能发生在人类层面上吗?对于XSLT,运算符周围所需的空格提供了清晰且明确的区分,是这样吗? - Karl Kieninger
2
@KarlKieninger 这是真的,但在人类层面上的混淆是一个值得关注的问题,依我看来。请见下面我扩展的答案。 - Richard Kennard
显示剩余2条评论

67

并不是很重要,但我一直偏爱使用 PascalCase 来表示元素,而使用 camelCase 来表示属性:

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

33

没有正式的推荐。

由于XML旨在用于“保存文档”和“在不同系统间交换信息”的两个目的,因此它被设计成可以“匹配”使用它的应用程序。

.Net XML 倾向于使用 ProperCasing(例如 XAML),而其他 XML 将使用 camelCasing、python_conventions、dot.naming,甚至 COBOL-CONVENTIONS。W3C 似乎非常喜欢 lower-case-with-dashes(例如 XSLT)或者 justlowercasewordssmashedtogether(例如 MathML)。

我喜欢所有小写字母且没有下划线,因为这意味着少按 [Shift] 键,而我的手指有点懒惰。 :)


2
似乎如果其目的是“交换信息”,那么命名约定的标准绝对是必须的。这也适用于任何被多个具体实现使用的文档(例如,不是一次性序列化)。 - user166390

28

1
这是NIEM文档,其中描述了属性和元素的命名约定:https://www.niem.gov/documentsdb/Documents/Technical/NIEM-NDR-1-3.pdf - e1i45
我知道这很老,但上面的链接已经失效了,不过这个链接似乎有关于元素/属性的NIEM约定的更新细节: https://reference.niem.gov/niem/specification/naming-and-design-rules/4.0/niem-ndr-4.0.html#section_10.8.1 - CajunCoding

15

关于我以上的评论,在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

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


3
成交。 此外,微软的.NET代码生成工具(xsd.exe)在创建反序列化类时会直接删除连字符。因此,如果属性名为“alpha-beta”,你将得到“alphabeta”。因此,名称不仅无法完全翻译,而且更难读懂。如果需要使用MS SQL构建XML,连字符也是个问题。 虽然MS特定的东西不应该决定标准,但是它被广泛使用,因此我认为可以考虑它。这使我倾向于使用下划线分隔的小写或混合大小写。 - Karl Kieninger
1
看起来XSD.exe现在会向大多数属性添加一个XmlElementAttribute,如果有连字符,则明确将ElementName字符串作为第一个参数添加,以便澄清。我发现的问题是,这取决于您的.NET库,这可能无关紧要 - 在某些系统上,元素仍然无法反序列化。它在Win7上的VS2012中运行良好,但在2008 Server上作为EXE运行时不起作用。 - David Storfer

13

谷歌的样式指南建议(甚至可能强制)所有元素名称和属性名称都使用驼峰命名法:

所有名称必须使用lowerCamelCase,即首字母小写,名称中每个新单词的首字母大写。

原因: 采用单一样式提供了一致性,在引用名称时有所帮助,因为大写已知,不必记住。这符合Java样式,可以使用自动名称转换处理其他语言。


13

查看UN/CEFACT XML命名和设计规则技术规范版本3.0第23页,其中介绍了几个标准中使用的示例规则。

具体规定(来自于2009年12月17日版本3.0的第23页):

  • 必须使用LowerCamelCase(LCC)为属性命名。
  • 必须使用UpperCamelCase(UCC)为元素和类型命名。
  • 除非概念本身是复数,否则元素、属性和类型名称必须采用单数形式。

其他链接,瑞典网站


2
-1:你的链接已经失效了 - 可能是一个内部链接?请修复它,我会撤销这个负评。 - John Saunders
3
尽管引用的文档在特定的部分/页面上很有趣,但它确立的是 XML Schema 的规则,而不是遵循该模式的解析器/XML 文档。这是两件不同的事情。 - MrCC
1
对于那些想知道LowerCamelCase和UpperCamelCase之间区别的人:mySettingName是LowerCamelCase的一个例子(也许更聪明的叫法应该是lowerCamelCase),而MySettingName则是UpperCamelCase的一个例子。 - Jinlye

4
XML的原始命名规则是小写字母与连字符。虽然它区分大小写,但并不要求你遵循这个规则,因此你可以根据需要任意定义。抱歉我没有引用资料。

1
我不会说 HTML 在规范上使用大写字母。我认为最初使用大写字母是为了更容易地将 HTML 与内容视觉上分离。如今有了语法高亮,这就不再必要。

我倾向于使用小写字母,如果需要则带有连字符(输入更快)。在 XML 中混合大小写字母让我感觉不对劲。


HTML不区分大小写。这与XML/XHTML不同。 - user166390

-2

我支持驼峰命名法。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接