¿XML distingue entre mayúsculas y minúsculas?

109

Pregunta corta

¿XML distingue entre mayúsculas y minúsculas?

Pregunta más larga

Por ejemplo:

<Shirt color="Red"/>

El atributo color es de un tipo stringque puede contener un conjunto de colores válidos ( Red, Bluey Green).

Para validar el XML, utilicé el siguiente 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>

¿Se espera que acepte diferentes variaciones de casos de rojo, azul y verde? ¿O XML es ampliamente aceptado como sensible a mayúsculas y minúsculas?

Ian
fuente
4
Sí lo es. Una de las primeras cosas que uno aprende sobre XML.
Oded

Respuestas:

81

Respuesta corta:

Sí, XML distingue entre mayúsculas y minúsculas.

Respuesta más larga:

Se acepta ampliamente como sensible a mayúsculas y minúsculas, sin embargo, si desea aceptar de manera más flexible, eche un vistazo a la pregunta a continuación, que trata sobre las enumeraciones que no distinguen entre mayúsculas y minúsculas:

Enumeración no sensible a mayúsculas y minúsculas del esquema XML de cadena de tipo simple

Jon Egerton
fuente
6
Respuesta más larga: no hay nada que le impida escribir una aplicación XML que no distingue entre mayúsculas y minúsculas. Pero no sería esperado ni habitual.
Matthew Wilson
17

Con XSD 1.1 puede lograr una enumeración que no distinga entre mayúsculas y minúsculas mediante una aserción:

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

XSD 1.1 es compatible con versiones recientes de Saxon y Xerces.

Michael Kay
fuente
Solo tenga en cuenta el uso de XSD 1.1, en este momento es solo una recomendación de W3C: Xerces con la validación de XSD 1.1 es un artefacto independiente en estado beta, y XSD 1.1 no es compatible con el JDK, ni siquiera con el más reciente 1.8 . Ni siquiera está planeado para JDK 1.9 que yo sepa. No puede utilizar tecnologías XML avanzadas como JAXB basadas en XSD 1.1 integradas en el JDK de esta forma.
René
Sí, debe ser cauteloso, pero la respuesta de @ René debe calificarse. En primer lugar, "solo una recomendación del W3C": bueno, también lo es XSD 1.0. "Recomendación" es lo que el W3C llama una especificación final, final y ratificada. Sí, es cierto que actualmente solo hay tres implementaciones de XSD 1.1 (Saxon, Xerces y Altova), y este es un factor que debes tener en cuenta. Pero no se detenga por lo que hay en el JDK: el JDK ha abandonado durante mucho tiempo el soporte para los últimos estándares W3C (por ejemplo, ni siquiera es compatible con XPath 2.0) pero hay muchas bibliotecas de terceros para llenar el vacío.
Michael Kay
Por supuesto, depende de la tecnología utilizada. Si implementa código y análisis de bajo nivel, puede usar una biblioteca de analizador de terceros (Xerces para XSD 1.1 todavía es beta, ¡hay dos artefactos diferentes de la misma versión de Xerces!). Para el ejemplo de JAXB - @Michael: ¿Conoce una implementación JAXB de terceros o un derivado que hace uso de XSD 1.1, por lo tanto, genera clases, por ejemplo, usando "alternativas"? De todos modos, depende de Ian elegir en función de sus necesidades.
René