编码以数字开头的XML元素名称?

时间:2010-01-18 15:35:15

标签: xml

我正在查看工具的输出,将数据库表转储到XML。其中一列名为 64kbit ,该工具对此进行编码,我需要复制它:

 <_x0036_4kbit>0</_x0036_4kbit>

这是某种标准编码吗?我在哪里可以了解更多信息?

5 个答案:

答案 0 :(得分:41)

官方的说法是对Xml命名约定施加的限制是从Xml的父集SGML继承的,仅有一个例外:在Xml中,作为附加选项,名称可以以下划线'_'字符开头。

SGML是由IBM在20世纪60年代由一群思考“20世纪60年代风格”的思想家开发的。

因此,导致SGML创造的大脑风暴很可能被太空船,时间旅行和用厨房铝箔制成的风暴以防止“他们的外星人”的压倒性观念所分散注意力。他们在思想挑衅和思想控制方面的愚蠢尝试是合理的思考过程。

因此。问题仍然存在。为什么SGML不允许数字?此外,为什么对控制字符以外的任何字符的使用都会施加任何限制; &lt;,&gt;,&amp;和空的空间?这将是一种疯狂,当然要向计算机爱好者提供这么多不同角色的钥匙,只是为了阻止他或她使用它们。

最重要的原因是20世纪60年代思维解析器,并且它遵循复杂规则到一定程度的彻底迂腐。

'解析器越简单,它的执行速度就越快

字母表中有26个大写字母+ 26个非大写字母,总数为52个。允许数字是另外十个数字,大约是六分之一!

从人的角度来说,这就像是要洗六个可怕的污垢镶嵌的花盆,每个花盆需要一个小时来清洁,然后隐藏在最后一个花盆下面是一个额外的奖金锅,你必须洗它!你必须在你的余生中每天重复这个例行程序,而这正是它所喜欢的。正是!

标记语言文档倾向于内容膨胀。因此,解析器的作业越少,意味着性能速度的直接提高。然后,这些好处逐渐渗透到整个队伍中,直到它们变成纯粹的利润丰厚的表现。

在'马,马车和Commodore 64'的日子里,用户有责任手动计算其位和字节,以便千字节自行处理。然而,由于现代CPU比其古老的前辈更能应对,解析器所施加的限制已经变得比性能问题更重要。

如果有任何安慰,如果我自己设计一种标记语言(为了论证的缘故,我们将调用NAM-LIT-MAML,因为Nicholas的令人敬畏的标记语言是最棒的标记语言(永远!),那么它将允许你在世界的整个历史中使用任何数量的所有角色,实际上是宇宙,毫无例外地,我会努力创造一些从未在角色之前用过的语言自己的使用,它仍然可以通过使用自己的转义字符在文档中使用,该转义字符看起来没有任何人曾经使用过的任何其他字符。

Xml施加的限制是从SGML继承而来的,我们都同意,在太空船骆驼和其他有用的机器人哺乳动物的这个时代,它们是不必要的,愚蠢的,并且违背了面向对象的编程。

进一步阅读http://www.w3.org/TR/REC-xml/

虽然我发现使名称xml兼容的最简单方法是包含后缀“_”,但没有标准,因此正在使用其他方法。

在您的示例中,第一个字符已转换为十六进制值。此十六进制值表示ASCII,Unicode和毫无疑问的其他字符中的'6'字符。

使用十六进制值的一个好处是代码集中的所有字符,例如可以表示Unicode。

一件坏事是它们一目了然不可读。

答案 1 :(得分:16)

嗯,它似乎不太标准,但XML显然不允许数字(以及其他一些东西)作为元素名称的第一个字符:

NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] |
                  [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] |
                  [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] |
                  [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] |
                  [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]

如果不符合要求,这里的编码只会逃脱第一个字符。它使用该字符的十六进制值。 _x0036_显然对应于十六进制0x36,十进制为54,代表数字6

答案 2 :(得分:6)

XML名称不能以数字开头,因此必须使用其他一些可以理解为“6”的表示。

该工具已选择写入字符的十六进制表示,并用下划线包围。代码\x0036是字符“6”的十六进制代码,十进制为54。下划线是XML名称开头的有效字符,因此可以使用。

可以使用相同的技术来转义XML名称中无效的其他字符。这个技术例如由Microsoft的XmlConvert使用,如here所述,但我确信还有其他工具也使用相同的技术。

答案 3 :(得分:4)

IIRC(我在那里,但很久以前)的想法是,映射XML元素和放大器是很常见的。属性到编程语言结构,由变量表示,很少(任何?)编程语言允许以数字开头的变量名。因此,我们的想法是XML元素/属性名称应该很好地适应大多数语言的变量命名规则。我还相信吗?如果我们再次使用XML,我会对此感到满意吗?不知道;这虽然是一个有趣的讨论。

答案 4 :(得分:1)

该编码不是默认的XML,但您的工具似乎需要,因为元素必须以small character set开头。

_x0036_序列表示haxadecimal number 36(decimal 54),表示ASCII表中的6字符。