Pemformat dan Validator XML
Format, validasi, atau minify XML seketika di browser Anda — hasilnya diperbarui langsung.
Dokumen Anda tetap di perangkat
Tidak ada yang perlu dihapus kemudian
Aman untuk dokumen teregulasi
Jalan di semua browser modern
Cara kerjanya
- 1
Tempel XML Anda
Berkas konfigurasi, respons API, sebuah faktur, sebuah umpan, atau ekspor yang perlu Anda baca.
- 2
Rapikan atau minifikasi
Indentasi supaya terbaca, atau padatkan lagi — peringatannya muncul pada kedua arah.
- 3
Salin hasilnya
Bawa ke penyunting, sebuah tiket, data uji, atau dokumen yang hendak Anda kirim.
Mengapa memakai alat ini
Diberi tahu bila perapian mengubah data
Mengindentasi elemen yang memuat teks mengubah teks itu, dan Anda diberi tahu sebelumnya alih-alih sesudahnya.
Awalan namespace dipertahankan
Awalan dibiarkan persis seperti ditulis, jadi ekspresi XPath dan lembar XSLT yang merujuknya tetap bekerja.
Entitas eksternal tak pernah diselesaikan
Tak ada berkas dibaca dan tak ada URL diambil — sifat yang paling perlu dimiliki sebuah alat XML.
Bom pemuaian ditolak
Dokumen kecil yang memuai menjadi gigabita terdeteksi dan ditolak alih-alih membekukan tab.
Deklarasi dan pengodean dijaga
Deklarasi XML, atribut pengodeannya, dan tanda urutan bita apa pun keluar dari proses tanpa berubah.
Tak ada yang meninggalkan browser
Faktur, muatan SOAP, dan pernyataan identitas diproses di halaman ini dan tak diunggah ke mana pun.
Mengindentasi XML bukan soal rupa — spasi di dalam elemen adalah data
Inilah fakta yang memisahkan perapian XML dari perapian JSON, dan hampir semua kejutan pada pokok ini bercabang darinya. Di JSON, spasi di antara token sepenuhnya berada di luar model datanya: rapikan ulang sebuah dokumen dan tiap nilai yang dibaca pengurai Anda tetap sama persis. XML tak memberi jaminan semacam itu. Isi sebuah elemen adalah simpul teks, dan spasi merupakan bagian dari simpul itu kecuali ada yang menyatakan sebaliknya secara tegas. Ubah `<nama>Ali</nama>` menjadi bentuk terindentasi dengan teksnya di baris sendiri, maka elemen itu tak lagi berisi `Ali` — ia berisi sebuah pergantian baris, dua spasi, `Ali`, satu pergantian baris lagi, dan spasi lagi. Sebagian besar kode aplikasi menyembunyikan ini dengan memangkas saat membaca, dan justru itulah sebabnya hal ini luput sampai ia jadi penting: sebuah nilai yang dibandingkan dengan basis data, sebuah jumlah periksa, sebuah tanda tangan. Spesifikasi XML memang menyediakan `xml:space="preserve"` untuk menyatakan spasi bermakna, dan sebuah skema bisa menandai elemen sebagai tak peka spasi, tetapi perapi yang hanya melihat dokumennya tak mengetahui keduanya. Ia harus memperingatkan alih-alih mengandaikan, dan itulah yang dilakukan alat ini.
Merapikan ulang dokumen bertanda tangan membatalkan tanda tangannya, dan itu memang dirancang begitu
Akibat di atas menjadi nyata begitu sebuah dokumen ditandatangani. Tanda tangan digital XML tidak menandatangani berkasnya — ia menandatangani bentuk kanonik dari pohon dokumen, yang dihasilkan sebuah langkah penormalan yang didefinisikan dalam spesifikasi Canonical XML. Langkah itu memakukan urutan atribut, deklarasi namespace, dan spasi tertentu, supaya dua dokumen yang bermakna sama menghasilkan ringkasan yang sama. Yang tak dilakukannya adalah memaafkan spasi yang Anda tambahkan di dalam isi sebuah elemen, sebab bagi model itu bukan perapian melainkan perubahan data. Maka faktur bertanda tangan, pernyataan SAML, atau pesan SOAP yang sudah dipercantik tak lagi sah, dan kegagalannya total: verifikasinya tak melaporkan selisih kecil, ia melaporkan bahwa tanda tangannya tak cocok. Kaidah yang perlu dibawa pulang: dokumen bertanda tangan adalah artefak biner yang mengenakan kostum teks. Bacalah ia dalam bentuk rapi kalau Anda mau, tetapi kirimkan bita yang Anda terima.
Awalan namespace bukanlah namanya — URI-nyalah namanya
Namespace adalah tempat rancangan XML paling sering mengejutkan pendatang dari JSON, dan tempat perapi yang sembrono menimbulkan kerusakan sungguhan. Awalan seperti `soap:` atau `ns2:` adalah singkatan lokal yang tak bermakna dengan sendirinya; yang mengidentifikasi sebuah elemen adalah URI tempat awalan itu diikat. Dua dokumen yang memakai `a:Body` dan `env:Body` itu identik bila kedua awalannya terikat ke URI namespace yang sama, dan dua dokumen yang sama-sama memakai `ns:Item` sama sekali tak berkerabat bila URI-nya berbeda. Itulah sebabnya alat yang dengan niat baik mengganti nama awalan menjadi sesuatu yang lebih rapi menghasilkan dokumen yang setara secara teknis dan rusak secara praktis: tiap ekspresi XPath, tiap templat XSLT, dan tiap pemilih yang ditulis tangan di basis kode Anda merujuk pada awalannya, bukan pada URI-nya, karena itulah yang orang tulis. Namespace bawaan menambahkan jebakan kedua, sebab elemen tanpa awalan di dalam `xmlns="…"` berada di namespace itu sementara atribut tanpa awalan tak berada di namespace mana pun. Alat ini tak mengubah satu awalan pun dan tak memindahkan satu deklarasi pun.
Pemuaian entitas adalah alasan pengurai XML harus diberi tahu apa yang tak boleh dilakukannya
XML membolehkan sebuah dokumen mendefinisikan entitasnya sendiri, dan membolehkan satu entitas merujuk entitas lain. Fitur tunggal itu menghasilkan penolakan layanan paling termasyhur dalam sejarah format ini: definisikan sebuah entitas sebagai sepuluh salinan entitas lain, sarangkan sepuluh tingkat, dan dokumen beberapa ratus bita memuai menjadi satu miliar karakter. Ia punya nama — serangan sejuta tawa — dan bekerja pada pengurai mana pun yang memuaikan entitas tanpa anggaran. Persoalan yang lebih tajam adalah entitas eksternal, yang membolehkan dokumen menyatakan bahwa nilai sebuah entitas harus dibaca dari suatu tempat: `SYSTEM "file:///etc/passwd"` membaca berkas lokal, dan sebuah URL `http://` mengubah pengurai menjadi klien permintaan yang dengan senang hati menjangkau ke dalam jaringan privat atas nama penyerang. Itulah XXE, dan bertahun-tahun ia dipakai membaca kredensial dari server produksi. Pertahanannya bukan penguraian yang cerdik, melainkan penolakan: pemroses dokumen yang tak pernah menyelesaikan entitas eksternal tak bisa dibujuk mengambil apa pun. Alat ini tak menyelesaikan satu pun, dan membatasi pemuaian, sehingga dokumen bermusuhan di sini sekadar ditolak.
XML datang lewat dua pintu: layanan pemerintah dan sumber daya Android
Ada baiknya menyebut dari mana XML biasanya masuk ke pekerjaan pengembang di sini, karena kedua pintunya menuntut kehati-hatian yang berbeda. Pintu pertama adalah antarmuka berbasis SOAP: banyak layanan pemerintahan, perbankan, dan asuransi di kawasan ini masih bertukar data lewat SOAP, dan sebuah respons SOAP tiba sebagai satu baris panjang tanpa jeda yang mustahil dibaca tanpa dirapikan — sementara isinya berupa NIK, NPWP, nomor rekening, atau data nasabah. Pintu kedua adalah pengembangan Android, tempat XML bukan format pertukaran melainkan sumber daya: tata letak, string, dan berkas manifes. Di sana ada jebakan tersendiri yang tak dimiliki XML biasa — berkas `strings.xml` memperlakukan tanda petik tunggal sebagai karakter istimewa, jadi sebuah apostrof di dalam teks harus didahului garis miring terbalik atau seluruh sumber dayanya gagal dikompilasi, dan sebuah `&` dalam nama merek harus menjadi `&` sama seperti di mana pun. Alat ini merapikan keduanya tanpa menyentuh isi teks: ia tak mengubah pelolosan, tak menambah, dan tak mengurangi.
Apa yang sebenarnya ada di dalam XML yang perlu dirapikan orang
Menyebut nama dokumennya sepadan, karena daftarnya menjelaskan kehati-hatiannya. XML adalah tempat bagian dunia perangkat lunak yang teregulasi bermukim: faktur elektronik yang disampaikan ke otoritas pajak, muatan SOAP yang berpindah antarbank, pernyataan SAML yang secara harfiah adalah identitas seseorang dalam perjalanan, rekam medis, berkas perkara, ekspor penggajian, umpan produk berisi harga yang belum diumumkan. Ketika seseorang meraih sebuah perapi, hampir selalu itu karena salah satu dokumen tersebut gagal dan ia perlu membacanya — artinya contoh di papan klipnya adalah contoh sungguhan, lengkap dengan nomor pajak pelanggan dan subjek pernyataannya. Menempelkannya ke perapi terhosting mengunggah persis hal itu, dan sebuah pernyataan SAML khususnya merupakan kredensial pembawa selama ia masih berlaku. Halaman ini mengurai dan mencetak dokumennya di dalam JavaScript dan tak membuat satu permintaan pun sambil melakukannya; panel jaringan pada developer tools Anda akan menunjukkan hal yang sama.
Kesalahan umum yang sebaiknya dihindari
- Mengandaikan perapian XML seaman perapian JSON. Spasi di dalam elemen adalah bagian simpul teksnya, jadi mengindentasi mengubah nilai yang dibaca kembali oleh pengurai.
- Mempercantik dokumen bertanda tangan. Tanda tangan meliputi bentuk kanonik pohonnya, dan spasi yang ditambahkan ke isi elemen adalah perubahan data — verifikasinya gagal sama sekali.
- Membiarkan sebuah alat mengganti nama awalan namespace. URI-nya adalah identitas, tetapi tiap XPath dan XSLT di basis kode Anda merujuk pada awalannya.
- Lupa bahwa `strings.xml` di Android memperlakukan tanda petik tunggal secara istimewa. Sebuah apostrof harus didahului garis miring terbalik atau seluruh sumber dayanya gagal dikompilasi.
- Mengurai XML tak tepercaya dengan entitas eksternal aktif. `SYSTEM "file:///…"` membaca berkas lokal dan sebuah URL http membuat pengurai mengambil atas nama penyerang — inilah XXE.
Perbandingan
| Aspek | Alat ini | Perapi daring | Sebuah pengaya penyunting |
|---|---|---|---|
| Dokumen dikirim ke server | Tidak pernah | Umumnya ya | Tidak |
| Memperingatkan bila indentasi mengubah data | Ya | Tidak | Jarang |
| Menyelesaikan entitas eksternal | Tidak pernah | Kadang | Bisa dikonfigurasi |
| Mempertahankan awalan namespace | Selalu | Umumnya | Umumnya |
| Menjaga deklarasi dan tanda urutan bita | Ya | Beragam | Umumnya |
| Harga | Gratis | Gratis / paket berbayar | Gratis |
Fitur
Perapian dan minifikasi
Dua arah, dengan lebar indentasi di tangan Anda dan tab tersedia bila sebuah proyek menuntutnya.
Pemeriksaan keterbentukan
Tag tak seimbang, ampersand liar, dan nama tak sah dilaporkan berikut baris dan kolomnya.
Peringatan keamanan spasi
Elemen berisi konten campuran atau teks bermakna ditandai sebelum indentasi menulis ulang isinya.
Urutan atribut tak disentuh
Atribut tetap dalam urutan dokumen, karena sebagian konsumen dan sebagian tanda tangan bergantung padanya.
CDATA dan komentar dipertahankan
Bagiannya dijaga harfiah, termasuk isi yang selain itu akan perlu diloloskan.
Dokumen besar didukung
Ekspor berukuran beberapa megabita dirapikan tanpa unggahan maupun plafon ukuran.
Tanpa instalasi
Tanpa alat build, tanpa runtime, tanpa dependensi — jalan di halaman web.
Ramah Arab dan RTL
Antarmuka lengkap dalam delapan bahasa, termasuk Arab kanan-ke-kiri.
Aman secara bawaan
Disajikan lewat HTTPS, tanpa pelacakan konten dan tanpa unggahan ke pihak ketiga.
Siapa yang memakainya
Pengembang integrasi
Membaca respons SOAP yang tiba sebagai satu baris tanpa jeda.
Tim keuangan dan penagihan
Memeriksa faktur elektronik yang ditolak otoritas pajak.
Administrator sistem
Merapikan berkas konfigurasi sebelum menyetorkannya ke kendali versi.
Siapa pun yang melacak galat API
Menemukan satu-satunya ampersand tak diloloskan yang membuat dokumen gagal diurai.
Pertanyaan yang Sering Diajukan
Tidak. Semuanya berjalan lokal di browser Anda — teks Anda tidak pernah diunggah, disimpan, atau dibagikan.
Ya — sepenuhnya gratis, tanpa akun dan tanpa batas.