Jika XML sangat buruk ... mengapa begitu banyak orang menggunakannya? [Tutup]

37

Saya mengerti tujuan XML, tapi saya selalu mendengar orang mengeluh tentang betapa buruknya itu? Saya tidak begitu mengerti apa yang seburuk itu? Saya biasanya mendengar istilah "kembung" dan "lambat".

Tapi saya kira sebagai programmer, untuk apa Anda menggunakannya? Dan apakah Anda benar-benar menganggapnya "buruk" ... karena jika ya, banyak orang yang menggunakannya untuk mengirim data ...


sumber
1
Jawaban Anda ada dalam pertanyaan. Orang masih menggunakannya karena orang biasa menggunakannya, dan opsinya adalah (1) menulis ulang semua kode yang menggunakannya sebelum JSON dan YAML, atau (2) menyedotnya dan melakukan hal bodoh. Banyak orang masih mengabadikan siklus kekerasan juga. Itu tidak membuktikan nilai yang melekat dari latihan.
Parthian Shot
5
Coba JSON untuk dokumen yang sebenarnya (halaman manual, Knuth, Hamlet, dll). Anda kemudian akan mengerti mengapa XML itu penting. Ini adalah ruang di mana JSON sucks (silakan, coba). Menggunakan salah satu di ruang desain yang lain dipertanyakan. Masalah dari menggunakan XML di ruang JSON terutama verbositas dan kecepatan, sedangkan masalah dari menggunakan JSON di ruang XML cenderung melibatkan portabilitas (mencoba untuk bekerja sama dengan teman yang membuat buku di JSON, tetapi dengan caranya sendiri), integritas, dan masalah interpretasi yang membutuhkan banyak upaya manusia untuk memperbaikinya. Gunakan alat yang tepat untuk pekerjaan Anda.
TextGeek
XML hanya buruk karena banyak orang menyalahgunakannya untuk hal-hal yang tidak dirancang untuknya. Jika Anda tidak membutuhkan data Anda untuk dapat diperpanjang (yaitu skema digunakan oleh banyak pihak yang perlu untuk beroperasi, daripada ditentukan secara terpusat oleh satu pihak yang berwenang), dan jika data Anda bukan dokumen (yaitu jika DOM akan Sudah menjadi abstraksi data Anda yang buruk), maka XML tidak cocok untuk aplikasi tersebut. Ketika domain masalah Anda berada di bawah apa yang dirancang untuk XML, tidak ada yang cocok dengan XML. JSON, YAML, dll tidak cocok untuk ruang yang sebenarnya dirancang untuk XML.
Lie Ryan

Jawaban:

90

Xml sangat bagus untuk apa yang telah dirancang - platform netral, protokol transfer data yang dapat dibaca manusia dengan beberapa kemampuan untuk menegakkan validasi data pada level rendah. Saya ragu siapa pun yang menggunakan Xml dengan cara ini memiliki keluhan nyata. Apakah ini format kawat yang paling berhasil? Tidak. Tapi ada opsi yang lebih buruk. Apakah secepat membaca format biner kustom Anda? Tidak. Tetapi mitra bisnis Anda dapat membacanya di tumpukan apa pun yang mereka gunakan.

Masalahnya, bagaimanapun, adalah bahwa manusia - khususnya keturunan yang dikenal sebagai arsitek perusahaan - adalah jahat dan mengambil hal-hal baik dan menjadikannya buruk. Dalam kasus Xml, bagian awal abad ini melihat Xml sebagai palu universal untuk setiap masalah TI. Taburkan dalam desain kecil oleh komite dan Anda berakhir dengan beberapa monster mengerikan seperti SOAP dan oXML . Tak satu pun dari yang harus diharapkan pada musuh, tidak pernah menghiraukan teman atau kolega.

