11 คะแนน โดย GN⁺ 2025-03-30 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Xee เป็นเอนจินประมวลผล XML ที่พัฒนาด้วย Rust และรองรับ XPath 3.1 กับ XSLT 3.0 เวอร์ชันล่าสุด
    • XPath เป็นภาษาสำหรับคิวรี XML ส่วน XSLT เป็นภาษาสำหรับแปลงเอกสาร XML ไปเป็นเอกสารรูปแบบอื่น
  • ประกอบด้วยเครื่องมือบรรทัดคำสั่ง xee และไลบรารี Rust xee-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, Serialization specification, 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 ความคิดเห็น

 
GN⁺ 2025-03-30
ความคิดเห็นจาก Hacker News
  • ดีใจที่มีคนสร้าง implementation ของ XSLT 3 และ XPath 3 แบบโอเพนซอร์สอย่างแท้จริง

    • ในโปรเจ็กต์ก่อนหน้านี้เคยใช้แค่ XSLT & XPath 1.0 เพราะนอกโลก Java/.NET แทบไม่มีการรองรับ
    • Saxon ยอดเยี่ยมมาก แต่ก็อยากให้โลกโอเพนซอร์สมี implementation ของ XSLT 2.0 และ XPath 2.0 ขึ้นไปมากกว่านี้
    • XSLT 3.0 เป็นสเปกที่ยอดเยี่ยม แต่จำเป็นต้องมีวิธีอื่นในการรันมันแบบโอเพนซอร์ส
  • มีซอร์ส XML จำนวนมหาศาลอยู่จริง

    • ตัวอย่างเช่น อาร์ไคฟ์ของ Wikipedia มีข้อความที่ไม่บีบอัดขนาด 42GB
    • ถ้าจะเก็บมันในหน่วยความจำในรูปแบบที่พาร์สเสร็จสมบูรณ์ อาจต้องใช้มากกว่า 100GB
    • การสตรีมคือคำตอบ แต่ตอนนี้ยังไม่รองรับ
  • การใช้ XML ยังเท่อยู่เสมอ

    • ต้องการไลบรารีประสิทธิภาพสูง คุณภาพสูง ที่เขียนด้วย Rust
    • ไลบรารี Python ที่สร้างบนสิ่งนี้อาจเป็นรากฐานที่ดี
  • XML เป็นแนวทางที่ยึดตามมาตรฐานสำหรับการทำงานร่วมกันของข้อมูล

    • ตอนที่เรียนรู้ครั้งแรก ฉันไม่ชอบมันเพราะมันไม่เป็นมิตรกับนักพัฒนา
    • แต่ตอนนี้เข้าใจคุณค่าของมาตรฐานที่ยืนยาวแล้ว
    • XML ดูเหมือนจะเป็นมาตรฐานข้อมูลที่คอมพิวเตอร์ชอบ
  • XSLT ยังคงได้รับการรองรับอย่างแพร่หลายในเบราว์เซอร์หลัก

  • การที่สามารถคอมไพล์เป็น WASM ได้ถือเป็นเรื่องน่าพอใจ

    • ครั้งหนึ่งทีม Chrome เคยพยายามถอดการรองรับ libxml และ XSLT ออก
    • นี่เป็นหลักฐานที่แสดงให้เห็นว่างานด้านเครื่องมือพื้นฐานมีความสำคัญ
  • เมื่อไม่นานมานี้ได้เขียนทรานส์ไพเลอร์ XSLT 2

    • การเขียนเอนจิน XPath เป็นส่วนที่ยากที่สุด
  • สงสัยว่า XPath และ XSLT แก้ปัญหาอะไรได้อย่างสง่างามในปัจจุบัน

  • ชอบทำงานนอกโลก Java

    • สำคัญที่ตัวอ่าน XML จะต้องมีความสามารถในการกู้คืนจากข้อผิดพลาด
  • สงสัยว่า implementation นี้สักวันหนึ่งจะถูกนำไปใช้กับ implementation ของ MSXML ใน Wine ได้หรือไม่

    • ในอดีตเคยเขียน implementation ของ XPath 1.1 สำหรับ Wine แต่ไม่สามารถรวมเข้ามาได้