XSLT dan kemungkinan alternatif [ditutup]

14

Saya telah melihat XSLT untuk mengubah satu file XML menjadi file lain (HTML, dll.). Sekarang sementara saya melihat bahwa ada manfaat untuk XSLT (menjadi alat standar dan bekas) saya enggan karena beberapa alasan

  • Prosesor XSLT tampaknya cukup besar / sumber daya haus
  • XML adalah notasi buruk untuk pemrograman dan itulah yang dimaksud dengan XSLT.

Itu tidak ingin troll XSLT di sini meskipun saya hanya ingin menunjukkan apa yang saya sukai tentang hal itu untuk memberi Anda gambaran tentang apa yang saya harapkan dari alternatif.

Memiliki beberapa latar belakang Lisp saya bertanya-tanya apakah ada cara yang lebih baik untuk transformasi struktur pohon berdasarkan beberapa cadel. Saya telah melihat referensi DSSSL, sayangnya sebagian besar tautan tentang DSSSL sudah mati sehingga sudah sulit untuk melihat beberapa kode yang menggambarkannya. Apakah DSSSL masih digunakan? Saya ingat bahwa saya telah menginstal OpenJade sekali ketika memeriksa hal-hal buku dokumen.

Posting blog Jeff Atwood tampaknya mengisyaratkan tentang penggunaan Ruby alih-alih XSLT.

Apakah ada cara waras untuk melakukan transformasi XML yang mirip dengan XSLT dalam bahasa pemrograman non-xml? Saya akan terbuka untuk masukan

  • Perpustakaan yang berguna untuk bahasa scripting yang memfasilitasi transformasi XML
  • terutama (tetapi tidak secara eksklusif) bahasa transformasi mirip-lisp, atau Ruby, dll.

Beberapa hal yang saya temukan sejauh ini:

Wirrbel
sumber
Saya sering menggunakan HXT dan Haskell, ini sangat menyenangkan
Daniel Gratzer
5
Sebenarnya, bukan Jeff Atwood yang mendukung Ruby, dia mengutip Martin Fowler yang lebih suka Ruby. Posting asli oleh Fowler ada di sini: martinfowler.com/bliki/MovingAwayFromXslt.html Dan itu ditulis 10 tahun lalu pada 2003 - Saya pikir XSLT 2.0 keluar pada 2007 dan dengan banyak perbaikan, dan XPath 2.0 pada 2010.
FrustratedWithFormsDesigner

Jawaban:

17

Sulit untuk menilai teknologi ketika Anda tidak memiliki pengalaman mendalam tentang hal itu, tetapi tentu saja saat itulah Anda harus membuat keputusan, jadi tidak ada jawaban sederhana untuk dilema itu.

Anda mengutip dua masalah: kinerja dan kegunaan. Saya akan mencoba mengatasi keduanya di bawah ini.

Pertama, kinerja. Kinerja tentu saja tidak hanya tergantung pada bahasa tetapi juga pada implementasi, dan juga pada keahlian para pengguna. Prosesor XSLT yang berbeda dapat sangat bervariasi dalam kinerja, dan prosesor yang sama dapat sangat bervariasi tergantung pada bagaimana penggunaannya (dengan Saxon, misalnya, orang yang memiliki masalah kinerja sangat sering ditemukan menggunakannya dengan DOM, yang merupakan kombinasi yang buruk. , dan kinerja dapat meningkat sepuluh kali lipat jika Anda menggunakan model pohon asli Saxon sebagai gantinya). Jadi saran pertama adalah jangan mengambil kinerja pada kabar angin, mengukurnya; dan saran kedua adalah memastikan bahwa orang yang melakukan pengukuran memiliki pengalaman yang cukup untuk tidak membuat kesalahan konyol. Lebih mudah diucapkan daripada dilakukan.

