11 poin oleh GN⁺ 2025-03-30 | 1 komentar | Bagikan ke WhatsApp
  • Xee adalah mesin eksekusi XML yang dikembangkan dengan Rust dan mendukung XPath 3.1 serta XSLT 3.0 versi terbaru
    • XPath adalah bahasa kueri XML, sedangkan XSLT adalah bahasa untuk mentransformasikan dokumen XML ke dokumen lain
  • Terdiri dari alat command-line xee dan pustaka Rust xee-xpath, dan dapat menjalankan kueri XPath
  • Berdasarkan performa dan kemungkinan integrasi Rust, ini dapat diperluas ke berbagai bahasa (contoh: tersedia binding PHP)
  • Ke depannya diharapkan juga bisa dijalankan di browser melalui WebAssembly (WASM)

Sejarah XML dan posisinya saat ini

  • XML muncul pada akhir 1990-an dan merupakan teknologi yang sangat populer hingga awal 2000-an
  • Setelah kemunculan JSON dan lainnya, XML memang bukan lagi arus utama, tetapi masih digunakan luas untuk penyimpanan dan transfer data, serta pada format dokumen (docbook, JATS) atau sebagian web (SVG, MathML)
  • XML tetap merupakan teknologi penting, dan Xee bertujuan memodernisasi teknologi XML
  • Pengembangnya memiliki pengalaman membuat pustaka XML lxml untuk Python, sehingga sebagai pengembang langka yang sangat memahami Rust dan XML, ia kembali ke dunia XML melalui Xee

XPath dan XSLT adalah bahasa pemrograman yang lengkap

  • XPath adalah bahasa untuk menavigasi dan mengueri XML, dan sebagai bahasa fungsional, ia mencakup variabel, pernyataan kondisi, perulangan, definisi fungsi, dan lainnya
  • XSLT adalah bahasa transformasi berbasis template yang menggunakan XPath sebagai bahasa ekspresi bawaan dan mengubah XML ke format lain
  • Keduanya adalah bahasa pemrograman formal dengan kemampuan yang kuat

Keterbatasan stack open-source XML saat ini

  • Di ekosistem Java, ada Saxon sebagai implementasi XPath/XSLT modern, dan ia juga menyediakan berbagai binding bahasa serta runtime JavaScript
  • Sebaliknya, pada sebagian besar distribusi Linux dan lainnya, libxml2 dan libxslt disediakan sebagai bawaan
  • Pustaka C tersebut hanya mendukung XPath 1.0 dan XSLT 1.0, sehingga masih berada pada spesifikasi yang dirilis pada 1999
  • Dalam situasi kurangnya alternatif open-source yang mendukung spesifikasi modern, Xee menawarkan alternatif modern yang ditulis dengan Rust

Budaya yang berpusat pada spesifikasi di dunia XML

  • Komunitas XML sangat kuat dalam budaya yang berpusat pada spesifikasi → jika sebuah fitur tidak ada di spesifikasi, itu tidak dianggap sebagai fitur yang "sesungguhnya"
  • Akibatnya, kecepatan pengembangan memang lambat, tetapi fondasinya sangat kokoh
  • RESTXQ, framework REST untuk XPath dan XQuery, dibahas pada 2012, dan hingga 2024 pembaruan spesifikasinya masih terus didiskusikan

Arsitektur implementasi bahasa Xee

  • Diimplementasikan dengan merujuk pada buku Crafting Interpreters
  • XPath melewati tahapan tokenisasi → AST → representasi menengah (IR) → bytecode → eksekusi interpreter
  • Interpreter bytecode ini mirip dengan mesin stack yang digunakan di Python, Java, dan lainnya
  • XSLT juga diimplementasikan berdasarkan arsitektur yang sama; hanya frontend-nya yang berbeda, sementara komponen lainnya digunakan sama seperti pada XPath

