Apakah XSLT sepadan? [Tutup]

112

Beberapa waktu yang lalu, saya memulai sebuah proyek di mana saya merancang skema XML html-esque sehingga penulis dapat menulis konten mereka (materi kursus pendidikan) dalam format yang disederhanakan yang kemudian akan diubah menjadi HTML melalui XSLT. Saya bermain-main (berjuang) dengannya untuk beberapa saat dan membawanya ke tingkat yang sangat dasar tetapi kemudian terlalu terganggu oleh keterbatasan yang saya hadapi (yang mungkin merupakan keterbatasan pengetahuan saya) dan ketika saya membaca blog yang menyarankan untuk membuang XSLT dan tulis saja XML-to-parser Anda sendiri dalam bahasa pilihan Anda, saya dengan bersemangat melompat ke sana dan berhasil dengan sangat baik.

Saya masih mengerjakannya sampai hari ini ( saya seharusnya sedang mengerjakannya sekarang, daripada bermain di SO ), dan saya melihat semakin banyak hal yang membuat saya berpikir bahwa keputusan untuk membuang XSLT adalah salah satu yang baik.

Saya tahu bahwa XSLT ada tempatnya, karena itu adalah standar yang diterima, dan jika setiap orang menulis penerjemah mereka sendiri, 90% dari mereka akan berakhir di TheDailyWTF . Tetapi mengingat bahwa ini adalah bahasa gaya fungsional daripada gaya prosedural yang sebagian besar pemrogram kenal, bagi seseorang yang memulai proyek seperti milik saya, apakah Anda akan merekomendasikan mereka untuk mengikuti jalur yang saya lakukan, atau bertahan dengan XSLT ?

nickf
sumber
1
Saya pikir ada keterputusan yang parah antara subjek pertanyaan Anda (yang argumentatif) dan pertanyaan sebenarnya yang Anda ajukan (yaitu, apakah pembaca SO benar-benar menggunakan XSLT, atau merekomendasikan untuk menggunakannya). Juga tidak jelas mengapa Anda membutuhkan pertanyaan ini untuk dijawab.
Martin v. Löwis
3
@Martin, apa yang akan Anda sarankan sebagai judul? Saya tidak PERLU pertanyaan ini dijawab, tetapi menurut saya ini menarik, dan juga berguna bagi seseorang yang mencoba memutuskan apakah akan berinvestasi di XSLT atau alternatif.
Benjol
7
Saya pikir XSLT telah mencapai puncak produktivitas dalam siklus hype ( en.wikipedia.org/wiki/Hype_cycle ).
Dirk Vollmar
Saya pribadi merasa XML saya tidak menambahkan nilai apa pun sampai saya menjalankannya melalui setidaknya 1 atau 2 transformasi.
@ Martinv.Löwis, Setuju dengan penilaian Anda. Juga ini benar-benar bermuara pada masalah perusahaan, yang berarti jika orang yang sama melakukan semuanya, dan metodenya adalah start-up .... baik-baik saja selesaikan gaya implementasi tercepat, Anda hanya mengacaukan diri Anda sendiri dalam kasus itu. XSLT cukup sulit sampai diklik, membutuhkan pengetahuan khusus domain, tetapi dalam organisasi besar .... Ya Tuhan, Anda menyadari betapa salahnya semua orang anti-XML. DAN juga, begitu Anda mengetahui XSLT, itu adalah pilihan terbaik, hanya tampak sebaliknya ketika Anda tidak tahu XSLT, jadi Anda memperhitungkan investasi pembelajaran.
JM Becker

Jawaban:

64

Keuntungan XSLT:

  • Domain-spesifik untuk XML, jadi misalnya tidak perlu mengutip XML literal pada keluarannya.
  • Mendukung XPath / XQuery, yang dapat menjadi cara yang bagus untuk melakukan kueri DOM, dengan cara yang sama seperti ekspresi reguler dapat menjadi cara yang bagus untuk membuat kueri string.
  • Bahasa fungsional.

Kekurangan XSLT:

  • Bisa sangat bertele-tele - Anda tidak perlu mengutip XML literal, yang secara efektif berarti Anda harus mengutip kode. Dan tidak dengan cara yang indah. Tapi sekali lagi, ini tidak lebih buruk dari SSI tipikal Anda.
  • Tidak melakukan hal-hal tertentu yang dianggap biasa oleh kebanyakan programmer. Misalnya manipulasi string bisa menjadi pekerjaan rumah. Hal ini dapat menyebabkan "momen yang tidak menguntungkan" saat pemula mendesain kode, lalu dengan panik mencari petunjuk di web tentang cara mengimplementasikan fungsi yang mereka anggap hanya akan ada di sana dan tidak memberikan waktu kepada diri mereka sendiri untuk menulis.
  • Bahasa fungsional.

Salah satu cara untuk mendapatkan perilaku prosedural, dengan cara, adalah dengan merangkai banyak transformasi bersama. Setelah setiap langkah, Anda memiliki DOM baru untuk dikerjakan yang mencerminkan perubahan pada langkah itu. Beberapa prosesor XSL memiliki ekstensi untuk melakukan ini secara efektif dalam satu transformasi, tetapi saya lupa detailnya.

Jadi, jika kode Anda sebagian besar adalah keluaran dan tidak banyak logika, XSLT bisa menjadi cara yang sangat rapi untuk mengekspresikannya. Jika ada banyak logika, tetapi sebagian besar bentuk yang dibangun ke XSLT (pilih semua elemen yang terlihat seperti bla, dan untuk masing-masing keluaran bla), itu mungkin lingkungan yang cukup ramah. Jika Anda suka berpikir XML-ishly setiap saat, cobalah XSLT 2.

Jika tidak, saya akan mengatakan bahwa jika bahasa pemrograman favorit Anda memiliki implementasi DOM yang baik yang mendukung XPath dan memungkinkan Anda membuat dokumen dengan cara yang berguna, maka ada beberapa manfaat menggunakan XSLT. Pengikatan ke libxml2 dan gdome2 seharusnya berfungsi dengan baik, dan tidak ada salahnya menggunakan bahasa tujuan umum yang Anda kuasai dengan baik.

