บทนำ
ครั้งก่อนเราเคยทำบทความ "ข้อมูล 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>
แล้ว 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
);
จะเป็นการสร้างตารางที่มีคอลัมน์ 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
การดึงข้อมูล XML
SELECT id, name, details->'name' AS product_name FROM products;
Use code with caution.
content_copy
การแก้ไขข้อมูล XML
UPDATE products
SET details = details || xml '<discount>10</discount>'
WHERE id = 1;
Use code with caution.
ฟังก์ชันสำหรับการประมวลผลข้อมูล 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)