Dunia spesifikasi XML/XPath/XSLT yang sangat luas

  • XPath 3.1 dan XSLT 3.0 jauh lebih kompleks dan memiliki lebih banyak fitur dibanding versi 1.0
  • Hanya dokumen spesifikasi yang perlu dirujuk untuk implementasi saja sudah melebihi 1800 halaman, dan berbagai spesifikasi saling bergantung satu sama lain
  • Contohnya:
    • XPath 3.1, XQuery/XPath Data Model, Functions and Operators, XML Schema (struktur/tipe data)
    • XSLT 3.0, Serialization specification, XML Namespaces, XML Base, xml:id, dan lainnya
    • Karena juga mencakup fitur regular expression, penulis juga mengimplementasikan mesin regex terpisah → regexml

Status implementasi Xee saat ini

  • Implementasi bahasa inti XPath 3.1 dan sebagian besar pustaka standarnya telah selesai
  • Sebagian fungsi terkait formatting di pustaka standar masih belum diimplementasikan
  • Dalam pengujian kompatibilitas XPath 3.1, lulus 20130 dari 21859 pengujian (sekitar 92%)
  • Semua pengujian dijalankan dalam sekitar 13 detik → performanya sangat cepat
  • XSLT masih belum selesai, tetapi fondasi strukturnya sudah tersedia sehingga dapat diperluas

Mencari kontributor

  • Pengembang yang tertarik pada Rust dan XML, atau yang berminat pada implementasi bahasa pemrograman maupun optimisasi kueri, sangat dipersilakan
  • Kontribusi dimungkinkan di berbagai area seperti implementasi fitur berbasis spesifikasi, pekerjaan optimisasi, dan peningkatan performa kueri
  • Xee adalah implementasi XML modern di luar ekosistem Java, dan saat ini merupakan momen ketika dukungan komunitas open-source sangat dibutuhkan

Saya masih keren. Meski saya menangani XML.

1 komentar

 
GN⁺ 2025-03-30
Opini Hacker News
  • Senang melihat seseorang membuat implementasi XSLT 3 dan XPath 3 open source yang sesungguhnya

    • Di proyek-proyek sebelumnya, saya hanya menggunakan XSLT & XPath 1.0. Itu karena dukungannya kurang di luar dunia Java/.NET
    • Saxon memang hebat, tetapi saya berharap ada lebih banyak implementasi XSLT 2.0 dan XPath 2.0 ke atas di dunia open source
    • XSLT 3.0 adalah spesifikasi yang sangat bagus, tetapi perlu ada cara lain untuk menjalankannya secara open source
  • Ada sangat banyak sumber XML

    • Misalnya, arsip Wikipedia berisi 42GB teks tanpa kompresi
    • Jika disimpan di memori dalam bentuk yang sudah diparse sepenuhnya, mungkin memerlukan lebih dari 100GB
    • Streaming adalah solusinya, tetapi belum didukung
  • Menggunakan XML masih tetap keren

    • Diperlukan library berkinerja tinggi dan berkualitas tinggi yang ditulis dengan Rust
    • Library Python yang dibangun di atasnya bisa menjadi fondasi yang baik
  • XML adalah pendekatan berbasis standar untuk interoperabilitas data

    • Saat pertama kali mempelajarinya, saya tidak menyukainya karena tidak ramah bagi pengembang
    • Namun sekarang saya jadi memahami nilai dari standar yang telah lama ada
    • XML tampak seperti standar data yang disukai komputer
  • XSLT masih didukung luas di browser utama

  • Fakta bahwa ini bisa dikompilasi ke WASM adalah hal yang positif

    • Tim Chrome pernah mencoba menghapus dukungan libxml dan XSLT
    • Ini adalah bukti bahwa pekerjaan pada tool fundamental itu penting
  • Saya baru-baru ini menulis transpiler XSLT 2

    • Menulis mesin XPath adalah bagian yang paling sulit
  • Saya penasaran masalah apa yang diselesaikan XPath dan XSLT secara elegan pada masa kini

  • Saya suka bekerja di luar ekosistem Java

    • Penting agar pembaca XML memiliki fitur pemulihan kesalahan
  • Saya penasaran apakah implementasi ini suatu hari bisa dipakai untuk implementasi MSXML di Wine

    • Dulu saya pernah menulis implementasi XPath 1.1 untuk Wine, tetapi tidak berhasil digabungkan