Pengurai XML yang dikembangkan sendiri biasanya tidak lengkap (dalam hal ini Anda akan lepas landas suatu hari nanti) atau tidak jauh lebih kecil dari sesuatu yang Anda bisa dapatkan dari rak (dalam hal ini Anda mungkin membuang-buang waktu Anda), dan berikan Anda memiliki sejumlah peluang untuk menimbulkan masalah keamanan yang parah di sekitar masukan yang berbahaya. Jangan menulisnya kecuali Anda tahu persis apa yang Anda peroleh dengan melakukannya. Bukan berarti Anda tidak dapat menulis parser untuk sesuatu yang lebih sederhana daripada XML sebagai format input Anda, jika Anda tidak membutuhkan semua yang ditawarkan XML.

Steve Jessop
sumber
3
XSLT tidak berfungsi, ini bersifat deklaratif (seperti SQL).
jmah
Template XSL menurut saya memiliki semua kriteria fungsi murni, apa yang mendiskualifikasinya agar tidak digambarkan sebagai fungsional? Mengapa 'deklaritif' menjadi alternatif? a = 1; bersifat deklaritif.
AnthonyWJones
Ini deklaratif seperti Prolog. en.wikipedia.org/wiki/Declarative_programming
Martin York
8
Saya percaya pemrograman fungsional adalah jenis pemrograman deklaratif.
Zifre
1
Sementara poin tentang XSLT 2.0 adalah bagus, bahkan pada saat saya menulis tidak ada dukungan luas untuk XSLT 2.0.
PeterAllenWebb
91

Begitu banyak hal negatif!

Saya telah menggunakan XSLT selama beberapa tahun, dan sangat menyukainya. Hal utama yang harus Anda sadari adalah bahwa ini bukanlah bahasa pemrograman, melainkan bahasa templating (dan dalam hal ini saya merasa lebih unggul dari asp.net / spit).

XML adalah format data de facto pengembangan web saat ini, baik itu file konfigurasi, data mentah, atau dalam representasi memori. XSLT dan XPath memberi Anda cara yang sangat kuat dan sangat efisien untuk mengubah data itu menjadi format keluaran apa pun yang mungkin Anda suka, langsung memberi Anda aspek MVC untuk memisahkan presentasi dari data.

Lalu ada kemampuan utilitas: menghapus namespace, mengenali definisi skema yang berbeda, menggabungkan dokumen.

Ini harus lebih baik untuk menangani XSLT daripada mengembangkan sendiri metode dalam rumah Anda. Setidaknya XSLT adalah standar dan sesuatu yang dapat Anda sewa, dan jika itu benar-benar menjadi masalah bagi tim Anda, sifatnya memungkinkan Anda membuat sebagian besar tim Anda bekerja hanya dengan XML.

Kasus penggunaan dunia nyata: Saya baru saja menulis aplikasi yang menangani dokumen XML dalam memori di seluruh sistem, dan mengubahnya menjadi JSON, HTML, atau XML seperti yang diminta oleh pengguna akhir. Saya memiliki permintaan yang cukup acak untuk diberikan sebagai data Excel. Seorang mantan kolega telah melakukan sesuatu yang serupa secara programatik tetapi membutuhkan modul dari beberapa file kelas dan server telah menginstal MS Office! Ternyata Excel memiliki XSD: fungsionalitas baru dengan dampak kode dasar minimum dalam 3 jam.

Secara pribadi saya pikir itu adalah salah satu hal terbersih yang pernah saya temui dalam karir saya, dan saya percaya semua masalah yang jelas itu (debugging, manipulasi string, struktur pemrograman) turun ke pemahaman yang salah tentang alat tersebut.

Jelas, saya sangat percaya itu "sepadan".

annakata
sumber
8
Sedikit tambahan untuk poin Anda tentang debugging. Versi terbaru Visual Studio memungkinkan Anda melakukan debug secara langsung dalam file XSL. Menetapkan breakpoint, memeriksa, dll.
Craig Bovis
Ini adalah jawaban yang bagus, terutama kisah menyegarkan dari excel xsd!
Laguna
1
@annakata, dapatkah Anda memberikan tautan ke artikel msdn atau beberapa tutorial tentang cara melakukan hal excel? Saya pikir itu mungkin sesuatu yang bisa saya gunakan untuk proyek saya juga. Terima kasih!
Laguna
6
JSON dan JAML adalah format data yang lebih unggul daripada XML. XML pada intinya adalah bahasa markup ; dan sangat disayangkan bahwa ini telah disalahgunakan secara luas untuk representasi data terstruktur.
ulidtko
3
@ulidtko, Bekerja sebagai Insinyur Sistem, saya telah melihat banyak JSON yang sangat tidak pantas sebagai markup ... Saya hanya berharap lebih banyak yang akan datang, dan itu membuat XML terlihat mengagumkan jika dibandingkan.
JM Becker
27

Saya harus mengakui bias di sini karena saya mengajar XSLT sebagai mata pencaharian. Tapi, mungkin ada gunanya meliput area tempat saya melihat siswa saya bekerja. Mereka umumnya dibagi menjadi tiga kelompok: penerbitan, perbankan, dan web.

Banyak dari jawaban sejauh ini dapat diringkas sebagai "tidak baik untuk membuat situs web" atau "tidak seperti bahasa X". Banyak orang teknologi menjalani karir mereka tanpa terpapar bahasa fungsional / deklaratif. Ketika saya mengajar, orang-orang Java / VB / C / etc yang berpengalaman adalah orang-orang yang memiliki masalah dengan bahasa (variabel adalah variabel dalam arti aljabar, bukan pemrograman prosedural misalnya). Itu banyak dari orang-orang yang menjawab di sini - Saya tidak pernah mengerti Java tetapi saya tidak akan repot-repot mengkritik bahasa karena itu.

Dalam banyak keadaan, ini adalah alat yang tidak tepat untuk membuat situs web - bahasa pemrograman tujuan umum mungkin lebih baik. Saya sering kali perlu mengambil dokumen XML yang sangat besar dan mempresentasikannya di web; XSLT membuatnya sepele. Siswa yang saya lihat di ruang ini cenderung memproses kumpulan data dan menampilkannya di web. XSLT tentunya bukan satu-satunya alat yang dapat diterapkan di ruang ini. Namun, banyak dari mereka menggunakan DOM untuk melakukan ini dan XSLT tentu tidak terlalu menyakitkan.

