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:
- Beberapa tempat di web menunjukkan Linq sebagai alternatif yang memungkinkan. Cukup umum saya semua jenis klasifikasi, juga dari mereka yang memiliki pengalaman XSLT terbaik.
- Untuk skema http://cs.brown.edu/~sk/Publications/Papers/Published/kk-sxslt/ dan http://www.okmij.org/ftp/Scheme/xml.html
Jawaban:
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.
sumber
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.
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?
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.
sumber
XSLT file
tidakXSLT Transformations
sendiriJika 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.
sumber
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.
sumber
xsl:for-each
xsl:apply-templates
,xsl:if
xsl:call-template
xsl:value-of
untuk mendefinisikan aturan transformasi.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.
sumber