Validator XML dengan XSD

Periksa dokumen XML terhadap XSD dan lihat elemen mana yang melanggar aturan apa.

Alat yang satu ini berjalan di server. Validasi terhadap XML Schema bukan sesuatu yang bisa dilakukan browser, sehingga dokumen dan skema Anda dikirim ke sini untuk diperiksa, lalu dibuang. Keduanya tidak disimpan, tidak dicatat di log, dan tidak pernah ditaruh di URL. Jika dokumennya rahasia, jalankan xmllint secara lokal — mesinnya sama.

XML yang akan diperiksa.
Satu XSD yang berdiri sendiri. Skema yang mengimpor atau menyertakan file lain tidak dapat diperiksa di sini.

Tempel dokumen dan XSD yang seharusnya dipatuhinya. Anda mendapat hasil pemeriksaan dan, untuk setiap aturan yang dilanggar, elemennya, barisnya, dan batasannya; bukan sekadar kata “tidak valid”.

Cara kerja

Ada tiga hal yang bisa gagal, dan masing-masing dilaporkan terpisah karena artinya berbeda. Dokumen mungkin bukan XML yang well-formed, dan dalam hal itu tidak ada yang diperiksa. Skema mungkin bukan XSD yang bisa dipakai, dan dalam hal itu juga tidak ada yang diperiksa. Atau keduanya terbaca dan dokumen melanggar sebuah aturan, satu-satunya kasus di mana “tidak valid” memberi tahu Anda sesuatu tentang data Anda.

Validasinya dilakukan oleh libxml, mesin yang sama di balik hampir semua alat XML, jadi jawabannya cocok dengan apa yang akan dikatakan build Anda. Pesan diagnostiknya ditampilkan apa adanya, dalam bahasa Inggris, karena pesan itu menyebut elemen dan batasannya, dan parafrase hanya akan menjadi tebakan tentang maksud pesan yang tidak kami tulis.

Alat ini berjalan di server, dan hanya alat ini di sini yang begitu. Tidak ada browser yang bisa memvalidasi terhadap XML Schema; tidak ada API untuk itu. Dokumen dan skema Anda dikirim, diperiksa, lalu dibuang: tidak pernah ditulis ke disk, tidak pernah dicatat dalam log, dan tidak pernah dimasukkan ke URL.

Dua hal langsung ditolak. Dokumen atau skema yang mendeklarasikan DTD atau entitas, karena DTD bisa menyuruh parser membaca file dari server. Dan skema yang mengimpor atau menyertakan file lain, karena di sini tidak ada yang diunduh: hanya sebagian yang bisa diterapkan, dan pemeriksaan sebagian yang disajikan sebagai lolos adalah jawaban terburuk yang bisa diberikan sebuah validator.

Contoh

Kasus Masukan Hasil
Nilai dengan tipe yang salah <price>cheap</price> Element 'price': 'cheap' is not a valid value of the atomic type 'xs:decimal'.
Atribut wajib yang tidak ada <book><title>V</title><price>1</price></book> Element 'book': The attribute 'id' is required but missing.
Elemen anak yang tidak ada <book id="b1"><title>V</title></book> Element 'book': Missing child element(s). Expected is ( price ).

Pertanyaan umum

Apakah dokumen saya keluar dari browser saya?

Ya, dan ini satu-satunya alat di situs ini yang begitu. Memvalidasi terhadap XML Schema bukan hal yang bisa dilakukan browser, jadi dokumen dan skema dikirim ke sini, diperiksa, lalu dibuang. Keduanya tidak disimpan, tidak dicatat dalam log, dan tidak dimasukkan ke URL mana pun. Jika itu tidak dapat diterima untuk dokumen Anda, validasi di komputer Anda sendiri: xmllint melakukan hal yang sama dengan mesin yang sama.

Mengapa skema saya ditolak karena mengimpor skema lain?

Karena tidak ada yang diunduh dari mana pun: tidak dari jaringan, tidak dari sistem file. Skema yang tersebar di beberapa file hanya bisa diterapkan setengahnya di sini, dan validator yang memeriksa setengah aturan lalu menyatakan “valid” memberi jawaban yang lebih buruk daripada tidak menjawab sama sekali. Gabungkan file-filenya, atau validasi di komputer Anda, tempat file lain itu ada.

Mengapa DOCTYPE ditolak?

Karena DTD bisa mendeklarasikan entitas yang menunjuk ke file di server, dan itulah cara paling lama yang dikenal untuk mengubah parser XML menjadi pembaca file. Pemuatan entitas juga dinonaktifkan di sini, jadi menolak konstruksi itu adalah kunci kedua, bukan satu-satunya; tetapi bagaimanapun juga, dokumen yang diperiksa terhadap XSD tidak memerlukan DTD.

Mengapa pesan kesalahannya dalam bahasa Inggris?

Pesan itu berasal dari libxml, bukan dari situs ini. Pesan itu menyebut nama elemen Anda dan batasan yang gagal, yaitu bagian yang Anda perlukan, dan menerjemahkannya berarti memparafrasekan diagnostik yang tidak kami tulis; salah menerjemahkan satu saja lebih merugikan daripada membacanya dalam bahasa Inggris.

Versi XML Schema yang mana?

XSD 1.0, yang diimplementasikan oleh libxml. Asersi XSD 1.1 dan penetapan tipe bersyarat tidak didukung, jadi skema 1.1 yang memakainya akan dilaporkan tidak terbaca, alih-alih diam-diam diperiksa tanpa aturan-aturan itu.

Skema saya diawali encoding="utf-16" dan ditolak. Mengapa?

Karena deklarasi itu menggambarkan sebuah file, sedangkan yang sampai ke halaman ini adalah apa yang dikirim browser Anda, yaitu UTF-8. libxml memercayai deklarasi itu dan menolak membaca skemanya. Sekarang encoding tersebut selalu diabaikan jika bukan UTF-8, dan hasilnya menyebutkan hal itu. Hal yang sama dengan encoding="ISO-8859-1" dulu lebih buruk, karena tidak gagal: setiap karakter beraksen rusak tanpa terlihat, lalu dokumen divalidasi terhadap teks yang tidak pernah ditulis siapa pun.

Perlu diketahui

  • Berjalan di server. Dokumen dan skema Anda dikirim, diperiksa, lalu dibuang: tidak disimpan, tidak dicatat dalam log, dan tidak bisa dibagikan lewat URL. Semua alat lain di kategori ini berjalan di browser Anda; alat ini tidak bisa, karena tidak ada browser yang memvalidasi XML Schema.
  • Hasil pemeriksaan berasal dari libxml, begitu pula kata-kata di setiap pesan diagnostik. Hanya XSD 1.0.
  • Paling banyak lima puluh masalah ditampilkan. Dokumen yang melanggar satu aturan seribu kali biasanya melanggarnya karena satu alasan saja.

Sumber

Semua alat Kode