Учитывает ли 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, таким образом, генерирует классы, например, используя «альтернативы»? Как бы то ни было, Ян выбирать в зависимости от своих потребностей.
— Рене
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.