Xee - เอนจิน XPath และ XSLT สมัยใหม่ที่พัฒนาด้วย Rust
(blog.startifact.com)- Xee เป็นเอนจินประมวลผล XML ที่พัฒนาด้วย Rust และรองรับ XPath 3.1 กับ XSLT 3.0 เวอร์ชันล่าสุด
- XPath เป็นภาษาสำหรับคิวรี XML ส่วน XSLT เป็นภาษาสำหรับแปลงเอกสาร XML ไปเป็นเอกสารรูปแบบอื่น
- ประกอบด้วยเครื่องมือบรรทัดคำสั่ง
xeeและไลบรารี Rustxee-xpathซึ่งสามารถใช้รัน XPath query ได้ - ด้วยประสิทธิภาพและความสามารถในการผสานรวมของ Rust จึงสามารถขยายไปยังภาษาอื่นได้หลากหลาย (เช่น มี PHP binding อยู่แล้ว)
- ในอนาคตคาดว่าจะสามารถรันบนเบราว์เซอร์ผ่าน WebAssembly (WASM) ได้ด้วย
ประวัติของ XML และตำแหน่งของมันในปัจจุบัน
- XML ปรากฏขึ้นในช่วงปลายทศวรรษ 1990 และเป็นเทคโนโลยีที่ได้รับความนิยมอย่างมากจนถึงช่วงต้นทศวรรษ 2000
- หลังจากนั้นแม้จะไม่ใช่กระแสหลักเพราะการมาของ JSON และสิ่งอื่น ๆ แต่ก็ยังถูกใช้จำนวนมากในการจัดเก็บและส่งผ่านข้อมูล รวมถึงในฟอร์แมตเอกสารต่าง ๆ (docbook, JATS) และบางส่วนของเว็บ (SVG, MathML)
- XML ยังคงเป็นเทคโนโลยีสำคัญ และ Xee มีเป้าหมายเพื่อทำให้เทคโนโลยี XML ทันสมัยขึ้น
- ผู้พัฒนามีประสบการณ์สร้างไลบรารี XML สำหรับ Python อย่าง
lxmlมาก่อน จึงเป็นนักพัฒนาหายากที่รู้ทั้ง Rust และ XML เป็นอย่างดี และได้กลับเข้าสู่โลกของ XML ผ่าน Xee
XPath และ XSLT คือภาษาการเขียนโปรแกรมเต็มรูปแบบ
- XPath เป็นภาษาสำหรับนำทางและคิวรี XML และในฐานะภาษาฟังก์ชันก็มีตัวแปร เงื่อนไข การวนซ้ำ การนิยามฟังก์ชัน เป็นต้น
- XSLT เป็นภาษาสำหรับการแปลงแบบอิงเทมเพลต โดยใช้ XPath เป็นภาษาสำหรับ expression ที่ฝังอยู่ภายใน และใช้แปลง XML ไปเป็นรูปแบบอื่น
- ทั้งสองภาษาต่างเป็นภาษาการเขียนโปรแกรมอย่างเป็นทางการที่มีความสามารถสูง
ข้อจำกัดของสแตก XML โอเพนซอร์สในปัจจุบัน
- ใน ecosystem ของ Java มี Saxon ซึ่งเป็น implementation ของ XPath/XSLT รุ่นใหม่ และยังมี language binding หลายแบบรวมถึง JavaScript runtime ให้ด้วย
- ในทางกลับกัน ลินุกซ์ดิสทริบิวชันส่วนใหญ่และสภาพแวดล้อมอื่น ๆ มักให้
libxml2และlibxsltมาเป็นค่าเริ่มต้น - ไลบรารีภาษา C เหล่านี้รองรับเพียง XPath 1.0 และ XSLT 1.0 เท่านั้น และยังคงอยู่กับสเปกจากปี 1999
- ในสถานการณ์ที่ยังขาดแคลนทางเลือกโอเพนซอร์สที่รองรับสเปกล่าสุด Xee จึงนำเสนอทางเลือกสมัยใหม่ที่เขียนด้วย Rust
วัฒนธรรมแบบยึดสเปกเป็นศูนย์กลางในโลก XML
- ชุมชน XML มีวัฒนธรรมที่ยึดสเปกเป็นศูนย์กลางอย่างมาก → ถ้าฟีเจอร์ไม่มีอยู่ในสเปก ก็จะไม่ถือว่าเป็นฟีเจอร์ที่ “แท้จริง”
- ด้วยเหตุนี้ความเร็วในการพัฒนาจึงช้า แต่พื้นฐานกลับแข็งแรงมาก
- RESTXQ ซึ่งเป็น REST framework สำหรับ XPath และ XQuery ถูกพูดถึงตั้งแต่ปี 2012 และจนถึงปี 2024 ก็ยังมีการถกเถียงเรื่องการอัปเดตสเปกอยู่
สถาปัตยกรรมการ implement ภาษาใน Xee
- พัฒนาโดยอ้างอิงจากหนังสือ
Crafting Interpreters - XPath ผ่านขั้นตอน tokenization → AST → intermediate representation (IR) → bytecode → การรันด้วย interpreter
- bytecode interpreter นี้คล้ายกับ stack machine ที่ใช้ใน Python, Java และภาษาอื่น ๆ
- XSLT ก็ถูก implement บนสถาปัตยกรรมเดียวกัน โดยต่างกันแค่ frontend ส่วนองค์ประกอบที่เหลือใช้ร่วมกับ XPath ได้เหมือนกัน
โลกของสเปก XML/XPath/XSLT ที่มหาศาล
- XPath 3.1 และ XSLT 3.0 มีความซับซ้อนและมีฟีเจอร์มากขึ้นอย่างมากเมื่อเทียบกับเวอร์ชัน 1.0
- เฉพาะเอกสารสเปกที่ต้องใช้อ้างอิงในการ implement ก็มีรวมกันมากกว่า 1800 หน้า และสเปกต่าง ๆ ยังพึ่งพากันและกัน
- ตัวอย่างเช่น:
XPath 3.1,XQuery/XPath Data Model,Functions and Operators,XML Schema(โครงสร้าง/ชนิดข้อมูล)XSLT 3.0,Serializationspecification,XML Namespaces,XML Base,xml:idเป็นต้น- ยังรวมความสามารถด้าน regular expression ไว้ด้วย จึงมีการ implement regex engine แยกต่างหาก → regexml
สถานะการ implement ของ Xee ในปัจจุบัน
- implement ภาษาแกนหลักของ XPath 3.1 และ standard library ส่วนใหญ่เสร็จแล้ว
- ฟังก์ชันบางส่วนที่เกี่ยวกับการจัดรูปแบบใน standard library ยังไม่ได้ implement
- ในการทดสอบความเข้ากันได้กับ XPath 3.1 ผ่านการทดสอบ 20130 รายการจากทั้งหมด 21859 รายการ (ประมาณ 92%)
- รันทดสอบทั้งหมดเสร็จภายในราว 13 วินาที → ประสิทธิภาพสูงมาก
- XSLT ยังไม่เสร็จสมบูรณ์ แต่มีโครงสร้างพื้นฐานพร้อมแล้วจึงสามารถขยายต่อได้
เปิดรับผู้ร่วมพัฒนา
- ยินดีต้อนรับนักพัฒนาที่สนใจ Rust และ XML หรือผู้ที่สนใจการ implement ภาษาโปรแกรมหรือการเพิ่มประสิทธิภาพคิวรี
- สามารถมีส่วนร่วมได้หลากหลายด้าน เช่น การ implement ฟีเจอร์ตามสเปก งาน optimization และการปรับปรุงประสิทธิภาพของคิวรี
- Xee เป็น implementation XML สมัยใหม่ที่อยู่นอก ecosystem ของ Java และกำลังอยู่ในช่วงที่ต้องการการสนับสนุนจากชุมชนโอเพนซอร์ส
ฉันยังคงเท่อยู่เสมอ แม้ว่าจะทำงานกับ XML ก็ตาม
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ดีใจที่มีคนสร้าง implementation ของ XSLT 3 และ XPath 3 แบบโอเพนซอร์สอย่างแท้จริง
มีซอร์ส XML จำนวนมหาศาลอยู่จริง
การใช้ XML ยังเท่อยู่เสมอ
XML เป็นแนวทางที่ยึดตามมาตรฐานสำหรับการทำงานร่วมกันของข้อมูล
XSLT ยังคงได้รับการรองรับอย่างแพร่หลายในเบราว์เซอร์หลัก
การที่สามารถคอมไพล์เป็น WASM ได้ถือเป็นเรื่องน่าพอใจ
เมื่อไม่นานมานี้ได้เขียนทรานส์ไพเลอร์ XSLT 2
สงสัยว่า XPath และ XSLT แก้ปัญหาอะไรได้อย่างสง่างามในปัจจุบัน
ชอบทำงานนอกโลก Java
สงสัยว่า implementation นี้สักวันหนึ่งจะถูกนำไปใช้กับ implementation ของ MSXML ใน Wine ได้หรือไม่