Mahasiswa perbankan yang saya lihat menggunakan kotak DataPower secara umum. Ini adalah alat XML dan digunakan untuk duduk di antara layanan 'berbicara' dengan dialek XML yang berbeda. Transformasi dari satu bahasa XML ke bahasa lain hampir sepele di XSLT dan jumlah siswa yang menghadiri kursus saya tentang ini meningkat.

Kelompok siswa terakhir yang saya lihat berasal dari latar belakang penerbitan (seperti saya). Orang-orang ini cenderung memiliki dokumen XML yang sangat besar (percayalah, penerbitan sebagai industri semakin menjadi XML - penerbitan teknis telah ada selama bertahun-tahun dan penerbitan perdagangan semakin ke sana sekarang). Dokumen-dokumen ini perlu diproses (DocBook ke ePub muncul dalam pikiran di sini).

Seseorang di atas berkomentar bahwa skrip cenderung di bawah 60 baris atau menjadi berat. Jika itu menjadi sulit, kemungkinan besar pembuat kode belum benar-benar mengerti - XSLT adalah pola pikir yang sangat berbeda dari banyak bahasa lain. Jika Anda tidak mendapatkan pola pikir itu tidak akan berhasil.

Ini jelas bukan bahasa yang sekarat (jumlah pekerjaan yang saya dapatkan memberi tahu saya hal itu). Saat ini, agak 'macet' sampai Microsoft menyelesaikan (sangat terlambat) implementasi XSLT 2. Tapi itu masih ada dan tampaknya menjadi kuat dari sudut pandang saya.

Nic Gibson
sumber
Saya seorang pengembang Java dan saya juga menyukai XML dan XSLT. Saya berharap orang-orang menyadari kekuatan ini.
Nikolas
24

Kami menggunakan XSLT secara ekstensif untuk hal-hal seperti dokumentasi, dan membuat beberapa pengaturan konfigurasi yang kompleks dapat diservis pengguna.

Untuk dokumentasi, kami menggunakan banyak DocBook, yang merupakan format berbasis XML. Ini memungkinkan kami menyimpan dan mengelola dokumentasi kami dengan semua kode sumber kami, karena file tersebut adalah teks biasa. Dengan XSLT, kita dapat dengan mudah membuat format dokumentasi kita sendiri, memungkinkan kita untuk membuat konten secara otomatis dengan cara yang umum, dan membuat konten lebih mudah dibaca. Misalnya, saat kita menerbitkan catatan rilis, kita bisa membuat XML yang terlihat seperti:

<ReleaseNotes>
    <FixedBugs>
        <Bug id="123" component="Admin">Error when clicking the Foo button</Bug>
        <Bug id="125" component="Core">Crash at startup when configuration is missing</Bug>
        <Bug id="127" component="Admin">Error when clicking the Bar button</Bug>
    </FixedBugs>
</ReleaseNotes>

Dan kemudian menggunakan XSLT (yang mengubah yang di atas menjadi DocBook) kami berakhir dengan catatan rilis yang bagus (biasanya PDF atau HTML) di mana ID bug secara otomatis ditautkan ke pelacak bug kami, bug dikelompokkan berdasarkan komponen, dan format semuanya konsisten sempurna . Dan XML di atas dapat dibuat secara otomatis dengan menanyakan pelacak bug kami tentang apa yang telah berubah antar versi.

Tempat lain di mana kami menemukan XSLT berguna sebenarnya di produk inti kami. Terkadang saat berinteraksi dengan sistem pihak ketiga, kita perlu memproses data di halaman HTML yang kompleks. Parsing HTML itu jelek, jadi kami memasukkan data melalui sesuatu seperti TagSoup(yang menghasilkan peristiwa SAX XML yang tepat, pada dasarnya memungkinkan kita menangani HTML seolah-olah XML ditulis dengan benar) dan kemudian kita dapat menjalankan beberapa XSLT terhadapnya, untuk mengubah data menjadi format "stabil yang diketahui" yang benar-benar dapat kita gunakan . Dengan memisahkan transformasi itu menjadi file XSLT, itu berarti jika dan ketika format HTML berubah, aplikasinya sendiri tidak perlu ditingkatkan, sebagai gantinya pengguna akhir dapat mengedit file XSLT itu sendiri, atau kita dapat mengirim email mereka adalah file XSLT yang diperbarui tanpa seluruh sistem perlu ditingkatkan.

Saya akan mengatakan bahwa untuk proyek web, ada cara yang lebih baik untuk menangani sisi tampilan daripada XSLT hari ini, tetapi sebagai teknologi pasti ada kegunaan untuk XSLT. Ini bukan bahasa termudah di dunia untuk digunakan, tapi pasti belum mati, dan dari sudut pandang saya masih memiliki banyak kegunaan yang baik.

Adam Batkin
sumber
Terima kasih, itu jawaban yang bagus dengan contoh konkret.
Benjol
Namun seseorang merasa perlu untuk memilihnya tanpa meninggalkan komentar tentang apa yang salah dengan jawaban saya
Adam Batkin
Mungkin karena mereka tidak setuju ...
Benjol
Ada program lain yang mirip dengan TagSoup yang juga membuat pohon XML yang tepat dari HTML ... tetapi saya tidak dapat mengingat namanya. Apakah ada yang tahu?
erjiang
Tidy adalah program yang bagus untuk tujuan ini
Erlock
19

XSLT adalah contoh bahasa pemrograman deklaratif .

Contoh lain dari bahasa pemrograman deklaratif termasuk ekspresi reguler, Prolog, dan SQL. Semua ini sangat ekspresif dan kompak, dan biasanya dirancang dengan sangat baik dan kuat untuk tugas yang dirancangnya.

Namun, pengembang perangkat lunak umumnya membenci bahasa semacam itu, karena sangat berbeda dari OO arus utama atau bahasa prosedural sehingga sulit dipelajari dan di-debug. Sifat kompaknya umumnya membuatnya sangat mudah untuk melakukan banyak kerusakan secara tidak sengaja.

