FlowingDev

XML, dijelaskan: format data yang pakai setelan jas dan dasi

XML (Extensible Markup Language) adalah bahasa berbasis aturan untuk mengkodekan dokumen dalam format yang bisa dibaca manusia dan juga mesin.

Coba tool-nya: Penampil XML

Dalam satu kalimat

XML adalah cara super ketat untuk menstrukturkan data pakai tag kustom, membuatnya bisa dibaca olehmu dan komputermu, tapi kebanyakan sih sama komputermu.

Masalah yang dipecahkannya

Di masa-masa awal komputasi, berbagi data antar program yang berbeda itu mimpi buruk banget. Setiap perusahaan punya format file dengan resep rahasianya masing-masing. Mencoba membuka dokumen dari WordPerfect di Microsoft Word itu petualangan tersendiri. Ini disebut vendor lock-in, dan situasinya kacau balau.

Ledakan internet membuat masalah ini sepuluh kali lebih parah. Sekarang, bukan lagi cuma dua program di satu komputer; tapi ribuan server dan client yang berbeda di seluruh dunia yang perlu berkomunikasi.

Upaya pertama untuk mengatasi ini di dunia web adalah HTML (HyperText Markup Language). HTML itu brilian untuk memberitahu browser cara menampilkan informasi: ini adalah judul (<h1>), ini paragraf (<p>), ini dicetak tebal (<b>). Tapi HTML payah banget dalam mendeskripsikan informasi itu apa. Apakah teks tebal itu nama produk, peringatan, atau cuma sesuatu yang menurutmu keren kalau ditebalkan? Komputer tidak tahu sama sekali.

Masuklah XML (eXtensible Markup Language) di akhir tahun 90-an. XML berasal dari standar yang lebih tua dan lebih akademis bernama SGML, tapi disederhanakan untuk penggunaan skala web. Bagian "eXtensible" (dapat diperluas) adalah intinya: tidak seperti HTML yang punya set tag yang sudah baku, XML memungkinkan kamu bikin tag sendiri.

Alih-alih <p>, kamu bisa membuat <nama_produk>, <harga>, <alamat_pengiriman>, atau <koordinat_markas_rahasia_gunung_berapi>.

Tiba-tiba, kamu punya cara untuk bertukar data yang membawa maknanya sendiri. Datanya jadi self-describing (menjelaskan dirinya sendiri). Ini revolusioner untuk segala hal, mulai dari transaksi business-to-business hingga file konfigurasi aplikasi. XML menciptakan bahasa universal yang bisa disepakati oleh dua sistem mana pun, selama mereka mengikuti aturannya.

Cara kerjanya di balik layar

XML kelihatannya cuma sekumpulan kurung siku, tapi di balik kulit luarnya yang berduri itu ada sistem yang kuat dan logis. XML dibangun di atas beberapa konsep inti.

Anatomi Inti: Tag, Elemen, dan Atribut

Unit dasar dari XML adalah elemen. Sebuah elemen terdiri dari tag pembuka, konten, dan tag penutup.

<buku>Perang dan Damai</buku>
  • Tag: <buku> adalah tag pembuka, dan </buku> adalah tag penutup. Perhatikan garis miring / di tag penutup. Itu wajib.
  • Konten: Perang dan Damai adalah konten dari elemen tersebut. Konten bisa berupa teks biasa, atau bisa juga... elemen lain! Susunan bersarang inilah yang memberikan struktur pada XML.

Elemen juga bisa punya atribut, yaitu serpihan kecil metadata yang tinggal di dalam tag pembuka.

<buku bahasa="id">
  <judul>Perang dan Damai</judul>
  <penulis>Leo Tolstoy</penulis>
</buku>

Di sini, bahasa="id" adalah atribut dari elemen buku. Atribut memberikan informasi tambahan tentang elemen itu sendiri, bukan menjadi bagian dari konten utamanya. Pilihan antara menggunakan atribut vs. elemen anak adalah debat klasik para developer, tapi aturan praktisnya adalah: jika itu mendeskripsikan konten, gunakan elemen; jika itu mendeskripsikan wadahnya, gunakan atribut.

Struktur Pohon (DOM)

Ketika komputer me-parsing file XML, ia tidak melihatnya sebagai tumpukan teks. Ia melihatnya sebagai sebuah pohon. Struktur logis ini disebut Document Object Model, atau DOM.

Anggap saja seperti silsilah keluarga:

  • Selalu ada satu root element (elemen akar) tunggal di paling atas (dalam contoh kita, <buku>). Dokumen XML tidak boleh punya dua akar.
  • Setiap elemen lain adalah node (simpul) di dalam pohon.
  • Elemen di dalam elemen lain adalah child nodes (node anak) (<judul> adalah anak dari <buku>).
  • Elemen yang menampungnya adalah parent node (node induk) (<buku> adalah induk dari <judul> dan <penulis>).
  • Elemen yang berada di level yang sama adalah sibling nodes (node saudara) (<judul> dan <penulis> adalah saudara).