Secara kasar, Anda dapat memisahkan pekerjaan transformasi menjadi dua kategori: sederhana dan kompleks. Untuk transformasi sederhana, dengan prosesor XSLT yang baik waktunya dihabiskan untuk mengurai dan membuat serial dan waktu pemrosesan XSLT hampir tidak terlihat. Karena teknologi lain akan mengeluarkan biaya penguraian dan serialisasi yang sama, pilihan teknologi transformasi tidak akan membuat perbedaan besar (kecuali mungkin sangat untuk pengkodean tingkat rendah menggunakan streaming, tetapi tidak banyak orang mampu membayar pemrograman waktu dan keterampilan yang diperlukan untuk mengimplementasikannya). Untuk transformasi kompleks pada dokumen besar, Anda mulai mendapatkan masalah yang sama dengan pemrograman SQL: mencapai kinerja yang baik memerlukan interaksi yang baik antara keterampilan dan pengetahuan programmer, dan kemampuan pengoptimal. Seperti SQL, itu Sangat mudah dalam bahasa tingkat tinggi untuk menulis beberapa pernyataan sederhana yang mengakibatkan prosesor harus melakukan pekerjaan yang sangat besar. Tetapi juga dengan SQL, programmer yang tahu apa yang mereka lakukan akan melakukan jauh lebih baik daripada pemula.

Kedua, kegunaan. Sintaks berbasis XML untuk XSLT sangat tidak menyenangkan bagi banyak orang pada pertemuan pertama dengan bahasa. Tetapi ada alasan bagus dan manfaat nyata untuk melakukannya dengan cara ini: ada argumen "templat", bahwa banyak kode terdiri dari XML untuk ditulis ke dokumen hasil, dan cara terbaik untuk menulis XML adalah dalam XML. Dan ada argumen "refleksi"; dalam sistem kompleks besar, sangat umum untuk menemukan stylesheet yang menghasilkan stylesheet. Lalu ada argumen "alat"; jika Anda berada di toko XML, Anda mungkin memiliki banyak tooling XML seperti editor yang diarahkan pada sintaks, dan ada baiknya untuk dapat menggunakan alat yang sama untuk menangani program dan data Anda. Kerugiannya ternyata cukup kosmetik dibandingkan: ada adalah jumlah penekanan tombol yang terlibat dalam pengeditan (mudah diperbaiki dengan alat pengeditan yang baik), dan ada verbositas kode (mengurangi keterbacaannya). Verbositas ini sangat berkurang di XSLT 2.0 dengan diperkenalkannya fitur-fitur seperti ekspresi reguler dan fungsi stylesheet: banyak stylesheet dikurangi menjadi ukuran setengah atau sepertiga ketika mereka memanfaatkan penuh XSLT 2.0.

Anda menyebutkan DSSSL membuat saya tersenyum masam. Saya tidak pernah menggunakan DSSSL, tetapi cerita yang saya dengar adalah bahwa itu tidak menarik karena sintaksisnya misterius, dan tidak terkait dengan sintaks data (SGML). Penggunaan sintaks XML untuk XSLT sangat termotivasi oleh pengalaman dengan DSSSL.

Ada orang yang suka XSLT dan ada orang yang membencinya. Tidak mengherankan, mereka yang sering menggunakannya cenderung masuk dalam kategori pertama. Mereka yang tidak suka pada umumnya mereka yang belum belajar untuk "berpikir cara XSLT". Anda bisa berargumen bahwa bahasa pemrograman tidak seharusnya memengaruhi cara Anda berpikir, tetapi itu benar: menulis dalam bahasa berbasis aturan membutuhkan pola pikir yang berbeda dengan menulis dalam bahasa yang penting. Reaksi pertama dari banyak pemrogram adalah bahwa mereka merasa kurang memegang kendali (menjelaskan masalah, daripada memberi tahu komputer apa yang harus dilakukan langkah demi langkah). Ini sangat mirip dengan reaksi yang Anda lihat ketika orang pertama kali diperkenalkan ke SQL. Hari-hari ini, orang-orang belajar SQL lebih awal dalam karier mereka sehingga dibutuhkan penyesuaian mental yang lebih sedikit.

Pada akhirnya, Anda harus memilih teknologi berdasarkan kriteria terukur obyektif, bukan pada reaksi cinta / benci. Sulit untuk melakukan pengukuran itu. Tetapi ada banyak orang yang menggunakan XSLT sangat intensif dan sangat sukses, sehingga tidak ada keraguan bahwa hal itu dapat dilakukan.