Jadi, meskipun XSLT adalah mekanisme yang efisien untuk menggabungkan data menjadi presentasi, XSLT gagal di departemen kemudahan penggunaan. Saya percaya itu sebabnya hal itu belum begitu populer.

Bill Karwin
sumber
2
XSLT berfungsi, tetapi saya pikir itu bisa diperdebatkan apakah itu deklaratif (ada ketergantungan pemesanan, dll). Namun, saya setuju dengan pendapat Anda bahwa ini (apakah fungsional atau deklaratif) adalah hal yang kuat, serta sumber frustrasi bagi sebagian besar pemrogram OO / prosedural. Namun, dalam kasus XSLT, saya percaya bahwa, sebagai bahasa fungsional, ia kekurangan terlalu banyak fitur yang membuat sebagian besar bahasa fungsional dapat digunakan. Akibatnya, Anda biasanya menulis lebih banyak kode, daripada menjadi ringkas. Sudahkah Anda mencoba memisahkan string di XSLT (1.0), misalnya?
philsquared
3
Ngomong-ngomong, XSLT tidak berfungsi - tidak memiliki fungsi sebagai nilai kelas satu. Ya, ada peretasan (FXSL), tetapi hanya itu, dan Anda masih tidak mendapatkan penangkapan variabel dengan mereka (jadi tidak ada lambda). XSLT itu murni (bebas efek samping), ya, tetapi ini tidak harus berarti "fungsional".
Pavel Minaev
1
XSLT adalah penyimpangan yang mengerikan dari bahasa pemrograman deklaratif dan PL secara umum. Bahkan INTERCAL lebih koheren dan untuk beberapa kasus penggunaan sama produktifnya. Ya, transformasi pohon tertentu sangat mudah di XSLT, tetapi saya menemukan kombinasi XPath dan bahasa tradisional fungsional (semu) jauh lebih mudah untuk ditulis dan jauh lebih mudah untuk dibaca dan dipahami.
pmf
23
@Jeff Atwood: Seperti regex, keindahan XSLT ada dalam konsep, bukan dalam sintaks. Bagi mereka yang tidak bisa membacanya, ekspresi reguler adalah campuran huruf dan simbol yang tidak berarti. Itu adalah pola pikir di balik regex yang membuat mereka cantik.
Tomalak
6
@Jeff Atwood Mengapa Anda menulis pernyataan kategoris seperti itu tentang area yang jelas tidak Anda ketahui? XSLT dan XPath memang memiliki kemampuan RegEx yang baik dan beberapa di antaranya telah digunakan untuk menjawab pertanyaan tentang SO. Saya telah menulis lebih dari satu parser menggunakan RegEx di XSLT, untuk lexer. Pengurai paling rumit adalah untuk XPath 2.0. Menulis tanpa membaca pertama - seperti dalam lelucon Chukche :)
Dimitre Novatchev
12

Saya ingat semua hype di sekitar XSLT ketika standar baru dirilis. Semua kegembiraan karena dapat membangun seluruh UI HTML dengan transformasi 'sederhana'.

Mari kita hadapi itu, sulit untuk digunakan, hampir tidak mungkin untuk melakukan debug, seringkali sangat lambat. Hasil akhirnya hampir selalu unik dan kurang ideal.

Saya akan lebih cepat menggerogoti kaki saya sendiri daripada menggunakan XSLT sementara ada cara yang lebih baik untuk melakukan sesuatu. Masih ada tempatnya, bagus untuk tugas transformasi sederhana.

Keras
sumber
1
sangat lambat ?? Dibandingkan dengan apa?
AnthonyWJones
Dibandingkan dengan tulisan tangan konversi di VB6 seperti yang saya lakukan. Urutan besarnya lebih cepat daripada melakukan XSLT (Saya mengonversi ADO Recordsets menjadi HTML - pada tahun 2002 atau sesuatu :-)
endian
3
Jauh lebih mudah untuk men-debug menggunakan alat seperti Oxygen daripada yang Anda harapkan.
Andy Dent
10

Saya telah menggunakan XSLT (dan juga XQuery) secara ekstensif untuk berbagai hal - untuk menghasilkan kode C ++ sebagai bagian dari proses pembuatan, untuk menghasilkan dokumentasi dari komentar dokumen, dan dalam aplikasi yang harus bekerja dengan XML secara umum dan XHTML pada khususnya banyak. . Pembuat kode khususnya lebih dari 10.000 baris kode XSLT 2.0 yang tersebar di sekitar selusin file terpisah (itu melakukan banyak hal - header untuk klien, proxy / stub jarak jauh, pembungkus COM, pembungkus NET, ORM - untuk memberi nama Beberapa). Saya mewarisinya dari pria lain yang tidak benar-benar memahami bahasanya dengan baik, dan akibatnya bagian yang lebih tua cukup berantakan. Namun, hal-hal baru yang kami tulis sebagian besar tetap waras dan mudah dibaca, dan saya tidak ingat ada masalah khusus dalam mencapainya. Itu pasti tidak lebih sulit daripada melakukannya untuk C ++.

Berbicara tentang versi, berurusan dengan XSLT 2.0 pasti membantu Anda tetap waras, tetapi 1.0 masih baik-baik saja untuk transformasi yang lebih sederhana. Di ceruknya, ini adalah alat yang sangat berguna, dan produktivitas yang Anda dapatkan dari fitur khusus domain tertentu (yang paling penting, pengiriman dinamis melalui pencocokan template) sulit untuk dicocokkan. Meskipun kata-kata yang dirasakan dari sintaks berbasis XML XSLT, hal yang sama di LINQ ke XML (bahkan di VB dengan literal XML) biasanya beberapa kali lebih lama. Cukup sering, bagaimanapun, itu mendapat kesalahan yang tidak perlu karena penggunaan XML yang tidak perlu dalam beberapa kasus di tempat pertama.

Singkatnya: ini adalah alat yang sangat berguna untuk dimiliki di kotak peralatan seseorang, tetapi ini adalah alat yang sangat khusus, jadi itu baik selama Anda menggunakannya dengan benar dan untuk tujuan yang dimaksudkan. Saya benar-benar berharap ada implementasi .NET asli yang tepat dari XSLT 2.0.

