**XML** (***Extensible Markup Language***, dalam bahasa Melayu **Bahasa Penanda Boleh Perluas**) ialah sebuah bahasa penanda yang disyorkan oleh Konsortium Jaringan Sejagat (W3C) untuk kegunaan umum dalam format yang boleh dibaca manusia dan boleh dibaca mesin. Ia didefinisikan dalam *XML 1.0 Specification* yang dikeluarkan W3C, dan beberapa spesifikasi berkaitan yang lain,  yang kesemuanya piawai terbuka percuma.

Sasaran reka bentuk XML menitikberatkan kesenangan penggunaan, keitlakan, dan kebolehgunaan menerusi Internet.  Ia merupakan format data teks yang mempunyai sokongan kuat bagi bahasa-bahasa dunia melalui Unicode. Kendatipun reka bentuk XML tertumpu kepada dokumen, ia digunakan secara meluas bagi penggambaran struktur data sebarangan yang terdapat, misalnya, dalam perkhidmatan web.

Berbeza dengan bahasa penanda lain seperti HTML, ia tidak melakukan apa-apa selain menyimpan data. Dalam kata lain, XML tidak memaparkan data, sebaliknya memegang data.

Istilah penting
---------------

Bahan yang ditampilkan di bahagian ini berlandaskan Spesifikasi XML. Ia bukan senarai menyeluruh kesemua binaan yang terdapat dalam XML dan hanya menunujukkan binaan-binaan penting yang sering ditemui dalam penggunaan seharian XML. use.

Aksara (Unicode)Mengikut definisinya, sebuah dokumen XML ialah rentetan aksara. Hampir kesemua aksara Unicode sah boleh hadir dalam dokumen XML.
Pemproses dan aplikasi*Pemproses* menganalisis bahasa penanda dan memanjangkan maklumat berstruktur kepada sebuah *aplikasi*. Spesifikasi meletakkan keperluan tentang apa perlu dilakukan dan tidak boleh dilakukan pemproses, akan tetapi aplikasi berada di luar skop spesifikasi. Pemproses (seperti yang digelar spesifikasi) lazim dipanggil *XML parser* (penghurai XML) dalam bahasa basahan.
Bahasa penanda dan kandunganAksara yang terkandung dalam dokumen XML dibahagikan kepada *bahasa penanda* dan *kandungan*. Kedua-dua ini dapat dibezakan melalui peraturan sintaksis mudah. Secara amnya, rentetan aksara yang menjadi penanda bermula sama ada dengan kod aksara `<` dan akhir dengan `>`, ataupun bermula dengan dengan aksara `&` dan berakhir dengan `;`. Rentetan aksara yang bukan penanda dikira kandungan. Namun, dalam seksyen CDATA, pembatas `<![CDATA[` dan `]]>` diklasifikasikan sebagai penanda, sementara teks di antara aksara-aksar tersebut diklasifikasikan sebagai kandungan. Tambahan, ruang putih sebelum dan selepas unsur yang paling luar diklasifikasikan sebagai penanda.
Teg
Binaan penanda yang bermula dengan `<` dan akhir dengan `>`. Terdapat tiga jenis teg:
* Teg mula (*start-tags*); misalan: `<section>`
* Teg akhir (*end-tags*); misalan: `</section>`
* Teg unsur kosong (*empty-element tags*); misalan: `<line-break />`

UnsurSebuah komponen logik dokumen bermula sama ada dengan teg mula dan berakhir dengan teg akhir sepadan ataupun mengandungi hanya teg unsur osong. Aksara di-antara teg-teg mula dan akhir, jika ada, merupakan *kandungan* unsur tersebut, dan boleh mengandungi penanda termasuklah unsur-unsur lain yang digelar *unsur anak*. Sebuah contoh ialah `<Greeting>Helo, dunia.</Greeting>`. Sebuah lagi ialah `<line-break />`.
AtributBinaan penanda yang terdiri daripada pasangan nama/nilai yang terkandung dalam teg mula atau teg unsur kosong. Dalam contoh di bawah, unsur *img* memiliki dua atribut, *src* dan *alt*:

```
<img src="madonna.jpg" alt='Foligno Madonna, by Raphael'/>

```
 Satu lagi contoh:

```
<step number="3">Sambungkan A kepada B.</step>

```
 di mana nama atribut ialah **number** dan nilai ialah **3**.
Pengisytiharan XMLDokumen XML dapat bermula dengan mengisytiharkan maklumat tentang dokumen itu sendiri:

```
<?xml version="1.0" encoding="UTF-8" ?>

```

Aksara dan lepasan
------------------

Dokumen XML terdiri sepeunuhnya daripada aksara set Unicode, dan melainkan beberapa bilangan kecil aksara kawalan, semua aksara yang didefinisikan oleh Unicode boleh hadir dalam dokumen XML. 
XML includes facilities for identifying the *encoding* of the Unicode characters that make up the document, and for expressing characters that, for one reason or another, cannot be used directly.

