Mengapa XML disebut "bahasa" tepatnya?

105

Saya bertanya-tanya mengapa XML memiliki huruf L dalam namanya.

Dengan sendirinya, XML tidak "melakukan" apa pun. Ini hanya format penyimpanan data, bukan bahasa! Bahasa "melakukan" hal-hal.

Cara Anda mendapatkan XML untuk "melakukan" hal-hal, untuk mengubahnya menjadi bahasa yang tepat, adalah dengan menambahkan xmlnsatribut ke elemen rootnya. Baru setelah itu ia memberi tahu lingkungannya tentang lingkungannya.
Salah satu contohnya adalah XHTML. Ini aktif, memiliki tautan, hiperteks, gaya dll, semua dipicu oleh xmlns. Tanpa itu, file XHTML hanyalah sekelompok data dalam node markup.

Jadi mengapa XML disebut bahasa? Itu tidak menggambarkan apa pun, tidak menafsirkan, hanya saja.

Sunting: Mungkin pertanyaan saya seharusnya lebih luas. Karena jawabannya saat ini "karena XML dinamai SGML, yang dinamai setelah GML, dll" pertanyaannya seharusnya, mengapa bahasa markup (seperti XML) disebut bahasa?

Oh, dan WRT suara dekat: tidak, saya tidak bertanya tentang X. Saya bertanya tentang L!

Tuan Lister
sumber
128
Atas dasar apa Anda mendasarkan kebutuhan Anda bahwa suatu bahasa harus "melakukan" sesuatu? Saya tidak melihat itu dalam definisi di dictionary.com .
kdgregory
10
Sama seperti Swahili hanya dipahami jika keduanya memahaminya. Atau artikel jurnal medis dipahami jika pembaca memahami bagian bahasa itu. Itu tidak berbeda. Dan orang-orang membuat definisi.
Sami Kuhmonen
42
Bahasa markup adalah istilah umum en.wikipedia.org/wiki/Markup_language
paparazzo
37
@ Mr.Lister: "Itu adalah bahasa manusia, bukan bahasa komputer" Bahasa adalah bahasa. Paling ekstrim, bahkan bahasa Inggris memerlukan informasi kontekstual (dialek mana yang digunakan) untuk memahami dengan jelas. Tidak menghentikannya dari menjadi bahasa. Pertanyaan Anda hanya memiliki premis yang salah.
Lightness Races dalam Orbit
68
Bahasa tidak melakukan hal - hal, mereka mengekspresikan dan mengkomunikasikan hal
Hagen von Eitzen

Jawaban:

238

Jawaban sebenarnya adalah XML memiliki huruf L di namanya karena seorang pria bernama Raymond L orie termasuk di antara perancang "bahasa markup" pertama di IBM pada tahun 1970-an. Para pengembang harus menemukan nama untuk bahasa tersebut sehingga mereka memilih GML karena itu adalah inisial dari tiga pengembang (Goldfarb, Mosher dan Lorie). Mereka kemudian menciptakan backronym Generalized Markup Language .

Ini kemudian menjadi standar sebagai SGML ( Standardized General Markup Language ), dan ketika XML dibuat, pengembang ingin mempertahankan ML-postfix untuk menunjukkan hubungan keluarga ke SGML, dan mereka menambahkan X di depan karena mereka pikir itu terlihat keren. (Meskipun itu sebenarnya tidak masuk akal - XML ​​adalah bahasa meta yang memungkinkan Anda untuk mendefinisikan bahasa yang dapat diperluas, tetapi XML tidak benar-benar dapat diperluas sendiri.)

Adapun pertanyaan kedua Anda jika XML dapat secara sah disebut bahasa:

Format teks terstruktur (atau bahkan biner) apa pun yang dapat diproses secara komputasi dapat disebut bahasa. Bahasa tidak "melakukan" apa pun seperti itu, tetapi beberapa perangkat lunak mungkin memproses input dalam bahasa dan "melakukan" sesuatu berdasarkan itu.

Anda perhatikan bahwa XML adalah "format penyimpanan" yang benar, tetapi format penyimpanan tekstual dapat disebut bahasa, istilah ini tidak saling eksklusif.

Bahasa pemrograman adalah bagian dari bahasa. Misalnya HTML dan CSS adalah bahasa tetapi bukan bahasa pemrograman , sedangkan JavaScript adalah bahasa pemrograman nyata. Yang mengatakan, tidak ada definisi formal bahasa pemrograman baik, dan ada zona abu-abu besar bahasa yang bisa disebut format data atau bahasa pemrograman tergantung pada sudut pandang Anda.

Dengan ini, XML jelas merupakan bahasa. hanya bukan bahasa pemrograman - meskipun itu dapat digunakan untuk mendefinisikan bahasa pemrograman seperti XSLT.

Maksud Anda tentang ruang nama tidak relevan. Ruang nama adalah fitur opsional XML dan tidak mengubah semantik kosa kata XML. Hanya diperlukan untuk mendisambiguasikan nama elemen jika formatnya mungkin berisi banyak kosa kata.


