XML元素有标准的命名规则吗?

108

是否有任何标准,事实上的或其他的,适用于XML文档?例如,写标签的"最佳"方式是什么?

<MyTag />
<myTag />
<mytag />
<my-tag />
<my_tag />

同样,如果我有一个属性的枚举值更好

<myTag attribute="value one"/>
<myTag attribute="ValueOne"/>
<myTag attribute="value-one"/>

2
严格来说,你也可以使用<my.tag/>。但在某些情况下可能不是一个好主意... - PhiLho
1
元素名称的大小写约定 - Igor Brejc
在网上可以找到几个“标准”。 - user2864740
13个回答

52

我怀疑最常见的命名方式是驼峰式 - 即

<myTag someAttribute="someValue"/>

特别是,如果将空格与代码生成器(即将xml序列化/反序列化为对象)混合使用,会导致一些问题,因为不多的编程语言允许枚举类型中包含空格(需要在二者之间建立映射关系)。


38
嗯...最佳答案...我认为它是一个不错的答案,但仅仅是个人意见。有一些参考资料会更好。 - Hamish Grubijan
6
我不同意,我不习惯看到采用驼峰命名法的XML。 - Rafa
4
众所周知,这是个人喜好问题。但我会按照你的方式来做,因为我总是使用XMLSchema定义我的XML,而XMLSchema也遵循这种方法。http://www.w3.org/2001/XMLSchema.xsd 对我来说,这与编程语言无关。我们使用XML是因为它是一个可互操作接口标准。编程语言只是一个实现细节,每种语言都有自己的约定。 - dan carter
我的看法是,我见过CamelCase和全部小写的写法;很少见到全部大写(旧版HTML),也见过小写。我不记得曾经见过camelBack的写法。我更喜欢CamelCase或小写。然而,属性通常都是小写的。 - Kit10
@Copperpot 你是指 ProperCase,对吧? - Marc Gravell
显示剩余3条评论

40

XML命名规则

XML元素必须遵循以下命名规则:

    - Element names are case-sensitive 
    - Element names must start with a letter or underscore
    - Element names cannot start with the letters xml(or XML, or Xml, etc) 
    - Element names can contain letters, digits, hyphens, underscores, and periods 
    - Element names cannot contain spaces

任何名称都可以使用,没有保留的词语(除了xml)。

最佳命名实践

    - Create descriptive names, like this: <person>, <firstname>, <lastname>.
    - Create short and simple names, like this: <book_title> not like this: <the_title_of_the_book>.
    - Avoid "-". If you name something "first-name", some software may think you want to subtract "name" from "first".
    - Avoid ".". If you name something "first.name", some software may think that "name" is a property of the object "first".
    - Avoid ":". Colons are reserved for namespaces (more later).
    - Non-English letters like éòá are perfectly legal in XML, but watch out for problems if your software doesn't support them.

命名风格

XML元素没有定义命名风格,但以下是一些常用的命名方法:

    - Lower case    <firstname> All letters lower case
    - Upper case    <FIRSTNAME> All letters upper case
    - Underscore    <first_name>    Underscore separates words
    - Pascal case   <FirstName> Uppercase first letter in each word
    - Camel case    <firstName> Uppercase first letter in each word except the first

reference http://www.w3schools.com/xml/xml_elements.asp


1
最终,这一切都取决于你要遵循哪种编程信仰。 - Philip Borbon

15

我倾向于使用TitleCase来命名元素,使用camelCase来命名属性。两者都不加空格。

<AnElement anAttribute="Some Value"/>

顺便提一下,我快速搜索了一下XML的最佳实践,并找到了这个相当有趣的链接:XML schemas: Best Practices


14
对我来说,这就像讨论编程语言的代码风格:有人会为一种风格辩护,而另外一些人会支持其他方式。唯一达成共识的是:“选择一种风格并保持一致”!
我只想指出,很多XML方言都只使用小写字母命名(如SVG、Ant、XHTML等)。
我不理解“属性值中不能有空格”的规则。这似乎引发了一个辩论:“将什么放在属性中,将什么作为文本?”。也许这不是最好的例子,但有一些知名的XML格式在属性中使用空格:
- XHTML,特别是class属性(你可以放置两个或更多的类),当然还有alt和title属性。 - SVG,在path标签的d属性中就有使用。
还有style属性也是两者都使用的。
我并没有完全理解反对这种实践的论点(似乎只适用于某些用法),但至少它是合法的,并且被广泛使用。有人认为这样做有缺点。
哦,自动闭合斜杠前不需要空格。 :-)

