นักพัฒนาต่างหวนรำลึกถึงจุดแข็งของ XML ขณะที่ข้อจำกัดของ JSON ก่อให้เกิดการถกเถียง

ทีมชุมชน BigGo
นักพัฒนาต่างหวนรำลึกถึงจุดแข็งของ XML ขณะที่ข้อจำกัดของ JSON ก่อให้เกิดการถกเถียง

ในโลกของการพัฒนาซอฟต์แวร์ มีเพียงไม่กี่หัวข้อที่สามารถสร้างการอภิปรายอย่างเร่าร้อนได้เท่ากับรูปแบบข้อมูล บล็อกโพสต์ล่าสุดโดย Ron Gilbert นักพัฒนาวิดีโอเกมรุ่นเบอร์รันตัน ผู้สร้างเกม Maniac Mansion และ Monkey Island ได้จุดประกายการถกเถียงใหม่เกี่ยวกับเครื่องมือที่นักพัฒนาใช้ในแต่ละวัน ขณะที่ Gilbert ได้แบ่งปันประสบการณ์ส่วนตัวของเขากับ Git, JSON และ Markdown แต่ชุมชนนักพัฒนากลับให้ความสนใจกับประเด็นข้อโต้แย้งหนึ่งเป็นพิเศษ นั่นคือ ข้อจำกัดของ JSON เมื่อเทียบกับรุ่นพี่อย่าง XML

การฟื้นคืนชีพของ JSON พบกับความอาลัยต่อ XML

การอภิปรายเผยให้เห็นถึงการเปลี่ยนแปลงในความรู้สึกของนักพัฒนาอย่างน่าสนใจ นักพัฒนามืออาชีพจำนวนมากกำลังหันมามอง XML ใหม่ด้วยความชื่นชม พวกเขาตระหนักถึงคุณสมบัติต่างๆ ที่ครั้งหนึ่งเคยถูกมองข้ามไป ความเรียบง่ายของ JSON ทำให้มันได้รับความนิยมอย่างกว้างขวาง แต่ความเรียบง่ายแบบเดียวกันนี้ กำลังแสดงให้เห็นถึงข้อจำกัดในแอปพลิเคชันที่ซับซ้อน

JSON เป็นหนึ่งในโศกนาฏกรรมที่เป็นสัญลักษณ์ที่เกิดขึ้นในการพัฒนาซอฟต์แวร์ มันไม่ใช่ว่า JSON นั้นแย่ในตัวของมันเอง แต่มันชัดเจนว่าถูกออกแบบมาให้เครื่องจักรเป็นผู้เขียน ไม่ใช่สำหรับมนุษย์

ฉันทามติของชุมชนชี้ให้เห็นว่าจุดประสงค์ดั้งเดิมของ JSON ในฐานะรูปแบบที่เครื่องจักรอ่านได้ ถูกยืดออกไปเกินกว่ากรณีการใช้งานที่ตั้งใจไว้ นักพัฒนาในปัจจุบันใช้ JSON สำหรับทุกอย่าง ตั้งแต่ไฟล์กำหนดค่าต่างๆ ไปจนถึงโครงร่างข้อมูลที่ซับซ้อน ซึ่งเผยให้เห็นข้อจำกัดของมันสำหรับเนื้อหาที่มนุษย์เป็นผู้เขียน

คุณสมบัติที่ขาดหายไป: มากกว่าแค่ความคิดเห็น

ในขณะที่การขาดความคิดเห็น (comments) ใน JSON มักถูกกล่าวถึงบ่อยครั้ง การอภิปรายในชุมชนได้เผยให้เห็นถึงความกังวลในระดับที่ลึกกว่ามาก นักพัฒนาชี้ให้เห็นถึงความไม่สามารถของ JSON ในการจัดการข้อมูลเมตา (metadata) การขาดเครื่องมือการตรวจสอบความถูกต้องที่เป็นมาตรฐานเทียบเท่ากับ XML Schema และความท้าทายในการแสดงความสัมพันธ์ของข้อมูลที่ซับซ้อน

