XML区分大小写吗?


109

简短的问题

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>

我是否希望接受红色,蓝色和绿色的不同大小写形式?还是XML被广泛认为是区分大小写的?


4
是的。了解XML的第一件事。
奥德

Answers:



17

使用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。


只是要知道使用XSD 1.1,目前这只是W3C的建议-具有XSD 1.1验证的Xerces是处于beta状态的独立工件,并且JDK不支持XSD 1.1,甚至最新的1.8也不支持XSD 1.1。 。据我所知,它甚至还没有计划用于JDK 1.9。您不能以这种方式使用高级XML技术,例如基于JDK内置的基于XSD 1.1的JAXB。
勒内

是的,您需要保持谨慎,但是@René的答案需要限定。首先,“仅仅是W3C推荐”:XSD 1.0也是如此。W3C称其为“推荐”,即最终批准的规范。是的,确实存在,目前只有XSD 1.1的三种实现(Saxon,Xerces和Altova),这是您应该考虑的因素。但是不要被JDK中的功能所束缚-JDK长期以来一直放弃了对最新W3C标准的支持(例如,它甚至不支持XPath 2.0),但是有很多第三方库来填补空白。
迈克尔·凯

当然,这取决于所使用的技术。如果您实现低级解析和代码,则可以使用第三方解析器库(用于XSD 1.1的Xerces仍然是beta版,同一Xerces版本有两个不同的工件!)。对于JAXB的示例-@Michael:您是否知道第三方JAXB实现或派生使用XSD 1.1,从而例如使用“替代”生成类?无论如何,伊恩要根据自己的需要进行选择。
勒内·
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.