元素名称的大小写约定?


120

是否有关于XML元素大小写的正式建议?

我知道XHTML使用小写的元素名称(与HTML通常使用大写但不区分大小写的HTML相对)。

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

小写:

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

骆驼香烟盒:

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

PascalCase:

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

大写:

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

注意:我正在寻找引用的指南,而不是意见。但是投票最多的意见可以视为指导原则。


Answers:


88

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

W3C标准尝试鼓励将XML视为平台无关文档的格式与将XML视为平台特定对象图的序列化的XAML等语言之间存在哲学上的区别。

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

如果您愿意,那么您可能希望与XHTML,XSLT,SVG,XProc,RelaxNG等结合使用。


7
那么是建议还是不建议使用带连字符的小写字母?
WarFox 2011年

9
@WarFox我认为没有人提出正式建议。IME,来自w3c的互操作性格式通常采用连字符样式;来自Microsoft和其他一些格式的格式倾向于与实现以及实现所用语言中的对象名称约定紧密相关。如果使用XML来解耦系统,则不将XML与该系统的一个组件的语言样式耦合可能会迫使您以消息而不是对象的方式进行思考,因此我建议使用小写和连字符样式。
皮特·柯坎

5
请注意,“带有连字符的小写字母”在XSLT中存在一些问题。具体地说,很容易将名为“年龄的年份”的节点与公式“年份-年龄”(例如,从年份中减去年龄)相混淆
理查德·肯纳德

3
@RichardKennard难道只是在人的层面上?对于xslt,运算符周围的required(?)空格提供了清晰明确的区分,对吗?
Karl Kieninger 2013年

1
@KarlKieninger的确如此,但是恕我直言,在人的层面上的混乱是一个重大问题。请参阅下面的扩展答案。
理查德·肯纳德

64

没关系,但是我一直偏爱PascalCase for Elements和camelCase属性:

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

31

没有正式的建议。

由于XML是出于保存文档在不同系统之间交换信息的双重目的而设计的,因此XML的设计使其能够匹配使用它的应用程序。

因此,.Net XML倾向于使用ProperCasing(见证XAML),而其他XML将使用camelCasing,python_conventions,dot.naming甚至COBOL-CONVENTIONS。W3C似乎喜欢用小写的破折号一个位(例如XSLT)或只合并了小写的单词(例如MathML)。

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


2
看来,如果它的目的是“交换信息”,那么绝对需要一个命名约定的标准。这也适用于一个以上特定实现所使用的任何文档(例如,不是一次性序列化)。

25

添加到Metro Smurf的答案中。

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

  • 元素的上部CamelCase(PascalCase)。
  • (下)camelCase属性。

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


1
以下是NIEM文档,其中描述了属性和元素的命名约定:niem.gov/documentsdb/Documents/Technical/NIEM-NDR-1-3.pdf
e1i45 2014年

我知道这是旧的,但上面的链接被打破,但这个环节似乎有关于NIEM约定元素/ Attrubutes更新细节:reference.niem.gov/niem/specification/naming-and-design-rules/...
CajunCoding

13

为了进一步说明的观点,在XSLT中使用“带连字符的小写字母”存在一些问题。特别是,很容易将名为“年龄年龄”的节点与公式“年龄-年龄”(例如,从年龄中减去年龄)混淆。

正如@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
卖了 此外,MS .NET代码生成工具(xsd.exe)在创建反序列化类时将简单地删除连字符。因此,如果属性如“ alpha-beta”,您将获得“ alphabeta”。因此,不仅名称翻译不正确,而且更难阅读。而且,如果您需要使用MS SQL连字符来构建xml,那也很麻烦。特定于MS的内容不应规定标准,但我认为它的用途足够广泛,可以考虑。它使我转向下划线定界的小写字母或混合大小写。
卡尔·基宁格

1
看起来XSD.exe现在向大多数属性添加了XmlElementAttribute,并且如果存在连字符,则它将显式添加ElementName字符串作为第一个参数,以便进行澄清。我发现的问题是,这取决于您的.NET库,这可能并不重要-该元素在某些系统上仍然不会反序列化。它可以在Win7上的VS2012中运行,但不能在2008 Server上作为EXE运行。
戴维·斯托弗

13

有关 在多个标准中使用的一些示例规则,请参见UN / CEFACT XML命名和设计规则技术规范版本3.0第23页。

细节(摘自2009年12月17日的3.0版第23页):

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

其他链接,瑞典语网站


2
-1:您的链接已损坏-也许是内部URL?请修复它,我将删除下注。
约翰·桑德斯

3
尽管确实很有趣,但是在此特定部分/页面上引用的文档建立了XML 模式的规则,而不是遵循该模式的解析器/ xml文档。这是两件事。
MrCC

对于任何想知道LowerCamelCase和UpperCamelCase之间有什么区别的人:mySettingName是LowerCamelCase的一个示例(可能更聪明地称为LowerCamelCase),而MySettingName是UpperCamelCase的一个示例。
Jinlye


4

XML大小写的初衷是带连字符的小写字母。它区分大小写,不需要您遵循该约定-因此您可以做任何您想做的事情。我没有引用,对不起。


1

我不会说HTML“规范地”使用大写字母。我认为最初使用大写字母是为了更轻松地在视觉上将HTML与内容分开。如今,语法突出显示是没有必要的。

我转向小写字母,如有必要,还带有破折号(也请键入快捷键)。XML混合大小写对我来说是错误的。


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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.