Saya ingin mengajukan pertanyaan tentang notasi XML dan S-expressions (-ish). S-ekspresi cukup tua; mereka juga sangat sederhana. Kita dapat mempertimbangkan dua bentuk yang memiliki arti yang sama, berbeda dalam sintaksisnya:
(kode xml diambil dari wikipedia bahasa Polandia )
<?xml version="1.0" encoding="UTF-8"?>
<ksiazka-telefoniczna kategoria="bohaterowie książek">
<!-- komentarz -->
<osoba charakter="dobry">
<imie>Ambroży</imie>
<nazwisko>Kleks</nazwisko>
<telefon>123-456-789</telefon>
</osoba>
<osoba charakter="zły">
<imie>Alojzy</imie>
<nazwisko>Bąbel</nazwisko>
<telefon/>
</osoba>
</ksiazka-telefoniczna>
Versi S-Ekspresi (-ish):
(:version "1.0" :encoding "utf-8")
(ksiazka-telefoniczna :category "bohaterowie książek"
; komentarz(a comment)
(osoba :charakter "dobry"
(imie Ambroży)
(nazwisko Kleks)
(telefon 123-456-789))
(osoba :charakter "zły"
(imie Alojzy)
(nazwisko Bąbel)
(telefon)))
Versi S-Expression jauh lebih ringkas. Kami menghindari redundansi dengan menggunakan notasi daftar sederhana, namun kami masih dapat mendefinisikan sintaks untuk memasukkan hal-hal yang ingin kami miliki (mis. Properti). Tentu saja, ini hanya sebuah contoh, dan standar aktual bisa saja lebih baik atau hanya berbeda; Namun, ini lebih pendek dan lebih mudah diurai. Mengapa XML menang?
(para "This is a paragraph " (footnote "(better than the one under there)" "." /footnote) /para)
.Jawaban:
Kita tahu bahwa perancang XML sudah terbiasa dengan ekspresi S, karena XML didasarkan pada SGML, dan SGML memiliki bahasa style sheet, DSSSL, yang menggunakan sintaks ekspresi-S (dan skema sebagai bahasa skrip tertanam).
Namun demikian mereka memilih sintaks yang berbeda dari ekspresi S karena kasus penggunaan untuk XML. XML pada awalnya dirancang untuk mendukung data terstruktur yang dihasilkan mesin dan bahasa markup seperti HTML, yang ditulis secara manual dan berisi konten campuran (teks yang bercampur dengan elemen-elemen dengan metadata).
Redundansi
Dokumen teks markup seringkali lebih panjang dari satu layar penuh. Jika Anda melihat a
)
dan Anda tidak dapat melihat awal struktur, Anda sangat tersesat; Anda tidak tahu apakah itu bab atau bilah sisi yang baru saja berakhir. Redundansi pengulangan tagname dalam endtags dalam XML seperti</sidebar>
membuat ini jauh lebih mudah bagi penulis manusia. Itu juga membuatnya lebih kuat: jika Anda secara tidak sengaja menghapus tag akhir, Anda sering dapat menyimpulkan tag akhir mana yang hilang.SGML (pendahulu ke XML) memungkinkan Anda untuk secara singkat mempersingkat tag-akhir menjadi satu karakter, tetapi fitur ini tidak disertakan dalam XML untuk kesederhanaan.
Jadi singkatnya, XML lebih berdasarkan desain, karena dirancang untuk mendukung dokumen yang dapat diedit manusia. Hari ini XML digunakan untuk berbagai keperluan, juga untuk komunikasi mesin-ke-mesin murni, di mana redundansi ini tidak diperlukan.
Konten campuran
Sintaks yang Anda sarankan tidak akan mendukung konten campuran dengan baik. Ambil contoh ini dalam HTML:
Bagaimana Anda mengungkapkan ini dalam sintaksis Anda? Anda membutuhkan pembatas tambahan untuk membedakan antara atribut dan konten teks. Tiba-tiba itu tidak begitu ringkas lagi.
Karakter spesial
Kurung sudut jauh lebih jarang dalam teks biasa daripada tanda kurung dan titik dua.
Kesesuaian
HTML sudah sangat sukses pada saat XML dirancang, dan masuk akal untuk memilih sintaksis yang sama.
Mengapa XML menang?
S-expressions tidak pernah menjadi alternatif untuk XML. Spesifikasi XML lebih dari sekadar kurung sudut; Ini mendefinisikan sintaks untuk elemen dan atribut dan konten campuran, melarikan diri, pengkodean karakter, sintaksis DTD dan validasi dan sebagainya. Tidak ada yang serupa untuk ekspresi-s. Tentu saja Anda dapat mendefinisikan standar yang sama, seperti yang Anda usulkan di sini, tetapi tidak ada yang melakukan ini pada saat itu. XML diberkati oleh W3C dan karenanya diadopsi oleh pemain utama dan menjadi standar defacto untuk pertukaran data.
sumber
<PRE>
elemen dalam HTML. Jadi saya berasumsi bahwa kutipan akan diperlukan.Secara pribadi, saya pikir bagian terbaik tentang XML adalah kemampuan skema yang terdefinisi dengan baik, daripada sintaksinya. Mekanisme skema memungkinkan pengguna untuk mempublikasikan format dokumen mereka untuk membagikan apa yang mereka anggap dokumen yang valid. Ada juga validator otomatis. Plus, jenis dan skema yang dibuat oleh satu pengguna dapat diperluas oleh pengguna lain.
Sejauh yang saya tahu tidak ada yang membuat upaya mendekati untuk membakukan mekanisme tujuan umum skema untuk ekspresi-s, kecuali untuk bahasa LISP itu sendiri (yang sampel dalam pertanyaan OP tidak menggunakan).
sumber
Berikut adalah dua alasan mengapa saya akan memilih XML daripada sesuatu "S-ekspresi-ish":
Model sintaksis dan semantik yang terdefinisi dengan baik
XML bukan hanya pohon node, tetapi pohon node yang dikategorikan yang memiliki representasi sintaksis yang berbeda dan perilaku yang berbeda. Misalnya, atribut dengan nama yang diberikan hanya dapat muncul sekali untuk node yang diberikan, sedangkan node anak dapat muncul beberapa kali.
Anda bisa mendefinisikan model seperti itu di atas ekspresi S umum. Contoh Anda menunjukkan skema untuk mengelompokkan atribut dan elemen anak. Tambahkan semantik untuk teks, komentar, dan instruksi pemrosesan, dan Anda akan memiliki sesuatu yang isomorfik dengan XML.
Alat
Dari model sintaksis dan semantik standar, Anda dapat membuat alat - dan banyak orang memilikinya. Anda dapat menemukan beberapa bentuk parser XML / serializer, XPath, dan prosesor XSLT untuk setiap bahasa / platform umum. Dan Anda tahu bahwa mereka semua akan berperilaku sama di setiap platform.
Dan berikut ini beberapa hal lain yang perlu dipertimbangkan:
Dalam skema besar, XML bukanlah kata yang tepat
Dalam contoh Anda, apa yang sebenarnya telah Anda hilangkan? Saat saya membacanya, Anda sudah:
>
yang biasanya memisahkan tag pembuka dari anak-anaknya.=
yang memisahkan nama atribut dan nilai dengan a:
untuk menunjukkan bahwa anak adalah atribut; tidak ada tabungan.Saya pikir penting juga untuk mengenali bahwa representasi XML internal dan eksternal sangat berbeda. Secara internal, pohon XML sangat kompak. Dan karena berbagai elemen sudah dikategorikan, itu sangat efisien untuk memanipulasi. Secara eksternal, yah, Anda mendapatkan semua tag penutup, tetapi kompresnya baik.
Apakah "verbal" adalah masalah sebenarnya?
Saya pikir pertanyaan sebenarnya bukanlah apakah XML "verbose", tetapi apakah itu lebih ekspresif daripada yang diperlukan untuk tujuan tertentu. Beberapa contoh:
sumber