Чи відрізняється регістр 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.
— Одід

Відповіді:


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.
— Рене

Так, вам потрібно бути обережними, але для відповіді @ Рене потрібна кваліфікація. По-перше, "просто рекомендація 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.