ในตอนนี้ ลองใช้ "Notepad" เพื่อสร้างไฟล์ XML ของเรา มาดูไฟล์ XML ก่อน:
ตัวอย่างที่ 1
〈?xml version="1.0" encoding="gb2312" ?〉
〈ข้อมูลอ้างอิง〉
<หนังสือ>
〈ชื่อ〉ความรู้เบื้องต้นเกี่ยวกับ XML 〈/ชื่อ〉
〈ผู้แต่ง〉จางซาน〈/ผู้แต่ง〉
〈หน่วยสกุลเงินราคา="RMB"〉20.00〈/price〉
</หนังสือ>
<หนังสือ>
<ชื่อ>ไวยากรณ์ XML </ชื่อ>
〈!--หนังสือเล่มนี้จะตีพิมพ์เร็วๆ นี้--〉
〈ผู้เขียน〉หลี่ ซี〈/ผู้เขียน〉
〈หน่วยสกุลเงินราคา="RMB"〉18.00〈/price〉
</หนังสือ>
〈/เอกสารอ้างอิง〉
นี่คือไฟล์ XML ทั่วไป หลังจากแก้ไข ไฟล์จะถูกบันทึกเป็นไฟล์ที่มีส่วนต่อท้าย .xml เราสามารถแบ่งไฟล์นี้ออกเป็นสองส่วนหลักๆ ได้แก่ ส่วนนำของไฟล์ (Prolog) และเนื้อความของไฟล์ บรรทัดแรกในไฟล์นี้คือคำนำของไฟล์ บรรทัดนี้เป็นสิ่งที่ไฟล์ XML ต้องประกาศ และจะต้องอยู่ในบรรทัดแรกของไฟล์ XML โดยหลักๆ แล้วจะบอก Parser ถึงวิธีการทำงาน ในจำนวนนั้น เวอร์ชันคือหมายเลขเวอร์ชันมาตรฐานที่ใช้โดยไฟล์ XML นี้ ซึ่งจำเป็น การเข้ารหัสจะระบุประเภทอักขระที่ใช้ในไฟล์ XML นี้ ซึ่งสามารถละเว้นได้ เมื่อคุณละเว้นคำสั่งนี้ โค้ดอักขระต่อไปนี้จะต้องเป็นโค้ดอักขระ Unicode (ขอแนะนำว่าอย่าละเว้น) เนื่องจากเราใช้โค้ดอักขระ GB2312 ในตัวอย่างนี้ จึงไม่สามารถละเว้นคำสั่งการเข้ารหัสได้ นอกจากนี้ยังมีข้อความประกาศบางส่วนในคำนำของไฟล์ ซึ่งเราจะแนะนำในภายหลัง
ไฟล์ส่วนที่เหลือเป็นของเนื้อหาไฟล์ซึ่งข้อมูลเนื้อหาของไฟล์ XML จะถูกเก็บไว้ เราจะเห็นว่าเนื้อหาหลักของไฟล์ประกอบด้วยแท็กควบคุมเริ่มต้น <reference> และแท็กสิ้นสุด </reference> ซึ่งเรียกว่า "องค์ประกอบราก" ของไฟล์ XML; <book> คือ "องค์ประกอบราก" โดยตรงภายใต้องค์ประกอบรูท "องค์ประกอบย่อย"; ภายใต้ "หนังสือ" มีองค์ประกอบย่อยเช่น "ชื่อ", "ผู้แต่ง" และ "ราคา" หน่วยสกุลเงินคือ "แอตทริบิวต์" ในองค์ประกอบ <price> และ "RMB" คือ "มูลค่าแอตทริบิวต์"
〈!--หนังสือเล่มนี้จะเผยแพร่เร็วๆ นี้--〉 เป็นความคิดเห็นเช่นเดียวกับ HTML ในไฟล์ XML ส่วนความคิดเห็นจะอยู่ระหว่างแท็ก "〈!--" และ "--〉"
อย่างที่คุณเห็นไฟล์ XML นั้นค่อนข้างง่าย เช่นเดียวกับ HTML ไฟล์ XML ก็ประกอบด้วยชุดแท็กเช่นกัน อย่างไรก็ตาม แท็กในไฟล์ XML นั้นเป็นแท็กที่เรากำหนดเองและมีความหมายที่ชัดเจน เราสามารถอธิบายความหมายของเนื้อหาในแท็กได้
หลังจากมีการแสดงผลไฟล์ XML เบื้องต้นแล้ว เรามาพูดถึงไวยากรณ์ของไฟล์ XML โดยละเอียดกันดีกว่า ก่อนที่จะพูดถึงไวยากรณ์ เราต้องเข้าใจแนวคิดที่สำคัญก่อน ซึ่งก็คือ XML Parse
1. ตัวแยกวิเคราะห์ XML
หน้าที่หลักของตัวแยกวิเคราะห์คือการตรวจสอบว่ามีข้อผิดพลาดเชิงโครงสร้างในไฟล์ XML หรือไม่ ตัดแท็กในไฟล์ XML และอ่านเนื้อหาที่ถูกต้องสำหรับการประมวลผลโดยแอปพลิเคชันโปรแกรมถัดไป XML เป็นภาษามาร์กอัปที่ใช้ในการจัดโครงสร้างข้อมูลไฟล์ ข้อกำหนด XML มีกฎโดยละเอียดเกี่ยวกับวิธีการทำเครื่องหมายโครงสร้างของไฟล์ parser เป็นซอฟต์แวร์ที่เขียนตามกฎเหล่านี้ (ส่วนใหญ่เขียนด้วยภาษา Java) เช่นเดียวกับ HTML ในเบราว์เซอร์ จะต้องมีตัวแยกวิเคราะห์ HTML เพื่อให้เบราว์เซอร์สามารถ "อ่าน" หน้าเว็บต่างๆ ที่ประกอบด้วยแท็ก HTML และแสดงต่อหน้าเรา หากมีแท็กที่ตัวแยกวิเคราะห์ HTML ของเบราว์เซอร์ไม่สามารถอ่านได้ ข้อความแสดงข้อผิดพลาดจะถูกส่งกลับมาให้เรา
เนื่องจากแท็ก HTML ปัจจุบันค่อนข้างสับสนและมีแท็กที่ไม่ได้มาตรฐานจำนวนมาก (หน้าเว็บบางหน้าสามารถแสดงได้ตามปกติด้วย IE แต่ไม่ใช่ด้วย Netscape Navigator) ผู้ออกแบบ XML จึงกำหนดไวยากรณ์ของ XML อย่างเคร่งครัดจาก เริ่มต้นและโครงสร้างไฟล์ XML ที่เราเขียนจะต้องเป็นไปตามกฎระเบียบเหล่านี้มิฉะนั้นตัวแยกวิเคราะห์ XML จะแสดงข้อความแสดงข้อผิดพลาดอย่างไร้ความปราณี
ไฟล์ XML มีสองประเภท ประเภทแรกคือไฟล์ XML ที่มีรูปแบบดี และอีกประเภทคือไฟล์ XML การตรวจสอบความถูกต้อง
หากไฟล์ XML เป็นไปตามกฎที่เกี่ยวข้องบางประการในข้อกำหนด XML และไม่ได้ใช้ DTD (คำจำกัดความของรูปแบบเอกสาร - รายละเอียดในภายหลัง) เอกสารดังกล่าวสามารถเรียกว่ามีรูปแบบที่ดี และหากไฟล์ XML มีรูปแบบที่ถูกต้อง DTD จะถูกใช้อย่างถูกต้อง และไวยากรณ์ใน DTD นั้นถูกต้อง แสดงว่าไฟล์นั้นกำลังตรวจสอบความถูกต้อง ตามไฟล์ XML สองไฟล์ มีตัวแยกวิเคราะห์ XML สองตัว ตัวหนึ่งคือตัวแยกวิเคราะห์ที่มีรูปแบบดี และอีกตัวคือตัวแยกวิเคราะห์การตรวจสอบ IE 5 มี Validating parser ซึ่งสามารถใช้เพื่อแยกวิเคราะห์ไฟล์ XML ที่มีรูปแบบดี
ตรวจสอบว่าตรงตามเงื่อนไขของ Well-Formed หรือไม่ เราสามารถเปิดไฟล์ XML แรกที่เราเพิ่งแก้ไขด้วยเบราว์เซอร์ IE 5 ขึ้นไป
คุณอาจถามว่าทำไมการแสดงผลในเบราว์เซอร์จึงเหมือนกับไฟล์ต้นฉบับของฉัน ถูกต้อง เนื่องจากสำหรับไฟล์ XML เรารู้เฉพาะเนื้อหาเท่านั้น และแบบฟอร์มการแสดงผลจะกรอกโดย CSS หรือ XSL ที่นี่ เรายังไม่ได้กำหนดไฟล์ CSS หรือ XSL สำหรับไฟล์ XML นี้ ดังนั้นจึงแสดงในรูปแบบดั้งเดิม จริงๆ แล้ว สำหรับการแลกเปลี่ยนข้อมูลทางอิเล็กทรอนิกส์ จำเป็นต้องใช้ไฟล์ XML เท่านั้น หากเราต้องการแสดงในรูปแบบใดรูปแบบหนึ่ง เราต้องแก้ไขไฟล์ CSS หรือ XSL (ปัญหานี้จะมีการหารือในภายหลัง)
2. ไฟล์ XML ที่มีรูปแบบถูกต้อง
เรารู้ว่า XML ต้องมีรูปแบบที่ถูกต้องเพื่อให้สามารถแยกวิเคราะห์ได้อย่างถูกต้องโดยโปรแกรมแยกวิเคราะห์และแสดงในเบราว์เซอร์ แล้วไฟล์ XML ที่มีรูปแบบดีคืออะไร? โดยหลักแล้วจะมีหลักเกณฑ์ต่อไปนี้ ซึ่งจะต้องปฏิบัติตามเมื่อเราสร้างไฟล์ XML
ขั้นแรก บรรทัดแรกของไฟล์ XML จะต้องประกาศว่าไฟล์นั้นเป็นไฟล์ XML และเวอร์ชันข้อกำหนด XML ที่ใช้ ต้องไม่มีองค์ประกอบหรือความคิดเห็นอื่นอยู่หน้าไฟล์
ประการที่สอง สามารถมีองค์ประกอบรากได้เพียงองค์ประกอบเดียวในไฟล์ XML ในตัวอย่างแรกของเรา 〈References〉... 〈/References〉 เป็นองค์ประกอบรากของไฟล์ XML นี้
ประการที่สาม แท็กในไฟล์ XML จะต้องปิดอย่างถูกต้อง กล่าวคือ แท็กควบคุมในไฟล์ XML ต้องมีแท็กปิดที่เกี่ยวข้อง ตัวอย่างเช่น: แท็ก <name> ต้องมีแท็กปิด </name> ที่สอดคล้องกัน ซึ่งต่างจากแท็ก HTML ตรงที่แท็กปิดของบางแท็กเป็นทางเลือก หากคุณพบแท็กหน่วยในตัวเองในไฟล์ XML ซึ่งคล้ายกับ <img src=.....> ใน HTML โดยไม่มีแท็กปิดท้าย XML จะเรียกมันว่า "องค์ประกอบว่าง" และคุณต้องใช้วิธีการเขียน คือ: 〈ชื่อองค์ประกอบว่าง/〉 หากองค์ประกอบมีแอตทริบิวต์ วิธีการเขียนคือ: 〈ชื่อองค์ประกอบว่าง ชื่อแอตทริบิวต์ = "ค่าแอตทริบิวต์"/〉
ประการที่สี่ เครื่องหมายจะต้องไม่ไขว้กัน ในไฟล์ HTML ก่อนหน้านี้ คุณสามารถเขียนดังนี้:
〈B〉〈H〉XXXXXXX〈/B〉〈/H〉
มีพื้นที่ทับซ้อนกันระหว่างแท็ก 〈B〉 และ 〈H〉 แต่ใน XML จะมีการเซอย่างเคร่งครัด ห้ามเขียนเครื่องหมายดังกล่าว เครื่องหมายต้องปรากฏตามลำดับปกติ
ประการที่ห้า ค่าคุณลักษณะจะต้องอยู่ในเครื่องหมาย " " เช่น "1.0", "gb2312", "RMB" ในตัวอย่างแรก ทั้งหมดล้อมรอบด้วย " " และไม่ควรพลาด
ประการที่หก แท็กควบคุมภาษาอังกฤษ คำแนะนำ และชื่อแอตทริบิวต์จะต้องคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ต่างจาก HTML ใน HTML แท็กเช่น <B> และ <b> มีความหมายเหมือนกัน ในขณะที่ใน XML แท็กเช่น <name>, <NAME> หรือ <Name> จะแตกต่างกัน
ประการที่เจ็ด เรารู้ว่าในไฟล์ HTML ถ้าเราต้องการให้เบราว์เซอร์แสดงสิ่งที่เราป้อนเข้าไปโดยสมบูรณ์ เราสามารถใส่สิ่งเหล่านี้ไว้ใน 〈pre〉〈/pre〉 หรือ 〈xmp〉〈/xmp〉 ทำเครื่องหมายตรงกลาง นี่เป็นสิ่งสำคัญสำหรับเราในการสร้างหน้าเว็บการสอน HTML เนื่องจากซอร์สโค้ดของ HTML จะต้องแสดงในหน้าเว็บ ใน XML เพื่อให้บรรลุฟังก์ชันดังกล่าว ต้องใช้แท็ก CDATA ข้อมูลในแท็ก CDATA จะถูกส่งผ่านไปยังแอปพลิเคชันโดยโปรแกรมแยกวิเคราะห์ และแท็กควบคุมใดๆ ในส่วนของข้อมูลจะไม่ถูกแยกวิเคราะห์ พื้นที่ CDATA ถูกทำเครื่องหมายโดย: "<![CDATA[" เป็นเครื่องหมายเริ่มต้นและ ">>" เป็นเครื่องหมายสิ้นสุด ตัวอย่างเช่น: ในซอร์สโค้ดในตัวอย่างที่ 2 ยกเว้นสัญลักษณ์ "<![CDATA[" และ ">>" ตัวแยกวิเคราะห์เนื้อหาที่เหลือจะถูกส่งไปยังแอปพลิเคชันดาวน์สตรีมที่ยังคงสภาพเดิม แม้ว่าจะมีช่องว่างที่ จุดเริ่มต้นและจุดสิ้นสุดของพื้นที่ CDATA และอักขระขึ้นบรรทัดใหม่ ฯลฯ จะถูกถ่ายโอนด้วย (โปรดทราบว่า CDATA เป็นอักขระตัวพิมพ์ใหญ่)
ตัวอย่างที่ 2
〈![CDATA[flying xml〉〉〉〉〉,:-)
โอ้〈〈〈〈〈〈
>〉
ประการที่แปด XML จัดการอักขระช่องว่างที่แตกต่างจาก HTML มาตรฐาน HTML กำหนดว่าไม่ว่าจะมีช่องว่างกี่ช่องก็ตาม แม้จะอยู่ใน XML แต่ parser จะต้องส่งมอบช่องว่างทั้งหมดนอกเหนือจากแท็กให้กับแอปพลิเคชันดาวน์สตรีมเพื่อประมวลผล ด้วยวิธีนี้ บางครั้งเราต้องละทิ้งนิสัยการเยื้องเมื่อเขียนไฟล์ HTML เนื่องจาก parser ยังต้องประมวลผลช่องว่างที่เยื้องด้วย เช่น:
〈Author〉Zhang San〈/Author〉
และ 〈ผู้เขียน〉
Zhang San 〈/Author〉
นั้นแตกต่างกันสำหรับ parser (ส่วนหลังรวมถึงนอกเหนือจากอักขระ Zhang San ภายในแท็ก 〈Author〉〈/Author〉 นอกจากนี้ยังมีเครื่องหมายขึ้นบรรทัดใหม่สองเครื่องหมายและอักขระก่อน "Zhang San " สัญลักษณ์การเยื้องข้อความ) ดังนั้น parser จะมีผลการประมวลผลที่แตกต่างกันหลังจากลบเครื่องหมายและส่งข้อมูลไปยังแอปพลิเคชัน
หากเราต้องการบอกโปรแกรม XML อย่างชัดเจนว่าช่องว่างในแท็กมีความหมายที่ชัดเจน และไม่ควรลบออกโดยไม่ตั้งใจ (เช่น ในบทกวีบางบท การเว้นวรรคมีความหมายเฉพาะ) เราก็สามารถเพิ่มแอตทริบิวต์ XML ในตัวได้ - xml - ไปที่แท็ก :space ตัวอย่างเช่น (สังเกตกรณีของชื่อแอตทริบิวต์และค่า):
〈poetry xml:space="preserver"〉
มาตุภูมิ! มาตุภูมิ!
มาตุภูมิของฉัน!
〈/Poetry〉
นอกจากนี้ ในไฟล์ XML หากจะใช้อักขระพิเศษในตารางที่ 1 จะต้องแทนที่ด้วยสัญลักษณ์ที่เกี่ยวข้อง
ตารางที่ 1
สัญลักษณ์การแทนที่อักขระพิเศษ && &
<&มัน;
-
-
' '
หากต้องการสรุปที่นี่: ไฟล์ XML ที่ตรงตามข้อกำหนดข้างต้นคือไฟล์ XML ที่มีรูปแบบดี นี่เป็นข้อกำหนดพื้นฐานที่สุดสำหรับการเขียนไฟล์ XML คุณจะเห็นว่าไวยากรณ์ของไฟล์ XML นั้นเข้มงวดกว่าของ HTML มาก เนื่องจากกฎระเบียบที่เข้มงวดดังกล่าว วิศวกรซอฟต์แวร์จึงสามารถเขียนตัวแยกวิเคราะห์ XML ได้ง่ายกว่ามาก ต่างจากการเขียนตัวแยกวิเคราะห์สำหรับภาษา HTML พวกเขาต้องทำงานอย่างหนักเพื่อปรับให้เข้ากับวิธีการเขียนหน้าเว็บต่างๆ และปรับปรุงความสามารถในการปรับตัวของเบราว์เซอร์ของตนเอง อันที่จริงนี่เป็นสิ่งที่ดีสำหรับผู้เริ่มต้นเช่นกัน เพียงทำสิ่งที่คุณต้องการ และไม่ต้องกังวลกับวิธีการเขียน HTML ต่างๆ เหมือนเมื่อก่อน
เราเห็นว่าในไฟล์ XML แท็กที่กำหนดเองส่วนใหญ่จะถูกนำมาใช้ แต่ลองคิดดูว่า หากสองบริษัท A และ B ในอุตสาหกรรมเดียวกันต้องการแลกเปลี่ยนข้อมูลระหว่างกันโดยใช้ไฟล์ XML บริษัท A จะใช้แท็ก <price> เพื่อแสดงข้อมูลราคาของผลิตภัณฑ์ของตน ในขณะที่บริษัท B อาจใช้ <การขาย ราคา> เพื่อแสดงข้อมูลราคา หากแอปพลิเคชัน XML อ่านข้อมูลในไฟล์ XML ที่เกี่ยวข้อง หากรู้เพียงว่าแท็ก <price> แสดงถึงข้อมูลราคา ข้อมูลราคาของบริษัท B จะไม่สามารถอ่านได้ และจะเกิดข้อผิดพลาดขึ้น แน่นอนว่าสำหรับเอนทิตีที่ต้องการใช้ไฟล์ XML เพื่อแลกเปลี่ยนข้อมูล จะต้องมีข้อตกลงระหว่างกัน นั่นคือแท็กใดที่สามารถใช้เพื่อเขียนไฟล์ XML ซึ่งองค์ประกอบย่อยที่สามารถรวมไว้ในองค์ประกอบหลักได้ ลำดับใน ที่แต่ละองค์ประกอบปรากฏ และวิธีการกำหนดคุณสมบัติ เป็นต้น ด้วยวิธีนี้พวกเขาสามารถมีการสื่อสารที่ราบรื่นเมื่อแลกเปลี่ยนข้อมูลด้วย XML แบบแผนนี้เรียกว่า DTD (คำจำกัดความของประเภทเอกสาร คำจำกัดความของรูปแบบเอกสาร) คุณสามารถนึกถึง DTD เป็นเทมเพลตสำหรับเขียนไฟล์ XML สำหรับการแลกเปลี่ยนข้อมูล XML ระหว่างอุตสาหกรรมเดียวกัน การมี DTD แบบคงที่จะสะดวกกว่ามาก ตัวอย่างเช่น หากหน้าเว็บ XML ของห้างสรรพสินค้าอิเล็กทรอนิกส์รายใหญ่บนอินเทอร์เน็ตทั้งหมดเป็นไปตาม DTD เดียวกัน เราก็สามารถเขียนแอปพลิเคชันโดยใช้ DTD นี้ได้อย่างง่ายดายเพื่อบันทึกสิ่งที่เราสนใจทางออนไลน์โดยอัตโนมัติ ในความเป็นจริง มี DTD ที่กำหนดไว้อย่างดีอยู่แล้วหลายรายการ เช่น MathML, SMIL และอื่นๆ ที่กล่าวถึงข้างต้น
หากไฟล์ XML มีรูปแบบที่ถูกต้องและสร้างขึ้นอย่างถูกต้องตาม DTD ไฟล์ XML จะถูกเรียกว่า: กำลังตรวจสอบไฟล์ XML parser ที่เกี่ยวข้องเรียกว่า: Validating Parser