Pavel Minaev
sumber
9

Saya menggunakan XSLT (karena kurangnya alternatif yang lebih baik), tetapi tidak untuk presentasi, hanya untuk transformasi:

  1. Saya menulis transformasi XSLT singkat untuk melakukan pengeditan massal pada file maven pom.xml kami.

  2. Saya telah menulis alur transformasi untuk menghasilkan Skema XML dari XMI (Diagram UML). Ini berhasil untuk sementara waktu, tetapi akhirnya menjadi terlalu rumit dan kami harus mengeluarkannya di belakang gudang.

  3. Saya telah menggunakan transformasi untuk merefaktor XML Schemas.

  4. Saya telah mengatasi beberapa batasan di XSLT dengan menggunakannya untuk menghasilkan XSLT untuk melakukan pekerjaan yang sebenarnya. (Pernah mencoba menulis XSLT yang menghasilkan keluaran menggunakan ruang nama yang tidak diketahui hingga runtime?)

Saya terus kembali ke sana karena ia melakukan pekerjaan yang lebih baik dalam memproses XML yang diprosesnya daripada pendekatan lain yang telah saya coba, yang tampaknya tidak perlu merugikan atau hanya salah memahami XML. XSLT tidak menyenangkan, tetapi menurut saya penggunaan Oksigen membuatnya dapat ditahan.

Karena itu, saya sedang menyelidiki menggunakan Clojure (cadel) untuk melakukan transformasi XML, tetapi saya belum cukup jauh untuk mengetahui apakah pendekatan itu akan memberi saya manfaat.

bendin
sumber
XSLT telah menyelamatkan saya dari menulis modifikasi POM dalam skrip shell hackish. Saya sudah sepakat dengan XML, itu buruk .... tapi lebih baik dari apa pun untuk markup. XSLT, itu buruk, tapi ini cara TERBAIK untuk melakukan transformasi dari XML ke apapun. XQuery itu keren, tapi bukan cara terbaik untuk memperbaiki tumpukan XML yang tidak masuk akal itu, yang harus diubah menjadi sekumpulan makna XML yang terorganisir.
JM Becker
7

Secara pribadi saya menggunakan XSLT dalam konteks yang sama sekali berbeda. Game komputer yang saya kerjakan saat itu menggunakan banyak sekali halaman UI yang didefinisikan menggunakan XML. Selama pemfaktoran ulang besar tidak lama setelah rilis, kami ingin mengubah struktur dokumen XML ini. Kami membuat format masukan permainan mengikuti struktur yang jauh lebih baik dan sadar skema.

XSLT sepertinya pilihan sempurna untuk terjemahan ini dari format lama -> Format baru. Dalam dua minggu saya memiliki konversi yang berfungsi dari lama ke baru untuk ratusan halaman kami. Saya juga dapat menggunakannya untuk mengekstrak banyak informasi tentang tata letak halaman UI kami. Saya membuat daftar komponen mana yang disematkan yang relatif mudah yang kemudian saya gunakan XSLT untuk menulis ke dalam definisi skema kami.

Juga, berasal dari latar belakang C ++, itu adalah bahasa yang sangat menyenangkan dan menarik untuk dikuasai.

Menurut saya, sebagai alat untuk menerjemahkan XML dari satu format ke format lain, ini luar biasa. Namun, ini bukan satu-satunya cara untuk mendefinisikan algoritme yang menggunakan XML sebagai input dan output Sesuatu . Jika algoritme Anda cukup kompleks, fakta bahwa inputnya adalah XML menjadi tidak relevan dengan pilihan alat Anda - misalnya, gulirkan alat Anda sendiri dalam C ++ / Python / apa saja.

Khusus untuk contoh Anda, saya membayangkan ide terbaik adalah membuat konversi XML-> XML Anda sendiri yang mengikuti logika bisnis Anda. Selanjutnya, tulis penerjemah XSLT yang hanya tahu tentang pemformatan dan tidak melakukan apa pun yang pintar. Itu mungkin jalan tengah yang bagus tetapi itu sepenuhnya tergantung pada apa yang Anda lakukan. Memiliki penerjemah XSLT pada keluaran membuatnya lebih mudah untuk membuat format keluaran alternatif - dapat dicetak, untuk seluler, dll.

Tom Leys
sumber
6

Ya, saya sering menggunakannya. Dengan menggunakan file xslt yang berbeda, saya dapat menggunakan sumber XML yang sama untuk membuat beberapa file HTML poliglot (X) (menyajikan data yang sama dengan cara yang berbeda), umpan RSS, umpan Atom, file deskriptor RDF, dan fragmen peta situs .

Ini bukan obat mujarab. Ada hal-hal yang dilakukannya dengan baik, dan hal-hal yang tidak berhasil dengan baik, dan seperti semua aspek pemrograman lainnya, ini semua tentang penggunaan alat yang tepat untuk pekerjaan yang tepat. Ini adalah alat yang sangat berharga di kotak peralatan Anda, tetapi harus digunakan hanya jika diperlukan.

Alohci
sumber
3

Saya merasa XSLT cukup sulit untuk dikerjakan.

Saya memiliki pengalaman mengerjakan sistem yang agak mirip dengan yang Anda gambarkan. Perusahaan saya mencatat bahwa data yang kami kembalikan dari "tingkat menengah" ada dalam XML, dan halaman akan dirender dalam HTML yang mungkin juga XHTML, plus mereka telah mendengar bahwa XSL adalah standar untuk mengubah antara XML format. Jadi "arsitek" (yang saya maksud adalah orang-orang yang memikirkan pemikiran desain yang mendalam tetapi tampaknya tidak pernah membuat kode) memutuskan bahwa tingkat depan kami akan diterapkan dengan menulis skrip XSLT yang mengubah data menjadi XHTML untuk ditampilkan.

