ความหมายของ - <? xml version =“ 1.0” encoding =“ utf-8”?>


107

ฉันเพิ่งเริ่มใช้ XML และฉันกำลังพยายามทำความเข้าใจพื้นฐาน ฉันอ่านบรรทัดด้านล่างใน "Learning XML" แต่ก็ยังไม่ชัดเจนสำหรับฉัน ใครช่วยชี้ฉันไปที่หนังสือหรือเว็บไซต์ที่อธิบายพื้นฐานเหล่านี้อย่างชัดเจน

จากLearning XML :

การประกาศ XML อธิบายคุณสมบัติทั่วไปบางประการของเอกสารโดยบอกโปรเซสเซอร์ XML ว่าต้องการตัวแยกวิเคราะห์ XML เพื่อตีความเอกสารนี้

สิ่งนี้หมายความว่า?

ฉันเข้าใจxml versionส่วนนี้ - ทั้งเอกสารและผู้ใช้เอกสารควร "พูดคุย" ใน XML เวอร์ชันเดียวกัน แต่encodingส่วนหนึ่งล่ะ? เหตุใดจึงจำเป็น?



คำตอบ:


129

เพื่อให้เข้าใจถึง "เข้ารหัส" แอตทริบิวต์คุณต้องเข้าใจความแตกต่างระหว่างไบต์และตัวอักษร

คิดว่าไบต์เป็นตัวเลขระหว่าง 0 ถึง 255 ในขณะที่อักขระคือ "a" "1" และ "Ä" ชุดของอักขระทั้งหมดที่พร้อมใช้งานเรียกว่าชุดอักขระชุดตัวอักษร

อักขระแต่ละตัวมีลำดับของหนึ่งหรือหลายไบต์ที่ใช้แทนมัน อย่างไรก็ตามจำนวนและค่าที่แน่นอนของไบต์นั้นขึ้นอยู่กับการเข้ารหัสที่ใช้และมีการเข้ารหัสที่แตกต่างกันมากมาย

การเข้ารหัสส่วนใหญ่จะขึ้นอยู่กับชุดอักขระเก่าและการเข้ารหัสที่เรียกว่า ASCII ซึ่งเป็นไบต์เดียวต่ออักขระ (จริงๆแล้วมีเพียง 7 บิต) และมีอักขระ 128 ตัวรวมถึงอักขระทั่วไปจำนวนมากที่ใช้ในภาษาอังกฤษแบบสหรัฐอเมริกา

ตัวอย่างเช่นต่อไปนี้เป็นอักขระ 6 ตัวในชุดอักขระ ASCII ที่แสดงด้วยค่า 60 ถึง 65

Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║  Character   ║
╠══════╬══════════════║
║  60  ║      <       ║
║  61  ║      =       62  ║      >       ║
║  63  ║      ?       ║
║  64  ║      @       ║
║  65  ║      A       ║
╚══════╩══════════════╝

ในชุด ASCII แบบเต็มค่าต่ำสุดที่ใช้คือศูนย์และค่าสูงสุดคือ 127 (ทั้งสองค่านี้เป็นอักขระควบคุมที่ซ่อนอยู่)

อย่างไรก็ตามเมื่อคุณเริ่มต้องการอักขระมากกว่าที่ ASCII พื้นฐานมีให้ (ตัวอย่างเช่นตัวอักษรที่มีสำเนียงสัญลักษณ์สกุลเงินสัญลักษณ์กราฟิก ฯลฯ ) ASCII จะไม่เหมาะสมและคุณต้องการอะไรที่ครอบคลุมมากขึ้น คุณต้องการอักขระเพิ่มเติม (ชุดอักขระที่แตกต่างกัน) และคุณต้องมีการเข้ารหัสที่แตกต่างกันเนื่องจากอักขระ 128 ตัวไม่เพียงพอที่จะใส่อักขระทั้งหมดได้การเข้ารหัสบางตัวมีอักขระหนึ่งไบต์ (256 อักขระ) หรือไม่เกินหกไบต์

