O XML diferencia maiúsculas de minúsculas?

109

Pergunta curta

O XML diferencia maiúsculas de minúsculas?

Pergunta mais longa

Por exemplo:

<Shirt color="Red"/>

O atributo color é do tipo stringque pode conter um conjunto de cores válidas ( Red, Bluee Green).

Para validar o XML, usei o seguinte 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>

Am I esperado para aceitar variações diferentes de casos de vermelho, azul e verde? Ou XML é amplamente aceito como diferencia maiúsculas de minúsculas?

Ian
fonte
4
Sim, ele é. Uma das primeiras coisas que se aprende sobre XML.
Oded de

Respostas:

81

Resposta curta:

Sim - o XML diferencia maiúsculas de minúsculas.

Resposta mais longa:

É amplamente aceito como diferencia maiúsculas de minúsculas, no entanto, se você quiser aceitar de forma mais flexível, dê uma olhada na pergunta abaixo, que discute ter enumerações que não diferenciam maiúsculas de minúsculas:

Enumeração não diferencia maiúsculas de minúsculas de esquema XML de string de tipo simples

Jon Egerton
fonte
6
Resposta mais longa: não há nada que impeça você de escrever um aplicativo XML que não faz distinção entre maiúsculas e minúsculas. Mas não seria esperado ou usual.
Matthew Wilson,
17

Com o XSD 1.1, você pode obter uma enumeração que não diferencia maiúsculas de minúsculas usando uma asserção:

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

O XSD 1.1 é compatível com as versões recentes do Saxon e do Xerces.

Michael Kay
fonte
Esteja ciente de que usar XSD 1.1, no momento é apenas uma recomendação W3C - Xerces com validação XSD 1.1 é um artefato autônomo em estado beta, e XSD 1.1 não é suportado pelo JDK, nem mesmo pelo mais recente 1.8 . Ele nem mesmo está planejado para o JDK 1.9, pelo que eu sei. Não é possível usar tecnologias XML avançadas como JAXB com base no XSD 1.1 integrado do JDK desta forma.
René
Sim, você precisa ser cauteloso, mas a resposta de @René precisa ser qualificada. Em primeiro lugar, "apenas uma recomendação W3C": bem, o XSD 1.0 também é. "Recomendação" é o que o W3C chama de especificação acabada, final e ratificada. Sim, é verdade que existem apenas três implementações do XSD 1.1 atualmente (Saxon, Xerces e Altova), e este é um fator que você deve levar em consideração. Mas não se atrapalhe com o que está no JDK - o JDK há muito abandonou o suporte para os padrões W3C mais recentes (por exemplo, nem mesmo suporta XPath 2.0), mas há muitas bibliotecas de terceiros para preencher a lacuna.
Michael Kay
Claro que depende da tecnologia usada. Se você implementar a análise e o código de baixo nível, poderá usar uma biblioteca analisadora de terceiros (o Xerces para XSD 1.1 ainda é beta, existem dois artefatos diferentes da mesma versão do Xerces!). Para o exemplo de JAXB - @Michael: Você conhece uma implementação JAXB de terceiros ou derivada fazendo uso do XSD 1.1, gerando classes por exemplo usando "alternativas"? De qualquer forma, cabe a Ian escolher dependendo de suas necessidades.
René