Wyatt Barnett
sumber
15
+1 - siapa pun yang pernah berurusan dengan EDI hanya berharap XML telah ditemukan sebelum kekacauan itu terjadi.
Scott Whitlock
12
+1 Mencocokkan pikiran saya hampir persis. Saya hanya akan menambahkan itu untuk menyimpan data yang sederhana dan sederhana, meskipun itu hirarkis (tapi tidak terlalu dalam, yang tidak menyatu dengan apa pun ), ada format tertentu yang berfungsi dengan baik - terutama JSON dan YAML. Yang terakhir ini luar biasa dalam hal keterbacaan manusia.
11
Mengutip jwz: "Ada semacam programmer yang akan melihat masalah apa pun dan berkata, 'Saya tahu, saya akan menggunakan XML.' Sekarang dia memiliki dua masalah. "
Adam Crossland
13
Tolong beritahu saya oXML dimaksudkan sebagai lelucon, seperti Brainfuck atau Whitespace atau LOLCODE.
dsimcha
9
@Shamim Hafiz, SABUN jelas merupakan salah satu keburukan terburuk yang pernah dibiakkan oleh umat manusia.
SK-logic
24

XML hanyalah alat yang memiliki banyak rasa dan kegunaan. XML unggul dalam beberapa hal dan mengisap yang lain. Saya pikir salah satu masalah adalah orang-orang telah melihat "perusahaan" XML yang tidak perlu rumit dengan ruang nama dan omong kosong berserakan (SOAP, ada orang?). Trik untuk mendesain format XML untuk manusia adalah menambahkan makna nyata pada data tanpa membuatnya berlebihan untuk dibaca.

Salah satu hal yang menjadi masalah orang adalah bahwa XML terkadang tersedak beberapa karakter atau beberapa braket yang hilang. Namun, ada sisi positif dan negatifnya. Sisi baiknya adalah Anda tidak memiliki ambiguitas seperti yang Anda miliki dengan HTML di mana berbagai kasus sintaksis semi-tidak valid dapat ditafsirkan secara berbeda.

Kelemahannya adalah agak sulit untuk penulis dan sulit untuk dipelajari. Saya setuju ada argumen yang dibuat bahwa web tidak akan menjadi terlalu cepat jika HTML seketat XML, tapi saya juga berpendapat bahwa kami akan senang jika melakukannya hari ini. :)

Juga, jangan menggunakannya untuk semuanya hanya karena Anda bisa, memiliki akal dan penilaian untuk menerapkannya dengan tepat. Jika semua yang Anda miliki adalah XML, Anda cenderung selalu menjadi transformasi XSLT dari yang Anda inginkan. :)

Saya berpendapat bahwa format hanya penting ketika manusia perlu berinteraksi dengannya. Jika Anda menulis beberapa program yang membuat serial sesuatu dan mengirimkannya ke suatu tempat di mana ia akan dikonsumsi oleh program Anda yang lain, siapa yang peduli seperti apa bentuknya selama itu seefisien mungkin? Gunakan format biner atau kelinci dan unicorn untuk semua yang saya pedulikan.

Pro dari XML

  • Meliputi banyak kasus tepi yang tidak YAML dan JSON
  • Ada alat yang sangat baik untuk mem-parsing dan memvalidasi XML dalam berbagai platform dan bahasa yang berbeda
  • XML dapat dengan mudah dan kuat diubah menjadi format lain (melalui hal-hal seperti XSLT)
  • Dokumen XML yang wajar sederhana untuk dibaca dan diedit manusia; jangan bilang JSON lebih mudah, tidak :)
  • XML menggambarkan diri sendiri sampai taraf tertentu, yaitu XML secara langsung berisi informasi tentang struktur dan maknanya (berbeda dengan kebanyakan format biner)
  • Menangani pengodean
  • Whitespace agnostic, yang memudahkan penggunaan lintas-platform
  • Istirahat jika tidak terbentuk dengan baik (Memastikan data secara struktural benar)
  • Itu bukan SGML