Sunting: reinierpost menunjukkan bahwa Anda mungkin memiliki arti berbeda dengan pertanyaan daripada apa yang saya mengerti. Mungkin Anda bermaksud bahwa kosa kata tertentu seperti XHTML, RSS, XSLT dll. Adalah bahasa karena mereka mengaitkan elemen dan atribut dengan semantik tertentu, tetapi standar XML itu sendiri tidak mendefinisikan semantik untuk elemen dan atribut tertentu, sehingga tidak terasa seperti " bahasa asli ".

Jawaban saya ini akan bahwa XML tidak mendefinisikan kedua sintaks dan semantik, itu hanya mendefinisikan pada tingkat yang berbeda. Misalnya, ia mendefinisikan sintaks elemen dan atribut serta aturan tentang cara memprosesnya. XML adalah "metalanguage" yang masih merupakan sejenis bahasa (seperti halnya metadata masih berupa data!). Sebagai contoh, EBNF juga jelas merupakan bahasa, tetapi tujuannya adalah untuk mendefinisikan sintaksis dari bahasa lain, sehingga juga merupakan bahasa logam.

JacquesB
sumber
19
@Snowman: "Bahasa formal" tidak selalu sesuai dengan apa yang biasanya disebut bahasa dalam komputasi. Sebagai contoh, "bahasa formal" tidak perlu tekstual - kode mesin adalah sebagai bahasa formal seperti kebanyakan format dan protokol biner. Jadi saya tidak akan mengatakan istilah "bahasa formal" mencakup arti yang sama dengan "bahasa" dalam komputasi.
JacquesB
15
Saya tidak mengetahui adanya persyaratan bahwa suatu bahasa perlu tekstual atau tidak tekstual. Ide membangun kalimat dari terminal tidak ada hubungannya dengan interpretasi sewenang-wenang dari bit di terminal tersebut, atau jenis komputer mana (silikon atau berbasis karbon) yang mampu membacanya.
4
@NicolBolas: Poin bagus, kode mesin jelas merupakan bahasa. Saya hanya berpikir itu lebih umum untuk memanggil bahasa biner "format", misalnya Anda mengatakan format GIF bukan bahasa GIF.
JacquesB
3
@ BenCottrell: Bukankah itu grafik, karena apakah mungkin ada loop?
JacquesB
181

Karena itu adalah bahasa. Sebuah markup language, bukan bahasa pemrograman.

Perhatikan bahwa bahasa manusia alami seperti Inggris dan Spanyol juga tidak "melakukan" apa pun. Bahkan, secara teknis C ++ dan Java dan sejenisnya tidak "melakukan" apa pun sampai mereka dimasukkan ke dalam kompiler dan hasilnya dieksekusi. Melakukan hal-hal dan menjadi bahasa sebagian besar saling orthogonal.

Ixrec
sumber
43
Ganti "juru bahasa" untuk "kompiler". Diumpankan ke kompiler tidak membuat mereka "melakukan" apa pun, baik, itu hanya menerjemahkannya ke bahasa yang berbeda, yang, sekali lagi, tidak "melakukan" apa pun. Semua eksekusi adalah interpretasi. Kadang-kadang, juru bahasa mungkin sangat sederhana dan diimplementasikan dalam silikon, dalam hal ini kami menyebutnya "unit eksekusi", tetapi itu masih merupakan juru bahasa. </nitpick>Bagaimanapun, jawaban yang bagus!
Jörg W Mittag
8
@ JörgWMittag Poin bagus. Karena saya secara acak memilih bahasa yang biasanya dikompilasi, ditambahkan "dan hasilnya dieksekusi".
Ixrec
1
Sebuah extensible markup language, jika Anda mau.
doppelgreener
1
Saya berpendapat bahwa bahasa manusia melakukan "melakukan" hal-hal. Lihat Teori Pidato-Undang-Undang ...
Ray
2
Manis, manis orthogonality. Jalankan bahasa dalam aljabar yang berbeda, dan serangkaian tindakan baru terungkap. Di bawah teori, pokoknya.
Kenogu Labz
103

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 wU * 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.

  1. Literal dari tata bahasa adalah digit 1, 2, 3, 4, 5, 6, 7, 8, 9, dan 0.
  2. Variabel adalah simbol S dan D .
  3. S adalah simbol awal.
  4. Kemunculan variabel S dapat diganti
    • dengan literal 0atau
    • oleh salah satu literal selain 0diikuti oleh variabel D .
  5. 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.