Memvisualisasikan XML-mu sebagai pohon adalah kunci untuk memahami cara menavigasi dan menanyakannya. Kamu bisa meminta parser untuk "temukan elemen penulis di dalam elemen buku," dan ia tahu persis cara menelusuri pohon untuk sampai ke sana.

Aturan Main: Well-Formed vs. Valid

Di sinilah XML mendapatkan reputasinya sebagai format yang ketat. Ada dua tingkat "kebenaran".

1. Well-Formed XML: Ini adalah syarat minimum mutlak. Ibarat punya tata bahasa yang benar.

  • Harus punya satu, dan hanya satu, root element.
  • Setiap tag pembuka harus punya tag penutup yang cocok.
  • Tag bersifat case-sensitive: <Buku> tidak sama dengan <buku>.
  • Elemen harus bersarang dengan benar. <b><i>teks</i></b> itu benar; <b><i>teks</b></i> itu bencana.
  • Nilai atribut harus di dalam tanda kutip (" atau ').

Jika sebuah dokumen XML tidak well-formed, parser mana pun akan langsung melempar error dan menolak lanjut. Tanpa kecuali.

2. Valid XML: Ini adalah level selanjutnya. Sebuah dokumen XML disebut "valid" jika ia well-formed dan sesuai dengan serangkaian aturan yang telah ditentukan sebelumnya yang disebut schema.

Schema itu seperti cetak biru atau kontrak. Ia adalah file terpisah (biasanya berekstensi .xsd atau .dtd) yang mendefinisikan hal-hal seperti:

  • Elemen apa saja yang diizinkan?
  • Dalam urutan apa mereka harus muncul?
  • Elemen mana yang wajib dan mana yang opsional?
  • Atribut apa yang bisa dimiliki sebuah elemen?
  • Apakah konten sebuah elemen seharusnya berupa angka, string, atau tanggal?

Misalnya, schema untuk contoh buku kita mungkin menyatakan: "Setiap elemen <buku> HARUS memiliki satu <judul> dan setidaknya satu <penulis>. Ia MUNGKIN memiliki atribut bahasa. Elemen <harga>, jika ada, HARUS berisi angka positif."

Inilah kekuatan super XML. Ini memungkinkan dua sistem (misalnya, pembeli dan penjual) untuk menyetujui kontrak data yang kaku. Setiap data yang melanggar kontrak akan ditolak secara otomatis, mencegah bug dan kesalahpahaman yang tak terhitung jumlahnya.

Cerita dari dunia nyata

API Perbankan yang Nggak Boleh Gagal

Sebuah bank besar sedang membangun sistem bagi klien korporat besar untuk mengirimkan instruksi pembayaran secara otomatis. Kita bicara soal jutaan dolar per transaksi. Sama sekali tidak ada ruang untuk kesalahan. Simbol mata uang yang hilang atau desimal yang salah tempat bisa jadi bencana besar. Tim memilih XML dengan XML Schema Definition (XSD) yang ketat. Sebelum instruksi pembayaran dilihat oleh sistem inti perbankan, ia divalidasi terhadap schema. Jika klien mengirim <jumlah>100,000</jumlah> alih-alih <jumlah>100000.00</jumlah>, atau <mata_uang>usd</mata_uang> alih-alih <mata_uang>USD</mata_uang>, API akan langsung menolaknya dengan error yang jelas menunjuk ke pelanggaran schema. Pelajaran yang bisa diambil: Untuk pertukaran data krusial di mana ambiguitas bisa berakibat kerugian besar, ketatnya dokumen XML yang tervalidasi adalah a feature, not a bug.

Grafik Vektor yang Ternyata Cuma Teks

Seorang developer web membutuhkan logo yang kompleks untuk situs baru. Seorang desainer mengiriminya file .svg. Si developer, karena penasaran, membuka file itu di editor teks dan terkejut melihat isinya bukan gumpalan biner berisi piksel. Isinya XML! Tag seperti <svg>, <path>, dan <circle> mendeskripsikan bentuk, warna, dan koordinat. Ia sadar bisa mengubah warna logo secara terprogram hanya dengan mencari dan mengganti nilai atribut di dalam XML, tanpa perlu membuka program grafis. Ia bahkan menganimasikannya dengan memanipulasi node XML menggunakan JavaScript. Pelajaran yang bisa diambil: Banyak format file hebat yang kamu gunakan sehari-hari, seperti SVG (Scalable Vector Graphics), sebenarnya adalah dialek spesifik dari XML, yang membuatnya bisa diinspeksi, diedit, dan dikendalikan dengan skrip.

Ancaman Konfigurasi Kuno

Seorang developer junior ditugaskan untuk memperbaiki bug pada aplikasi enterprise Java berusia 15 tahun. Sumber masalahnya ada di suatu tempat dalam konfigurasi. Yang bikin dia ngeri, konfigurasinya bukan file teks sederhana; melainkan satu file XML tunggal setebal 25.000 baris bernama config.xml. Isinya berantakan dan tanpa inden. Mencoba membacanya adalah hal yang mustahil. Tapi kemudian ia memuatnya ke dalam penampil XML. Seketika, alat itu memformatnya, menambahkan pewarnaan, dan memungkinkan dia untuk menyembunyikan bagian-bagian besar dari pohon struktur. Dia bisa mencari bagian yang relevan (<databaseConnectionPool>), melihat seluruh cabang pengaturan terkait, dan langsung menemukan salah ketik pada nama server. Pelajaran yang bisa diambil: XML bisa jadi sangat bertele-tele, tetapi struktur pohon bawaannya, ketika dilihat dengan alat yang tepat, membuat file yang super duper kompleks sekalipun jadi mudah dikelola.

Kesalahan dan jebakan umum

  • Menyamakannya dengan HTML. Keduanya terlihat seperti sepupu, tapi tugasnya berbeda. HTML untuk presentasi (bagaimana sesuatu terlihat). XML untuk deskripsi data (apa itu sesuatu). Browser-mu akan memaafkan HTML yang berantakan; parser XML tidak akan memaafkan XML yang berantakan.
  • Galau antara Atribut vs. Elemen. Pendatang baru sering bingung apakah sepotong data harus menjadi atribut (<buku isbn="123">) atau elemen anak (<buku><isbn>123</isbn></buku>). Tidak ada satu jawaban yang benar, tetapi pedoman umumnya adalah elemen menampung konten, sementara atribut menampung metadata tentang konten itu. Nggak usah terlalu dipikirin, yang penting konsisten.
  • Mencoba me-parsingnya dengan Regular Expression. Jangan. Pokoknya jangan. Kelihatannya menggoda untuk kasus-kasus sederhana, tetapi karena XML adalah struktur bersarang yang rekursif, regex sederhana akan gagal total pada file yang tidak sepele. Ini adalah cerita horor klasik di dunia pemrograman. Selalu gunakan pustaka parser XML yang benar untuk bahasa pilihanmu.
  • Lupa kalau XML itu case-sensitive. Jika schema-mu mengharapkan <nama>, mengirim <Nama> akan menyebabkan error validasi. Ini sering menjebak para developer yang datang dari format yang tidak terlalu pilih-pilih.
  • Mengabaikan namespace. Dalam dokumen XML besar yang mencampurkan berbagai kosakata (misalnya, mencampur SVG dan XSLT), kamu akan melihat tag seperti <xsl:template> atau <svg:path>. Bagian xsl: itu adalah namespace, mencegah bentrokan jika kedua kosakata memiliki tag bernama <template>. Ini bisa bikin pusing, tapi sangat penting untuk dokumen yang kompleks.

Kenapa ini perlu kamu lirik

Kamu mungkin tidak akan memulai proyek baru dengan XML sebagai pilihan pertamamu untuk API sederhana (JSON biasanya menang karena lebih ringkas). Tapi kamu pasti bakal ketemu XML, dijamin. Kamu harus memikirkan XML ketika:

  • Kamu berintegrasi dengan sistem enterprise yang lebih tua, terutama yang menggunakan SOAP atau WSDL.
  • Kamu perlu mendefinisikan kontrak data yang kokoh dan tidak bisa dilanggar antara dua pihak (menggunakan XSD).
  • Kamu bekerja dengan data yang berpusat pada dokumen, seperti feed RSS/Atom, dokumen Office (OOXML), atau grafik vektor (SVG).
  • Kamu mengonfigurasi alat di ekosistem Java (seperti Maven atau Ant) atau .NET.
  • Kamu menerima file yang berakhiran .xml, .svg, .rss, .atom, atau .plist dan perlu memahami strukturnya, bukan hanya isinya.

Mengetahui dasar-dasar XML itu seperti tahu cara kerja karburator. Kamu mungkin mengendarai mobil modern dengan injeksi bahan bakar, tapi pengetahuan itu memberimu pemahaman lebih dalam tentang mesin dan menjadikanmu mekanik yang jauh lebih baik saat dihadapkan dengan mobil klasik.

Gali lebih dalam

Teori beres. Saatnya praktik — 100% di browser kamu.

Coba tool-nya: Penampil XML