反对空格的理由是,这只是因为在问题中特别提到了,如果值被枚举,则为了支持解析,不多数语言支持带有空格的枚举,但我们使用XML在C / C ++,C#或Java(我使用的语言,但不限于此)的许多人经常将属性值映射到枚举。然后,我们可以简单地将文字解析为映射/字典(在Java和C#的情况下更容易)。最终,我同意这似乎是狂热而不是标准的问题。我只是遵循“入乡随俗”的哲学。 - Kit10

8

我倾向于使用小写驼峰式标签,因为属性通常应该反映数据值 - 而不是内容 - 所以我会坚持使用可以在任何平台/语言中用作变量名的值,即避免空格,但另外两种形式可能也可以。


+1 对于变量/函数命名的考虑 - Ates Goral
@downvoter:请给我一个解释的机会,谢谢。 - annakata

8

这是主观的,但是如果一个元素标签中有两个单词,添加下划线(例如<my_tag>)而不是不使用分隔符可以增强可读性。参考资料:http://www.w3schools.com/xml/xml_elements.asp。因此根据w3schools的说法,答案应该是:

<my_tag attribute="some value">

值不需要使用下划线或分隔符,因为在属性值中允许使用空格,但在元素标签名称中不允许。


2
+1 是因为你引用了一个有“最佳命名实践”部分的参考资料(不仅仅是个人意见)。 - Fuhrmanator
2
@Fuhrmanator,“参考资料”本身就是一种观点,尽管它提供了一些理由。它并不是任何标准 - 而且(尽管它比以前好多了),我*不建议或使用w3schools作为“参考资料”。有更原始和全面的来源。 - user2864740
@user2864740 例如什么?在提供更原始和全面的来源之前,您已经完成了您的评论。我+1的重点是OP要求标准,但大多数答案都提供了意见。 - Fuhrmanator
此答案仅提供意见,w3schools的链接与此无关且不会改变这一事实。至于标准,请参阅实施规则(如RSS)或组织规则(如OAGi)-在某个级别上,“标准”仅适用于特定的应用程序/业务级别。w3schools链接仅以非常“模糊”的方式提供其自己的意见/最佳实践(它提供了一些提示并说“这是一些方法”)。 - user2864740
这意味着仅仅包含一个链接并不会使答案(或者链接的资源)具有权威性。 - user2864740

7
许多以文档为中心的XML方言使用小写基本拉丁字母和破折号。我倾向于采用这种方式。
将XML直接映射到编程语言标识符的代码生成器是脆弱的,并且(除了像XAML这样的天真对象序列化之外)应该在可移植文档格式中避免使用;为了实现最佳重用和信息长寿,XML应该尽量匹配领域,而不是实现。

3

rss可能是世界上最常用的XML模式之一,而且它采用了驼峰命名法。

规范在这里:http://cyber.law.harvard.edu/rss/rss.html

尽管在模式中没有节点属性,但所有节点元素名称都是采用驼峰命名法。例如:

lastBuildDate managingEditor pubDate


2

微软采用两种惯例:

  1. 对于配置,微软使用驼峰命名法。可以查看Visual Studio的配置文件。例如VS2013的配置文件存储在:

    C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe.config

示例:

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
  1. 微软在其XAML中也使用了大写字母。我猜这是为了与使用小写字母的HTML区分开来。

示例:

<MenuItem Header="Open..." Command="ApplicationCommands.Open">
    <MenuItem.Icon>
        <Image Source="/Images/folder-horizontal-open.png" />
    </MenuItem.Icon>
</MenuItem>

2

没有明确的建议。基于W3C的其他建议,例如XHTML的建议,我选择使用小写:

4.2. 元素和属性名称必须小写

XHTML文档必须对所有HTML元素和属性名称使用小写。这种差异是必要的,因为XML区分大小写,例如<li>和<LI>是不同的标记。


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