Cons

  • Verbose
  • Tidak secepat mengurai biner
  • Hancur jika tidak terbentuk dengan baik (aplikasi Anda mogok)

Penggunaan yang baik

  • File konfigurasi
  • Format pertukaran data
  • Format file versi tangguh
  • Menyimpan dokumen dalam database

Penggunaannya tidak begitu baik

  • Format transfer data
  • Obyek serialisasi
  • Menyimpan data relasional dalam database
  • Format file untuk skenario I / O kinerja tinggi
Homde
sumber
13
Saya ragu bahwa "file konfigurasi" harus di bawah "kegunaan yang baik". Mereka bukan data, melainkan instruksi.
daknøk
3
Saya dengan @ daknøk di sini - Saya tidak dapat menghitung berapa kali saya harus menghabiskan banyak waktu mencari tahu bug konfigurasi dalam kumpulan panjang file XML yang menentukan injeksi ketergantungan, yang didasarkan pada satu kesalahan ketik kecil di atribut XML.
Gjallar
3
Jika data buruk membuat aplikasi crash, apakah itu data yang bermasalah?
James Snell
4
Setiap format file yang cacat / rusak berpotensi merusak perangkat lunak yang rusak. Jadi XML bukan pelakunya di sini ... hanya aplikasi Anda. Kalau tidak, posting yang bagus.
Thomas Eding
3
Bisakah Anda memperluas pada "Mencakup banyak kasus tepi yang YAML dan JSON tidak."
Trevor Hickey
14

Jeff Atwood memiliki posting blog yang cukup bagus di XML: Pajak Angle Bracket tentang ini jika Anda ingin sumber membicarakannya.

Kegunaan paling umum yang saya miliki untuk itu adalah:

  • Layanan berbicara satu sama lain. Misalnya, situs web yang menggunakan sistem manajemen konten harus mengirim beberapa data ke sistem manajemen hubungan pelanggan dan ini dilakukan dengan XML.

  • Penyimpanan konfigurasi. Web.config dan app.config menjadi contoh umum tetapi skrip nAnt juga dapat menggunakan beberapa XML.

Saya tidak berpikir itu optimal tetapi itu saja tidak membuatnya buruk bagi pikiran saya.

JB King
sumber
11

Dua alasan:

  1. Ada banyak sekali programmer yang buruk di luar sana. XML mungkin buruk, tetapi juga sederhana (setidaknya di permukaan) dan membuatnya sangat mudah untuk menulis perangkat lunak yang buruk. Agak seperti VB.
  2. Banyak orang yang membuat keputusan ini bukan programmer, tetapi tipe bisnis yang hanya mendengar bahwa "semua orang menggunakan XML" dan mereka memutuskan ingin produk mereka juga menggunakan XML.
Mason Wheeler
sumber
Benar-benar poin yang absurd dan sama sekali tidak berguna. 1) XML jauh dari buruk dan sama sekali tidak ada hubungannya dengan kualitas perangkat lunak orang menulis apakah mereka memilihnya atau tidak, saya telah melihat programmer VB cukup baik, menyiratkan bahwa jika Anda menggunakan VB Anda benar-benar menulis perangkat lunak yang buruk adalah konyol saja karena ada keterputusan total antara cara Anda menulis perangkat lunak dan apa yang Anda gunakan untuk menulisnya. 2) Namun asumsi salah lain, memilih XML itu bagus dan sebagian besar orang yang memilihnya untuk yang lebih baik atau lebih buruk tentu saja programmer. XML bukan peluru perak, tetapi bagus untuk hal-hal tertentu.
Eyal Solnik
2
@EyalSolnik: Beberapa orang, ketika dihadapkan dengan suatu masalah, berpikir “Saya tahu, saya akan menggunakan XML.”<Problem:Worsening> <Problem:TimeDescription>Now</Problem:TimeDescription> <Problem:Posessive>they have</Problem:Posessive> <Problem:Quantity>many, many</Problem:Quantity> <Problem:WorseningDescription>more problems</Problem:WorseningDescription> </ProblemWorsening>
Mason Wheeler
3
Hanya karena orang menyalahgunakan sesuatu tidak berarti teknologinya sendiri buruk, Anda dapat melihat sindrom yang sama di banyak tempat.
Eyal Solnik
8