เมื่อเวลาผ่านไปมีการสร้างการเข้ารหัสจำนวนมาก ในโลกของ Windows มี CP1252 หรือ ISO-8859-1 ในขณะที่ผู้ใช้ Linux มักจะชอบ UTF-8 Java ใช้ UTF-16 โดยกำเนิด

ลำดับหนึ่งของค่าไบต์สำหรับอักขระในการเข้ารหัสหนึ่งตัวอาจแทนอักขระที่แตกต่างกันโดยสิ้นเชิงในการเข้ารหัสอื่นหรืออาจไม่ถูกต้อง

ยกตัวอย่างเช่นในมาตรฐาน ISO 8859-1 , âเป็นตัวแทนจากหนึ่งไบต์ของมูลค่า226ในขณะที่ในUTF-8195, 162มันเป็นไบต์ที่สอง: อย่างไรก็ตามในมาตรฐาน ISO 8859-1 , 195, 162จะเป็นตัวละครทั้งสองเป็น¢

คิดว่า XML ไม่ใช่ลำดับของอักขระ แต่เป็นลำดับไบต์

ลองนึกภาพระบบที่ได้รับ XML 195, 162เห็นไบต์ มันรู้ได้อย่างไรว่าตัวละครเหล่านี้คืออะไร?

เพื่อให้ระบบตีความไบต์เหล่านั้นเป็นอักขระจริง (ดังนั้นจึงแสดงหรือแปลงเป็นการเข้ารหัสอื่น) จำเป็นต้องทราบการเข้ารหัสที่ใช้ใน XML

เนื่องจากการเข้ารหัสทั่วไปส่วนใหญ่เข้ากันได้กับ ASCII ตราบเท่าที่อักขระและสัญลักษณ์ตามตัวอักษรพื้นฐานยังคงอยู่ในกรณีเหล่านี้การประกาศนั้นสามารถหลีกเลี่ยงได้โดยใช้เพียงอักขระ ASCII เพื่อบอกว่าการเข้ารหัสคืออะไร ในกรณีอื่น ๆ ตัวแยกวิเคราะห์จะต้องพยายามหาการเข้ารหัสของการประกาศ เนื่องจากรู้ว่าการประกาศเริ่มต้นด้วย<?xmlการทำสิ่งนี้ทำได้ง่ายกว่ามาก

ในที่สุดversionแอตทริบิวต์ระบุเวอร์ชัน XML ซึ่งมีอยู่สองเวอร์ชันในขณะนี้ (ดูเวอร์ชัน XML ของ Wikipediaมีความแตกต่างเล็กน้อยระหว่างเวอร์ชันดังนั้นตัวแยกวิเคราะห์ XML จึงจำเป็นต้องทราบว่าเกี่ยวข้องกับอะไรในกรณีส่วนใหญ่ (สำหรับภาษาอังกฤษ ลำโพงอยู่แล้ว) เวอร์ชัน 1.0 ก็เพียงพอแล้ว


9
"ส่วนหัวใช้การเข้ารหัส ASCII": ฉันคิดว่าคุณกำลังอ้างถึงการประกาศ XML มีการเข้ารหัสเหมือนกับส่วนที่เหลือของเอกสาร UTF-16 หรืออะไรก็ได้ โปรเซสเซอร์ XML สามารถทำการทดลองสองสามครั้งจนกว่าจะสามารถอ่านข้อกำหนดการเข้ารหัสได้
Tom Blodget

1
ฉันรู้สึกว่าต้องเข้ารหัส preamble / prolog ภายใต้ UTF-8 และนั่นบอกให้ผู้วิเคราะห์ทราบถึงวิธีการแปลงไบต์ที่เหลือ (เอกสาร XML จริง) เป็นการเข้ารหัสที่ถูกต้อง ผิดอีกแล้ว! :-)
Kelly Beard

5
นี่คือการอ่านที่แนะนำ: joelonsoftware.com/2003/10/08/…
Sudip Bhandari

26