Michael Kay
sumber
2
Istilah yang lebih umum untuk "bahasa berbasis aturan" adalah bahasa deklaratif.
Daniel Gratzer
@Michael Kay - Baiklah. Saya pribadi suka XSLT dan menggunakannya dengan C #. Selain itu saya menggunakannya dengan XSL-FO untuk membuat dokumen PDF. XSLT sangat kuat, sangat kuat, memungkinkan saya untuk mengkonversi data dalam jumlah besar dengan cepat menjadi HTML, XSL-FO, XML atau Teks.
PhillyNJ
3

Tanpa informasi tambahan tentang konteksnya, sulit untuk dijawab.

Namun, saya tidak mengerti mengapa Anda tidak ingin menggunakan XSLT. Ini alat yang tepat untuk pekerjaan itu, dan yang kuat. Ini dilakukan secara khusus untuk mengubah satu XML menjadi yang lain.

Prosesor XSLT tampaknya cukup besar / sumber daya haus

Apakah Anda memiliki data keras untuk mendukungnya? Sudahkah Anda menerapkan solusi menggunakan XSLT dan menemukan bahwa XSLT adalah hambatan yang membuatnya tidak mungkin untuk mengirimkan produk sambil memenuhi semua persyaratan non-fungsional terkait dengan kinerja?

Tanpa data statistik dan profil, Anda tidak dapat secara wajar menyatakan bahwa solusi yang diberikan tidak akan berfungsi. Apakah persyaratan non-fungsional cukup masuk akal? Apakah Anda lebih suka menyia-nyiakan, katakanlah, sepuluh hari kerja pengembang untuk mendapatkan beberapa ratus milidetik dengan mengganti XSLT dengan alternatif lain? Apakah itu sepadan?

XML adalah notasi buruk untuk pemrograman dan itulah yang dimaksud dengan XSLT.

Jadi Anda ingin mengubah satu XML menjadi yang lain, tetapi tidak ingin menggunakan XSLT karena "XML adalah notasi buruk"?

Jika itu fakta bahwa Anda menggunakan XML sebagai semacam bahasa pemrograman yang sangat mengganggu Anda, lihat itu bukan sebagai pemrograman, melainkan sekelompok aturan transformasi.

Anda bahkan tidak perlu menulis XSLT dengan tangan. Ada banyak editor ETL yang dapat membuat Anda memetakan satu XML ke dalam antother grafis: tidak diperlukan pemrograman apa pun. Beberapa dari mereka menggunakan XSLT sebagai output.

Arseni Mourzenko
sumber
Saya mengalami masalah sumber daya dengan lembar berbasis XSLT, mereka dibuat dengan alat grafis namun berhenti bekerja dengan file yang lebih besar.
wirrbel
1
maka mungkin mengeluarkan dengan Anda XSLT filetidak XSLT Transformationssendiri
Maleakhi
Sekarang saya tidak mengutuk XML, sebenarnya saya pikir itu sesuai untuk representasi data (terutama untuk markup). Sebagai "bahasa pemrograman" - dan XSLT adalah bahasa pemrograman khusus domain - tidak nyaman. <xsl: apa pun> Tag, bahasa logam (seperti xpath, $ notation, dll.) di atribut kueri, semua yang tidak dipetakan ke XML dimasukkan ke dalam tanda kutip atribut. Untuk kesan representasi s-ekspresi dari XML: blog.getprismatic.com/blog/2013/1/22/... dengan begitu bisa XML dan dan proglang bekerja tanpa terlihat
wirrbel
1

Jika Anda menggunakan XSLT untuk menghasilkan XML berdasarkan XSLT mentah dan beberapa parameter yang Anda lewati ke mesin XSLT, maka menggunakan pendekatan XML templating jauh lebih mudah untuk dipahami dan dipelihara.

Saya telah mengerjakan sebuah proyek di mana Moustache digunakan untuk menggantikan XSLT dan hasilnya adalah file XML dasar yang lebih sederhana yang dapat diedit dan disesuaikan oleh semua orang, daripada pekerjaan proyek yang diteruskan ke satu atau dua jiwa pemberani, yang akan duduk dalam keheningan total. dengan manik-manik keringat mengalir ...