Saya biasanya mendengar istilah "kembung" dan "lambat".

Ini bukan sintaks yang paling kompak, tetapi jelas yang paling ekspresif. Dapat dibaca manusia? tergantung pada bagaimana Anda mendesain bahasa Anda. Kebanyakan orang tidak mendesain bahasa untuk XML, mereka hanya membuat serial objek sebagai XML.

... mengapa begitu banyak orang menggunakannya?

Itu ada di mana-mana. Anda dapat meminta basis data XML dengan XQuery, mengubah hasil dengan XSLT sebagai XHTML atau Atom, mendapatkan Atom atau format XML lainnya dari layanan web lain, mendapatkan XML dari pengguna menggunakan XForms, memvalidasinya dengan XMLSchema, Relax NG atau Schematron, memprosesnya dengan XProc, simpan kembali ke database dengan Pembaruan XQuery. Semua alat ini memahami XML, jadi tidak perlu untuk memetakan antara representasi yang berbeda.

XML bukan teknologi serialisasi, ini adalah kumpulan informasi tujuan umum.

Max Toro
sumber
... dan kami bertanya selama bertahun-tahun mengapa sabun SOAP telah dibangun di atas XML.
JensG
6

Di sini, kami menggunakannya untuk pertukaran data antara sistem yang berbeda yang dibuat oleh vendor yang berbeda dengan representasi internal yang berbeda. Kami membangun sistem transformasi / interchange XML untuk mengirim ulang data bolak-balik. Ini berfungsi dengan baik untuk itu.

XML pada dasarnya tidak buruk, tetapi saya mengakui bahwa mendesain solusi "baik" menggunakan XML tidak sepele.

FrustratedWithFormsDesigner
sumber
5

"Inti dari XML adalah ini: masalah yang diselesaikannya tidak sulit, dan itu tidak menyelesaikan masalah dengan baik." - Phil Wadler, POPL 2003

Pendapat pribadi saya adalah selama Anda tidak peduli tentang validasi, skema, XSLT, dan hal-hal buruk lainnya dan Anda menjaga ukuran file kecil (jika parsing menjadi lambat) Anda dapat menemukan beberapa kegunaan XML yang baik (contoh adalah untuk mengkonfigurasi aplikasi Anda daripada menggunakan file INI).

sakisk
sumber
4

Dalam pengalaman saya, kebanyakan orang mengeluh tentang cara itu digunakan, bukan teknologi itu sendiri.

Bit kembung dan lambat yang dikeluhkan orang biasanya adalah perpustakaan / metode yang digunakan untuk mengambil info darinya.

Saya menggunakannya untuk menyimpan sejumlah kecil informasi terstruktur yang ingin saya simpan pada disk (tanpa basis data atau serialisasi biner), atau meneruskan ke aplikasi lain (yang pada dasarnya juga menggambarkan SOAP).

Steven Evers
sumber
2

Ini Bagus karena:

Ini adalah "Antarmuka" standar yang dapat digunakan berbagai sistem heterogen untuk berkomunikasi. Dan "Manusia" Dapat Dibaca (semacam, coba menatap 5 MB XML)

Ini buruk karena:

Ukurannya lebih besar, lebih besar = lebih banyak bandwidth = lebih banyak $$

Ada alasan lain, setiap orang memiliki keluhan ...