บทสนทนาเน้นย้ำให้เห็นว่า JSON กำลังค้นพบ XML Schema, XML DTDs ฯลฯ ใหม่ ในเมื่อเรามีสิ่งเหล่านั้นมาแล้วเมื่อกว่าสี่分之一ศตวรรษก่อน แนวคิดนี้สะท้อนไปทั่วทั้งความคิดเห็น โดยมีนักพัฒนาหลายคนระบุว่าเครื่องมือและมาตรฐานของ XML นั้นมีความ成熟มากกว่าสิ่งที่มีให้สำหรับ JSON ในปัจจุบัน

ฟีเจอร์ของ XML ที่นักพัฒนาพลาดไปใน JSON:

  • การรองรับคอมเมนต์ในตัว
  • การตรวจสอบความถูกต้องของสคีมา (XML Schema, DTD)
  • ความสามารถในการแปลงข้อมูล (XSLT)
  • เมทาดาทาผ่านแอตทริบิวต์
  • เครื่องมือและไลบรารีสำหรับการแยกวิเคราะห์ที่เป็นมาตรฐาน
  • การรองรับการแสดงผลในเบราว์เซอร์ด้วยสไตล์ชีต

ปัญหาการกำหนดค่า

หนึ่งในประเด็นการอภิปรายที่ร้อนแรงที่สุดเกี่ยวข้องกับการใช้ JSON สำหรับไฟล์กำหนดค่า (configuration files) นักพัฒนาได้แบ่งปันวิธีการแก้ไขปัญหาแบบสร้างสรรค์สำหรับข้อจำกัดของ JSON รวมถึงการเพิ่มฟิลด์ความคิดเห็นพิเศษเพื่อเก็บข้อความอธิบาย สิ่งนี้เน้นย้ำถึงความไม่ตรงกันระหว่างการออกแบบของ JSON กับรูปแบบการใช้งานทั่วไป

ชุมชนยังได้อภิปรายถึงทางเลือกอื่นๆ เช่น YAML และ TOML โดยมีปฏิกิริยาที่หลากหลาย ในขณะที่บางคนชอบความอ่านง่ายของ YAML คนอื่นๆ กลับชี้ให้เห็นถึงความซับซ้อนในการแยกวิเคราะห์และปัญหาด้านความปลอดภัยของมันเอง การค้นหารูปแบบการกำหนดค่าที่สมบูรณ์แบบยังคงดำเนินต่อไป โดยไม่มีผู้ชนะที่ชัดเจนจากการอภิปราย

รูปแบบทางเลือกที่ถูกกล่าวถึง:

  • YAML: รูปแบบที่มนุษย์อ่านได้ง่ายและเป็น superset ของ JSON แต่มีความซับซ้อนในการแยกวิเคราะห์
  • TOML: มุ่งเน้นไปที่ไฟล์การกำหนดค่าโดยมีความสามารถในการอ่านที่ดีกว่า
  • JSON5: ส่วนขยายของ JSON ที่รองรับคอมเมนต์และเครื่องหมายจุลภาคต่อท้าย
  • XML: มาตรฐานที่มีความเป็นผู้ใหญ่พร้อมเครื่องมือที่หลากหลาย

ช่องว่างของเครื่องมือ

ผู้แสดงความคิดเห็นหลายคนชี้ให้เห็นถึงช่องว่างที่สำคัญระหว่างเครื่องมือของ JSON และ XML คุณสมบัติต่างๆ เช่น XSLT สำหรับการแปลงข้อมูล (transformations) การสนับสนุนในเบราว์เซอร์แบบในตัวสำหรับการแสดงผล XML ด้วยสไตล์ชีต และระบบการตรวจสอบความถูกต้องที่成熟 ถูกเน้นย้ำว่าเป็นจุดแข็งของ XML ที่ JSON ยังขาดอยู่

นักพัฒนาคนหนึ่งได้แบ่งปันว่า: ฉันจำได้เมื่อเว็บเพจของ Blizzard เป็นแค่ XML+XSLT ฉันกำลังสร้างตัวแยกวิเคราะห์บางอย่างสำหรับพวกเขาและรู้สึกสับสนไปชั่วครู่เมื่อสคริปต์ Python ของฉันส่งคืน XML เปล่าๆ กลับมาเมื่อดึงข้อมูลหน้าแรก ตัวอย่างนี้แสดงให้เห็นว่าแนวทางแบบบูรณาการของ XML ต่อข้อมูลและการนำเสนอ ได้จัดหาวิธีแก้ไขปัญหาที่ระบบที่ใช้ JSON ยังคงต้องทำงานเพื่อทำซ้ำ

