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