ไม่จำเป็นต้องมีการประกาศ XML ในเอกสาร XML ทั้งหมด อย่างไรก็ตามผู้เขียนเอกสาร XHTML ขอแนะนำให้ใช้การประกาศ XML ในเอกสารทั้งหมดของพวกเขา จำเป็นต้องมีการประกาศดังกล่าวเมื่อการเข้ารหัสอักขระของเอกสารไม่ใช่ค่าเริ่มต้น UTF-8 หรือ UTF-16 และไม่มีการกำหนดการเข้ารหัสโดยโปรโตคอลระดับสูงกว่า นี่คือตัวอย่างของเอกสาร XHTML ในตัวอย่างนี้การประกาศ XML รวมอยู่ด้วย

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE html 
 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Virtual Library</title>
  </head>
  <body>
    <p>Moved to <a href="http://example.org/">example.org</a>.</p>
 </body>
</html>

โปรดดูที่มาตรฐาน W3 สำหรับ XML


4
xml นั้นเชื่อมโยงไปยัง xhtml คุณหมายถึงการเชื่อมโยงไปยัง xml w3.org/TR/xmlหรือคุณหมายถึงการตั้งชื่อลิงก์ xhtml?
jrwren

xhtml อ้างถึงเอกสาร xml การประกาศประเภทเอกสารไม่จำเป็นสำหรับ xml ที่มีรูปแบบดี
xvan

"โปรดดูมาตรฐาน W3 สำหรับ XML" IOW ไปอ่านคำถามที่พบบ่อยซึ่งเป็นเอกสารขนาดยาว ทำไมคนทั่วไปไม่สามารถอธิบายได้ง่ายๆว่า "?" คืออะไร ทำและทำไมถึงมี ???
Geek Blessed

3

นี่คือคำนำหน้า XML ที่เป็นทางเลือก

  • version="1.0" หมายความว่านี่คือมาตรฐาน XML ที่ไฟล์นี้เป็นไปตาม
  • encoding="utf-8" หมายความว่าไฟล์ถูกเข้ารหัสโดยใช้การเข้ารหัส UTF-8 Unicode


2

ใครช่วยชี้ฉันไปที่หนังสือหรือเว็บไซต์ที่อธิบายพื้นฐานเหล่านี้อย่างชัดเจน

คุณสามารถตรวจสอบบทช่วยสอน XMLนี้พร้อมตัวอย่าง

แต่ส่วนการเข้ารหัสล่ะ? เหตุใดจึงจำเป็น?

W3C ให้คำอธิบายเกี่ยวกับการเข้ารหัส:

"ชุดอักขระเอกสารสำหรับ XML และ HTML 4.0 คือ Unicode (หรือที่เรียกว่า ISO 10646) ซึ่งหมายความว่าเบราว์เซอร์ HTML และตัวประมวลผล XML ควรทำงานเหมือนกับว่าพวกเขาใช้ Unicode ภายใน แต่ไม่ได้หมายความว่าจะต้องส่งเอกสารใน Unicode ตราบเท่าที่ไคลเอนต์และเซิร์ฟเวอร์ยอมรับในการเข้ารหัสพวกเขาสามารถใช้การเข้ารหัสใด ๆ ที่สามารถแปลงเป็น Unicode ... "


-1

การประกาศ XML ในแผนผังเอกสารประกอบด้วยสิ่งต่อไปนี้:

The version number, ?xml version="1.0"?. 

นี่เป็นข้อบังคับ แม้ว่าตัวเลขอาจเปลี่ยนแปลงไปสำหรับ XML เวอร์ชันอนาคต แต่ 1.0 คือเวอร์ชันปัจจุบัน

การประกาศการเข้ารหัส

encoding="UTF-8"?

นี่เป็นทางเลือก หากใช้การประกาศการเข้ารหัสจะต้องปรากฏทันทีหลังข้อมูลเวอร์ชันในการประกาศ XML และต้องมีค่าที่แสดงถึงการเข้ารหัสอักขระที่มีอยู่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.