ปัจจัยด้านมนุษย์

เหนือไปจากข้อกำหนดทางเทคนิค การอภิปรายมักจะวนกลับมาที่ปัจจัยด้านมนุษย์ในการออกแบบรูปแบบข้อมูล ข้อกำหนดที่เข้มงวดของ JSON เกี่ยวกับเครื่องหมายจุลภาคตอนท้าย (trailing commas) และคีย์ที่ต้องมีเครื่องหมายคำพูด (quoted keys) ถูกถกเถียงกันอย่างกว้างขวาง โดยนักพัฒนาได้แบ่งปันทั้งความหงุดหงิดและเหตุผลที่มาของการออกแบบเหล่านี้

บทสนทนาเผยให้เห็นว่านักพัฒนาจำนวนมากได้เขียนโปรแกรมแยกวิเคราะห์ JSON ที่ปรับแต่งเองเพื่อผ่อนคลายข้อจำกัดเหล่านี้ เพียงเพื่อจะพบกับปัญหาความเข้ากันได้กับเครื่องมือมาตรฐาน ความตึงเครียดระหว่างความสะดวกสบายและการทำให้เป็นมาตรฐานนี้ยังคงไม่ได้รับการแก้ไขในชุมชน

วิธีแก้ปัญหาทั่วไปของนักพัฒนาสำหรับข้อจำกัดของ JSON:

  • การเพิ่มฟิลด์ "comment": {"_comment": "This is a comment", "data": "value"}
  • การใช้ JSON5 หรือ JSONC สำหรับไฟล์การกำหนดค่า
  • ตัวแยกวิเคราะห์ JSON แบบกำหนดเองที่อนุญาตให้มีเครื่องหมายจุลภาคต่อท้ายและคีย์ที่ไม่มีเครื่องหมายคำพูด
  • การตรวจสอบสคีมาภายนอกด้วย JSON Schema

มองไปข้างหน้า

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

การไตร่ตรองของชุมชนเกี่ยวกับเครื่องมือเหล่านี้แสดงให้เห็นถึงความ成熟ในการคิดของนักพัฒนา แทนที่จะเพียงแค่ไล่ตามเทคโนโลยีใหม่ล่าสุด นักพัฒนาที่มีประสบการณ์กำลังใช้แนวทางที่ละเอียดอ่อนมากขึ้น โดยประเมินเครื่องมือตามจุดแข็งและข้อจำกัดเฉพาะสำหรับกรณีการใช้งานแต่ละอย่าง

วิวัฒนาการอย่างต่อเนื่องของรูปแบบข้อมูลสะท้อนให้เห็นถึงวิวัฒนาการโดยรวมของการพัฒนาซอฟต์แวร์เอง ซึ่งเป็นการทรงตัวระหว่างความเรียบง่ายและพลัง ระหว่างการอ่านเข้าใจของมนุษย์และประสิทธิภาพของเครื่องจักร ระหว่างผลผลิตทันทีและการบำรุงรักษาในระยะยาว

ดังที่ผู้แสดงความคิดเห็นคนหนึ่งระบุเกี่ยวกับการค้นหาเครื่องมือที่ดีกว่าอย่างต่อเนื่อง: มันทำให้ฉันนึกถึงเรื่อง NoSQL จากสมัยนั้นเช่นกัน มันถูกทำให้ง่ายเกินไปว่า 'จะเป็นอย่างไรถ้าเราโยนก้อน JSON ลงในที่เก็บคีย์/ค่า?' ใช้เวลาหลายปีกว่าจะตระหนักว่าฐานข้อมูลเชิงสัมพันธ์และ SQL นั้นไม่ได้แย่ขนาดนั้น รูปแบบของการค้นพบวิธีแก้ไขปัญหาที่มีอยู่แล้วนี้ ดูเหมือนจะเกิดขึ้นซ้ำแล้วซ้ำอีกกับรูปแบบข้อมูล

อ้างอิง: Git, JSON and Markdown walk into bar