Le XML est-il sensible à la casse?

109

Question courte

Le XML est-il sensible à la casse?

Question plus longue

Par exemple:

<Shirt color="Red"/>

La couleur d'attribut est de type stringpouvant contenir un ensemble de couleurs valides ( Red, Blueet Green).

Pour valider le XML, j'ai utilisé le XSD suivant:

  <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>

Suis - je attendu d'accepter différentes variations de couleurs rouge, bleu et vert? Ou XML est-il largement accepté comme sensible à la casse?

Ian
la source
4
Oui, ça l'est. L'une des premières choses que l'on apprend sur XML.
Oded le

Réponses:

81

Réponse courte:

Oui - XML ​​est sensible à la casse.

Réponse plus longue:

Il est largement accepté comme sensible à la casse, mais si vous souhaitez l'accepter de manière plus flexible, jetez un œil à la question ci-dessous, qui traite des énumérations insensibles à la casse:

Énumération insensible à la casse du schéma XML d'une chaîne de type simple

Jon Egerton
la source
6
Réponse plus longue: rien ne vous empêche d'écrire une application XML qui est insensible à la casse. Mais ce ne serait pas prévu ou habituel.
Matthew Wilson le
17

Avec XSD 1.1, vous pouvez réaliser une énumération insensible à la casse en utilisant une assertion:

<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 est pris en charge dans les versions récentes de Saxon et Xerces.

Michael Kay
la source
Sachez simplement que vous utilisez XSD 1.1, pour le moment, il ne s'agit que d'une recommandation du W3C - Xerces avec la validation XSD 1.1 est un artefact autonome à l'état bêta, et XSD 1.1 n'est pas pris en charge par le JDK, pas même par le plus récent 1.8 . Ce n'est même pas prévu pour JDK 1.9 pour autant que je sache. Vous ne pouvez pas utiliser de cette façon des technologies XML avancées telles que JAXB basées sur XSD 1.1 intégré à partir du JDK.
René
Oui, vous devez être prudent, mais la réponse de @ René doit être nuancée. Premièrement, "juste une recommandation du W3C": ainsi, XSD 1.0. La «recommandation» est ce que le W3C appelle une spécification finale, finale et ratifiée. Oui, c'est vrai qu'il n'y a actuellement que trois implémentations de XSD 1.1 (Saxon, Xerces et Altova), et c'est un facteur à prendre en compte. Mais ne soyez pas retenu par ce qui se trouve dans le JDK - le JDK a depuis longtemps abandonné le support des dernières normes W3C (par exemple, il ne prend même pas en charge XPath 2.0) mais il existe de nombreuses bibliothèques tierces pour combler le vide.
Michael Kay
Bien sûr, cela dépend de la technologie utilisée. Si vous implémentez une analyse et un code de bas niveau, vous pouvez utiliser une bibliothèque d'analyseurs tiers (Xerces pour XSD 1.1 est toujours bêta, il existe deux artefacts différents de la même version de Xerces!). Pour l'exemple de JAXB - @Michael: Connaissez-vous une implémentation JAXB tierce ou un dérivé utilisant XSD 1.1, générant ainsi des classes par exemple en utilisant des «alternatives»? Quoi qu'il en soit, c'est à Ian de choisir en fonction de ses besoins.
René