Pilihan itu ternyata membawa bencana. XSLT, ternyata, sulit untuk ditulis. Dan semua halaman kami sulit untuk ditulis dan dirawat. Kami akan melakukan jauh lebih baik jika menggunakan JSP (ini di Java) atau beberapa pendekatan serupa yang menggunakan satu jenis markup (tanda kurung sudut) untuk format keluaran (HTML) dan jenis markup lainnya (seperti <% ... %>) untuk meta-data. Hal yang paling membingungkan tentang XSLT adalah bahwa XSLT ditulis dalam XML, dan diterjemahkan dari XML ke XML ... cukup sulit untuk menyimpan semua 3 dokumen XML yang berbeda langsung dalam pikiran.

Situasi Anda sedikit berbeda: alih-alih menulis setiap halaman di XSLT seperti yang saya lakukan, Anda hanya perlu menulis SATU bit kode di XSLT (kode untuk diubah dari templat ke tampilan). Tapi kedengarannya Anda mungkin mengalami kesulitan yang sama dengan yang saya alami. Saya akan mengatakan bahwa mencoba menafsirkan DSL berbasis XML sederhana (bahasa khusus domain) seperti yang Anda lakukan BUKAN salah satu poin kuat XSLT. (Meskipun BISA melakukan pekerjaan itu ... bagaimanapun juga, itu Turing selesai!)

Namun, jika apa yang Anda miliki lebih sederhana: Anda memiliki data dalam satu format XML dan ingin membuat perubahan sederhana padanya - bukan DSL deskripsi halaman penuh, tetapi beberapa modifikasi langsung yang sederhana, maka XSLT adalah alat yang sangat baik untuk tujuan itu. Sifat deklaratif (bukan prosedural) sebenarnya merupakan keuntungan untuk tujuan itu.

- Michael Chermside

mcherm.dll
sumber
3

XSLT sulit untuk dikerjakan, tetapi setelah Anda menaklukkannya, Anda akan memiliki pemahaman yang sangat menyeluruh tentang DOM dan skema. Jika Anda juga XPath, maka Anda sedang dalam perjalanan untuk mempelajari pemrograman fungsional dan ini akan memaparkan teknik dan cara baru untuk memecahkan masalah. Dalam beberapa kasus, transformasi yang berurutan lebih kuat daripada solusi prosedural.

David Robbins
sumber
heh - Anda mendapatkan apresiasi yang cukup baik dari xpath dan DOM saat menulis kode transformasi kustom Anda sendiri. Ada banyak hal, termasuk tetapi tidak terbatas pada: mengubah ukuran gambar, membuat javascript (dari XML), membaca dari sistem file untuk menghasilkan navigasi, dll.
nickf
3

Saya menggunakan XSLT secara ekstensif, untuk front-end gaya MVC kustom. Model ini "diserialkan" ke xml (bukan melalui xml serializaiton), lalu diubah menjadi html melalui xslt. Keuntungan dari ASP.NET terletak pada integrasi alami dengan XPath, dan persyaratan bentuk yang lebih ketat (jauh lebih mudah untuk bernalar tentang struktur dokumen di xslt daripada di kebanyakan bahasa lain).

Sayangnya, bahasa tersebut mengandung beberapa batasan (misalnya, kemampuan untuk mengubah keluaran dari transformasi lain) yang berarti terkadang membuat frustasi untuk dikerjakan.

Namun demikian, pemisahan masalah yang mudah dicapai dan ditegakkan dengan kuat yang diberikannya bukanlah sesuatu yang saya lihat disediakan oleh teknologi lain saat ini - jadi untuk transformasi dokumen, itu masih sesuatu yang saya rekomendasikan.

Eamon Nerbonne
sumber
3

Saya menggunakan XML, XSD dan XSLT pada proyek integrasi antara sistem DB yang sangat tidak mirip sekitar tahun 2004. Saya harus belajar XSD dan XSLT dari awal tetapi itu tidak sulit. Hal yang hebat tentang alat ini adalah memungkinkan saya untuk menulis kode C ++ data independen, mengandalkan XSD dan XSLT untuk memvalidasi / memverifikasi dan kemudian mengubah dokumen XML. Ubah format data, ubah dokumen XSD dan XSLT, bukan kode C ++ yang menggunakan pustaka Xerces.

Untuk kepentingan: XSD utama adalah 150KB dan ukuran rata-rata XSLT <5KB IIRC.

Manfaat besar lainnya adalah bahwa XSD adalah dokumen spesifikasi yang menjadi dasar XSLT. Keduanya bekerja secara harmonis. Dan spesifikasi jarang dalam pengembangan perangkat lunak akhir-akhir ini.

Meskipun saya tidak mengalami terlalu banyak kesulitan mempelajari sifat deklaratif XSD dan XSLT, saya menemukan bahwa programmer C / C ++ lain mengalami kesulitan besar dalam menyesuaikan diri dengan cara deklaratif. Ketika mereka melihat itu, ah prosedural mereka bergumam, sekarang aku mengerti! Dan mereka melanjutkan (permainan kata?) Untuk menulis XSLT prosedural! Masalahnya adalah Anda harus mempelajari XPath dan memahami sumbu XML. Mengingatkan saya pada programmer C lama yang menyesuaikan penggunaan OO saat menulis C ++.

Saya menggunakan alat ini karena memungkinkan saya untuk menulis basis kode C ++ kecil yang diisolasi dari semua kecuali modifikasi struktur data yang paling mendasar dan yang terakhir ini adalah perubahan struktur DB. Meskipun saya lebih suka C ++ daripada bahasa lain, saya akan menggunakan apa yang saya anggap berguna untuk mendapatkan keuntungan jangka panjang dari proyek perangkat lunak.

Sam
sumber
3

Saya dulu berpikir XSLT adalah ide yang bagus. Maksud saya adalah ide bagus.

Yang gagal adalah eksekusi.

Masalah yang saya temukan dari waktu ke waktu adalah bahwa bahasa pemrograman dalam XML hanyalah ide yang buruk. Itu membuat semuanya tidak bisa ditembus. Secara khusus saya pikir XSLT sangat sulit dipelajari, dikodekan, dan dipahami. XML di atas aspek fungsional hanya membuat semuanya terlalu membingungkan. Saya telah mencoba mempelajarinya sekitar 5 kali dalam karir saya, dan itu tidak melekat.

