หมวดหมู่: Nginx

XSLT (Extensible Stylesheet Language Transformations )XSLT (Extensible Stylesheet Language Transformations )

ครั้งหนึ่งเคยใช้ XSLT แปลง XML ให้แสดงออกมาเป็น photo book ในสมัยที่โปรแกรมดูรูปมันไม่ถูกใจ folder นี้อยากใช้ template นี้ อีก folder อยากใช้อีกแบบ แล้วเขียน CD เก็บไว้ ส่งให้เพื่อน
โดยพื้นฐานมันคือ ภาษาที่ใช้สำหรับ “แปลงร่าง” เอกสาร XML ให้กลายเป็นรูปแบบอื่น เช่น HTML (สำหรับหน้าเว็บ) , XML รูปแบบใหม่ หรือแม้แต่ Text ไฟล์ธรรมดา

เพื่อให้เห็นภาพง่ายขึ้น ให้ลองนึกถึง XML เป็น “วัตถุดิบ” และ XSLT เป็น “สูตรอาหาร” ที่บอกว่าต้องหยิบวัตถุดิบชิ้นไหนมาจัดวางอย่างไรเพื่อให้ได้จานอาหารที่สวยงาม


หลักการทำงานของ XSLT

  1. XSLT ทำงานโดยการอ่านโครงสร้างต้นไม้ (Tree structure) ของ XML และใช้คำสั่งค้นหาโหนดที่ต้องการผ่าน XPath จากนั้นจึงนำข้อมูลนั้นมาใส่ใน Template ที่เรากำหนดไว้
  2. ส่วนประกอบสำคัญ
    • XSLT Processor: ตัวขับเคลื่อนการแปลง
    • XPath: ภาษาที่ใช้ระบุตำแหน่งของข้อมูลใน XML เช่น /root/user/name
    • Templates: กฎที่ระบุว่าถ้าเจอ Tag นี้ ให้ทำอะไรต่อไป
  3. ตัวอย่างการเขียน XSLT เบื้องต้น
    <library> <book> <title>Learning XSLT</title> <author>Pitt Phunsanit</author> </book>
    </library>
    
  4. จากนั้นเขียนไฟล์ .xsl เพื่อแปลงเป็น HTML
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My Books</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Author</th> </tr> <xsl:for-each select="library/book"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="author"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
    

ข้อดีของ XSLT

  • Separation of Concerns: แยกข้อมูล (XML) ออกจากการแสดงผล (XSLT) ชัดเจน
  • Portability: ทำงานได้ทุกที่ที่มี XML Processor
  • Reusability: เขียน Template ครั้งเดียว ใช้แปลง XML กี่ไฟล์ก็ได้ที่มีโครงสร้างเดียวกัน

สถานะการรองรับในปัจจุบัน

Browser หลัก ๆ ในปัจจุบัน ยังคงมีตัว engine สำหรับประมวลผล XSLT 1.0 อยู่ในตัว และสามารถเรนเดอร์ไฟล์ XML ที่อ้างอิง XSLT stylesheet ได้โดยตรง

Browserการรองรับ XSLT 1.0การรองรับ XSLT 2.0 / 3.0
Chrome / Edgeรองรับ ไม่รองรับ (ต้องใช้ Library เสริม)
Firefoxรองรับ ไม่รองรับ
Safariรองรับ ไม่รองรับ

ข้อจำกัดที่สำคัญ

  • CORS & Security : ปัจจุบัน Browser มีนโยบายความปลอดภัยที่เข้มงวดมาก หากคุณเปิดไฟล์ XML และ XSL จากเครื่องตัวเอง (file://) Browser ส่วนใหญ่จะ Block การทำงานเพราะถือว่าเป็น Cross-Origin Request คุณต้องรันผ่าน Web Server เท่านั้นถึงจะทำงานได้
  • หยุดอยู่ที่เวอร์ชัน 1.0: Browser แทบทุกค่ายหยุดพัฒนา XSLT ไว้ที่เวอร์ชัน 1.0 หากคุณต้องการใช้ฟีเจอร์ใหม่ ๆ ใน XSLT 2.0 หรือ 3.0 คุณต้องใช้ Library อย่าง Saxon-JS เข้ามาช่วย
  • SEO: Search Engine ส่วนใหญ่ มักจะไม่ประมวลผล XSLT บนฝั่ง Client ทำให้หน้าเว็บที่เกิดจากการแปลง XML ด้วย XSLT บน Browser ไม่ถูกเก็บดัชนี (Index) เนื้อหาได้ดีเท่าที่ควร

แนวทางที่แนะนำในปัจจุบัน

  • Server-Side Transformation: หากเป็นไปได้ แนะนำให้ทำการแปลง ที่ฝั่ง Server ให้กลายเป็น HTML สำเร็จรูปก่อนส่งมาที่ Browser วิธีนี้จะเสถียรที่สุดและไม่มีปัญหาเรื่อง Security บน Browser
  • ใช้ JavaScript Library: หากจำเป็นต้องทำบน Browser จริง ๆ การใช้ Library อย่าง Saxon-JS จะช่วยให้คุณใช้ XSLT 3.0 ได้ และควบคุมการทำงานได้แม่นยำกว่าการปล่อยให้ Browser จัดการเอง

น่าเสียดายที่ XSLT ไม่ได้รับการสนับสนุนเท่าที่ควร จะบอกว่าล้าสมัยไปแล้วก็ได้ ส่วนหนึ่งคือเรื่องความปลอดภัย และ JSON ที่ดีกว่าในการเก็บข้อมูล


อ่านเพิ่มเติม