DEV Community

ข้อมูล 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)