Malam gelap
sumber
4
@Darknight: Saya menantang manusia yang dapat dibaca dengan melemparkan Entitas Xml pada Anda ... (personal peeve)
Matthieu M.
1
Saya tidak berpikir XML secara inheren kembung - tetapi implementasi itu. Saya menemukan XML-RPC sangat mengerikan di mengasapi yang tidak perlu.
HorusKol
3
@ HorusKol: <advanceAcceptanceIndicator>Y</advanceAcceptanceIndicator>Rasio data / markup sangat rendah ... Saya menyebutnya "kembung". JSON, misalnya, akan hanya sebagai setengah membengkak: advanceAcceptanceIndicator: "Y". Ada juga fakta bahwa teks di antara tag adalah valid, jadi ketika membaca Xml, Anda perlu memutuskan apa yang harus dilakukan dengan cruft ini \n\t\t\t, dan solusinya adalah dengan mengabaikannya saja, karena Anda tidak pernah benar-benar tertarik untuk memulainya.
Matthieu M.
1
@ HorusKol: Ya, tapi saya tidak pernah mengatakan itu adalah nilai boolean, itu hanya menjadi karakter tunggal :) Penggunaan atribut di sini ( value?) Mungkin akan lebih unggul juga, karena orang bisa tergoda untuk memasukkan spasi putih antara dua tag.
Matthieu M.
1
"Ukurannya lebih besar, lebih besar = lebih banyak bandwidth = lebih banyak $$" Saya kira kompresi belum ditemukan di tempat Anda sekarang.
Andy
2

Seperti halnya teknologi lainnya: ada banyak alat dan perpustakaan yang tersedia.

Saya tidak suka XML, terutama karena itu funky, ketika orang mengatakan itu dapat dibaca manusia, mereka bercanda, saya pikir, atau tidak pernah benar-benar membaca xml ketika seseorang mencoba menanamkan xml dalam atribut ... entitas xml membuatnya sangat tidak terbaca. Selain itu, luar biasa betapa banyak ruang yang terbuang karena tag-end yang berlebihan, dan kemampuan untuk mencampur teks dan data gratis ...

Tapi:

  • Xml dapat ditentukan (xsd) dan tersedia alat yang memeriksa kesesuaian data Xml
  • banyak alat (editor teks dan sejenisnya) mendukung Xml
  • banyak perpustakaan (dalam setiap bahasa pemrograman) mendukung Xml

Ini juga memiliki keunggulan diutamakan, sebagian besar kali. Ketika Anda sudah menyediakan layanan web dalam Xml, dan seseorang meminta layanan baru ... itu mungkin akan dilakukan dalam Xml karena itulah yang Anda ketahui.

Matthieu M.
sumber
5
XML lebih mudah dibaca daripada data biner atau posisi-atau dibatasi koma.
FrustratedWithFormsDesigner
Hanya untuk pengguna yang naif. Jika saya harus memindai secara visual beberapa ratus catatan untuk mencari satu yang hilang beberapa data, saya lebih suka mencari beberapa kolom kosong di blok catatan panjang tetap daripada mengarungi banyak elemen dan atribut mencari tag kosong.
TMN
1
@FrustratedWithFormsDesigner: itu benar-benar tergantung pada data yang ada. Xml menanamkan sifat informasi di dekat informasi yang tepat. Jika Anda melihat bahasa pemrograman fungsional Anda akan melihat hal-hal seperti (Haskell):, data Person = Person { surname :: String, firstName :: String, age :: Int }jika saya kemudian melihatnya Person "Doe" "John" 42dapat dibaca juga, dan menghindari banyak cacat, namun itu lebih dekat dengan koma yang dibatasi.
Matthieu M.
1
Ok, Contoh Anda lebih mudah dibaca tanpa markup, tetapi sepele (saya katakan kurang dari 8 atau 9 elemen data) contoh dapat dibuat untuk mendukung semua bentuk (kecuali mungkin biner). Umpan data dari mainframe berasal sebagai string yang dibatasi posisi (dan sebagian besar hanya berupa kode numerik), dan mereka lebih mudah dibaca dan di-debug dan dikelola setelah diubah ke XML. Seperti yang Anda katakan, itu bisa bergantung ...
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner: Ya, itu maksud saya :) Tergantung, tetapi karena ada ekosistem yang kaya untuk XML, dan karena lebih mudah untuk hanya memelihara satu set alat / perpustakaan, orang biasanya menggunakan XML untuk semuanya. Secara pribadi, saya lebih menyukai JSon daripada XML, tetapi sekali lagi tanpa lekukan, itu berantakan: p
Matthieu M.
-1