Pendekatan templat tidak cocok untuk digunakan ketika basis XML juga data yang valid dalam dirinya sendiri, dan bahwa XSLT sedang digunakan untuk memberikan representasi alternatif, atau ekstrak dari XML sumber.

Michael Shaw
sumber
maukah Anda menjelaskan lebih lanjut tentang apa yang dilakukannya dan mengapa Anda merekomendasikannya untuk menjawab pertanyaan yang diajukan? "Jawaban khusus tautan" tidak diterima di Stack Exchange
gnat
1
Ulasan yang ditinjau sesuai dengan umpan balik Anda
Michael Shaw
0

XML bukan Bahasa Pemrograman

XML adalah cara untuk Transfer / Transport Data.
apa yang dilakukan instruksi XSLT adalah menggunakan Xpath untuk meminta data dengan cara tertentu dan memasukkannya ke Objek / Dokumen Transport Data lain.

DAN / ATAU

XSLT dapat mengubah XML Anda menjadi HTML, yang merupakan cara lain untuk menampilkan / mengangkut Data yang terkandung dalam Dokumen XML.

jika Anda ingin mengubah XML, atau membuat dokumen XML maka Anda dapat menggunakan sejumlah bahasa: C #, VB, Ruby, dll.

biasanya ketika Anda menggunakan file XSLT untuk mengubah Dokumen XML Anda masih memiliki Dokumen XML asli, Anda tidak benar-benar mengubah Dokumen asli, Anda benar-benar membuat yang baru.

Maleakhi
sumber
1
Wikipedia mengatakan: "XSLT adalah bahasa Turing-lengkap, artinya dapat menentukan setiap komputasi yang dapat dilakukan oleh komputer.". Saya tidak pernah mengatakan bahwa XML adalah bahasa pemrograman per se.
wirrbel
Anda mengatakan "XML adalah notasi buruk untuk pemrograman" dalam bahasa pemrograman yang saya gunakan, Anda dapat menarik Data Dari File XML dengan Mudah. XSLT adalah Mendapatkan Dasar untuk dapat melakukan banyak Komputasi dan meludahkan Data itu ke objek / Dokumen Transport Data lain. itu seperti SQL ke SQL Server dapat melakukan banyak hal tetapi sebagian besar ujung belakang, bukan ujung depan. SQL seperti XSLT, itu kueri Data dengan cara tertentu, tetapi Anda tidak pernah ingin memberikan hasil permintaan itu sebagai laporan, Anda ingin mengirim informasi ke pembuat laporan
Maleakhi
2
XSLT tidak meminta data, XPATH melakukan querying. Bukankah XSLT bahasa deklaratif yang mendefinisikan instruksi pada parsed xml?
PhillyNJ
XSLT mendefinisikan aturan transformasi berdasarkan pola yang dapat digunakannya Xpath. Yaitu Anda dapat memiliki konstruksi pemrograman tingkat tinggi seperti xsl:for-each xsl:apply-templates, xsl:if xsl:call-template xsl:value-ofuntuk mendefinisikan aturan transformasi.
wirrbel
1
@ PhilVallone Saya setuju. Saya salah di sana. wirrbel, saya tidak akan berdebat dengan Anda tentang apa XSLT / XSL adalah dan tidak, jika Anda ingin mengubah dokumen XML Anda menjadi Dokumen XML lain Anda akan ingin menggunakan XSLT / XSL.
Maleakhi
0

Saya telah bekerja pada beberapa sistem pemrosesan XML yang menggabungkan pustaka XSLT dengan Java atau C ++ untuk bagian-bagian yang XSLT tidak pandai. Ada perpustakaan yang mendapatkan kinerja XSLT yang sangat baik bahkan pada file XML 20 MB, namun XSLT memiliki beberapa batasan dengan konteks, variabel dan pola string yang sangat kompleks. Setiap sistem yang saya kerjakan memiliki beberapa hal yang dilakukan di Java / C ++ karena konteksnya penting atau beberapa ekspresi regex yang kompleks membantu. Pilihan saya adalah XSLT plus beberapa kode tambahan dalam bahasa pilihan Anda adalah cara yang baik untuk mengubah XML.

Michael Shopsin
sumber