Oke, Anda bisa 'memperalatnya' - saya pikir itu sebagian dari inti desainnya - tetapi itu adalah kegagalan kedua: semua alat XSLT di pasaran, cukup sederhana ... omong kosong!

Jack Ukleja
sumber
1
Menurut saya, Anda baru saja menjelaskan masalah Anda dengan XSLT, bukan masalah dengan bahasa itu sendiri. Saya harus mengatakan bahwa Anda mungkin menggunakan alat yang salah :)
Nic Gibson
2

The spesifikasi XSLT mendefinisikan XSLT sebagai "bahasa untuk mengubah dokumen XML menjadi dokumen XML lainnya". Jika Anda mencoba melakukan apa pun tetapi pemrosesan data paling dasar dalam XSLT mungkin ada solusi yang lebih baik.

Juga perlu diperhatikan bahwa kemampuan pemrosesan data XSLT dapat diperluas di .NET menggunakan fungsi ekstensi kustom:

revs 16
sumber
1
Memperluas bahasa standar dengan ekstensi non-standar adalah hal terburuk yang dapat dilakukan seseorang. Apa yang Anda dapatkan bukanlah kode XSLT atau CLR.
Piotr Dobrogost
Adil, bukan berarti terkadang tidak berguna
Eric Schoonover
2

Saya mengelola sistem dokumentasi online untuk perusahaan saya. Para penulis membuat dokumentasi dalam SGML (bahasa seperti xml). SGML kemudian digabungkan dengan XSLT dan diubah menjadi HTML.

Ini memungkinkan kami untuk dengan mudah membuat perubahan pada tata letak dokumentasi tanpa melakukan pengkodean apa pun. Ini hanya masalah mengganti XSLT.

Ini bekerja dengan baik untuk kami. Dalam kasus kami, ini adalah dokumen hanya baca. Pengguna tidak berinteraksi dengan dokumentasi.

Selain itu, dengan menggunakan XSLT, Anda bekerja lebih dekat ke domain bermasalah (HTML). Saya selalu menganggap itu sebagai ide yang bagus.

Terakhir, jika sistem Anda saat ini BEKERJA, biarkan saja. Saya tidak akan pernah menyarankan untuk membuang kode Anda yang sudah ada. Jika saya mulai dari awal, saya akan menggunakan XSLT, tetapi dalam kasus Anda, saya akan menggunakan apa yang Anda miliki.

Kentang tumbuk
sumber
2

Itu tergantung pada apa yang Anda butuhkan. Kekuatan utamanya adalah kemudahan perawatan transformasi, dan penulisan parser Anda sendiri biasanya akan menghapusnya. Dengan demikian, terkadang sebuah sistem kecil dan sederhana dan benar-benar tidak membutuhkan solusi yang "mewah". Selama pembuat berbasis kode Anda dapat diganti tanpa harus mengubah kode lain, bukan masalah besar.

Adapun keburukan XSL, ya jelek. Ya, perlu waktu untuk membiasakan diri. Tapi begitu Anda menguasainya (tidak perlu lama-lama IMO), itu sebenarnya lancar. Transformasi yang dikompilasi berjalan cukup cepat menurut pengalaman saya, dan Anda pasti dapat men-debugnya.

SpongeJim
sumber
2

Saya masih percaya bahwa XSLT dapat berguna tetapi ini adalah bahasa yang jelek dan dapat menyebabkan kekacauan yang tidak terbaca dan tidak dapat dirawat. Sebagian karena XML tidak cukup dapat dibaca manusia untuk membuat "bahasa" dan sebagian karena XSLT terjebak di suatu tempat antara deklaratif dan prosedural. Karena itu, dan saya pikir perbandingan dapat dibuat dengan ekspresi reguler, ia memiliki kegunaannya ketika datang ke masalah sederhana yang didefinisikan dengan baik.

Menggunakan pendekatan alternatif dan mem-parsing XML dalam kode bisa sama buruknya dan Anda benar-benar ingin menggunakan semacam teknologi marshalling / binding XML (seperti JiBX di Java) yang akan mengonversi XML Anda langsung ke objek.

Tom Martin
sumber
2

Jika Anda dapat menggunakan XSLT dalam gaya deklaratif (meskipun saya tidak sepenuhnya setuju bahwa ini adalah bahasa deklaratif) maka saya pikir ini berguna dan ekspresif.

