Biarkan Σ menjadi seperangkat simbol terbatas, yang disebut alfabet . Kemudian Σ * adalah himpunan tak terbatas dari kata-kata terbatas yang dapat dibentuk dengan menyatukan nol atau lebih simbol dari Σ. Setiap subset yang didefinisikan dengan baik L ⊆ Σ * adalah bahasa .
Mari kita terapkan ini pada XML. Alfabetnya adalah set Unicode karakter U , yang tidak kosong dan terbatas. Tidak setiap penggabungan nol atau lebih karakter Unicode adalah dokumen XML yang baik, misalnya string
<tag> soup &; not <//good>
jelas tidak. Subset XML ⊂ U * yang membentuk dokumen XML yang terbentuk dengan baik dapat dipilih (atau “rekursif”). Ada ada mesin (algoritma atau program komputer) yang mengambil sebagai masukan kata w ∈ U * dan setelah jumlah waktu yang terbatas, output baik 1 jika w ∈ XML dan 0 sebaliknya. Algoritma semacam itu adalah sub-rutin dari setiap perangkat lunak pemrosesan XML. Tidak semua bahasa dapat dipilih. Misalnya, rangkaian program C yang valid yang berakhir dalam jumlah waktu yang terbatas, tidak (ini dikenal sebagai masalah penghentian). Ketika seseorang mendesain bahasa baru, keputusan penting yang harus diambil adalah apakah bahasa itu harus sekuat mungkin atau apakah ekspresifitas akan lebih baik dibatasi demi kesopanan.
Beberapa bahasa dapat didefinisikan dengan menggunakan tata bahasa yang dikatakan menghasilkan bahasa. Tata bahasa terdiri dari
- seperangkat literal yang terbatas (juga disebut simbol terminal ),
- satu set terbatas variabel variabel tata bahasa (juga disebut simbol non-terminal ),
- simbol awal yang dibedakan , diambil dari himpunan variabel dan
- seperangkat aturan yang terbatas (disebut produksi ) yang memungkinkan penggantian jenis tertentu.
Setiap kata yang secara eksklusif terdiri dari literal dan dapat diturunkan dengan mulai dengan simbol awal dan kemudian menerapkan aturan yang diberikan milik bahasa yang dihasilkan oleh tata bahasa.
Misalnya, tata bahasa berikut (dalam notasi yang agak informal) memungkinkan Anda mendapatkan bilangan bulat persis dalam notasi desimal.
- Literal dari tata bahasa adalah digit
1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
, dan 0
.
- Variabel adalah simbol S dan D .
- S adalah simbol awal.
- Kemunculan variabel S dapat diganti
- dengan literal
0
atau
- oleh salah satu literal selain
0
diikuti oleh variabel D .
- Kemunculan variabel D dapat diganti
- oleh salah satu literal diikuti oleh instance lain dari variabel D atau
- oleh string kosong.
Inilah cara kami memperoleh 42
:
S - (menerapkan aturan 4, 2 nd varian) → 4
D - (menerapkan aturan 5, 1 st varian) → 42
D - (menerapkan aturan 5, 2 nd varian) → 42
.
Bergantung pada bagaimana aturan rumit yang Anda izinkan dalam tata bahasa Anda, mesin yang berbeda dibutuhkan untuk membuktikan bahwa kata yang diberikan benar-benar dapat dihasilkan oleh tata bahasa. Contoh yang diberikan di atas adalah tata bahasa biasa , yang paling sederhana dan paling tidak kuat. Kelas tata bahasa yang kuat selanjutnya disebut bebas konteks . Tata bahasa ini juga sangat sederhana untuk diverifikasi. XML (kecuali saya mengabaikan beberapa fitur tidak jelas yang tidak saya sadari) dapat dijelaskan oleh tata bahasa bebas konteks. Klasifikasi tata bahasa membentuk Hirarki Tata Bahasa Chomsky (dan karena itu bahasa). Setiap bahasa yang dapat dijelaskan oleh tata bahasa setidaknya semi-decidable(atau "enumerable secara berulang"). Artinya, ada mesin yang, mengingat kata yang sebenarnya milik bahasa tersebut, memperoleh bukti bahwa itu dapat diproduksi oleh tata bahasa dalam waktu yang terbatas, dan tidak akan pernah menghasilkan bukti yang salah. Mesin seperti ini disebut verifier . Perhatikan bahwa mesin mungkin tidak pernah berhenti ketika diberi kata yang sebenarnya bukan milik bahasa tersebut. Jelas, kami ingin bahasa pemrograman kami dideskripsikan oleh tata bahasa yang kurang kuat untuk kepentingan menolak program yang tidak valid dalam waktu yang terbatas.
Schemata adalah tambahan untuk XML yang memungkinkan penyempurnaan set dokumen yang dibentuk dengan baik. Dokumen yang dibentuk dengan baik yang mengikuti skema tertentu disebut sah menurut skema itu. Misalnya, string
<?xml version="1.0" encoding="utf-8" ?>
<root>all evil</root>
adalah dokumen XML yang dibuat dengan baik tetapi bukan dokumen XHTML yang valid. Ada skema untuk XHTML , SVG , XSLT dan apa yang tidak. Validasi skema juga dapat dilakukan dengan algoritma yang dijamin akan berhenti setelah jumlah langkah hingga untuk setiap input. Program semacam itu disebut validator atau parser yang memvalidasi. Skema didefinisikan oleh apa yang disebut bahasa definisi skema , yang merupakan cara untuk secara formal mendefinisikan tata bahasa. XSD adalah bahasa definisi skema resmi untuk XML dan, itu sendiri, berbasis XML. RELAX NG adalah alternatif yang lebih elegan, jauh lebih sederhana dan sedikit kurang kuat untuk XSD.
Karena Anda dapat mendefinisikan skema Anda sendiri, XML disebut sebagai bahasa yang dapat dikembangkan , yang merupakan asal dari "X" dalam "XML".
Anda bisa menetapkan seperangkat aturan yang memberikan interpretasi pada dokumen XML sebagai deskripsi program komputer. XSLT, yang disebutkan sebelumnya, adalah contoh bahasa pemrograman yang dibangun dengan XML. Secara umum, Anda dapat membuat serial pohon sintaksis abstrak dari hampir semua bahasa pemrograman secara alami ke dalam XML, jika ini yang Anda inginkan.