XML adalah pilihan yang buruk untuk file yang harus dikelola oleh manusia. Tidak ada pemisahan visual antara markup dan konten, sehingga sulit dibaca. Sangat membosankan untuk menulis dengan benar tanpa editor tujuan khusus. Kesalahan dalam dokumen XML berakibat fatal; dokumen XML tidak dapat diproses sebagian. Ketika file XML tidak valid, pesan kesalahan yang dihasilkan sering tidak membantu.

Untuk file apa pun yang harus dikelola oleh manusia, saya lebih suka menggunakan JSON, YAML, atau kode sumber apa pun dalam beberapa bahasa yang ditafsirkan (Python, Ruby, Groovy, dll.). Kami telah menemukan bahwa cara terbaik untuk membuat konfigurasi XML untuk kode lawas adalah dengan menggunakan Groovy MarkupBuilder. Pilihan bagus lainnya adalah membuat bahasa khusus domain; ini cukup mudah dilakukan dengan Ruby, Groovy, dan banyak bahasa lainnya.

kevin cline
sumber
8
Saya pikir Anda kehilangan titik XML, markupnya adalah konten. Tujuan XML adalah untuk menggambarkan makna data Anda. Misalnya, jika Anda memiliki nomor telepon, memberi tag sebagai nomor telepon rumah atau nomor ponsel menambah konteks yang mungkin digunakan orang lain. Atau menambahkan tag telepon di sekitar teks sama sekali untuk hal ini (mungkin membuat nomor itu dapat dipanggil pada ponsel). Adapun poin Anda yang lain saya tidak setuju juga. Membuat dokumen xml biasanya cukup mudah. Pesan kesalahan selalu terkait dengan performa yang baik dan saya akan mengedit xml dengan menyerahkan JSON setiap hari
Homde
@konrad contoh ponsel Anda akan valid untuk HTML.
Florian F
"Setiap kesalahan dalam dokumen XML adalah fatal; dokumen XML tidak dapat diproses sebagian." Ya, itu setara dengan XML.
Andy
@Andy Cukup tidak berguna jika XML ditulis oleh manusia dan aplikasi hanya mengatakan "salah!". Editor manusia perlu mengetahui garis di mana kesalahan terdeteksi.
kevin cline
Sejumlah alat memberi tahu Anda garis mana dan sering karakter apa yang terdeteksi kesalahannya. Alat XML di NotePad ++ misalnya. .Net akan memberi tahu Anda persis di mana file .config Anda juga salah. Jika Anda berbicara tentang API, salah satu manfaat XML adalah bahwa pengembang API juga dapat memberikan XSD, yang selain memastikan sintaks XML yang valid juga dapat memberi tahu Anda jika Anda memiliki elemen yang bukan milik, jika ada hanya menjadi salah satu elemen itu, dll. json tulisan tangan jauh lebih mudah untuk mengacaukan.
Andy
-2

Parsing relatif mudah sekaligus dapat dibaca manusia pada saat yang bersamaan.

Dan beberapa parser yang bagus (Eg Xerces {c ++}) sudah tersedia.

Simon
sumber
2
Yah, itu mudah asalkan dokumennya kecil. Jika Anda harus mem-parsing dokumen terlalu besar untuk masuk ke dalam memori, maka semuanya menjadi suram.
TMN
Saya akan mempertanyakan bagian keterbacaan manusia. Hanya butuh terlalu banyak upaya untuk membaca XML daripada membaca JSON yang setara.
cmaster