5gon12eder
sumber
7
@Iorgio: Dalam matematika, "terdefinisi dengan baik" sebagian besar hanyalah intensifier: semua yang ada secara matematis sudah didefinisikan dengan baik.
Kevin
9
@Iorgio Dengan "terdefinisi dengan baik" maksud saya ada predikat formal yang memberi tahu apakah suatu barang termasuk dalam set atau tidak. Predikat ini pada umumnya tidak dapat dihitung tetapi harus ditentukan secara jelas tanpa kontradiksi. Kalau tidak, hal-hal buruk bisa terjadi . "Pasangan string ( w , M ) di mana M adalah deskripsi terkecil dari mesin Turing yang menghasilkan w dan kemudian berhenti" adalah predikat yang didefinisikan dengan baik tetapi tidak dapat dihitung (lihat kompleksitas Kolmogorov ). …
5gon12eder
2
@ 5gon12eder: Set itu tidak ada di bawah ZFC (karena skema aksioma pemisahan tidak cukup kuat untuk menggambarkannya); jika Anda menggunakan teori himpunan lainnya, Anda harus menentukannya.
Kevin
5
@ 5gon12eder: "Set yang berisi semua string yang tidak terkandung dalam set" tidak ada. Istilah "didefinisikan dengan baik" ironisnya tidak didefinisikan dengan baik.
Kevin
3
The well-formed properti atau validasi dilakukan oleh tata bahasa . Jawaban ini sangat sempurna jika Anda menyebutkannya.
Thibault D.
31

Dalam ilmu komputer, bahasa formal hanyalah seperangkat string, biasanya tak terbatas dan sering digambarkan menggunakan aturan (dua versi umum dari aturan itu adalah ekspresi reguler dan tata bahasa formal ).

Perhatikan bahwa ini berarti bahwa semua kebutuhan bahasa adalah sintaksis , bahasa tidak perlu menjelaskan apa arti setiap string yang valid (yang disebut semantik ).

Sekarang, ini berarti bahwa bahasa pemrograman adalah bahasa formal yang juga memiliki semantik, yang menjelaskan beberapa perhitungan. Dan misalnya XHTML adalah bahasa formal, yang semantiknya menggambarkan (secara kasar dan informal) bagaimana dokumen hiperteks terlihat dan berperilaku.

XML masih merupakan bahasa, meskipun tidak memiliki semantik itu sendiri (tetapi banyak bahasa yang berasal dari XML, seperti XHTML dan XAML).

Secara teknis, format biner juga bahasa, tetapi tidak disebut demikian. Istilah "bahasa" dicadangkan untuk format yang dapat dibaca manusia.

svick
sumber
10
@ Mr.Lister Karena tidak bisa dibaca oleh manusia. Ketika mereka tidak dapat dibaca oleh manusia, kita cenderung menyebutnya format atau format data .
Mason Wheeler
3
@ JamesNnell. Jangan bingung dengan keluarga bahasa ML lainnya, tentu saja. Yay untuk akronim yang terlalu ramai!
Mason Wheeler
3
Jika seseorang menggunakan alat formal untuk membuat parser (atau terutama validator) untuk JFIF dll, maka para insinyur mungkin menyebutnya sebagai "bahasa". Lebih cenderung sebagai "tata bahasa".
JDługosz
3
@ MasterLister: Ya, mereka adalah bahasa, tetapi karena mereka mendefinisikan struktur data yang dapat digunakan kembali mereka memiliki nama khusus: format . Tapi, ya, ini juga bahasa.
Lightness Races dalam Orbit
4
@ Mr.Lister: Memberi nama format lebih merupakan masalah pemasaran. Orang-orang XML disebut XML untuk XML karena "* ML" menunjukkan hubungan keluarga dengan format pendahulunya seperti GML dan SGML, dan karena mereka menganggapnya keren dengan tanda X di depan. Dan GML disebut GML karena itu adalah bahasa markup umum, tetapi juga karena itu adalah inisial dari tiga perancang bahasa. Jadi pada dasarnya L dalam XML adalah karena seorang pria bernama Raymond L orie termasuk di antara perancang bahasa markup pertama.
JacquesB
12

Bahasa adalah metode penyampaian informasi.

Bahasa pemrograman adalah metode penyampaian algoritma.

Bahasa markup seperti XML adalah bahasa untuk menyampaikan data.

Philipp
sumber
... dan data itu mungkin merupakan deskripsi suatu algoritma.
Luaan
@Luaan ... dan bahasa pemrograman juga dapat disalahgunakan untuk menyampaikan data. Seperti dengan JSON, misalnya.
Philipp
2
Anda bahkan bisa kambuh. Saya telah melihat skrip NAnt (bahasa berbasis XML) yang berisi kode C #, yang hanya digunakan untuk penyimpanan data. Menggunakan string literal yang berisi XML. Ya, itu adalah hal yang membuat pria dewasa menangis: P
Luaan
2

XML adalah bahasa meta. Anda menggunakannya untuk menentukan bahasa tertentu. Bahasa tidak pernah melakukan apa-apa, mereka hanya memungkinkan kita untuk mengekspresikan sesuatu. Juga, tidak benar bahwa XML adalah "bahasa penyimpanan". Justru sebaliknya, pada kenyataannya. Anda dapat menyimpan dokumen XML sesuka Anda. XML lebih baik dianggap sebagai bahasa transfer. PS. Jika Anda tidak berpikir XML "melakukan" apa pun, Anda harus menjelaskan bagaimana banyak sistem (mis. Dermaga) menggunakan XML sebagai bahasa pemrograman (buruk). Ini merupakan penyalahgunaan XML yang disesalkan, tetapi ada di alam bebas, dan itu hanya satu dari banyak contoh.


sumber