เหตุใดพวกเขาจึงกล่าวว่า XML มีความปลอดภัยของประเภทและมันแสดงใน XML ได้อย่างไร?
มันแตกต่างจาก JSON อย่างไร (เช่นที่ฉันเข้าใจ) ซึ่งไม่ปลอดภัยประเภท?
เหตุใดพวกเขาจึงกล่าวว่า XML มีความปลอดภัยของประเภทและมันแสดงใน XML ได้อย่างไร?
มันแตกต่างจาก JSON อย่างไร (เช่นที่ฉันเข้าใจ) ซึ่งไม่ปลอดภัยประเภท?
คำตอบ:
เนื่องจากข้อกำหนดXML Schema (XSD)
ด้วย XML คุณสามารถมีไฟล์เพิ่มเติมซึ่งอธิบายสคีมาได้ มันบ่งชี้เช่นว่าองค์ประกอบ/a/b
เป็นอาร์เรย์และมีตั้งแต่ 1 ถึง 10 องค์ประกอบหรือว่าองค์ประกอบ/a/c
เป็นจำนวนเต็ม คุณสามารถค้นหาตัวอย่างของ XSD ที่นี่
การตรวจสอบไฟล์ XML ที่กำหนดผ่าน XSD จะได้รับการสนับสนุนจากหลายภาษา ตัวอย่างเช่นแอปพลิเคชัน. NET อาจร้องขอไฟล์ XML จากแหล่งที่ไม่น่าเชื่อถือและตรวจสอบว่าตรงกับ XSD ; จากนั้นสามารถบันทึกลงในฐานข้อมูล Microsoft SQL Server ซึ่งจะสามารถมี XSDและทำการตรวจสอบอีกครั้ง (เพื่อให้แน่ใจว่าไคลเอนต์ใด ๆที่มีการเข้าถึงฐานข้อมูลเป็นไปตามมาตรฐาน)
XSD ไม่ใช่ภาษาเดียว
หากคุณทำการพัฒนาเว็บไซต์เสร็จคุณจะได้ยินเกี่ยวกับDocument Type Definition (DTD) ซึ่งเป็นภาษามาร์กอัปซึ่งกำหนดโครงสร้างของ XML และใช้เป็นพิเศษในการตรวจสอบความถูกต้องของเนื้อหาที่เกี่ยวข้องกับ HTML แม้ว่ามันจะไม่สามารถทำทุกสิ่งที่ XSD ทำได้เช่นให้แน่ใจว่าองค์ประกอบหรือแอตทริบิวต์มีตัวเลขจำนวนเต็ม แต่ก็ยังสามารถทำการตรวจสอบโครงสร้างจำนวนมากได้
RELAX NGมีข้อดีคือค่อนข้างง่ายเมื่อเทียบกับภาษาอื่นและสามารถเขียนในรูปแบบที่กะทัดรัดกว่า XML
Schematronเป็นอีกหนึ่ง“ ภาษาการตรวจสอบตามกฎสำหรับการยืนยันเกี่ยวกับการมีหรือไม่มีรูปแบบในต้นไม้ XML” ( Wikipedia ) และนำเสนอวิธีการที่แตกต่างกันเล็กน้อยขึ้นอยู่กับการยืนยัน XPath
ความคิดริเริ่มที่คล้ายกันสำหรับ JSON นั้นไม่ได้รับความนิยมมากนัก (โดยเฉพาะอย่างยิ่งผมเชื่อว่าในโลกธุรกิจของ บริษัท ที่มี Microsoft เป็นศูนย์กลาง) หนึ่งในเหตุผลคือ JSON นั้นมีไว้สำหรับสถานการณ์ที่โครงสร้างข้อมูลค่อนข้างพื้นฐาน (เช่นสามารถแสดงเป็นแผนผังโดยไม่จำเป็นต้องมีแอททริบิวต์) และไม่จำเป็นต้องได้รับการตรวจสอบ ตัวอย่างที่ยอดเยี่ยมคือ REST API ที่ใช้โดยภาษาที่พิมพ์แบบไดนามิก:
/something/percentage
เป็นจำนวนจริงและอยู่ในช่วง 0..100)XML สามารถพิมพ์ได้อย่างปลอดภัยเนื่องจากเป็นไปได้ด้วย XSD schemas เพื่อประกาศชนิดข้อมูลขององค์ประกอบ เอกสารที่ผ่านการตรวจสอบกับ XSD schema นั้นรับรองว่าสอดคล้องกับประเภทที่คาดหวัง แต่รูปแบบ XML ไม่จำเป็นต้องมีสคีมาดังนั้นเอกสารจะไม่ปลอดภัยโดยอัตโนมัติเพียงแค่เป็น XML
ที่จริงแล้วมีภาษาสคีมาสำหรับ JSONด้วยเช่นกันดังนั้น safe type JSON จึงเป็นไปได้ แต่ไม่ค่อยมีใครใช้ดังนั้นโดยทั่วไป JSON จะไม่ปลอดภัย
ในวิทยาการคอมพิวเตอร์ความปลอดภัยของประเภทคือขอบเขตที่ภาษาการเขียนโปรแกรมท้อหรือป้องกันข้อผิดพลาดประเภท
ความปลอดภัยของประเภทไม่ใช่คุณลักษณะที่แน่นอน มันไม่ใช่บูลีน ภาษา (และ XML และ JSON เป็นภาษา) อนุญาตและป้องกันข้อผิดพลาดและข้อผิดพลาดประเภทต่างๆ ตัวอย่างเช่นคุณสามารถตั้งชื่อองค์ประกอบผิด แต่คุณไม่สามารถข้ามองค์ประกอบวากยสัมพันธ์ที่จำเป็นเช่นแท็กปิดและวงเล็บปีกกา
Plain XML และ JSON นั้นค่อนข้างปลอดภัยเท่ากัน (หรือไม่ปลอดภัย) สตริง XML / JSON ที่ถูกต้องมีโครงสร้างไวยากรณ์และความหมายบางอย่าง แต่นี่แทบจะไม่เพียงพอสำหรับแอปพลิเคชันที่จะทำงานกับมัน การประยุกต์ใช้งานทำไม่เพียงใดโครงสร้าง แต่เฉพาะอย่างใดอย่างหนึ่ง
XML ส่องด้วย XML Schema Definition (XSD) ซึ่งเป็นวิธีที่ยืดหยุ่นและมีประสิทธิภาพในการตรวจสอบความถูกต้องของเอกสาร XML ที่กำหนดกับสคีมา ทำให้มีความปลอดภัยจำนวนมากภายใต้คำจำกัดความที่ระบุไว้ด้านบน