Apakah XML case-sensitive?

109

Pertanyaan pendek

Apakah XML case-sensitive?

Pertanyaan yang lebih panjang

Sebagai contoh:

<Shirt color="Red"/>

Warna atribut adalah tipe stringyang mungkin berisi sekumpulan warna yang valid ( Red, Bluedan Green).

Untuk memvalidasi XML, saya menggunakan XSD berikut:

  <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>

Apakah saya diharapkan menerima variasi huruf yang berbeda dari Merah, Biru dan Hijau? Atau XML diterima secara luas sebagai case-sensitive?

Ian
sumber
4
Ya itu. Salah satu hal pertama yang dipelajari tentang XML.
Oded

Jawaban:

81

Jawaban singkat:

Ya - XML ​​peka huruf besar / kecil.

Jawaban yang Lebih Panjang:

Ini diterima secara luas sebagai case-sensitive, namun jika Anda ingin menerimanya dengan lebih fleksibel, lihat pertanyaan di bawah ini, yang membahas tentang enumerasi case-sensitive:

Enumerasi Tidak Peka Kasus Skema XML dari String Jenis Sederhana

Jon Egerton
sumber
6
Jawaban yang lebih panjang: tidak ada yang menghentikan Anda menulis aplikasi XML yang tidak membedakan huruf besar / kecil. Tapi itu tidak diharapkan atau biasanya.
Matthew Wilson
17

Dengan XSD 1.1 Anda dapat mencapai pencacahan tidak peka huruf besar kecil menggunakan pernyataan:

<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 didukung dalam rilis terbaru Saxon dan Xerces.

Michael Kay
sumber
Berhati-hatilah saat menggunakan XSD 1.1, saat ini hanya merupakan rekomendasi W3C - Xerces dengan validasi XSD 1.1 adalah artefak mandiri dalam status beta, dan XSD 1.1 tidak didukung oleh JDK, bahkan oleh yang terbaru 1.8 . Sejauh yang saya tahu, itu tidak direncanakan untuk JDK 1.9. Anda tidak dapat menggunakan teknologi XML canggih seperti JAXB berdasarkan XSD 1.1 bawaan dari JDK dengan cara ini.
René
Ya, Anda perlu berhati-hati, tetapi jawaban @ René membutuhkan kualifikasi. Pertama, "hanya rekomendasi W3C": begitu juga XSD 1.0. "Rekomendasi" adalah apa yang disebut W3C sebagai spesifikasi yang sudah selesai, final, dan diratifikasi. Ya, memang saat ini hanya ada tiga implementasi XSD 1.1 (Saxon, Xerces, dan Altova), dan ini adalah faktor yang harus Anda pertimbangkan. Tapi jangan ditahan oleh apa yang ada di JDK - JDK telah lama meninggalkan dukungan untuk standar W3C terbaru (misalnya, bahkan tidak mendukung XPath 2.0) tetapi ada banyak pustaka pihak ketiga untuk mengisi celah tersebut.
Michael Kay
Tentunya tergantung dari teknologi yang digunakan. Jika Anda menerapkan penguraian dan kode tingkat rendah, Anda dapat menggunakan pustaka parser pihak ketiga (Xerces untuk XSD 1.1 masih beta, ada dua artefak berbeda dari versi Xerces yang sama!). Untuk contoh JAXB - @Michael: Apakah Anda mengetahui implementasi JAXB pihak ke-3 atau membuat turunan dengan menggunakan XSD 1.1, dengan demikian, menghasilkan class misalnya menggunakan "alternatif"? Bagaimanapun, itu pada Ian untuk memilih tergantung pada kebutuhannya.
René