Saya telah menulis aplikasi web yang menggunakan bahasa OO (C # dalam kasus saya) untuk menangani lapisan data / pemrosesan, tetapi menghasilkan XML daripada HTML. Ini kemudian dapat digunakan secara langsung oleh klien sebagai API data, atau dirender sebagai HTML oleh XSLT. Karena C # mengeluarkan XML yang secara struktural kompatibel dengan penggunaan ini, semuanya sangat lancar, dan logika presentasi disimpan secara deklaratif. Lebih mudah untuk mengikuti dan mengubah daripada mengirim tag dari C #.

Namun, karena Anda memerlukan lebih banyak logika pemrosesan pada tingkat XSLT, hal itu menjadi berbelit-belit dan bertele-tele - bahkan jika Anda "mendapatkan" gaya fungsional.

Tentu saja, akhir-akhir ini saya mungkin telah menulis aplikasi web tersebut menggunakan antarmuka RESTful - dan menurut saya "bahasa" data seperti JSON mendapatkan daya tarik di area yang XML secara tradisional telah diubah oleh XSLT. Namun untuk saat ini XSLT masih merupakan teknologi yang penting dan berguna.

philsquared
sumber
1

Saya telah menghabiskan banyak waktu di XSLT dan menemukan bahwa meskipun ini adalah alat yang berguna dalam beberapa situasi, ini jelas bukan perbaikan semua. Ini bekerja sangat baik untuk tujuan B2B ketika digunakan untuk terjemahan data untuk input / output XML yang dapat dibaca mesin. Saya tidak berpikir Anda berada di jalur yang salah dalam pernyataan Anda tentang batasannya. Salah satu hal yang paling membuat saya frustrasi adalah nuansa dalam implementasi XSLT.

Mungkin Anda harus melihat beberapa bahasa markup lain yang tersedia. Saya yakin Jeff membuat artikel tentang topik ini tentang Stack Overflow.

Apakah HTML adalah Bahasa Markup yang Manusiawi?

Saya akan melihat apa yang dia tulis. Anda mungkin dapat menemukan paket perangkat lunak yang melakukan apa yang Anda inginkan "di luar kotak", atau setidaknya sangat dekat daripada menulis barang Anda sendiri dari awal.

Jason Jackson
sumber
1

Saat ini saya ditugaskan untuk mengambil data dari situs publik (ya, saya tahu). Untungnya itu sesuai dengan xhtml jadi saya dapat menggunakan xslt untuk mengumpulkan data yang saya butuhkan. Solusi yang dihasilkan dapat dibaca, bersih dan mudah diubah jika diperlukan. Sempurna!

Goran
sumber
1

Saya telah menggunakan XSLT sebelumnya. Kelompok 6 file .xslt (direfraktorisasi dari satu yang besar) sekitar 2750 baris jauh sebelum saya menulis ulang di C #. Kode C # saat ini 4000 baris yang mengandung banyak logika; Saya bahkan tidak ingin memikirkan tentang apa yang diperlukan untuk menulis di XSLT.

Titik di mana saya menyerah adalah ketika saya menyadari bahwa tidak memiliki XPATH 2.0 secara signifikan mengganggu kemajuan saya.

Sam Harwell
sumber
2
Ya, XSLT tidak semuanya buruk dan memiliki beberapa kasus penggunaan yang sangat keren, tetapi microsoft tidak merangkul XSLT 2.0 sangat menyebalkan.
Daren Thomas
1
Beri tahu kami berapa ukuran kode C # tepat setelah Anda menulis ulang 2750 baris XSLT ini. Memberikan ukuran saat ini tidak memberi tahu kita apa pun.
Piotr Dobrogost
1

Untuk menjawab tiga pertanyaan Anda:

  1. Saya telah menggunakan XSLT sekali beberapa tahun yang lalu.
  2. Saya yakin XSLT bisa menjadi solusi yang tepat dalam keadaan tertentu. (Jangan pernah bilang tidak akan pernah)
  3. Saya cenderung setuju dengan penilaian Anda bahwa ini sebagian besar berguna untuk transformasi 'sederhana'. Tapi saya pikir selama Anda memahami XSLT dengan baik, ada kasus yang harus dibuat untuk menggunakannya untuk tugas-tugas yang lebih besar seperti menerbitkan situs web saat XML diubah menjadi HTML.

Saya percaya alasan banyak pengembang tidak menyukai XSLT adalah karena mereka tidak memahami paradigma berbeda yang mendasarinya. Tetapi dengan minat baru-baru ini dalam pemrograman fungsional, kita mungkin melihat XSLT kembali ...

Dawie Strauss
sumber
1

Satu tempat di mana xslt benar-benar bersinar adalah dalam menghasilkan laporan. Saya telah menemukan bahwa proses 2 langkah, dengan langkah pertama mengekspor data laporan sebagai file xml, dan langkah kedua menghasilkan laporan visual dari xml menggunakan xslt. Ini memungkinkan laporan visual yang bagus sambil tetap menyimpan data mentah sebagai mekanisme validasi jika perlu.

Jack Ryan
sumber
1

Di perusahaan sebelumnya, kami melakukan banyak hal dengan XML dan XSLT. Baik XML dan XSLT berukuran besar.

Ya memang ada kurva belajar, tapi kemudian Anda memiliki alat yang ampuh untuk menangani XML. Dan Anda bahkan dapat menggunakan XSLT pada XSLT (yang terkadang berguna).

Kinerja juga merupakan masalah (dengan XML yang sangat besar) tetapi Anda dapat mengatasinya dengan menggunakan XSLT cerdas dan melakukan beberapa pemrosesan awal dengan XML (yang dihasilkan).

Siapapun yang memiliki pengetahuan tentang XSLT dapat mengubah penampilan produk jadi karena tidak dikompilasi.

Toon Krijthe
sumber
1

Saya pribadi suka XSLT, dan Anda mungkin ingin memberikan tampilan sintaks yang disederhanakan (tidak ada template eksplisit, hanya file HTML lama biasa dengan beberapa tag XSLT untuk memasukkan nilai ke dalamnya), tetapi ini tidak untuk semua orang.

Mungkin Anda hanya ingin menawarkan antarmuka Wiki atau Penurunan harga yang sederhana kepada penulis Anda. Ada pustaka untuk itu juga, dan jika XSLT tidak berfungsi untuk Anda, mungkin XML juga tidak berfungsi untuk mereka.

brianary
sumber
0

XSLT bukanlah akhir dari semua transformasi xml. Namun, sangat sulit untuk menilai berdasarkan informasi yang diberikan jika itu adalah solusi terbaik untuk masalah Anda atau jika ada pendekatan lain yang lebih efisien dan dapat dipelihara. Anda mengatakan penulis dapat memasukkan konten mereka dalam format yang disederhanakan - format apa? Kotak teks? Jenis html apa yang Anda ubah menjadi? Untuk menilai apakah XSLT adalah alat yang tepat untuk pekerjaan itu, akan membantu jika mengetahui fitur transformasi ini secara lebih mendetail.

Shmoggle
sumber
penulis menulis XML di editor teks. pada dasarnya ini adalah HTML yang disederhanakan - beberapa hal telah dihapus untuk memaksa gaya yang konsisten, hal-hal seperti tag <video /> telah ditambahkan sebagai singkatan untuk HTML yang lebih kompleks. Elemen lain digunakan untuk menghasilkan menu / bibliografi / glosarium, dll.
nickf
0

Saya menikmati menggunakan XSLT hanya untuk mengubah struktur pohon dokumen XML. Saya merasa tidak praktis untuk melakukan apa pun yang terkait dengan pemrosesan teks dan memindahkannya ke skrip khusus yang dapat saya jalankan sebelum atau setelah menerapkan XSLT ke dokumen XML.

XSLT 2.0 menyertakan lebih banyak fungsi string, tapi menurut saya itu tidak cocok untuk bahasanya, dan tidak banyak implementasi XSLT 2.0.

Ben
sumber