อะไร ' standalone
' หมายถึงคำสั่งในเอกสาร XML?
อะไร ' standalone
' หมายถึงคำสั่งในเอกสาร XML?
คำตอบ:
standalone
ประกาศวิธีการบอกตัวแยกวิเคราะห์ที่จะไม่สนใจการประกาศมาร์กอัปใด ๆ ในที่DTD หลังจากนั้นจะใช้ DTD เพื่อการตรวจสอบความถูกต้องเท่านั้น
เป็นตัวอย่างให้พิจารณา<img>
แท็กที่อ่อนน้อมถ่อมตน หากคุณดูXHTML 1.0 DTDคุณจะเห็นการประกาศมาร์กอัพบอกตัวแยกวิเคราะห์ว่า<img>
แท็กจะต้องว่างเปล่าและมีsrc
และalt
คุณสมบัติ เมื่อเบราว์เซอร์กำลังอ่านเอกสาร XHTML 1.0 และพบ<img>
แท็กก็ควรสังเกตว่า DTD ต้องการsrc
และalt
แอตทริบิวต์และเพิ่มพวกเขาหากพวกเขาไม่อยู่ มันจะปิด<img>
แท็กด้วยตนเองเนื่องจากคาดว่าจะว่างเปล่า นี่คือความหมายของข้อกำหนด XMLโดย "การประกาศมาร์กอัปอาจมีผลต่อเนื้อหาของเอกสาร" จากนั้นคุณสามารถใช้การstandalone
ประกาศเพื่อบอกให้ parser ละเว้นกฎเหล่านี้
ไม่ว่า parser ของคุณจะเป็นคำถามอื่นหรือไม่ แต่ควรใช้ parser ที่ตรวจสอบความถูกต้องตามมาตรฐาน (เช่นเบราว์เซอร์)
โปรดทราบว่าหากคุณไม่ได้ระบุ DTD ดังนั้นการประกาศแบบสแตนด์อโลน "ไม่มีความหมาย" ดังนั้นจึงไม่มีเหตุผลที่จะใช้มันเว้นแต่คุณจะระบุ DTD ด้วย
standalone=yes
การประกาศมาร์กอัพจะไม่ถูกละเว้น แต่จะทำให้เอกสารเป็น XML ที่ไม่ถูกต้อง คุณจะรังเกียจไหมถ้าฉันแก้ไขมันลงในคำตอบ?
yes
และno
ที่ไหนno
เป็นค่าเริ่มต้นstandalone="yes"
หมายความว่าโปรเซสเซอร์ XML ต้องใช้ DTD เพื่อการตรวจสอบความถูกต้องเท่านั้น ในกรณีนั้นมันจะไม่ถูกใช้สำหรับ:
standalone="yes"
อาจเพิ่มข้อ จำกัด ความถูกต้องหากเอกสารใช้ DTD ภายนอก เมื่อเอกสารที่มีสิ่งที่จะต้องมีการปรับเปลี่ยนของ XML เช่นค่าเริ่มต้นสำหรับแอตทริบิวต์และstandalone="yes"
ถูกนำมาใช้แล้วเอกสารไม่ถูกต้องstandalone="yes"
อาจช่วยเพิ่มประสิทธิภาพการประมวลผลเอกสารให้สูงสุดแหล่งที่มา: แอ็ตทริบิวต์หลอกแบบสแตนด์อโลนมีความเกี่ยวข้องเฉพาะถ้าใช้ DTD
standalone
อธิบายว่าเอกสาร XML ปัจจุบันขึ้นอยู่กับการประกาศมาร์กอัปภายนอกหรือไม่
W3C อธิบายวัตถุประสงค์ใน "Extensible Markup Language (XML) 1.0 (รุ่นที่ห้า)":
การประกาศมาร์คอัปสามารถส่งผลกระทบต่อเนื้อหาของเอกสารตามที่ส่งผ่านจากตัวประมวลผล XML ไปยังแอปพลิเคชัน ตัวอย่างคือค่าเริ่มต้นของแอตทริบิวต์และการประกาศเอนทิตี การประกาศเอกสารแบบสแตนด์อโลนซึ่งอาจปรากฏขึ้นเป็นส่วนประกอบของการประกาศ XML ส่งสัญญาณว่ามีการประกาศดังกล่าวซึ่งปรากฏภายนอกองค์กรหรือในหน่วยงานพารามิเตอร์ [คำจำกัดความ: การประกาศมาร์กอัปภายนอกถูกกำหนดให้เป็นการประกาศมาร์กอัปที่เกิดขึ้นในเซ็ตย่อยภายนอกหรือในเอนทิตีพารามิเตอร์ (ภายนอกหรือภายในซึ่งภายหลังถูกรวมไว้เพราะโปรเซสเซอร์ที่ไม่ผ่านการตรวจสอบไม่จำเป็นต้องอ่าน)
จุดประสงค์ของการstandalone=yes
ประกาศคือเพื่อรับประกันว่าข้อมูลภายในเอกสารสามารถถูกดึงออกมาได้อย่างสุจริตใจโดยอิงจาก DTD ภายในเท่านั้นนั่นคือเอกสารสามารถ "ยืนอยู่คนเดียว" โดยไม่มีการอ้างอิงภายนอก การตรวจสอบความถูกต้องของเอกสารแบบสแตนด์อโลนทำให้มั่นใจได้ว่าตัวประมวลผลที่ไม่ผ่านการตรวจสอบจะมีข้อมูลทั้งหมดที่สามารถแยกวิเคราะห์เอกสารได้อย่างถูกต้อง
การประกาศแบบสแตนด์อโลนไม่มีวัตถุประสงค์หากเอกสารไม่มี DTD ภายนอกและ DTD ภายในไม่มีการอ้างอิงเอนทิตีของพารามิเตอร์เนื่องจากเอกสารเหล่านี้เป็นแบบสแตนด์อโลนโดยปริยาย
standalone=yes
ต่อไปนี้จะมีผลกระทบที่เกิดขึ้นจริงของการใช้
บังคับให้ตัวประมวลผลเกิดข้อผิดพลาดเมื่อแยกวิเคราะห์เอกสารด้วยการอ้างอิง DTD ภายนอกหรือการอ้างอิงเอนทิตีของพารามิเตอร์หากเอกสารมีการอ้างอิงไปยังเอนทิตีที่ไม่ได้ประกาศใน DTD ภายใน (ยกเว้นข้อความแทนที่ของเอนทิตีพารามิเตอร์ แยกวิเคราะห์นี้); amp
, lt
, gt
, apos
และquot
เป็นเพียงข้อยกเว้น
เมื่อแยกวิเคราะห์เอกสารที่ไม่ได้ประกาศว่าเป็นแบบสแตนด์อโลนโปรเซสเซอร์ที่ไม่ผ่านการตรวจสอบจะมีอิสระในการหยุดการแยกวิเคราะห์ DTD ภายในทันทีที่พบการอ้างอิงเอนทิตีของพารามิเตอร์ การประกาศเอกสารในรูปแบบสแตนด์อโลนบังคับให้ตัวประมวลผลที่ไม่ผ่านการตรวจสอบเพื่อแยกวิเคราะห์การประกาศมาร์กอัปใน DTD ภายในแม้ว่าพวกเขาจะเพิกเฉยต่อการอ้างอิงเอนทิตีพารามิเตอร์อย่างน้อยหนึ่งรายการก็ตาม
บังคับให้การตรวจสอบตัวประมวลผลเกิดข้อผิดพลาดหากพบสิ่งใดสิ่งหนึ่งต่อไปนี้ในเอกสารและการประกาศที่เกี่ยวข้องอยู่ใน DTD ภายนอกหรือในข้อความการแทนที่เอนทิตีพารามิเตอร์:
amp
, lt
, gt
, apos
และquot
)ตัวประมวลผลที่ไม่ผ่านการตรวจสอบอาจพิจารณาดึง DTD ภายนอกและขยายการอ้างอิงเอนทิตีพารามิเตอร์ทั้งหมดสำหรับเอกสารที่ไม่ใช่แบบสแตนด์อโลนแม้ว่ามันจะไม่มีภาระผูกพันที่จะต้องทำเช่นนั้นการตั้งค่าstandalone=yes
อาจช่วยปรับปรุงประสิทธิภาพสำหรับ มันอาจจะไม่สร้างความแตกต่าง)
คำตอบอื่น ๆ ที่นี่ไม่สมบูรณ์หรือไม่ถูกต้องความเข้าใจผิดหลักคือ
การประกาศแบบสแตนด์อโลนเป็นวิธีการบอกให้ parser ละเว้นการประกาศมาร์กอัพใด ๆ ใน DTD หลังจากนั้นจะใช้ DTD เพื่อการตรวจสอบความถูกต้องเท่านั้น
สแตนด์อะโลน = "ใช่" หมายความว่าโปรเซสเซอร์ XML ต้องใช้ DTD สำหรับการตรวจสอบความถูกต้องเท่านั้น
การประกาศเอกสารเป็นแบบสแตนด์อโลนจริง ๆ แล้วจะบังคับให้ตัวประมวลผลที่ไม่ผ่านการตรวจสอบความถูกต้องแยกวิเคราะห์การประกาศภายในโดยปกติแล้วจะต้องละเว้น (นั่นคือหลังจากการอ้างอิงเอนทิตีพารามิเตอร์ที่ละเว้น) ตัวประมวลผลที่ไม่ผ่านการตรวจสอบความถูกต้องจะต้องยังคงใช้ข้อมูลใน DTD ภายในเพื่อให้ค่าแอททริบิวต์เริ่มต้นและทำให้แอททริบิวโทเค็นปกติให้เป็นมาตรฐาน