### Aksara sah

Titik kod Unicode dalam julat berikut sah dalam dokumen XML 1.0:

* U+0009, U+000A, U+000D: ini merupakan kod kawalan C0 yang diterima dalam XML 1.0;
* U+0020–U+D7FF, U+E000–U+FFFD: ini mengetepikan *beberapa* (bukan semua) kod bukan aksara dalam *Basic Multilingual Plane (BMP)* (kesemua pengganti, U+FFFE dan U+FFFF tidak dibenarkan);
* U+10000–U+10FFFF: ini merangkumi *semua* titik kod dalam satah tambahan, termasuk yang bukan aksara.

XML 1.1 melanjutkan set aksara yang dibenarkan: di atas serta aksara dalam julat U+0001–U+001F. Pada masa yang sama, ia mengehadkan penggunaan aksara kawalan C0 dan C1 selain daripada U+0009, U+000A, U+000D, dan U+0085 dengan memerlukan kod-kod tersebut ditulis dalam bentuk lepasan by requiring them to be written in escaped form (misalannya, U+0001 perlu ditulis sebagai &#x01; ataupun kod yang setara). Dalam kes aksara C1, hambatan ini merupakan keserasian kebelakang; ia diperkenalkan bagi membolehkan ralat pengekodan dikesan.

Titik kod U+0000 merupakan satu-satunya aksara yang tidak dibenarkan dalam apa jua dokumen XML 1.0 ataupun 1.1.

### Mengesan pengekodan

Set aksara Unicode dapat dikodkan ke dalam bait bagi penstoran atau penghantaran dalam beberapa cara yang digelar "pengekodan". Unicode sendiri mendefinisikan pengekodan yang merangkumi seluruh repertoir; yang terkenal termasuklah UTF-8 dan UTF-16. Terdapat banyak lagi pengekodan teks yang mendahului Unicode, ASCII dan ISO/IEC 8859; dalam hampir semua kes, repertoir aksara kod-kod ini merupakan subset repertoir aksara Unicode.

XML membenarkan penggunaan apa jua pengekodan yang didefinisi Unicode, dan juga pengekodan yang hadir dalam Unicode. XML juga menyediakan mekanisme di mana pemproses XML dapat, secara pasti dan tanpa pengetahuan terdahulu, menentukan pengekodan mana yang digunakan. Pengekodan selain daripada UTF-8 dan UTF-16 tidak semestinya dikenali oleh setiap penghurai XML.

### Lepasan

XML menyediakan kemudahan *lepasan* yang membolehkan kemasukan aksara-aksara yang sukar dimasukkan secara langsung. Misalnya:

* Aksara-aksara "<" dan "&" merupakan penanda penting dan *tidak mungkin* hadir dalam kandungan di luar seksyen CDATA.
* Beberapa pengekodan aksara hanya menyokong subset Unicode: misalnya, adalah sah jika mengekod XML dalam ASCII, tetapi ASCII tidak mempunyai titik kod bagi aksara Unicode seperti **é**.
* Berkemungkinan sesuatu aksara tidak dapat ditaip dengan mesin penulis.
* Beberapa aksara memiliki glif yang tidak boleh dibezakan daripada aksara lain. Contoh termasuk:

* + "non-breaking-space" (`&#xa0;`) " "
	dibandingkan dengan "space" (`&#x20;`) ""
	+ "Cyrillic Capital Letter A" (`&#x410;`) "А"
	dibandingkan dengan "Latin Capital Letter A" (`&#x41;`) "A"

Terdapat lima entiti pratakrif:

* `&lt;` mewakili "<"
* `&gt;` mewakili ">"
* `&amp;` mewakili "&"
* `&apos;` mewakili '
* `&quot;` mewakili "

Kesemua aksara Unicode yang dibenarkan boleh diwakili dengan *rujukan aksara angka*. Sebagai contoh, lihat aksara Cina "中", yang kod angkanya dalam Unicode ialah perenambelasan (*hexadecimal*) 4E2D, atau perpuluhan (*decimal*) 20,013. Pengguna yang empunya kekunci yang tidak boleh memasukkan aksara ini masih boleh memasukkannya ke dalam dokumen XML sama ada dengan menaip `&#20013;` atau `&#x4e2d;`. Sama juga, rentetan "`I <3 Jörg`" dapat dikodkan bagi kemasukan ke dalam dokumen XML dengan mengguna "`I &lt;3 J&#xF6;rg`".

Penggunaan "`&#0;`" tidak dibenarkan oleh sebab aksara nol merupakan satu daripada aksara kawalan yang dikeluarkan daripada XML, mahupun rujukan aksara angka digunakan. Mekanisme pengekodan lain, seperti Base64 diperlukan bagi mewakilkan aksara-aksara sedemikian.

### Ulasan

Ulasan boleh hadir di mana-mana tempat dalam dokumen di luar penanda lain. Ulasan tidak boleh hadir sebelum pengisytiharan XML. Ulasan bermula dengan "`<!--`" dan berakhir dengan "`-->`". Rentetan "`--`" (tanda sempang berganda) tidak dibenarkan dalam ulasan; ini bermaksud ulasan tidak boleh bersarang. *Ampersand* "&" tidak memiliki nilai bermakna dalam ulasan, jadi rujukan entiti dan aksara tidak diiktiraf, dan tidak ada jalan bagi mewakili aksara yang terkeluar dar set aksara pengekodan dokumen.

Contoh ulasan sah:
"`<!-- kod tidak perlu <lepasan> & dalam ulasan -->`"

### Kegunaan antarabangsa

|  |  |
| --- | --- |
|  | **Rencana ini mengandungi aksara khas.** Tanpa pemberian sokongan yang sewajarnya, anda mungkin melihat tanda tanya, kotak, atau simbol lain. |

XML 1.0 (Fifth Edition) dan XML 1.1 menyokong penggunaan secara langsung hampir kesemua aksara Unicode dalam nama-nam unsur, atribut, ulasan, data aksara, dan pemprosesan arahan (melainkan yang mempunyai makna simbol khas dalam XML sendiri, seperti tanda "kurang dari", yakni "<"). Berikut ialah dokumen XML yang purna bentuk (*well-formed*) yang mengandungi aksara tulisan Cina dan Siril:

```
<?xml version="1.0" encoding="UTF-8" ?>
<俄语>данные</俄语>

```

Purna bentuk dan pengendalian ralat
-----------------------------------

Spesifikasi XML mendefiniskan dokumen XML sebagai teks yang purna bentuk, yakni ia menepati keperluan peruturan sintaksis yang terkandung dalam spesifikasi. Senarai tersebut agak panjang; beberapa perkara penting termasuk:

* Ia mengandungi aksara Unicode sah yang dikodkan dengan betul sahaja.
* Tiada aksara sintaksis khas seperti "<" dan "&" hadir kecuali apabila menjalankan fungsi membezakan penanda.
* Teg-teg mula, akhir dan unsur kosong yang mengehadkan unsur bersarang dengan betul dan tidak ada yang tidak hadir atau bertindih.
* Teg unsur sensitif huruf; teg-teg permulaaan dan akhir perlu sepadan. Nama-nama teg tidak boleh mengandungi aksara-aksara !"#$%&'()\*+,/;<=>?@[\]^`{|}~, tidak boleh juga mengandungi aksara ruang, dan tidak boleh bermula dengan "-", ".", atau digit bernombor.
* Terdapat hanya satu unsur "akar" yang mengandungi semua unsur.

Justeru definisi *dokumen XML* mengetepikan teks yang melanggar perautuan purna bentuk. Pemproses XML yang menjumpai pelanggaran diwajibkan melapor ralat sedemikian dan berhenti memproses. An XML processor that encounters such a violation is required to report such errors and to cease normal processing. Polisi ini, yang kadang kalanya digelar sebagai drakonian, berlainan dengan perisian yang memproses HTML, yang direka untuk menjana keputusan yang berpatutan mahupun terdapat ralat penanda yang teruk. Polisi XML dalam hal ini pernah dikritik sebagai melanggar Hukum Postel yang menyatakan, "Bersikap konservatif dalam apa yang dihantar; bersifat liberal dalam apa yang diterima".

Nota
----

1. ↑  "XML 1.0 Specification". W3.org. Dicapai pada 2010-08-22.
2. ↑  "XML and Semantic Web W3C Standards Timeline" (PDF). 2012-02-04.
3. ↑  "W3C DOCUMENT LICENSE".
4. ↑  "XML 1.0 Origin and Goals". Dicapai pada July 2009. Check date values in: `|accessdate=` (bantuan)
5. ↑  "Extensible Markup Language (XML) 1.0 (Fifth Edition)". W3.org. 2008-11-26. Dicapai pada 2012-11-23.
6. ↑  "Extensible Markup Language (XML) 1.1 (Second Edition)". W3.org. Dicapai pada 2010-08-22.
7. ↑  "Characters vs. Bytes".
8. ↑  "Autodetection of Character Encodings".
9. ↑  It is allowed, but not recommended, to use "<" in XML entity values: Extensible Markup Language (XML) 1.0 (Fifth Edition): EntityValue definition
10. ↑  "W3C I18N FAQ: HTML, XHTML, XML and Control Codes".
11. ↑  "salinan arkib". Diarkibkan daripada yang asal pada 2011-07-26. Dicapai pada 2011-07-26.
12. ↑  "salinan arkib". Diarkibkan daripada yang asal pada 2011-05-14. Dicapai pada 2011-05-14.

Lihat juga
----------

* HTML

Pautan luar
-----------

* Laman sesawang rasmi XML W3C
* (Melayu) Ensiklokamus Teknologi Maklumat: XML secara ringkas
* Untuk melihat XML
* memformat data XML
* Pengurai XML online