2011-09-14 72 views
86

短缺问题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> 

上午我预计接受红色,蓝色和绿色的不同情况下的变化?或者XML被广泛接受为区分大小写?

+3

是的。首先了解XML的一件事。 – Oded

回答

67

答案很简单:

是 - XML是区分大小写。

再回应:

但是如果你想接受更灵活的它被广泛认为是区分大小写的,看看下面的问题,其讨论了具有不区分大小写的枚举:

XML Schema Case Insensitive Enumeration of Simple Type String

+5

较长的答案:没有什么能阻止您编写不区分大小写的XML应用程序。但它不会被期望或通常。 –

13

随着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。

+0

只需注意使用XSD 1.1,目前它只是一个W3C推荐标准 - 具有XSD 1.1验证的Xerces是处于beta状态的独立工件,并且JDK不支持XSD 1.1,即使是最新的1.8。就我所知,它甚至没有计划用于JDK 1.9。您不能像这样使用基于JDK内置的XSD 1.1的JAXB之类的高级XML技术。 –

+0

是的,你需要谨慎,但@René的回答需要资格。首先,“仅仅是一个W3C推荐”:好的,XSD 1.0也是如此。 “推荐”是W3C所称的完成的,最终的,批准的规范。是的,目前只有三种XSD 1.1实现(Saxon,Xerces和Altova),这是您应该考虑的一个因素。但不要被JDK中的内容所束缚--JDK早已放弃了对最新W3C标准的支持(例如它甚至不支持XPath 2.0),但有很多第三方库可以填补这一空白。 –

+0

当然这取决于所使用的技术。如果您实现低级解析和代码,则可以使用第三方分析器库(Xerces for XSD 1.1仍然是beta版本,但有相同Xerces版本的两个不同的工件!)。以JAXB为例 - @Michael:您是否知道第三方JAXB实现或派生使用XSD 1.1,从而生成例如使用“alternatives”的类?无论如何,这取决于伊恩的需求。 –

相关问题