DEV Community

Cover image for ข้อมูล XML บน Postgres : มารู้จักรุ่นพี่ของวงการแลกเปลี่ยนข้อมูลระหว่าง service กัน
Watchara Sukka for ใดๆในโลกล้วน Postgres

Posted on • Edited on

ข้อมูล XML บน Postgres : มารู้จักรุ่นพี่ของวงการแลกเปลี่ยนข้อมูลระหว่าง service กัน

บทนำ

ครั้งก่อนเราเคยทำบทความ "ข้อมูล JSON ใน PostgreSQL: โลกใหม่ของการจัดการข้อมูลบน Postgres" ซึ่งเกี่ยวกับการจัดการข้อมูล JSON ไปแล้ววันนี้เราจะมาคุยเรื่องการจัดการข้อมูลแบบ xml กัน
ในยุคสมัยที่มีการแลกเลี่ยนข้อมูลระหว่าง service ผ่าน API โดยส่งข้อมูลในรูปแบบ JSON เคยทราบไหมว่าสมัยก่อน(สมัยนี้บางระบบก็ยังมีอยู่) เคยมีรูปแบบการแลกเปลี่ยนข้อมูลระหว่าง server โดยโปรโตคอลที่เรียกว่า SOAP(Simple Object Access Protocol) ซึ่งเป็นการแลกเปลี่ยนข้อมูลในรูปแบบ XML

แล้ว XML คืออะไรล่ะ

XML(Extensible Markup Language)ก็คือภาษาที่ใช้กำหนดโครงสร้างของข้อมูลแบบข้อความคล้ายกับภาษา HTML ซึ่งก็คือภาษากำหนดโครงสรา้งที่แสดงหน้าเว็บยังไงล่ะโดยรูปแบบของ XML จะประกอบด้วย

  • โครงสร้างแบบต้นไม้: ข้อมูล XML จะถูกจัดเรียงเป็นโครงสร้างแบบต้นไม้ ประกอบด้วย element attribute และ content
  • Element: หน่วยพื้นฐานของ XML เปรียบเสมือนแท็กใน HTML แต่ละ element จะมีชื่อและอาจมี attribute เพิ่มเติม
  • Attribute: ข้อมูลเพิ่มเติมเกี่ยวกับ element เก็บไว้ในรูปคู่ key-value
  • Content: เนื้อหาที่อยู่ภายใน element อาจเป็นข้อความ element ย่อย หรือ entity references
  • Document: โครงสร้าง XML ทั้งหมด ประกอบด้วย element attribute และ content ตามตัวอย่าง
<?xml version="1.0" encoding="UTF-8"?> <product> <name>สินค้า A</name> <price>100</price> <stock>50</stock> <categories> <category>หมวดหมู่ 1</category> <category>หมวดหมู่ 2</category> </categories> </product> 
Enter fullscreen mode Exit fullscreen mode

แล้ว Postgres จัดการข้อมูลชนิด XML อย่างไร
ตัว postgres ไม่มีประเภทข้อมูล xml โดย postgres จะดำเนินการผ่าน extension ที่ชื่อ xml2 ซึ่งช่วยให้สามารถจัดเก็บ ประมวลผล และดึงข้อมูล XML ในฐานข้อมูล PostgreSQL ได้อย่างมีประสิทธิภาพ โดยรองรับการจัดการประเภทข้อมูลคือ

  • xml: เก็บข้อมูล XML แบบดั้งเดิม(text)
  • xmlb: เก็บข้อมูล XML แบบ binary (เอะคุ้นๆ นะ ดังนั้นข้อดีของ xmlb น่าจะคล้ายกับประเภทข้อมูล json)

การสร้างคอลัมน์ประเภท XML

CREATE TABLE products ( id serial PRIMARY KEY, name varchar(255) NOT NULL, details xml NOT NULL ); 
Enter fullscreen mode Exit fullscreen mode

จะเป็นการสร้างตารางที่มีคอลัมน์ details มีข้อมูลชนิด xml ขึ้นมา

การเพิ่มข้อมูล XML

INSERT INTO products (name, details) VALUES ('สินค้า A', '<product><name>สินค้า A</name><price>100</price><stock>50</stock></product>'); Use code with caution. content_copy 
Enter fullscreen mode Exit fullscreen mode

การดึงข้อมูล XML

SELECT id, name, details->'name' AS product_name FROM products; Use code with caution. content_copy 
Enter fullscreen mode Exit fullscreen mode

การแก้ไขข้อมูล XML

UPDATE products SET details = details || xml '<discount>10</discount>' WHERE id = 1; Use code with caution. 
Enter fullscreen mode Exit fullscreen mode

ฟังก์ชันสำหรับการประมวลผลข้อมูล XML

PostgreSQL รองรับฟังก์ชัน XML มากมาย
สำหรับการประมวลผลข้อมูล XML ตัวอย่างฟังก์ชันที่ใช้ทั่วไป ได้แก่:

  • xml_parse: แปลงสตริง XML เป็นค่าประเภท XML
  • xml_serialize: แปลงค่าประเภท XML เป็นสตริง XML
  • xpath: ดึงข้อมูล XML โดยใช้ XPath

ส่งท้าย
ถามว่าเรายังจำเป็นต้องเก็บข้อมูล XML อยู่ไหมผมเคยพัฒนาระบบที่ต้องส่งข้อมูลไปยัง service ที่ใช้ SOAP โปรโตคอลในการเชื่อมต่อซึ่งต้องส่งและเก็บข้อมูลการทำ transaction ย้อนหลังได้ตอนนั้นใช้ Microsoft SQL Server ที่มีประเภทข้อมูลเป็น xml ติดมาด้วย อีกทั้งยังมีอีกหลาย service ที่ยังมีการใช้ SOAP หวังว่าบทความนี้จะเป็นประโยชน์บ้างนะครับ
xml_update: อัปเดตข้อมูล XML

Top comments (0)