Учитывает ли XML регистр?

109

Короткий вопрос

Учитывает ли XML регистр?

Более длинный вопрос

Например:

<Shirt color="Red"/>

Цвет атрибута имеет тип, stringкоторый может содержать набор допустимых цветов ( Red, Blueи Green).

Для проверки 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.
Oded

Ответы:

81

Короткий ответ:

Да - XML ​​чувствителен к регистру.

Более длинный ответ:

Это широко принято как чувствительное к регистру, однако, если вы хотите принять более гибкое решение, взгляните на приведенный ниже вопрос, в котором обсуждается перечисление без учета регистра:

Нечувствительное к регистру XML-схемы перечисление строки простого типа

Джон Эгертон
источник
6
Более длинный ответ: ничто не мешает вам писать XML-приложение без учета регистра. Но этого нельзя было ожидать или обычно.
Мэтью Уилсон,
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>

XSD 1.1 поддерживается в последних выпусках Saxon и Xerces.

Майкл Кей
источник
Просто помните об использовании XSD 1.1, в настоящее время это всего лишь рекомендация W3C - Xerces с проверкой XSD 1.1 является автономным артефактом в бета-состоянии, а XSD 1.1 не поддерживается JDK, даже самым последним 1.8 . Насколько я знаю, это даже не планируется для JDK 1.9. Таким образом нельзя использовать передовые технологии XML, такие как JAXB на основе XSD 1.1, встроенного в JDK.
Рене
Да, вам нужно быть осторожным, но ответ @René требует уточнения. Во-первых, «просто рекомендация W3C»: ну, XSD 1.0 тоже. «Рекомендация» - это то, что W3C называет законченной, окончательной и ратифицированной спецификацией. Да, это правда, что в настоящее время существует только три реализации XSD 1.1 (Saxon, Xerces и Altova), и это фактор, который вы должны учитывать. Но не сдерживайтесь тем, что есть в JDK - JDK давно отказался от поддержки последних стандартов W3C (например, он даже не поддерживает XPath 2.0), но существует множество сторонних библиотек, которые восполнят этот пробел.
Майкл Кей
Конечно, это зависит от используемой технологии. Если вы реализуете низкоуровневый синтаксический анализ и код, вы можете использовать стороннюю библиотеку парсера (Xerces для XSD 1.1 все еще находится в стадии бета-тестирования, есть два разных артефакта одной и той же версии Xerces!). В качестве примера JAXB - @Michael: знаете ли вы, что сторонняя реализация JAXB или производная, использующая XSD 1.1, таким образом, генерирует классы, например, используя «альтернативы»? Как бы то ни было, Ян выбирать в зависимости от своих потребностей.
Рене