XML 区分大小写吗?

简短的问题

XML 区分大小写吗?

更长的问题

例如:

<Shirt color="Red"/>

属性颜色的类型为 string,它可能包含一组有效的颜色(RedBlueGreen)。

为了验证 XML,我使用了以下 XSD:

  <xs:simpleType name="ColorType">
<xs:restriction base="xs:string">
<xs:enumeration value="Red"/>
<xs:enumeration value="Blue"/>
<xs:enumeration value="Green"/>
</xs:restriction>
</xs:simpleType>

expected是否接受红、蓝、绿三种不同的大小写变化? 还是 XML 被广泛接受为区分大小写的?

89666 次浏览

简短的回答:

Yes-XML 是区分大小写的。

详细答案:

It is widely accepted as case sensitive, however if you want to accept more flexibly, take a look at the question below, which discusses having case-insensitive enumerations:

简单类型字符串的 XML 架构不区分大小写的枚举

使用 XSD 1.1,您可以使用断言实现不区分大小写的枚举:

<xs:simpleType name="RGB">
<xs:restriction base="xs:string">
<xs:assert test="lower-case($value) = ('red', 'green', 'blue')"/>
</xs:restriction>
</xs:simpleType>

最近发布的 Saxon 和 Xerces 支持 XSD 1.1。

是的,检查 当前的 XML 规范,唯一明显的声明是在1.2节,作者说:

比较的两个字符串或名称是相同的。在 ISO/IEC10646中具有多种可能表示形式的字符(例如同时具有预组合和基底 + 分音符形式的字符) ,只有当它们在两个字符串中具有相同的表示形式时才能匹配。不执行折叠壳。

注意缺少 折叠箱的引用。作为不注意这个细节可能导致的麻烦的一个例子,我最近分析了一些代码,它们从一个中等大小(几个100GB)的生理数据语料库中提取数据,其中一个参数名称在主要软件的过程中已经从 SPO2变成了 SpO2。

相比之下,用于提取数据的软件忠实地保留了 XML 惯例,并认为参数是不同的。还有更糟的。因为参数名被用来命名写入数据的 CSV 文件,这是在 Windows 中,大小写折叠文件名,在同一个文件上打开两个句柄,导致神秘的错误。