Xee - Công cụ XPath và XSLT hiện đại được triển khai bằng Rust
(blog.startifact.com)- Xee là một engine thực thi XML được phát triển bằng Rust, hỗ trợ các phiên bản mới nhất của XPath 3.1 và XSLT 3.0
- XPath là ngôn ngữ truy vấn XML, còn XSLT là ngôn ngữ dùng để chuyển đổi tài liệu XML sang tài liệu khác
- Dự án gồm công cụ dòng lệnh
xeevà thư viện Rustxee-xpath, có thể thực thi các truy vấn XPath - Dựa trên hiệu năng và khả năng tích hợp của Rust, nó có thể được mở rộng sang nhiều ngôn ngữ khác nhau (ví dụ: đã có binding cho PHP)
- Trong tương lai, dự kiến cũng có thể chạy trên trình duyệt thông qua WebAssembly (WASM)
Lịch sử của XML và vị thế hiện nay
- XML xuất hiện vào cuối thập niên 1990 và từng là công nghệ cực kỳ phổ biến cho đến đầu những năm 2000
- Sau đó, với sự xuất hiện của JSON và các định dạng khác, XML không còn là xu hướng chủ đạo, nhưng vẫn được dùng rộng rãi trong lưu trữ và truyền dữ liệu, cũng như trong các định dạng tài liệu (docbook, JATS) hay một phần của web (SVG, MathML)
- XML vẫn là một công nghệ quan trọng, và Xee hướng tới việc hiện đại hóa hệ sinh thái công nghệ XML
- Tác giả từng tạo ra thư viện XML
lxmlcho Python, nên là một nhà phát triển hiếm hoi hiểu sâu cả Rust lẫn XML, và đang quay lại với thế giới XML thông qua Xee
XPath và XSLT là những ngôn ngữ lập trình hoàn chỉnh
- XPath là ngôn ngữ dùng để điều hướng và truy vấn XML; với tính chất là một ngôn ngữ hàm, nó có biến, câu lệnh điều kiện, vòng lặp, định nghĩa hàm và nhiều thành phần khác
- XSLT là ngôn ngữ chuyển đổi dựa trên template, sử dụng XPath làm ngôn ngữ biểu thức nhúng để chuyển XML sang các định dạng khác
- Cả hai đều là những ngôn ngữ lập trình chính thức với năng lực rất mạnh
Giới hạn của stack XML mã nguồn mở hiện nay
- Trong hệ sinh thái Java, có Saxon như một triển khai XPath/XSLT hiện đại, đồng thời cung cấp nhiều binding ngôn ngữ và cả runtime JavaScript
- Trong khi đó, phần lớn các bản phân phối Linux mặc định cung cấp
libxml2vàlibxslt - Các thư viện C này chỉ hỗ trợ XPath 1.0 và XSLT 1.0, tức vẫn dừng ở đặc tả được ban hành từ năm 1999
- Trong bối cảnh thiếu các lựa chọn mã nguồn mở hỗ trợ đặc tả mới, Xee đưa ra một phương án thay thế hiện đại được viết bằng Rust
Văn hóa lấy đặc tả làm trung tâm trong thế giới XML
- Cộng đồng XML có văn hóa rất nặng về đặc tả → nếu một tính năng không có trong đặc tả thì sẽ không được xem là tính năng “thật sự”
- Nhờ vậy tốc độ phát triển có thể chậm, nhưng nền tảng thì rất vững chắc
- RESTXQ, framework REST cho XPath và XQuery, đã được thảo luận từ năm 2012 và đến tận 2024 vẫn còn đang bàn về các cập nhật đặc tả
Kiến trúc triển khai ngôn ngữ của Xee
- Việc triển khai tham khảo cuốn
Crafting Interpreters - XPath đi qua các bước token hóa → AST → biểu diễn trung gian (IR) → bytecode → thực thi bằng trình thông dịch
- Trình thông dịch bytecode này tương tự stack machine được dùng trong Python, Java và nhiều ngôn ngữ khác
- XSLT cũng được triển khai trên cùng kiến trúc; chỉ frontend là khác, còn các thành phần còn lại được dùng chung với XPath
Thế giới đặc tả XML/XPath/XSLT đồ sộ
- XPath 3.1 và XSLT 3.0 phức tạp hơn rất nhiều và có nhiều tính năng hơn so với phiên bản 1.0
- Chỉ riêng các tài liệu đặc tả cần tham chiếu để triển khai đã dài hơn 1800 trang, và nhiều đặc tả còn phụ thuộc lẫn nhau
- Ví dụ:
XPath 3.1,Mô hình dữ liệu XQuery/XPath,Hàm và toán tử,XML Schema(cấu trúc/kiểu dữ liệu)XSLT 3.0,Đặc tả tuần tự hóa,Không gian tên XML,XML Base,xml:idv.v.- Do còn bao gồm cả tính năng biểu thức chính quy, dự án cũng triển khai một regex engine riêng → regexml
Tình trạng triển khai hiện tại của Xee
- Đã hoàn thành phần ngôn ngữ cốt lõi của XPath 3.1 cùng phần lớn thư viện chuẩn
- Một số hàm liên quan đến định dạng trong thư viện chuẩn vẫn chưa được triển khai
- Trong bộ kiểm thử tương thích XPath 3.1, Xee vượt qua 20130 trên tổng số 21859 bài kiểm thử (khoảng 92%)
- Toàn bộ kiểm thử chạy xong trong khoảng 13 giây → hiệu năng rất nhanh
- XSLT vẫn chưa hoàn thiện, nhưng nền tảng kiến trúc đã sẵn sàng để tiếp tục mở rộng
Tìm kiếm người đóng góp
- Hoan nghênh các nhà phát triển quan tâm đến Rust và XML, hoặc hứng thú với việc triển khai ngôn ngữ lập trình hay tối ưu hóa truy vấn
- Có thể đóng góp ở nhiều mảng như triển khai tính năng theo đặc tả, tối ưu hóa, cải thiện hiệu năng truy vấn v.v.
- Xee đang ở thời điểm cần sự hỗ trợ từ cộng đồng mã nguồn mở như một triển khai XML hiện đại bên ngoài hệ sinh thái Java
Tôi vẫn còn rất thời thượng. Dù là đang làm việc với XML.
1 bình luận
Ý kiến trên Hacker News
Thật vui khi thấy có người tạo ra một bản triển khai XSLT 3 và XPath 3 mã nguồn mở đúng nghĩa
Có một lượng lớn nguồn XML đang tồn tại
Việc dùng XML vẫn rất ngầu
XML là một cách tiếp cận dựa trên tiêu chuẩn cho khả năng tương tác dữ liệu
XSLT vẫn được hỗ trợ rộng rãi trên các trình duyệt lớn
Việc có thể biên dịch sang WASM là một điểm tích cực
Gần đây tôi đã viết một trình transpiler XSLT 2
Tôi tò mò không biết XPath và XSLT hiện nay giải quyết bài toán nào một cách thanh lịch
Tôi thích làm việc ngoài hệ sinh thái Java
Tôi tự hỏi liệu một ngày nào đó bản triển khai này có thể được dùng cho phần triển khai MSXML trong Wine hay không