คำอธิบายเนมสเปซ XML URI พื้นฐานของแฟรกเมนต์เอกสาร XML คำนำหน้าเนมสเปซ XML ตัวอย่างการใช้เนมสเปซใน XML และ XSLT

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

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

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

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

ดังนั้นเราจึงค้นพบทฤษฎีนี้ ตอนนี้เรามาดูคำนำหน้าเนมสเปซและตัวอย่างวิธีใช้อย่างถูกต้องกัน

คำนำหน้าเนมสเปซ XML ตัวอย่างการใช้เนมสเปซใน XML และ XSLT

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

<префикс:элемент xmlns:префикс="URI"> ...

ดังที่คุณเห็นจากตัวอย่าง คำนำหน้าเนมสเปซจะถูกระบุเป็นแอตทริบิวต์ที่มีชื่อที่ขึ้นต้นด้วยลำดับ xmlns ถ้าเราพูดถึง XSLT คำนำหน้า xsl มักจะถูกใช้ที่นั่น ในทางปฏิบัติทุกอย่างจะเป็นเช่นนี้

...

ชื่ออื่นๆ เช่น ddd สามารถใช้เป็นคำนำหน้าเนมสเปซได้ ในกรณีนี้โค้ดจะมีลักษณะเช่นนี้

...

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

เนื้อหาใด ๆ ...

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

ข้อความใดก็ได้ ...

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

...

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

เนื้อหาใดๆ เนื้อหาใดๆ เนื้อหาใดๆ เนื้อหาใดๆ ...

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

โดยปกติวิธีการข้างต้นจะไม่ได้รับความนิยมมากนัก และมักใช้คำนำหน้าเนมสเปซบ่อยที่สุด แต่ในบางกรณี คุณสามารถละเว้นและใช้วิธีตั้งค่าเนมสเปซเริ่มต้นได้ เพื่อหลีกเลี่ยงคำถามใดๆ เรามาลองพิจารณาวิธีการที่คล้ายกันในการนำเสนอตัวอย่างสุดท้ายกัน

เนื้อหาใดๆ เนื้อหาใดๆ เนื้อหาใดๆ เนื้อหาใดๆ ...

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

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

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

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

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

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

ดังนั้นเราจึงค้นพบทฤษฎีนี้ ตอนนี้เรามาดูคำนำหน้าเนมสเปซและตัวอย่างวิธีใช้อย่างถูกต้องกัน

คำนำหน้าเนมสเปซ XML ตัวอย่างการใช้เนมสเปซใน XML และ XSLT

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

<префикс:элемент xmlns:префикс="URI"> ...

ดังที่คุณเห็นจากตัวอย่าง คำนำหน้าเนมสเปซจะถูกระบุเป็นแอตทริบิวต์ที่มีชื่อที่ขึ้นต้นด้วยลำดับ xmlns ถ้าเราพูดถึง XSLT คำนำหน้า xsl มักจะถูกใช้ที่นั่น ในทางปฏิบัติทุกอย่างจะเป็นเช่นนี้

...

ชื่ออื่นๆ เช่น ddd สามารถใช้เป็นคำนำหน้าเนมสเปซได้ ในกรณีนี้โค้ดจะมีลักษณะเช่นนี้

...

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

เนื้อหาใด ๆ ...

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

ข้อความใดก็ได้ ...

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

...

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

เนื้อหาใดๆ เนื้อหาใดๆ เนื้อหาใดๆ เนื้อหาใดๆ ...

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

โดยปกติวิธีการข้างต้นจะไม่ได้รับความนิยมมากนัก และมักใช้คำนำหน้าเนมสเปซบ่อยที่สุด แต่ในบางกรณี คุณสามารถละเว้นและใช้วิธีตั้งค่าเนมสเปซเริ่มต้นได้ เพื่อหลีกเลี่ยงคำถามใดๆ เรามาลองพิจารณาวิธีการที่คล้ายกันในการนำเสนอตัวอย่างสุดท้ายกัน

เนื้อหาใดๆ เนื้อหาใดๆ เนื้อหาใดๆ เนื้อหาใดๆ ...

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

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

วลาดิเมียร์ เองเกลส์, Oracle CIS

การแนะนำ

เมื่อดำเนินโครงการ SOA ทั่วไป ตามกฎแล้ว สกีมา XML หลายรายการจะถูกสร้างขึ้น ในกรณีเหล่านี้ ผู้ออกแบบเค้าร่าง XML ต้องพิจารณาคำถามต่อไปนี้:

  • ทำ XML schema ทั้งหมดในโครงการจำเป็นต้องกำหนดค่า targetNamespace ที่แตกต่างกัน
  • หรือคุณจำเป็นต้องใช้ targetNamespace เดียวกันสำหรับทุกคน
  • และเป็นไปได้ไหมที่ XML schema บางตัวจะไม่ถูกกำหนด targetNamespace ใด ๆ

แนวทางไหนจะดีกว่ากัน? คุณควรปฏิบัติตามแนวทางใดเมื่อเริ่มทำงานในโครงการ SOA ที่สร้าง XML Schema หลายรายการ

เพื่อความแม่นยำ ควรสังเกตว่ามีวิธีการออกแบบสามวิธีเมื่อทำงานกับ XML Schema หลายรายการ:

  1. เนมสเปซที่ต่างกัน- แต่ละสคีมา XML ได้รับการกำหนด targetNamespace ของตัวเอง
  2. เนมสเปซที่เป็นเนื้อเดียวกัน- XML ​​schema ทั้งหมดได้รับการกำหนด targetNamespace เดียว
  3. เนมสเปซกิ้งก่า- สคีมา XML หลักได้รับการกำหนด targetNamespace และสคีมา XML เสริมไม่ได้ถูกกำหนด targetNamespace ใด ๆ (สคีมา XML ที่ไม่มี targetNamespace จะใช้ targetNamespace ของสคีมา XML หลักเมื่อรวมกันเหมือนกิ้งก่า)

เพื่ออธิบายและประเมินข้อดีและข้อเสียของวิธีการออกแบบทั้งสามข้อ เราได้จัดเตรียมตัวอย่างไว้สำหรับแต่ละวิธี

ตัวอย่าง: แบบจำลองข้อมูลบริษัท XML

ลองจินตนาการถึงโครงการที่จำเป็นต้องสร้างแบบจำลองข้อมูลของบริษัทโดยใช้ XML Schema รุ่นนี้ถูกสร้างขึ้นในรูปแบบของ XML Schema สามแบบต่อไปนี้:

  • บริษัท.xsd
  • บุคคล.xsd
  • สินค้า.xsd

ซึ่งสามารถอธิบายได้ว่า “ข้อมูลบริษัทรวมถึงข้อมูลบุคคลและผลิตภัณฑ์” ต่อไปนี้เป็นไดอะแกรมสามแบบสำหรับแนวทางการออกแบบแต่ละแบบ

เนมสเปซที่แตกต่างกัน

วิธีการออกแบบนี้เกี่ยวข้องกับการใช้ targetNamespace ที่แตกต่างกันสำหรับแต่ละ XML schema ด้านล่างนี้เป็นวงจรสามวงจรที่ออกแบบโดยใช้แนวทางการออกแบบนี้

สินค้า.xsd

targetNamespace="http://www.product.org" xmlns="http://www.product.org" elementFormDefault="unqualified"> xmlns:per="http://www.person.org" xmlns:pro="http://www.product.org">

บุคคล.xsd

targetNamespace="http://www.person.org" xmlns="http://www.person.org" elementFormDefault="unqualified">

บริษัท.xsd

namespace="http://www.person.org" schemaLocation="Person.xsd"/> namespace="http://www.product.org" schemaLocation="Product.xsd"/> type="ต่อ:PersonType" maxOccurs="ไม่จำกัด"/> type="โปร:ประเภทผลิตภัณฑ์" maxOccurs="ไม่จำกัด"/>

โปรดทราบว่าสคีมาใช้เนมสเปซที่แตกต่างกันสามแบบ:

http://www.product.org http://www.person.org http://www.company.org

เนมสเปซที่เป็นเนื้อเดียวกัน

วิธีการออกแบบนี้ใช้ targetNamespace เดียวสำหรับสกีมา XML ทั้งหมด ด้านล่างนี้เป็นวงจรสามวงจรที่ออกแบบโดยใช้แนวทางการออกแบบนี้

สินค้า.xsd

targetNamespace="http://www.company.org" xmlns="http://www.product.org" elementFormDefault="ผ่านการรับรอง">

บุคคล.xsd

targetNamespace="http://www.company.org" xmlns="http://www.person.org" elementFormDefault="ผ่านการรับรอง">

บริษัท.xsd

targetNamespace="http://www.company.org" xmlns="http://www.company.org" elementFormDefault="ผ่านการรับรอง"> schemaLocation="Person.xsd"/> schemaLocation="Product.xsd"/> ประเภท = "ประเภทบุคคล" maxOccurs="ไม่จำกัด"/> ประเภท = "ประเภทผลิตภัณฑ์" maxOccurs="ไม่จำกัด"/>

โปรดทราบว่าทั้งสามรูปแบบใช้เนมสเปซเดียวกัน:

http://www.company.org

โปรดทราบว่าหากต้องการรวม XML schema โดยใช้ พื้นที่เดียวชื่อกลไกจะถูกนำไปใช้ .

เนมสเปซกิ้งก่า

วิธีการออกแบบนี้ใช้ targetNamespace สำหรับสกีมา XML หลักเท่านั้น และไม่ได้กำหนด targetNamespace ใด ๆ ให้กับสกีมา XML เสริม ด้านล่างนี้เป็นวงจรสามวงจรที่ออกแบบโดยใช้แนวทางการออกแบบนี้ ใน ในตัวอย่างนี้สคีมา Company.xsd XML เป็นสคีมาหลัก ส่วนสคีมา Product.xsd และ Person.xsd XML เป็นสคีมาเสริม

Product.xsd (ไม่มี targetNamespace)

Person.xsd (ไม่มี targetNamespace)

บริษัท.xsd

targetNamespace="http://www.company.org" xmlns="http://www.company.org" elementFormDefault="ผ่านการรับรอง"> schemaLocation="Person.xsd"/> schemaLocation="Product.xsd"/> ประเภท = "ประเภทบุคคล" maxOccurs="ไม่จำกัด"/> ประเภท = "ประเภทผลิตภัณฑ์" maxOccurs="ไม่จำกัด"/> >

โปรดทราบสองประเด็นเมื่อใช้วิธีการออกแบบนี้:

  • กลไกยังใช้เพื่อรวม XML schema โดยใช้เนมสเปซกิ้งก่า และสคีมา XML หลักสามารถเข้าถึงองค์ประกอบของสคีมา XML เสริมได้
  • Sub-XML Schemas ที่ไม่มี targetNamespace ในแนวทางการออกแบบนี้มีลักษณะดังต่อไปนี้: ส่วนประกอบ XML Schema ที่ไม่มี targetNamespace ใช้การส่งเนมสเปซ (ซึ่งหมายความว่าส่วนประกอบยอมรับ targetNamespace ของ XML Schema หลัก)

"เอฟเฟกต์กิ้งก่า..."- คำนี้ถูกนำมาใช้โดย Henry Thompson

ผลกระทบของแนวทางการออกแบบต่อเอกสาร XML

ข้างต้นแสดงให้เห็นว่า XML schema สามารถออกแบบโดยใช้วิธีการออกแบบสามวิธีได้อย่างไร ตอนนี้เรามาดูเอกสาร XML กันดีกว่า การสร้างเอกสาร XML แตกต่างกันไปขึ้นอยู่กับการใช้แนวทางการออกแบบเฉพาะหรือไม่ XML schema ข้างต้นทั้งหมดได้รับการออกแบบเพื่อให้กำหนดให้ระบุเนมสเปซอย่างชัดเจนในเอกสาร XML (ตามที่ระบุโดย: elementFormDefault="qualified") หากพวกเขาใช้ elementFormDefault="unqualified" แทน เอกสาร XML สำหรับทั้งสามกรณีก็จะมี แบบฟอร์มต่อไปนี้:

จอห์น โด 123-45-6789 วิดเจ็ต

แล้วเอกสาร XML สำหรับแนวทางการออกแบบทั้งสามของเราจะมีหน้าตาเป็นอย่างไร

Company.xml (สำหรับเวอร์ชันที่มีเนมสเปซต่างกันใน targetNamespace)

จอห์น โด 123-45-6789 วิดเจ็ต

โปรดทราบสิ่งต่อไปนี้:

  • จำเป็นต้องมีการประกาศเนมสเปซสำหรับแต่ละเนมสเปซ
  • องค์ประกอบทั้งหมดต้องมีคุณสมบัติไม่ซ้ำกัน (ไม่ว่าจะชัดเจนหรือผ่านเนมสเปซเริ่มต้น)

Company.xml (สำหรับเวอร์ชันที่มีเนมสเปซที่เป็นเนื้อเดียวกันใน targetNamespace)

จอห์น โด 123-45-6789 วิดเจ็ต

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

Company.xml (สำหรับเวอร์ชันที่มีเนมสเปซกิ้งก่าใน targetNamespace)

จอห์น โด 123-45-6789 วิดเจ็ต

XML schema ทั้งสองที่ไม่ได้กำหนด targetNamespace นำมาใช้ targetNamespace ของ Company.xsd XML schema (คล้ายกับเอฟเฟกต์กิ้งก่า) ด้วยวิธีนี้ คอมโพเนนต์ทั้งหมดเป็นของ targetNamespace เดียวกัน และเอกสาร XML สำหรับสถานการณ์นี้ยังสามารถใช้ประโยชน์จากการใช้เนมสเปซเริ่มต้นได้อีกด้วย

- ใช้ได้เฉพาะในเนมสเปซที่เป็นเนื้อเดียวกันและเนมสเปซกิ้งก่า

องค์ประกอบ ใช้ใน XML Schemas เพื่อเข้าถึงส่วนประกอบใน XML Schemas อื่น ๆ ในขณะที่อนุญาตให้ทำการเปลี่ยนแปลงจำนวน (ศูนย์หรือมากกว่า) กับคำจำกัดความส่วนประกอบที่นำเข้า ดังนั้นองค์ประกอบ ทำหน้าที่สองอย่าง:

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

ตัวอย่าง. ลองดูที่ Company.xsd XML schema ด้านบนอีกครั้ง สมมติว่าใช้องค์ประกอบ ProductType จาก Product.xsd นอกจากนี้ ในระหว่างการใช้งาน คุณต้องขยายองค์ประกอบ ProductType เพื่อรวมองค์ประกอบ ID มาดูตัวอย่างว่าสามารถทำได้โดยใช้องค์ประกอบอย่างไร :

ตอนนี้องค์ประกอบ เอกสาร XML ต้องมีทั้งสององค์ประกอบ และ นั่นคือ:

จอห์น โด 123-45-6789 วิดเจ็ต 1001-01-00

องค์ประกอบ มีพลังในการออกแบบที่สูงมาก อย่างไรก็ตาม สามารถใช้ได้เฉพาะใน XML schema ที่มีเนมสเปซเดียวหรือใน XML schema โดยไม่ต้องระบุเนมสเปซ ดังนั้นองค์ประกอบ อาจใช้ได้กับเนมสเปซที่เป็นเนื้อเดียวกันและแนวทางการออกแบบเนมสเปซกิ้งก่าเท่านั้น

เนมสเปซเริ่มต้นและวิธีการออกแบบกิ้งก่า

หากสคีมา XML จำเป็นต้องใช้องค์ประกอบ ในแนวทางการออกแบบกิ้งก่า (โดยใช้สคีมาโดยไม่กำหนด targetNamespace) สคีมาหลักจะต้องประกาศเนมสเปซจาก targetNamespace เช่นเดียวกับเนมสเปซเริ่มต้น

วิธีหลีกเลี่ยงการชนกันของชื่อเมื่อใช้วิธีการ Chameleon

การชนกันของชื่อ

เมื่อ XML schema ของโฮสต์ใช้คอมโพเนนต์ Chameleon คอมโพเนนต์เหล่านั้นจะกลายเป็นส่วนหนึ่งของเนมสเปซ (ระบุโดย targetNamespace) ของ XML schema ของโฮสต์ เหมือนกับว่าผู้ออกแบบ XML schema ได้ใช้องค์ประกอบในบรรทัดและการประกาศประเภท หากวงจรหลักประกอบด้วย ( ) XML schema หลายรายการโดยไม่ระบุเนมสเปซ มีโอกาสที่ชื่อจะขัดแย้งกัน ดังนั้น XML schema หลักจะไม่สามารถใช้คอมโพเนนต์บางส่วนของ XML schema ที่รองรับได้ (ที่ไม่ได้ระบุเนมสเปซ) เนื่องจากชื่อขัดแย้งกันกับองค์ประกอบจาก XML schema อื่นๆ ที่รองรับ เพื่อแสดงให้เห็นถึงปัญหาการขัดแย้งกันของชื่อ ให้พิจารณาตัวอย่างต่อไปนี้

สมมติว่ามี XML Schema สองรายการโดยไม่ระบุ targetNamespace:

1.xsd A B 2.xsd A C

XML Schema 1.xsd กำหนดองค์ประกอบ A และ B โดยไม่ต้องระบุเนมสเปซ
XML Schema 2.xsd กำหนดองค์ประกอบ A และ C โดยไม่ต้องระบุเนมสเปซ
ตอนนี้ถ้า 3.xsd XML Schema มี ( ) สคีมา XML ที่ระบุสองรายการโดยไม่ระบุเนมสเปซ มีการชนกันของชื่อสำหรับองค์ประกอบ A เนื่องจากมีการประกาศสองครั้ง:

3.xsd targetNamespace="http://www.example.org"

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

กลไกมาตรฐานในการกำจัดการขัดแย้งของชื่อคือการใช้เนมสเปซอย่างแม่นยำ ในตัวอย่างด้านบน หากคอมโพเนนต์ 1.xsd XML Schema อยู่ในเนมสเปซที่แตกต่างกัน และถูกนำเข้าไปยัง 3.xsd XML Schema ก็จะไม่มีการขัดแย้งกันของชื่อ [โปรดทราบว่าส่วนประกอบทั้งสองสามารถมีชื่อเดียวกันได้หากส่วนประกอบนั้นอยู่ในเนมสเปซที่ต่างกัน]

คุณจะแก้ไขปัญหาการชนกันของชื่อได้อย่างไรเมื่อใช้เนมสเปซกิ้งก่า

การแก้ปัญหาการชนกันของชื่อโดยใช้สกีมา XML ของพร็อกซี

มีวิธีแก้ไขที่ง่ายมากสำหรับปัญหาการชนกันของชื่อนี้: สำหรับแต่ละ XML schema ที่รวมไว้โดยไม่ต้องระบุเนมสเปซ ให้สร้าง schema XML พร็อกซีเสริมที่ประกาศเนมสเปซและตัวมันเองได้รวมไว้แล้ว ( ) สคีมา XML เสริมโดยไม่ต้องระบุเนมสเปซ จากนั้นสคีมาหลักก็นำเข้า ( ) สกีมา XML ที่ใช้พร็อกซีทั้งหมด

นี่คือตัวอย่างที่สาธิตแนวทางการออกแบบนี้:

1-proxy.xsd targetNamespace = "http://www.1-proxy.org" 2-proxy.xsd targetNamespace = "http://www.2-proxy.org" main.xsd targetNamespace = "http://www.main.org"

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

ดังนั้นแนวทางโครงการนี้จึงควบคุมกระบวนการสามขั้นตอน:

  • สร้างไดอะแกรมกิ้งก่า
  • สร้างสคีมา XML ของพร็อกซีสำหรับแต่ละสคีมากิ้งก่า
  • นำเข้า ( ) การพร็อกซี XML schema ไปที่หลัก

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

ลองเปรียบเทียบกระบวนการสามขั้นตอนนี้กับกระบวนการสองขั้นตอนที่อธิบายไว้ก่อนหน้านี้ ซึ่งส่วนประกอบต่างๆ ได้รับการกำหนดเนมสเปซตั้งแต่เริ่มต้นของการมีอยู่ของส่วนประกอบ:

1-fixed.xsd targetNamespace = "http://www.1-fixed.org" A B 2-fixed.xsd targetNamespace = "http://www.2-fixed.org" AC main.xsd targetNamespace = "http: //www.main.org"

กระบวนการสองขั้นตอนให้ผลลัพธ์เช่นเดียวกับกระบวนการสามขั้นตอน ในตัวอย่างนี้ คอมโพเนนต์ไม่ใช่กิ้งก่าอีกต่อไป และองค์ประกอบ A, B และ C ถูกผูกไว้อย่างแน่นหนากับเนมสเปซที่เกี่ยวข้องตั้งแต่เริ่มต้นวงจรการใช้งานของคอมโพเนนต์ ข้อเสียของแนวทางนี้คือหากใน main.xsd คุณต้องทำการเปลี่ยนแปลงคำจำกัดความของส่วนประกอบโดยใช้ แล้วนี่จะเป็นไปไม่ได้ นอกจากนี้ ผู้ออกแบบสคีมา XML หลักยังถูกบังคับให้ใช้เนมสเปซที่กำหนดโดยบุคคลอื่น ส่วนประกอบเหล่านี้เป็นแบบคงที่ ไม่เปลี่ยนรูป และมีเนมสเปซคงที่

เครื่องมือที่อำนวยความสะดวกในการใช้ส่วนประกอบกิ้งก่า

คำอธิบายปัญหาในการระบุส่วนประกอบของกิ้งก่า

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

สมมติว่า XML schema ต่อไปนี้มีอยู่โดยไม่มีคำจำกัดความของเนมสเปซ:

1.xsd เอบี

ต่อไปเราจะกำหนด XML schema หลัก main.xsd ซึ่งรวมถึง ( ) สคีมา XML เสริม "chameleon" 1.xsd และตัวมันเองยังมีคำจำกัดความขององค์ประกอบชื่อ A (เนื่องจากอยู่ในสภาพแวดล้อมเชิงสัญลักษณ์ที่แตกต่างกัน - ภายในองค์ประกอบ จึงไม่ทำให้เกิดการขัดแย้งกันของชื่อ)

Main.xsd targetNamespace = "http://www.example.org" ...

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

การระบุส่วนประกอบของกิ้งก่า

วิธีแก้ไขง่ายๆ วิธีหนึ่งคือการกำหนด Globally Unique Identifier (GUID) ให้กับมันเมื่อสร้างส่วนประกอบกิ้งก่า ข้อกำหนด XML Schema ช่วยให้คุณสามารถเพิ่มแอตทริบิวต์ id สำหรับองค์ประกอบ คุณลักษณะ และประเภทส่วนประกอบที่เรียบง่ายและซับซ้อนได้ โปรดทราบว่าแอตทริบิวต์ id นั้นมีเฉพาะใน XML schema เท่านั้น และจะไม่สิ้นสุดในเอกสาร XML เป็นคุณลักษณะนี้ที่สามารถใช้เพื่อระบุส่วนประกอบกิ้งก่าได้อย่างแม่นยำ โดยไม่คำนึงถึงเนมสเปซปัจจุบัน

คำถาม: จะเกิดอะไรขึ้นหากตัวประมวลผล XML ไม่สามารถเข้าถึง XML schema ที่มีคำจำกัดความที่จำเป็น เนื่องจากปัญหาเครือข่าย

เช่นเดียวกับคำจำกัดความ DTD ข้อยกเว้นจะเกิดขึ้นในตัวประมวลผล XML วิธีแก้ปัญหานี้คือเก็บสำเนาของ XML schema ที่คุณใช้ไว้ในเครื่องเสมอ

ฝึกใช้เนมสเปซ XML ในโครงการ

วิธีการออกแบบที่อธิบายไว้ข้างต้นสำหรับการใช้เนมสเปซ XML ในโครงการ ทั้ง XML schema และเอกสาร XML ได้รับการพิจารณาสำหรับแต่ละวิธีการออกแบบทั้งสามวิธี

ตอนนี้ยังคงต้องตอบคำถามหลัก: แนวทางไหนดีกว่าและในกรณีใด?

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

  • อย่างรวดเร็วมากสำเนาในเครื่องของโครงการไม่ซิงค์กับ XML schema อื่น ๆ และ...
  • โครงการจะสูญเสียความสามารถในการโต้ตอบกับแอปพลิเคชันที่มีอยู่ซึ่งประมวลผลสคีมา XML อื่น ๆ

สถานการณ์ที่น่าสนใจยิ่งขึ้น (สถานการณ์ที่กล่าวถึงเป็นตัวอย่าง) คือวิธีจัดการกับเนมสเปซของ XML schema ที่สร้างขึ้นภายในกรอบงานของโครงการและอยู่ภายใต้การควบคุมของนักออกแบบคนเดียว (หรือกลุ่ม) ด้านล่างนี้เป็นคำแนะนำบางส่วน:

ใช้เนมสเปซกิ้งก่า:

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

    ตัวอย่าง. ต้องกำหนดประเภทส่วนประกอบของพื้นที่เก็บข้อมูล เช่น สคีมา XML ที่กำหนดอาร์เรย์ เวกเตอร์ รายการที่เชื่อมโยง ฯลฯ โดยไม่ต้องระบุ targetNamespace (เช่น เป็นสคีมา XML กิ้งก่า)

    หากสคีมา XML มีเพียงคำจำกัดความประเภท (ไม่มีการประกาศองค์ประกอบ) ก็เป็นตัวเลือกที่ดีสำหรับเนมสเปซกิ้งก่า

    ใช้เนมสเปซที่เป็นเนื้อเดียวกัน:

    • ถ้า XML schema ทั้งหมดมีแนวคิดที่เกี่ยวข้องกัน
    • หากไม่จำเป็นต้องระบุด้วยสายตาในเอกสาร XML ว่าเป็นขององค์ประกอบและคุณลักษณะของ XML schema เฉพาะ ด้วยวิธีนี้ ส่วนประกอบทั้งหมดอยู่ในเนมสเปซเดียวกัน และทำให้ความสามารถในการระบุในเอกสาร XML ที่ "องค์ประกอบ A ถูกกำหนดไว้ในสคีมา X" หายไป เป็นเรื่องปกติที่ผู้ออกแบบไม่ต้องการแยกประเภทองค์ประกอบหรือคุณลักษณะแยกกัน ในกรณีนี้ เนมสเปซที่เป็นเนื้อเดียวกันค่อนข้างเหมาะสม

    ใช้เนมสเปซที่ต่างกัน:

  • เมื่อมีหลายองค์ประกอบที่มีชื่อเดียวกัน (เพื่อป้องกันการชนกันของชื่อ)
  • หากมีความจำเป็นต้องระบุด้วยสายตาในเอกสาร XML ว่าเป็นขององค์ประกอบและคุณลักษณะของ XML schema เฉพาะ ด้วยวิธีนี้ ส่วนประกอบจะอยู่ในเนมสเปซที่แตกต่างกัน ดังนั้นจึงเป็นไปได้ที่จะระบุในเอกสาร XML ว่า "องค์ประกอบ A ถูกกำหนดไว้ในสคีมา X"

    ในที่สุด ดังที่แสดงไว้ข้างต้น ใน XML Schemas แต่ละองค์ประกอบสามารถระบุได้โดยไม่ซ้ำกันโดยใช้แอตทริบิวต์ id (ซึ่งไม่เหมือนกับการประกาศแอตทริบิวต์ id บนองค์ประกอบ แต่เป็นกลไกภายในของ XML Schemas เพื่อระบุแต่ละองค์ประกอบของ XML Schema ). การใช้แอตทริบิวต์ id เพื่อระบุส่วนประกอบ XML Schema แต่ละรายการช่วยให้คุณควบคุมส่วนประกอบได้มากกว่าการใช้เนมสเปซ การรวมกันของเครื่องมือทั้งสองนี้ - เนมสเปซและแอตทริบิวต์ id ของส่วนประกอบ XML schema - เป็นการควบคู่อันทรงพลังที่ช่วยให้คุณระบุส่วนประกอบ XML schema ได้อย่างน่าเชื่อถือทั้งทางสายตาและทางโปรแกรม

  • เมื่อสร้างเอกสาร XML เราอาจพบว่าองค์ประกอบที่มีความหมายต่างกันจะมีชื่อเหมือนกัน คุณสามารถดูตัวอย่างได้ในบทความ “ข้อผิดพลาด RSS 10 อันดับแรก” ในจุดที่ 5 “ส่วนขยาย RSS ที่ไม่ถูกต้อง”

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

    เป็นผลให้เราได้รับสิ่งนี้:

    </item> <item> <title /> </item> </catalog> </p><p>มีข้อขัดแย้งในการตั้งชื่อเนื่องจากเป็นการยากที่จะระบุชนิดของข้อมูลแต่ละองค์ประกอบ "รายการ" และ "ชื่อ" ที่มี บล็อก "รายการ" แรกหมายถึงรายชื่อผลงานและองค์ประกอบ "ชื่อ" ประกอบด้วยชื่อของแผ่นดิสก์ บล็อก "รายการ" ที่สองหมายถึงบรรณานุกรมและองค์ประกอบ "ชื่อ" ประกอบด้วยชื่อหนังสือ เพื่อป้องกันความขัดแย้งดังกล่าว เราจำเป็นต้องแยกกลุ่มเหล่านี้ออกอย่างมีเหตุผล ทำได้โดยการระบุเนมสเปซ: องค์ประกอบบางอย่างอ้างถึงชื่อ "ดนตรี" และองค์ประกอบอื่น ๆ ถึงชื่อ "หนังสือ" หากต้องการประกาศเนมสเปซ ให้ใช้แอตทริบิวต์ที่ชื่อประกอบด้วยคำสงวน “xmlns” ตามด้วยเครื่องหมายทวิภาค และที่จริงแล้วคือชื่อนั้นเอง:</p><p>Xmlns:music = "http://ininfo.biz/music"</p><p>คำถามแรกที่เกิดขึ้นคือจะใช้อะไรเป็นค่าของแอตทริบิวต์ "xmlns" เพื่อให้มั่นใจในความเป็นเอกลักษณ์ของเนมสเปซ คุณต้องใช้สตริงเฉพาะบางประเภทที่จะระบุองค์ประกอบนี้โดยไม่ซ้ำกัน * หลายๆ คนใช้ URL เป็นตัวระบุ เนื่องจากชื่อโดเมนที่ใช้ใน URL นั้นไม่ซ้ำกัน นอกจากนี้ ไม่น่าจะมีใครใช้ที่อยู่ "http://ininfo.biz/book" นอกเหนือจากเจ้าของ ดังนั้นจึงไม่มีความขัดแย้ง</p> <h3>เนมสเปซสำหรับองค์ประกอบ</h3> <p>การบ่งชี้ว่าองค์ประกอบใดเป็นของเนมสเปซจะถูกเขียนก่อนจุดเริ่มต้นของชื่อองค์ประกอบ โดยคั่นด้วยเครื่องหมายทวิภาค:</p><p> <music:title /> </p><p>ตามหลักการข้างต้น เป็นไปได้ที่จะประกาศเนมสเปซสำหรับแต่ละองค์ประกอบที่ใช้ในเอกสาร:</p><p> <catalog> <music:item xmlns:music = "http://ininfo.biz/music"> <music:title xmlns:music = "http://ininfo.biz/music" /> </music:item xmlns:music = "http://ininfo.biz/music"> <book:item xmlns:book = "http://ininfo.biz/book"> <book:title xmlns:book = "http://ininfo.biz/book" /> </book:item xmlns:book = "http://ininfo.biz/book"> </catalog> </p><p>เห็นด้วยนี่ไม่ใช่ตัวเลือกที่ดีที่สุดเนื่องจากก่อนอื่นคุณต้องพิมพ์ข้อความจำนวนมาก ประการที่สองโค้ดดังกล่าวอ่านยาก ประการที่สาม มันง่ายที่จะทำผิดพลาด คุณสามารถทำได้ด้วยวิธีอื่นโดยใช้กฎ:</p> <blockquote><p>เนมสเปซที่ประกาศสำหรับองค์ประกอบใดๆ จะเป็นเช่นนี้สำหรับองค์ประกอบทั้งหมดที่ซ้อนกันอยู่ในนั้น เว้นแต่จะมีการประกาศเนมสเปซอื่นๆ สำหรับองค์ประกอบเหล่านั้น</p> </blockquote> <music:catalog xmlns:music = "http://ininfo.biz/music"> <music:item> <music:title /> </music:item> <book:item xmlns:book = "http://ininfo.biz/book"> <book:title /> </book:item> </music:catalog> <p>คุณสามารถทำได้ง่ายกว่านี้อีก - ประกาศเนมสเปซทั้งหมดพร้อมกันในองค์ประกอบรูท:</p><p> <music:catalog xmlns:music = "http://ininfo.biz/music" xmlns:book = "http://ininfo.biz/book"> <music:item> <music:title /> </music:item> <book:item> <book:title /> </book:item> </music:catalog> </p><p>อย่างไรก็ตาม โปรดจำไว้ว่าตัวระบุของเนมสเปซคือค่าของแอตทริบิวต์ "xmlns" ไม่ใช่ชื่อคำนำหน้า ในตัวอย่างต่อไปนี้ องค์ประกอบทั้งหมดอยู่ในช่องว่างเดียวกัน (ค่าแอตทริบิวต์คือ "http://ininfo.biz/group") แม้ว่าจะมีชื่อนำหน้าต่างกัน ("เพลง" และ "หนังสือ"):</p><p> <music:catalog xmlns:music = "http://ininfo.biz/group" xmlns:book = "http://ininfo.biz/group"> <music:item> <music:title /> </music:item> <book:item> <book:title /> </book:item> </music:catalog> </p><p>สิ่งที่ตรงกันข้ามก็เป็นไปได้เช่นกัน - องค์ประกอบมีเนมสเปซที่แตกต่างกัน แต่ใช้ชื่อคำนำหน้าเหมือนกัน:</p><p> <catalog> <group:item xmlns:group = "http://ininfo.biz/music"> <group:title /> </group:item> <group:item xmlns:group = "http://ininfo.biz/book"> <group:title /> </group:item> </catalog> </p><p>คุณสามารถทำได้โดยไม่มีชื่อนำหน้า ในการดำเนินการนี้ คุณจะต้องตั้งค่าเนมสเปซเริ่มต้น ในกรณีนี้ พื้นที่นี้จะใช้สำหรับองค์ประกอบที่มันเกิดขึ้นและสำหรับองค์ประกอบลูก (ซ้อนกัน) ทั้งหมด:</p><p> <catalog> <item xmlns = "http://ininfo.biz/music"> <title /> </item> <item xmlns = "http://ininfo.biz/book"> <title /> </item> </catalog> </p><p>หากต้องการแทนที่เนมสเปซเริ่มต้น คุณต้องตั้งค่าแอตทริบิวต์ "xmlns" ให้เป็นสตริงว่าง:</p><p> <catalog xmlns = "http://ininfo.biz/group"> <item> <title /> </item> <item xmlns = ""> <title /> </item> </catalog> </p><h3>เนมสเปซสำหรับแอตทริบิวต์ขององค์ประกอบ</h3> <p>เช่นเดียวกับองค์ประกอบ คุณสามารถกำหนดแอตทริบิวต์ให้กับเนมสเปซที่กำหนดได้:</p><p> <music:catalog xmlns:music = "http://ininfo.biz/music" xmlns:book = "http://ininfo.biz/book"> <music:item music:number="10"> <music:title book:numref="20" /> </music:item> <book:item book:number="20"> <book:title music:numref="10" /> </book:item> </music:catalog> </p><p>อย่างไรก็ตาม เนมสเปซเริ่มต้นใช้ไม่ได้กับแอตทริบิวต์ หากแอตทริบิวต์ไม่ได้ระบุคำนำหน้า ก็จะไม่อยู่ในเนมสเปซใดๆ:</p><p> <music:catalog xmlns:music = "http://ininfo.biz/music" xmlns:book = "http://ininfo.biz/book"> <music:item music:number="10"> <music:title numref="20" /> </music:item> <book:item book:number="20"> <book:title numref="10" /> </book:item> </music:catalog> </p><p>ข้างต้นเป็นจริงเช่นกันเมื่อมีการระบุเนมสเปซสำหรับองค์ประกอบที่แอตทริบิวต์นั้นอยู่ ตัวอย่างเช่น:</p><p> <music:item number="10" xmlns:music = "http://ininfo.biz/music"> </p><p>เพื่อให้สิ่งต่าง ๆ สับสนมากขึ้น การประกาศเนมสเปซจะดำเนินการภายในขอบเขตขององค์ประกอบที่มันเกิดขึ้น:</p><p> <root xmlns:primer = "http://ininfo.biz/one"> <primer:el1 xmlns:primer = "http://ininfo.biz/two"> <primer:el2 /> <el3 xmlns:primer = "http://ininfo.biz/three"> <primer:el2 /> </el3> </primer:el1> <primer:el2 /> </root> </p><p>บางทีบทความนี้จะได้รับการอัปเดต ดังนั้นจะติดตามและติดตามกันต่อไป</p> <p>* สำหรับพลเมืองของสหพันธรัฐรัสเซีย TIN ของเขาถือเป็นตัวระบุที่ไม่ซ้ำกัน ไม่ใช่หมายเลขหนังสือเดินทาง - หนังสือเดินทางถูกเปลี่ยนสามครั้งและหากสูญหายจะออกหนังสือเดินทางใหม่</p> <p>คำอธิบายประกอบ: <span>ส่วนนี้จะอธิบายการใช้และการประกาศเนมสเปซ คุณสมบัติหลักของ RDF, XML-Data, คำอธิบายเนื้อหาเอกสาร (DCD), Schema สำหรับ Object-Oriented XML (SOX), Document Definition Markup Language (DDML เดิมชื่อ XSchema) จะได้รับ</p><h3></h3><p>ก่อนหน้านี้เราได้อธิบายข้อเสียบางประการของคำจำกัดความ DTD ซึ่งเกี่ยวข้องกัน:</p><ol><li>ไวยากรณ์ของคำจำกัดความเหล่านี้แตกต่างจากไวยากรณ์ของ XML (โดยเฉพาะที่เรียกว่าส่วนขยาย <span>ฟอร์มแบ็คคัส-เนาร์</span>, แบบฟอร์ม Backus Naur แบบขยาย);</li> <li>คำจำกัดความเหล่านี้ไม่ชัดเจนเพียงพอ</li> <li>เนื่องจากผู้ใช้แต่ละคนสามารถสร้างแท็กของตนเองได้ จึงมีแนวโน้มว่าผู้ใช้จะใช้ชื่อองค์ประกอบเดียวกันเพื่ออ้างถึงสิ่งต่าง ๆ แม้ว่าความหมายขององค์ประกอบจะเหมือนกัน แต่เนื้อหาที่เป็นไปได้อาจแตกต่างกันไปขึ้นอยู่กับคำจำกัดความ ดังนั้นเราจึงต้องการวิธีกำหนดการใช้งานเฉพาะขององค์ประกอบ โดยเฉพาะอย่างยิ่งถ้าเราผสมคำศัพท์ประเภทต่างๆ ในเอกสารเดียวกัน เพื่อแก้ไขปัญหา W3C ได้เผยแพร่ข้อกำหนดที่เรียกว่า XML Namespaces ซึ่งช่วยให้คุณสามารถกำหนดบริบทขององค์ประกอบในเนมสเปซได้</li> <li>มีสถานการณ์ที่จำเป็นต้องรวมเอกสาร XML จากแหล่งต่างๆ ที่สอดคล้องกับคำจำกัดความ DTD ที่แตกต่างกัน ตัวอย่างเช่น สถานการณ์นี้เกิดขึ้นเมื่ออธิบายข้อมูลจำนวนมาก หาก DTD แต่ละรายการไม่เพียงพอที่จะครอบคลุมทั้งเล่มหรือข้อมูลเหล่านี้เข้าใจยาก นอกจากนี้ยังเกิดขึ้นในระบบอีคอมเมิร์ซเมื่อพยายามรวมข้อมูลของคู่ค้าทางธุรกิจของคุณเข้ากับข้อมูลของคุณ สถานการณ์อาจเกิดขึ้นเมื่อคุณต้องการเพิ่มการตั้งค่าของคุณไปยัง DTD ที่มีอยู่เพื่อแลกเปลี่ยนข้อมูลบางอย่างในรูปแบบมาตรฐาน ขออภัย คำแนะนำ XML ไม่มีวิธีรวม DTD หลายรายการในเอกสารเดียวโดยไม่ต้องแก้ไขหรือสร้าง DTD ใหม่ (โดยใช้การอ้างอิงภายนอก)</li> </ol><p>บทนี้ครอบคลุมแนวคิดสองประการต่อไปนี้ - <span>เนมสเปซ</span>และสคีมา XML เนมสเปซช่วยให้นักพัฒนา XML แบ่งปัญหาที่ซับซ้อนออกเป็นส่วนเล็กๆ และรวมคำศัพท์หลายคำไว้ในเอกสารเดียวเพื่ออธิบายปัญหาได้อย่างครบถ้วน เมื่อใช้สคีมา ผู้ออกแบบพจนานุกรมจะสร้างคำจำกัดความที่แม่นยำมากกว่าที่เป็นไปได้ใน DTD และดำเนินการดังกล่าวโดยใช้ไวยากรณ์ XML</p><p>เครื่องมือทั้งสองนี้ช่วยแก้ปัญหาที่ซับซ้อนที่เกิดขึ้นเมื่อใช้ XML เนมสเปซและสคีมาช่วยให้นักออกแบบและโปรแกรมเมอร์ XML สามารถ:</p><ul><li>จัดระเบียบคำศัพท์เพื่อแก้ปัญหาที่ซับซ้อนได้ดีขึ้น</li> <li>บันทึก <span>การพิมพ์ที่แข็งแกร่ง</span>ข้อมูลระหว่างการแปลงเป็นและจาก XML</li> <li>อธิบายคำศัพท์ได้แม่นยำและยืดหยุ่นมากกว่าการใช้ DTD</li> <li>อ่านกฎพจนานุกรมใน XML เข้าถึงคำจำกัดความโดยไม่ทำให้ parser ซับซ้อน</li> </ul><h4>พจนานุกรมผสม</h4><p>เมื่อออกแบบพจนานุกรม การแบ่งปัญหาระดับโลกออกเป็นส่วนต่างๆ อาจเป็นเรื่องสมเหตุสมผล สิ่งนี้ต้องใช้วิธีแบ่งปัญหาใหญ่ออกเป็นคำศัพท์หลายคำ อย่างไรก็ตาม ปัญหาที่แท้จริงที่ต้องแก้ไขคือการรวม DTD ที่แยกจากกันภายในเนื้อความของเอกสารฉบับเดียว ปัญหานี้อาจเกิดขึ้นได้เช่นกัน ตัวอย่างเช่น หากคุณทำงานให้กับบริษัทที่มีแนวโน้มว่าจะมีชุดคำจำกัดความ DTD อยู่แล้ว และการใช้งานสามารถอำนวยความสะดวกในการทำงานได้อย่างมาก เพราะพวกเขาอธิบายปัญหาตามที่คนอื่นเข้าใจ การนำคำจำกัดความ DTD มาใช้ซ้ำก็มักจะมีประโยชน์เช่นกัน เช่น การใช้โครงสร้างทั่วไปจากคำจำกัดความ DTD ที่สร้างขึ้นก่อนหน้านี้ หากคุณกำลังพัฒนาแอปพลิเคชันที่ต้องการสื่อสารกับซอฟต์แวร์ของพันธมิตรภายนอก คุณมีทางเลือกเพียงเล็กน้อยนอกจากการนำแนวคิดที่มีอยู่กลับมาใช้ใหม่ คำจำกัดความที่มีอยู่ของ DTD ประกอบด้วยภาษาทั่วไปที่ต้องพูดเพื่อที่จะเข้าใจ หากมีแนวคิดอยู่แล้ว เราต้องทำงานเพื่อให้เข้าใจในแง่ของแนวคิดนั้น</p><p>เมื่อคุณใช้คำจำกัดความที่เป็นประโยชน์สำหรับคุณจาก DTD ของนักพัฒนารายอื่น หรือเมื่อคุณรวม DTD ที่แบ่งกลุ่มเพื่อสร้างเอกสารที่อธิบายปัญหาที่ซับซ้อน ถ้าเอกสารของคุณใช้องค์ประกอบที่มีชื่อเดียวกัน คุณจะเสี่ยงต่อการประสบปัญหา ความคลุมเครือและการชนกันของชื่อ</p><p>ปัญหาจะรุนแรงขึ้นอีกเมื่อใช้อินสแตนซ์ชื่อจาก DTD หลายตัว ในกรณีนี้ เราไม่ทราบว่าองค์ประกอบใดที่คำจำกัดความ DTD อ้างถึง ปัญหาของเอกสารที่มีรูปแบบที่ดีนี้เรียกว่าความคลุมเครือ นอกจากนี้หากต้องใช้ชื่อจากเอกสาร <span>การตรวจสอบความถูกต้อง</span>เราอาจทำให้แอปพลิเคชันของเราสับสนได้ ปัญหานี้เรียกว่าการชนกันของชื่อ</p> <h4>เนมสเปซ</h4><p>เนมสเปซสามารถช่วยผู้ใช้ได้สองวิธีที่สำคัญมาก ด้วยความช่วยเหลือของพวกเขา คุณสามารถ:</p><ul><li>รวมเอกสารจากสองแหล่งขึ้นไปโดยไม่สูญเสียความมั่นใจว่าโปรแกรมจะแยกแยะองค์ประกอบหรือคุณลักษณะที่นำมาจากแหล่งใด</li> <li>หากเป็นไปได้ ให้อนุญาตให้ตัวแทนผู้ใช้เข้าถึงเนื้อหาเพิ่มเติม เช่น คำจำกัดความประเภทเอกสาร (DTD) หรือคำอธิบายองค์ประกอบและคุณลักษณะอื่นๆ</li> </ul><p>เนมสเปซคือชุดของค่าหรือคุณลักษณะบางอย่างที่สามารถใช้ในเอกสาร XML เป็นชื่อขององค์ประกอบหรือแอตทริบิวต์ เนมสเปซใน XML ถูกกำหนดโดย Uniform Resource Identifier (URI) (คุณสามารถใช้ที่อยู่ DTD บนเซิร์ฟเวอร์ของคุณเป็น URI) ช่วยให้แต่ละเนมสเปซมีเอกลักษณ์เฉพาะตัว</p><p>ดังนั้น เพื่อที่จะใช้เนมสเปซในเอกสารที่รวมองค์ประกอบจากแหล่งต่างๆ ได้อย่างมีประสิทธิภาพ เราจำเป็นต้องกำหนด:</p><ul><li>การอ้างอิงถึง URI ที่อธิบายการใช้องค์ประกอบ</li> <li>นามแฝงที่ช่วยให้เราเข้าใจว่าองค์ประกอบของเรามาจากเนมสเปซใด นามแฝงนี้อยู่ในรูปแบบของคำนำหน้าองค์ประกอบ (เช่น หากนามแฝงสำหรับองค์ประกอบ Book ที่ไม่ชัดเจนคือ Catalog องค์ประกอบนั้นจะถูกเรียก <catalog:Book> ).</li> </ul><h4>การใช้และการประกาศเนมสเปซ</h4> <h5>การประกาศเนมสเปซ</h5><p>เนื่องจากในภาษามาร์กอัปที่แตกต่างกัน - การใช้ XML - คุณสามารถค้นหาชื่อแท็กและคุณลักษณะเดียวกันได้ซึ่งมีความหมายที่แตกต่างกันโดยสิ้นเชิงจึงจำเป็นต้องแยกแยะความแตกต่างระหว่างแท็กเหล่านั้นได้ เมื่อต้องการทำเช่นนี้ ชื่อของแท็กและคุณลักษณะจะได้รับคำนำหน้าแบบสั้น ซึ่งแยกออกจากชื่อด้วยเครื่องหมายทวิภาค คำนำหน้าชื่อเชื่อมโยงกับตัวระบุที่กำหนดเนมสเปซ ชื่อแท็กและแอตทริบิวต์ทั้งหมดที่มีคำนำหน้าเชื่อมโยงกับตัวระบุเดียวกันจะสร้างเนมสเปซเดียว ซึ่งชื่อจะต้องไม่ซ้ำกัน</p><p>เนื่องจากเราต้องการให้ทุกคนสามารถจดจำการประกาศเนมสเปซได้เมื่อเราเห็น เราจึงขอสงวนคำพิเศษสำหรับคำดังกล่าว ตามคำแนะนำของเนมสเปซ คำนี้คือ xmlns ค่าของแอตทริบิวต์คือ URI ที่ระบุเนมสเปซที่จะใช้ ซึ่งมักจะเป็น URL คำจำกัดความของ DTD แต่ไม่จำเป็นต้องเป็นเช่นนั้นเสมอไป คำนำหน้าเนมสเปซและตัวระบุถูกกำหนดโดยแอ็ตทริบิวต์ xmlns ดังต่อไปนี้:</p><p><ntb:notebook xmlns:ntb = "http://some.firm.com/2003/ntbml"></p><p>อย่างที่คุณเห็น คำนำหน้า ntb เพิ่งถูกกำหนดไว้ แต่สามารถนำมาใช้ในชื่อ ntb: notebook ได้แล้ว ในอนาคต ชื่อของแท็กและคุณลักษณะที่เราต้องการกำหนดให้กับเนมสเปซ http://some.firm.com/2003/ntbml จะขึ้นต้นด้วย ntb เช่น:</p><p><ntb:city ntb:type="поселок">โกเรโลโว</ntb:city></p><p>นอกจากนี้ เนมสเปซหลายรายการสามารถเกิดขึ้นได้ในแท็กเดียว ด้านล่างนี้เป็นตัวอย่างของการผสมเนมสเปซหลายรายการ:</p><p><catalog:book order:ISBN = "1-861003-11-0"></p><p>องค์ประกอบหนังสือมาจากเนมสเปซแคตตาล็อก และแอตทริบิวต์ ISBN มาจาก order</p><p>ชื่อพร้อมกับคำนำหน้า เป็นต้น</p><p>เรียกว่าชื่อขยาย คุณสมบัติ หรือชื่อที่มีคุณสมบัติ (OName ชื่อที่ผ่านการรับรอง) ส่วนของชื่อที่เขียนหลังเครื่องหมายทวิภาคเรียกว่าส่วนท้องถิ่นของชื่อ</p><p>ระบบการตั้งชื่อของชื่อทรัพยากรบนเว็บอาจทำให้เกิดความสับสน ตัวระบุทรัพยากรที่สม่ำเสมอ ( <span>ตัวระบุทรัพยากรแบบเดียวกัน, URL</span>) ระบุทรัพยากรในแง่ของโปรโตคอลการเข้าถึงและตำแหน่งเครือข่าย ตัวระบุทรัพยากรที่เหมือนกัน ( <span>ตัวระบุทรัพยากรแบบเดียวกัน URI</span>) เป็นชื่อเฉพาะสำหรับทรัพยากรบางอย่าง ดู URI ว่าเป็นสตริงอักขระเฉพาะที่ระบุเนมสเปซ</p><p>ตามกฎของ SGML และ XML สามารถใช้โคลอนในชื่อเป็นอักขระธรรมดาได้ดังนั้นชื่อที่มีคำนำหน้าจึงเป็นเพียงกลอุบาย โปรแกรมใด ๆ ที่ไม่ "รู้" เนมสเปซแยกวิเคราะห์เอกสารถือว่า ชื่อที่มีคุณสมบัติเป็นชื่อสามัญ โดยเฉพาะอย่างยิ่งมันตามมาว่าใน <span>การประกาศประเภทเอกสาร</span>(การประกาศประเภทเอกสาร) ไม่สามารถละเว้นคำนำหน้าชื่อได้</p><p>แอตทริบิวต์ xmlns สามารถปรากฏบนองค์ประกอบ XML ใดก็ได้ ไม่ใช่แค่องค์ประกอบรูท คำนำหน้าที่กำหนดสามารถนำไปใช้กับองค์ประกอบที่แอตทริบิวต์ xmlns ถูกเขียนและองค์ประกอบทั้งหมดที่ซ้อนกันอยู่ภายใน นอกจากนี้ สามารถกำหนดเนมสเปซได้หลายรายการในองค์ประกอบเดียว</p><p>ในองค์ประกอบที่ซ้อนกัน เนมสเปซสามารถแทนที่ได้โดยการเชื่อมโยงคำนำหน้ากับตัวระบุอื่น</p><p>การปรากฏของชื่อแท็กโดยไม่มีคำนำหน้าในเอกสารที่ใช้เนมสเปซหมายความว่าชื่อนั้นเป็นของเนมสเปซเริ่มต้น</p><p>เอกสารที่ได้รับการออกแบบมาอย่างดีควรใช้เนมสเปซสำหรับองค์ประกอบทั้งหมด</p><p>คำนำหน้าที่ขึ้นต้นด้วยอักขระ xml ไม่ว่าในกรณีใดจะสงวนไว้สำหรับภาษา XML เอง คำนำหน้า xmlns ใช้เพื่อเชื่อมโยงคำนำหน้าอื่นที่กำหนดไว้กับตัวระบุเนมสเปซ ไม่จำเป็นต้องกำหนดคำนำหน้า xmlns โดยแนะนำโดยคำแนะนำ "เนมสเปซใน XML" และเชื่อมโยงกับตัวระบุเนมสเปซที่นั่น <span>http://www.w3.ori/2000 /xmlns/</span>.</p><p>คำนำหน้าอื่น xml เชื่อมโยงกับคำแนะนำเดียวกันกับตัวระบุ <span>http://www.w3.org/XML/1998/namespace</span>- นอกจากนี้ยังไม่จำเป็นต้องกำหนดไว้ในเอกสาร XML ไม่สามารถเชื่อมโยงคำนำหน้าอื่นกับตัวระบุเหล่านี้ได้ นี่เป็นสิ่งสำคัญสำหรับข้อความบางข้อความ เช่น รหัสโปรแกรม ค่าเริ่มต้นจะปล่อยให้ช่องว่างขึ้นอยู่กับดุลยพินิจของตัวจัดการ</p> <h5>ขอบเขต</h5><p>การประกาศเนมสเปซมีขอบเขต เช่นเดียวกับการประกาศตัวแปรในภาษาการเขียนโปรแกรม นี่เป็นสิ่งสำคัญเนื่องจากเนมสเปซไม่ได้ประกาศไว้ที่ตอนต้นของเอกสาร XML เสมอไป บางครั้งอาจมีการประกาศในส่วนต่อๆ ไป การประกาศเนมสเปซใช้กับองค์ประกอบที่ปรากฏ เช่นเดียวกับการสืบทอดขององค์ประกอบนั้น แม้ว่าจะไม่ได้กำหนดไว้อย่างชัดเจนก็ตาม ชื่อสามารถอ้างถึงเนมสเปซได้หากใช้ภายในขอบเขตของการประกาศเท่านั้น</p><p>อย่างไรก็ตาม เราจะต้องผสมขอบเขตเนมสเปซกับองค์ประกอบที่จะสืบทอดเนมสเปซอื่น ในเรื่องนี้ มีการกำหนดขอบเขตการประกาศสองวิธี: ค่าเริ่มต้นและผ่านการรับรอง</p> <h5>ขอบเขตเริ่มต้น</h5><p>อย่างที่คุณคาดหวัง การใส่คำนำหน้าชื่อทุกชื่อในเอกสารจะกลายเป็นเรื่องน่าเบื่ออย่างรวดเร็ว ในความเป็นจริง ด้วยการแนะนำแนวคิดของขอบเขตชื่อ เราสามารถผสมคำนำหน้าจำนวนมากในเอกสารของเราได้ หากเรากำหนดเนมสเปซเริ่มต้น จะถือว่าเป็นเจ้าของชื่อที่ไม่ผ่านการรับรองทั้งหมดภายในขอบเขตของการประกาศ ดังนั้น เนมสเปซเริ่มต้นที่ประกาศในองค์ประกอบรูทจึงถือเป็นค่าเริ่มต้นสำหรับทั้งเอกสาร และสามารถแทนที่ได้โดยเนมสเปซที่เฉพาะเจาะจงมากขึ้นที่ประกาศภายในเอกสารเท่านั้น</p><p>หากต้องการทำให้เนมสเปซเป็นเนมสเปซเริ่มต้นสำหรับขอบเขต เพียงละเว้นการประกาศคำนำหน้า</p><p>หากมีการประกาศคำนำหน้าแล้วใช้ร่วมกับชื่อ จะมีการกล่าวว่าเนมสเปซถูกกำหนดไว้อย่างชัดเจน หากต้องการกำหนดชื่อที่ไม่เข้าเกณฑ์ให้กับเนมสเปซ คุณต้องประกาศพื้นที่เริ่มต้นที่มีชื่อที่ไม่เข้าเกณฑ์ (ไม่มีคำนำหน้า)</p> <h5>ขอบเขตที่ผ่านการรับรอง</h5><p>วิธีการข้างต้นใช้ได้ผลดีหากคุณสามารถแยกเนมสเปซของคุณได้อย่างชัดเจน แต่บางครั้งจำเป็นต้องรวมชื่อบุคคลจากเนมสเปซภายนอกไว้ในเอกสาร แทนที่จะประกาศเนมสเปซสำหรับทั้งขอบเขต คุณสามารถใช้ชื่อที่ผ่านการรับรองได้ ประกาศเนมสเปซที่คุณต้องการในตอนต้นของเอกสาร จากนั้นจึงกำหนดคุณสมบัติ ณ จุดใช้งาน</p> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="https://www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><br> <br> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy loading=lazy>");</script> <div style="font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both"></div> </div> <footer> <div class="td-block-row td-post-next-prev"> <div class="td-block-span6 td-post-prev-post"> <div class="td-post-next-prev-content"><span>บทความก่อนหน้านี้</span><a href="https://redcomrade.ru/th/internet/vse-draivera-wifi-skachivanie-i-ustanovka-draivera-dlya-wi-fi-adaptera-draiver-est/">การดาวน์โหลดและติดตั้งไดรเวอร์สำหรับอแด็ปเตอร์ Wi-Fi</a></div> </div> <!-- /next_post --> <div class="td-next-prev-separator"></div> <div class="td-block-span6 td-post-next-post"> <div class="td-post-next-prev-content"><span>บทความถัดไป</span><a href="https://redcomrade.ru/th/winchesters/proshivka-android-samsung-s-pomoshchyu-odin-obnovlenie-proshivki/">กำลังอัพเดตเฟิร์มแวร์สำหรับสมาร์ทโฟน Samsung Galaxy กำลังเตรียมเฟิร์มแวร์</a></div> <!-- /next_post --> </div> </div> <div class="td-author-name vcard author" style="display: none"><span class="fn"><a href="https://redcomrade.ru/th/author/iulia">จูเลีย</a></span></div> <span style="display: none;" itemprop="author" itemscope itemtype="https://schema.org/Person"><meta itemprop="name" content="Юлия"></span> <meta itemprop="datePublished" content="2016-05-16T15:47:37+00:00"> <meta itemprop="dateModified" content="2016-10-25T16:54:41+00:00"> <meta itemscope itemprop="mainEntityOfPage" itemType="https://schema.org/WebPage" itemid="/other/kak-zavyazat-galstuk-foto-poshagovo.html" /><span style="display: none;" itemprop="publisher" itemscope itemtype="https://schema.org/Organization"><span style="display: none;" itemprop="logo" itemscope itemtype="https://schema.org/ImageObject"><meta itemprop="url" content="//redcomrade.ru/wp-content/uploads/2017/01/logo-300x100.png"></span> <meta itemprop="name" content="Мой секрет"> </span> <meta itemprop="headline " content="Как завязать галстук пошагово фото"><span style="display: none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject"><meta itemprop="url" content="/wp-content/uploads/2016/05/1-19.jpg"><meta itemprop="width" content="640"><meta itemprop="height" content="450"></span> </footer> </article> <div class="td_block_wrap td_block_related_posts td_uid_3_5a236fb03c961_rand td_with_ajax_pagination td-pb-border-top td_block_template_1" data-td-block-uid="td_uid_3_5a236fb03c961" ><script>var block_td_uid_3_5a236fb03c961 = new tdBlock(); block_td_uid_3_5a236fb03c961.id = "td_uid_3_5a236fb03c961"; block_td_uid_3_5a236fb03c961.atts = '{ "limit":9,"sort":"","post_ids":"","tag_slug":"","autors_id":"","installed_post_types":"","category_id":"","category_ids":"","custom_title":"","custom_url":"","show_child_cat":"","sub_cat_ajax":"","ajax_pagination":"next_prev","header_color":"","header_text_color":"","ajax_pagination_infinite_stop":"","td_column_number":3,"td_ajax_preloading":"","td_ajax_filter_type":"td_custom_related","td_ajax_filter_ids":"","td_filter_default_txt":"\u0412\u0441\u0435","color_preset":"","border_top":"","class":"td_uid_3_5a236fb03c961_rand","el_class":"","offset":"","css":"","tdc_css":"","tdc_css_class":"td_uid_3_5a236fb03c961_rand","live_filter":"cur_post_same_categories","live_filter_cur_post_id":10046,"live_filter_cur_post_author":"694350","block_template_id":""} '; block_td_uid_3_5a236fb03c961.td_column_number = "3"; block_td_uid_3_5a236fb03c961.block_type = "td_block_related_posts"; block_td_uid_3_5a236fb03c961.post_count = "9"; block_td_uid_3_5a236fb03c961.found_posts = "26"; block_td_uid_3_5a236fb03c961.header_color = ""; block_td_uid_3_5a236fb03c961.ajax_pagination_infinite_stop = ""; block_td_uid_3_5a236fb03c961.max_num_pages = "3"; tdBlocksArray.push(block_td_uid_3_5a236fb03c961); </script><h4 class="td-related-title td-block-title"><a id="td_uid_4_5a236fb03e35d" class="td-related-left td-cur-simple-item" data-td_filter_value="" data-td_block_id="td_uid_3_5a236fb03c961" href="#">บทความที่เกี่ยวข้อง</a></h4><div id=td_uid_3_5a236fb03c961 class="td_block_inner"> <div class="td-related-row"> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/security/google-home-na-russkom-yazyke-kak-dobavit-ekspress-panel/" rel="bookmark" title="วิธีเพิ่มแผงด่วน"><img width="218" height="150" class="entry-thumb" src="/uploads/d5329a9ee28a3e6e5ed3334b61876278.jpg" alt="วิธีเพิ่มแผงด่วน" title="วิธีเพิ่มแผงด่วน"/ loading=lazy loading=lazy></a></div> <a href="https://redcomrade.ru/th/category/security/" class="td-post-category">ความปลอดภัย</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/security/google-home-na-russkom-yazyke-kak-dobavit-ekspress-panel/" rel="bookmark" title="วิธีเพิ่มแผงด่วน">วิธีเพิ่มแผงด่วน</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/windows-7/kak-pomenyat-chastotu-na-mashinke-na-radioupravlenii-kak-izmenit-chastotu/" rel="bookmark" title="จะเปลี่ยนความถี่ของรถบังคับวิทยุได้อย่างไร?"><img width="218" height="150" class="entry-thumb" src="/uploads/579ca754d7acf33ad5019cc61d994777.jpg" alt="จะเปลี่ยนความถี่ของรถบังคับวิทยุได้อย่างไร?" title="จะเปลี่ยนความถี่ของรถบังคับวิทยุได้อย่างไร?"/ loading=lazy loading=lazy></a></div> <a href="https://redcomrade.ru/th/category/windows-7/" class="td-post-category">วินโดวส์ 7</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/windows-7/kak-pomenyat-chastotu-na-mashinke-na-radioupravlenii-kak-izmenit-chastotu/" rel="bookmark" title="จะเปลี่ยนความถี่ของรถบังคับวิทยุได้อย่างไร?">จะเปลี่ยนความถี่ของรถบังคับวิทยุได้อย่างไร?</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/motherboard/po-izmenchivosti-informaciya-byvaet-ponyatie-informacii-razlichnye/" rel="bookmark" title="แนวคิดของข้อมูล การตีความต่างๆ"><img width="218" height="150" class="entry-thumb" src="/uploads/9be6a34be55360957f89e99f901cfd5a.jpg" alt="แนวคิดของข้อมูล การตีความต่างๆ" title="แนวคิดของข้อมูล การตีความต่างๆ"/ loading=lazy loading=lazy></a></div> <a href="https://redcomrade.ru/th/category/motherboard/" class="td-post-category">เมนบอร์ด</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/motherboard/po-izmenchivosti-informaciya-byvaet-ponyatie-informacii-razlichnye/" rel="bookmark" title="แนวคิดของข้อมูล การตีความต่างๆ">แนวคิดของข้อมูล การตีความต่างๆ</a></h3> </div> </div> </div> </div> <div class="td-related-row"> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/case/razdelit-listy-v-pdf-razdelenie-pdf-na-stranicy-onlain-ispolzovanie/" rel="bookmark" title="แยก PDF ออกเป็นหน้าออนไลน์"><img width="218" height="150" class="entry-thumb" src="/uploads/7f17b3c835e9e2b8a804d9a42d9f09d0.jpg" alt="แยก PDF ออกเป็นหน้าออนไลน์" title="แยก PDF ออกเป็นหน้าออนไลน์"/ loading=lazy loading=lazy></a></div> <a href="https://redcomrade.ru/th/category/case/" class="td-post-category">เรือน</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/case/razdelit-listy-v-pdf-razdelenie-pdf-na-stranicy-onlain-ispolzovanie/" rel="bookmark" title="แยก PDF ออกเป็นหน้าออนไลน์">แยก PDF ออกเป็นหน้าออนไลน์</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/motherboard/tehnologiya-hls-http-live-streaming-luchshie-recepty-kogda-zhe-ispolzovat-hls-dlya/" rel="bookmark" title="HTTP Live Streaming: สูตรอาหารที่ดีที่สุด"><img width="218" height="150" class="entry-thumb" src="/uploads/99049048056874811a51bc0949a7e993.jpg" alt="HTTP Live Streaming: สูตรอาหารที่ดีที่สุด" title="HTTP Live Streaming: สูตรอาหารที่ดีที่สุด"/ loading=lazy loading=lazy></a></div> <a href="https://redcomrade.ru/th/category/motherboard/" class="td-post-category">เมนบอร์ด</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/motherboard/tehnologiya-hls-http-live-streaming-luchshie-recepty-kogda-zhe-ispolzovat-hls-dlya/" rel="bookmark" title="HTTP Live Streaming: สูตรอาหารที่ดีที่สุด">HTTP Live Streaming: สูตรอาหารที่ดีที่สุด</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/security/gde-otobrazhaetsya-login-v-skaipe-kak-i-kakoi-sozdat-login-v-skaipe-rabochie-niki/" rel="bookmark" title="อย่างไรและสิ่งที่จะสร้างการเข้าสู่ระบบบน Skype"><img width="218" height="150" class="entry-thumb" src="/uploads/fc2ba82014da1f081e22dc66eb97600b.jpg" alt="อย่างไรและสิ่งที่จะสร้างการเข้าสู่ระบบบน Skype" title="อย่างไรและสิ่งที่จะสร้างการเข้าสู่ระบบบน Skype"/ loading=lazy loading=lazy></a></div> <a href="https://redcomrade.ru/th/category/security/" class="td-post-category">ความปลอดภัย</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/security/gde-otobrazhaetsya-login-v-skaipe-kak-i-kakoi-sozdat-login-v-skaipe-rabochie-niki/" rel="bookmark" title="อย่างไรและสิ่งที่จะสร้างการเข้าสู่ระบบบน Skype">อย่างไรและสิ่งที่จะสร้างการเข้าสู่ระบบบน Skype</a></h3> </div> </div> </div> </div> <div class="td-related-row"> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/power-supplies/kak-gde-vzyat-yuin-v-aske-kak-poluchit-novyi-uin-dlya-aski-kak/" rel="bookmark" title="วิธีรับ UIN ใหม่สำหรับ ICQ"><img width="218" height="150" class="entry-thumb" src="/uploads/dffa63dc694d0c5a6ccb0ffd017013db.jpg" alt="วิธีรับ UIN ใหม่สำหรับ ICQ" title="วิธีรับ UIN ใหม่สำหรับ ICQ"/ loading=lazy loading=lazy></a></div> <a href="https://redcomrade.ru/th/category/power-supplies/" class="td-post-category">แหล่งจ่ายไฟ</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/power-supplies/kak-gde-vzyat-yuin-v-aske-kak-poluchit-novyi-uin-dlya-aski-kak/" rel="bookmark" title="วิธีรับ UIN ใหม่สำหรับ ICQ">วิธีรับ UIN ใหม่สำหรับ ICQ</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/internet/pochemu-pri-podklyuchenii-pk-ne-vidit-telefon-xiaomi-xiaomi-ne-vidit/" rel="bookmark" title="Xiaomi ไม่เห็นคอมพิวเตอร์ เหตุผล วิธีแก้ไขปัญหา โทรศัพท์ไม่เห็นคอมพิวเตอร์: ตรวจสอบจากพีซี"><img width="218" height="150" class="entry-thumb" src="/uploads/e1c00a701c93e4eea99b9dfeffcace29.jpg" alt="Xiaomi ไม่เห็นคอมพิวเตอร์ เหตุผล วิธีแก้ไขปัญหา โทรศัพท์ไม่เห็นคอมพิวเตอร์: ตรวจสอบจากพีซี" title="Xiaomi ไม่เห็นคอมพิวเตอร์ เหตุผล วิธีแก้ไขปัญหา โทรศัพท์ไม่เห็นคอมพิวเตอร์: ตรวจสอบจากพีซี"/ loading=lazy loading=lazy></a></div> <a href="https://redcomrade.ru/th/category/internet/" class="td-post-category">อินเทอร์เน็ต</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/internet/pochemu-pri-podklyuchenii-pk-ne-vidit-telefon-xiaomi-xiaomi-ne-vidit/" rel="bookmark" title="Xiaomi ไม่เห็นคอมพิวเตอร์ เหตุผล วิธีแก้ไขปัญหา โทรศัพท์ไม่เห็นคอมพิวเตอร์: ตรวจสอบจากพีซี">Xiaomi ไม่เห็นคอมพิวเตอร์ เหตุผล วิธีแก้ไขปัญหา โทรศัพท์ไม่เห็นคอมพิวเตอร์: ตรวจสอบจากพีซี</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td-meta-info-hide td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/motherboards/ustanovka-tem-na-miui-temy-iz-storonnih-istochnikov-ne-podderzhivayutsya-v/" rel="bookmark" title="“ ไม่รองรับธีมจากแหล่งบุคคลที่สาม” ใน MIUI: วิธีหลีกเลี่ยงการแบน"><img width="218" height="150" class="entry-thumb" src="/uploads/d1ea1873f631c0ebdb7447affc7590ea.jpg" alt="“ ไม่รองรับธีมจากแหล่งบุคคลที่สาม” ใน MIUI: วิธีหลีกเลี่ยงการแบน" title="“ ไม่รองรับธีมจากแหล่งบุคคลที่สาม” ใน MIUI: วิธีหลีกเลี่ยงการแบน"/ loading=lazy loading=lazy></a></div> <a href="https://redcomrade.ru/th/category/motherboards/" class="td-post-category">เมนบอร์ด</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/motherboards/ustanovka-tem-na-miui-temy-iz-storonnih-istochnikov-ne-podderzhivayutsya-v/" rel="bookmark" title="“ ไม่รองรับธีมจากแหล่งบุคคลที่สาม” ใน MIUI: วิธีหลีกเลี่ยงการแบน">“ ไม่รองรับธีมจากแหล่งบุคคลที่สาม” ใน MIUI: วิธีหลีกเลี่ยงการแบน</a></h3> </div> </div> </div> </div></div></div> </div> </div> <div class="td-pb-span4 td-main-sidebar"> <div class="td-ss-main-sidebar"> <aside class="widget �lambda_169101"> <div style="margin:10px 0"> </div> </aside> <div class="td_block_wrap td_block_1 td_block_widget td_uid_2_5a23c04f0cdc0_rand td-pb-border-top td_block_template_1 td-column-1" data-td-block-uid="td_uid_2_5a23c04f0cdc0"> <div class="td-block-title-wrap"> <h4 class="block-title"><span class="td-pulldown-size">เราขอแนะนำ</span></h4> </div> <div id=td_uid_2_5a23c04f0cdc0 class="td_block_inner"> <div class="td-block-span12"> <div class="td_module_4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/processors/kakaya-strana-proizvodit-soni-iksperiya-istoriya-kompanii-sony-zolotoi-period/" rel="bookmark" title="Sony Xperia ผลิตในประเทศใด"><img width="324" height="235" class="entry-thumb" src="/uploads/c703476d6b9da2fac2c2f3d5adbb3637.jpg" alt="Sony Xperia ผลิตในประเทศใด" title="Sony Xperia ผลิตในประเทศใด"/ loading=lazy loading=lazy></a></div> <a href="https://redcomrade.ru/th/category/processors/" class="td-post-category">โปรเซสเซอร์</a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/processors/kakaya-strana-proizvodit-soni-iksperiya-istoriya-kompanii-sony-zolotoi-period/" rel="bookmark" title="Sony Xperia ผลิตในประเทศใด">Sony Xperia ผลิตในประเทศใด</a></h3> <div class="td-module-meta-info"> </div> <div class="td-excerpt">สโลแกน: make.belive ต้นกำเนิดของบริษัทดังระดับโลกหลายแห่งนั้นมีคนสองคน คนหนึ่งเป็นวิศวกรที่มีพรสวรรค์ อีกคน...</div> </div> <!-- /next_post --> </div> <div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/other/kak-uznat-skolki-razryadnaya-windows-10-chto-takoe-razryadnost/" rel="bookmark" title="ความลึกบิตของ Windows คืออะไร"><img width="100" height="70" class="entry-thumb" src="/uploads/558e22bf18372f6dc54a0fba6735ec1c.jpg" alt="ความลึกบิตของ Windows คืออะไร" title="ความลึกบิตของ Windows คืออะไร"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/other/kak-uznat-skolki-razryadnaya-windows-10-chto-takoe-razryadnost/" rel="bookmark" title="ความลึกบิตของ Windows คืออะไร">ความลึกบิตของ Windows คืออะไร</a></h3> <div class="td-module-meta-info"> <a href="https://redcomrade.ru/th/category/other/" class="td-post-category">อื่น</a> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/processors/avtomatizaciya-s-poster-effektivnoe-reshenie-dlya-malogo-i-srednego-biznesa-poster/" rel="bookmark" title="โปสเตอร์บัญชีมืออาชีพ ราคาและการติดตั้ง"><img width="100" height="70" class="entry-thumb" src="/uploads/aaa288d7b622e1b8986f13d86aef40cc.jpg" alt="โปสเตอร์บัญชีมืออาชีพ ราคาและการติดตั้ง" title="โปสเตอร์บัญชีมืออาชีพ ราคาและการติดตั้ง"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/processors/avtomatizaciya-s-poster-effektivnoe-reshenie-dlya-malogo-i-srednego-biznesa-poster/" rel="bookmark" title="โปสเตอร์บัญชีมืออาชีพ ราคาและการติดตั้ง">โปสเตอร์บัญชีมืออาชีพ ราคาและการติดตั้ง</a></h3> <div class="td-module-meta-info"> <a href="https://redcomrade.ru/th/category/processors/" class="td-post-category">โปรเซสเซอร์</a> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/windows-7/luchshie-naushniki-s-aliexpress-luchshie-besprovodnye-bluetooth-naushniki-iz-kitaya-luchshie/" rel="bookmark" title="หูฟัง Bluetooth ไร้สายที่ดีที่สุดจากจีน หูฟังราคาถูกที่ดีที่สุดจาก aliexpress"><img width="100" height="70" class="entry-thumb" src="/uploads/9d65a3e7dc933943f1423500e22dccc4.jpg" alt="หูฟัง Bluetooth ไร้สายที่ดีที่สุดจากจีน หูฟังราคาถูกที่ดีที่สุดจาก aliexpress" title="หูฟัง Bluetooth ไร้สายที่ดีที่สุดจากจีน หูฟังราคาถูกที่ดีที่สุดจาก aliexpress"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/windows-7/luchshie-naushniki-s-aliexpress-luchshie-besprovodnye-bluetooth-naushniki-iz-kitaya-luchshie/" rel="bookmark" title="หูฟัง Bluetooth ไร้สายที่ดีที่สุดจากจีน หูฟังราคาถูกที่ดีที่สุดจาก aliexpress">หูฟัง Bluetooth ไร้สายที่ดีที่สุดจากจีน หูฟังราคาถูกที่ดีที่สุดจาก aliexpress</a></h3> <div class="td-module-meta-info"> <a href="https://redcomrade.ru/th/category/windows-7/" class="td-post-category">วินโดวส์ 7</a> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/monitors/otkryvaem-faily-cdw-chto-takoe-rasshirenie-faila-cwd-cdw-chem-otkryt/" rel="bookmark" title="ไฟล์นามสกุล CWD คืออะไร?"><img width="100" height="70" class="entry-thumb" src="/uploads/298acbeaa04bf3190e19904e89d44315.jpg" alt="ไฟล์นามสกุล CWD คืออะไร?" title="ไฟล์นามสกุล CWD คืออะไร?"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/monitors/otkryvaem-faily-cdw-chto-takoe-rasshirenie-faila-cwd-cdw-chem-otkryt/" rel="bookmark" title="ไฟล์นามสกุล CWD คืออะไร?">ไฟล์นามสกุล CWD คืออะไร?</a></h3> <div class="td-module-meta-info"> <a href="https://redcomrade.ru/th/category/monitors/" class="td-post-category">จอภาพ</a> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/windows-8/kak-zapisat-faily-na-disk-kak-zapisat-faily-na-disk-sozdanie/" rel="bookmark" title="วิธีเบิร์นไฟล์ลงดิสก์ การสร้างสำเนาสำรอง"><img width="100" height="70" class="entry-thumb" src="/uploads/8145e1c728ecc80978ed69b0dd9a777f.jpg" alt="วิธีเบิร์นไฟล์ลงดิสก์ การสร้างสำเนาสำรอง" title="วิธีเบิร์นไฟล์ลงดิสก์ การสร้างสำเนาสำรอง"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/windows-8/kak-zapisat-faily-na-disk-kak-zapisat-faily-na-disk-sozdanie/" rel="bookmark" title="วิธีเบิร์นไฟล์ลงดิสก์ การสร้างสำเนาสำรอง">วิธีเบิร์นไฟล์ลงดิสก์ การสร้างสำเนาสำรอง</a></h3> <div class="td-module-meta-info"> <a href="https://redcomrade.ru/th/category/windows-8/" class="td-post-category">วินโดวส์ 8</a> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/graphics-card/pk-32-bitnaya-sistema-razryadnosti-processorov-i-operacionnyh/" rel="bookmark" title="ขนาดบิตของโปรเซสเซอร์และระบบปฏิบัติการ"><img width="100" height="70" class="entry-thumb" src="/uploads/f816b3804abf77ea309a27988dfb26a7.jpg" alt="ขนาดบิตของโปรเซสเซอร์และระบบปฏิบัติการ" title="ขนาดบิตของโปรเซสเซอร์และระบบปฏิบัติการ"/ loading=lazy loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/graphics-card/pk-32-bitnaya-sistema-razryadnosti-processorov-i-operacionnyh/" rel="bookmark" title="ขนาดบิตของโปรเซสเซอร์และระบบปฏิบัติการ">ขนาดบิตของโปรเซสเซอร์และระบบปฏิบัติการ</a></h3> <div class="td-module-meta-info"> <a href="https://redcomrade.ru/th/category/graphics-card/" class="td-post-category">การ์ดแสดงผล</a> </div> </div> </div> </div> </div> </div> </div> <aside class="widget_text td_block_template_1 widget widget_custom_html"> <div class="textwidget custom-html-widget"> </div> </aside> </div> </div> </div> </div> </div> <div class="td-footer-wrapper td-container-wrap "> <div class="td-container"> <div class="td-pb-row"> <div class="td-pb-span12"> </div> </div> <div class="td-pb-row"> <div class="td-pb-span4"> <div class="td_block_wrap td_block_15 td_block_widget td_uid_11_5a23980e76adb_rand td-pb-border-top td_block_template_1 td-column-1 td_block_padding" data-td-block-uid="td_uid_11_5a23980e76adb" > <div class="td-block-title-wrap"></div><div id=td_uid_11_5a23980e76adb class="td_block_inner td-column-1"><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/other/nastroika-tipovyh-i-vneshnih-otchetov-nastroika-tipovyh-i/" rel="bookmark" title="การตั้งค่ารายงานมาตรฐานและรายงานภายนอก การบันทึกการตั้งค่ารายงาน"><img width="218" height="150" class="entry-thumb" src="/uploads/54a5639a0838c8ee7ae85746ce732363.jpg" alt="การตั้งค่ารายงานมาตรฐานและรายงานภายนอก การบันทึกการตั้งค่ารายงาน" title="การตั้งค่ารายงานมาตรฐานและรายงานภายนอก การบันทึกการตั้งค่ารายงาน"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/other/nastroika-tipovyh-i-vneshnih-otchetov-nastroika-tipovyh-i/" rel="bookmark" title="การตั้งค่ารายงานมาตรฐานและรายงานภายนอก การบันทึกการตั้งค่ารายงาน">การตั้งค่ารายงานมาตรฐานและรายงานภายนอก การบันทึกการตั้งค่ารายงาน</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/graphics-card/windows-7-ustanovka-rezhime-sovmestimosti-reshenie-problem-sovmestimosti-programm/" rel="bookmark" title="การแก้ปัญหาความเข้ากันได้ของโปรแกรม"><img width="218" height="150" class="entry-thumb" src="/uploads/2358577d09b75b49d2ad6aa709047d39.jpg" alt="การแก้ปัญหาความเข้ากันได้ของโปรแกรม" title="การแก้ปัญหาความเข้ากันได้ของโปรแกรม"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/graphics-card/windows-7-ustanovka-rezhime-sovmestimosti-reshenie-problem-sovmestimosti-programm/" rel="bookmark" title="การแก้ปัญหาความเข้ากันได้ของโปรแกรม">การแก้ปัญหาความเข้ากันได้ของโปรแกรม</a></h3> </div> </div> </div><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/internet/vse-draivera-wifi-skachivanie-i-ustanovka-draivera-dlya-wi-fi-adaptera-draiver-est/" rel="bookmark" title="การดาวน์โหลดและติดตั้งไดรเวอร์สำหรับอแด็ปเตอร์ Wi-Fi"><img width="218" height="150" class="entry-thumb" src="/uploads/2bec1fac06554fbe87b96e0e604309f6.jpg" alt="การดาวน์โหลดและติดตั้งไดรเวอร์สำหรับอแด็ปเตอร์ Wi-Fi" title="การดาวน์โหลดและติดตั้งไดรเวอร์สำหรับอแด็ปเตอร์ Wi-Fi"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/internet/vse-draivera-wifi-skachivanie-i-ustanovka-draivera-dlya-wi-fi-adaptera-draiver-est/" rel="bookmark" title="การดาวน์โหลดและติดตั้งไดรเวอร์สำหรับอแด็ปเตอร์ Wi-Fi">การดาวน์โหลดและติดตั้งไดรเวอร์สำหรับอแด็ปเตอร์ Wi-Fi</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/winchesters/proshivka-android-samsung-s-pomoshchyu-odin-obnovlenie-proshivki/" rel="bookmark" title="กำลังอัพเดตเฟิร์มแวร์สำหรับสมาร์ทโฟน Samsung Galaxy กำลังเตรียมเฟิร์มแวร์"><img width="218" height="150" class="entry-thumb" src="/uploads/611c236f35f0454069026f9310109c7c.jpg" alt="กำลังอัพเดตเฟิร์มแวร์สำหรับสมาร์ทโฟน Samsung Galaxy กำลังเตรียมเฟิร์มแวร์" title="กำลังอัพเดตเฟิร์มแวร์สำหรับสมาร์ทโฟน Samsung Galaxy กำลังเตรียมเฟิร์มแวร์"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/winchesters/proshivka-android-samsung-s-pomoshchyu-odin-obnovlenie-proshivki/" rel="bookmark" title="กำลังอัพเดตเฟิร์มแวร์สำหรับสมาร์ทโฟน Samsung Galaxy กำลังเตรียมเฟิร์มแวร์">กำลังอัพเดตเฟิร์มแวร์สำหรับสมาร์ทโฟน Samsung Galaxy กำลังเตรียมเฟิร์มแวร์</a></h3> </div> </div> </div><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/security/google-home-na-russkom-yazyke-kak-dobavit-ekspress-panel/" rel="bookmark" title="วิธีเพิ่มแผงด่วน"><img width="218" height="150" class="entry-thumb" src="/uploads/d5329a9ee28a3e6e5ed3334b61876278.jpg" alt="วิธีเพิ่มแผงด่วน" title="วิธีเพิ่มแผงด่วน"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/security/google-home-na-russkom-yazyke-kak-dobavit-ekspress-panel/" rel="bookmark" title="วิธีเพิ่มแผงด่วน">วิธีเพิ่มแผงด่วน</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/windows-7/kak-pomenyat-chastotu-na-mashinke-na-radioupravlenii-kak-izmenit-chastotu/" rel="bookmark" title="จะเปลี่ยนความถี่ของรถบังคับวิทยุได้อย่างไร?"><img width="218" height="150" class="entry-thumb" src="/uploads/579ca754d7acf33ad5019cc61d994777.jpg" alt="จะเปลี่ยนความถี่ของรถบังคับวิทยุได้อย่างไร?" title="จะเปลี่ยนความถี่ของรถบังคับวิทยุได้อย่างไร?"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/windows-7/kak-pomenyat-chastotu-na-mashinke-na-radioupravlenii-kak-izmenit-chastotu/" rel="bookmark" title="จะเปลี่ยนความถี่ของรถบังคับวิทยุได้อย่างไร?">จะเปลี่ยนความถี่ของรถบังคับวิทยุได้อย่างไร?</a></h3> </div> </div> </div></div></div> <div class="clearfix"></div> </div> <div class="td-pb-span4"> <div class="td_block_wrap td_block_15 td_block_widget td_uid_12_5a23980e79990_rand td-pb-border-top td_block_template_1 td-column-1 td_block_padding" data-td-block-uid="td_uid_12_5a23980e79990" > <div class="td-block-title-wrap"></div><div id=td_uid_12_5a23980e79990 class="td_block_inner td-column-1"><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/motherboard/po-izmenchivosti-informaciya-byvaet-ponyatie-informacii-razlichnye/" rel="bookmark" title="แนวคิดของข้อมูล การตีความต่างๆ"><img width="218" height="150" class="entry-thumb" src="/uploads/9be6a34be55360957f89e99f901cfd5a.jpg" alt="แนวคิดของข้อมูล การตีความต่างๆ" title="แนวคิดของข้อมูล การตีความต่างๆ"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/motherboard/po-izmenchivosti-informaciya-byvaet-ponyatie-informacii-razlichnye/" rel="bookmark" title="แนวคิดของข้อมูล การตีความต่างๆ">แนวคิดของข้อมูล การตีความต่างๆ</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/case/razdelit-listy-v-pdf-razdelenie-pdf-na-stranicy-onlain-ispolzovanie/" rel="bookmark" title="แยก PDF ออกเป็นหน้าออนไลน์"><img width="218" height="150" class="entry-thumb" src="/uploads/7f17b3c835e9e2b8a804d9a42d9f09d0.jpg" alt="แยก PDF ออกเป็นหน้าออนไลน์" title="แยก PDF ออกเป็นหน้าออนไลน์"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/case/razdelit-listy-v-pdf-razdelenie-pdf-na-stranicy-onlain-ispolzovanie/" rel="bookmark" title="แยก PDF ออกเป็นหน้าออนไลน์">แยก PDF ออกเป็นหน้าออนไลน์</a></h3> </div> </div> </div><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/motherboard/tehnologiya-hls-http-live-streaming-luchshie-recepty-kogda-zhe-ispolzovat-hls-dlya/" rel="bookmark" title="HTTP Live Streaming: สูตรอาหารที่ดีที่สุด"><img width="218" height="150" class="entry-thumb" src="/uploads/99049048056874811a51bc0949a7e993.jpg" alt="HTTP Live Streaming: สูตรอาหารที่ดีที่สุด" title="HTTP Live Streaming: สูตรอาหารที่ดีที่สุด"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/motherboard/tehnologiya-hls-http-live-streaming-luchshie-recepty-kogda-zhe-ispolzovat-hls-dlya/" rel="bookmark" title="HTTP Live Streaming: สูตรอาหารที่ดีที่สุด">HTTP Live Streaming: สูตรอาหารที่ดีที่สุด</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/security/gde-otobrazhaetsya-login-v-skaipe-kak-i-kakoi-sozdat-login-v-skaipe-rabochie-niki/" rel="bookmark" title="อย่างไรและสิ่งที่จะสร้างการเข้าสู่ระบบบน Skype"><img width="218" height="150" class="entry-thumb" src="/uploads/fc2ba82014da1f081e22dc66eb97600b.jpg" alt="อย่างไรและสิ่งที่จะสร้างการเข้าสู่ระบบบน Skype" title="อย่างไรและสิ่งที่จะสร้างการเข้าสู่ระบบบน Skype"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/security/gde-otobrazhaetsya-login-v-skaipe-kak-i-kakoi-sozdat-login-v-skaipe-rabochie-niki/" rel="bookmark" title="อย่างไรและสิ่งที่จะสร้างการเข้าสู่ระบบบน Skype">อย่างไรและสิ่งที่จะสร้างการเข้าสู่ระบบบน Skype</a></h3> </div> </div> </div><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/power-supplies/kak-gde-vzyat-yuin-v-aske-kak-poluchit-novyi-uin-dlya-aski-kak/" rel="bookmark" title="วิธีรับ UIN ใหม่สำหรับ ICQ"><img width="218" height="150" class="entry-thumb" src="/uploads/dffa63dc694d0c5a6ccb0ffd017013db.jpg" alt="วิธีรับ UIN ใหม่สำหรับ ICQ" title="วิธีรับ UIN ใหม่สำหรับ ICQ"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/power-supplies/kak-gde-vzyat-yuin-v-aske-kak-poluchit-novyi-uin-dlya-aski-kak/" rel="bookmark" title="วิธีรับ UIN ใหม่สำหรับ ICQ">วิธีรับ UIN ใหม่สำหรับ ICQ</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/internet/pochemu-pri-podklyuchenii-pk-ne-vidit-telefon-xiaomi-xiaomi-ne-vidit/" rel="bookmark" title="Xiaomi ไม่เห็นคอมพิวเตอร์ เหตุผล วิธีแก้ไขปัญหา โทรศัพท์ไม่เห็นคอมพิวเตอร์: ตรวจสอบจากพีซี"><img width="218" height="150" class="entry-thumb" src="/uploads/e1c00a701c93e4eea99b9dfeffcace29.jpg" alt="Xiaomi ไม่เห็นคอมพิวเตอร์ เหตุผล วิธีแก้ไขปัญหา โทรศัพท์ไม่เห็นคอมพิวเตอร์: ตรวจสอบจากพีซี" title="Xiaomi ไม่เห็นคอมพิวเตอร์ เหตุผล วิธีแก้ไขปัญหา โทรศัพท์ไม่เห็นคอมพิวเตอร์: ตรวจสอบจากพีซี"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/internet/pochemu-pri-podklyuchenii-pk-ne-vidit-telefon-xiaomi-xiaomi-ne-vidit/" rel="bookmark" title="Xiaomi ไม่เห็นคอมพิวเตอร์ เหตุผล วิธีแก้ไขปัญหา โทรศัพท์ไม่เห็นคอมพิวเตอร์: ตรวจสอบจากพีซี">Xiaomi ไม่เห็นคอมพิวเตอร์ เหตุผล วิธีแก้ไขปัญหา โทรศัพท์ไม่เห็นคอมพิวเตอร์: ตรวจสอบจากพีซี</a></h3> </div> </div> </div></div></div> <div class="clearfix"></div> </div> <div class="td-pb-span4"> <div class="td_block_wrap td_block_15 td_block_widget td_uid_13_5a23980e7caa8_rand td-pb-border-top td_block_template_1 td-column-1 td_block_padding" data-td-block-uid="td_uid_13_5a23980e7caa8" > <div class="td-block-title-wrap"></div><div id=td_uid_13_5a23980e7caa8 class="td_block_inner td-column-1"><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/motherboards/ustanovka-tem-na-miui-temy-iz-storonnih-istochnikov-ne-podderzhivayutsya-v/" rel="bookmark" title="“ ไม่รองรับธีมจากแหล่งบุคคลที่สาม” ใน MIUI: วิธีหลีกเลี่ยงการแบน"><img width="218" height="150" class="entry-thumb" src="/uploads/d1ea1873f631c0ebdb7447affc7590ea.jpg" alt="“ ไม่รองรับธีมจากแหล่งบุคคลที่สาม” ใน MIUI: วิธีหลีกเลี่ยงการแบน" title="“ ไม่รองรับธีมจากแหล่งบุคคลที่สาม” ใน MIUI: วิธีหลีกเลี่ยงการแบน"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/motherboards/ustanovka-tem-na-miui-temy-iz-storonnih-istochnikov-ne-podderzhivayutsya-v/" rel="bookmark" title="“ ไม่รองรับธีมจากแหล่งบุคคลที่สาม” ใน MIUI: วิธีหลีกเลี่ยงการแบน">“ ไม่รองรับธีมจากแหล่งบุคคลที่สาม” ใน MIUI: วิธีหลีกเลี่ยงการแบน</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/processors/kakaya-strana-proizvodit-soni-iksperiya-istoriya-kompanii-sony-zolotoi-period/" rel="bookmark" title="Sony Xperia ผลิตในประเทศใด"><img width="218" height="150" class="entry-thumb" src="/uploads/22d10576783defe30b3631a52e84a679.jpg" alt="Sony Xperia ผลิตในประเทศใด" title="Sony Xperia ผลิตในประเทศใด"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/processors/kakaya-strana-proizvodit-soni-iksperiya-istoriya-kompanii-sony-zolotoi-period/" rel="bookmark" title="Sony Xperia ผลิตในประเทศใด">Sony Xperia ผลิตในประเทศใด</a></h3> </div> </div> </div><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/other/kak-uznat-skolki-razryadnaya-windows-10-chto-takoe-razryadnost/" rel="bookmark" title="ความลึกบิตของ Windows คืออะไร"><img width="218" height="150" class="entry-thumb" src="/uploads/344be8009a2d9eb7a8e5d46543aa0e47.jpg" alt="ความลึกบิตของ Windows คืออะไร" title="ความลึกบิตของ Windows คืออะไร"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/other/kak-uznat-skolki-razryadnaya-windows-10-chto-takoe-razryadnost/" rel="bookmark" title="ความลึกบิตของ Windows คืออะไร">ความลึกบิตของ Windows คืออะไร</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/processors/avtomatizaciya-s-poster-effektivnoe-reshenie-dlya-malogo-i-srednego-biznesa-poster/" rel="bookmark" title="โปสเตอร์บัญชีมืออาชีพ ราคาและการติดตั้ง"><img width="218" height="150" class="entry-thumb" src="/uploads/787a328ede9bada13659be671e29ae22.jpg" alt="โปสเตอร์บัญชีมืออาชีพ ราคาและการติดตั้ง" title="โปสเตอร์บัญชีมืออาชีพ ราคาและการติดตั้ง"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/processors/avtomatizaciya-s-poster-effektivnoe-reshenie-dlya-malogo-i-srednego-biznesa-poster/" rel="bookmark" title="โปสเตอร์บัญชีมืออาชีพ ราคาและการติดตั้ง">โปสเตอร์บัญชีมืออาชีพ ราคาและการติดตั้ง</a></h3> </div> </div> </div><div class="td-cust-row"> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/windows-7/luchshie-naushniki-s-aliexpress-luchshie-besprovodnye-bluetooth-naushniki-iz-kitaya-luchshie/" rel="bookmark" title="หูฟัง Bluetooth ไร้สายที่ดีที่สุดจากจีน หูฟังราคาถูกที่ดีที่สุดจาก aliexpress"><img width="218" height="150" class="entry-thumb" src="/uploads/ca302af2ac8b8ba888132a90f0d669b0.jpg" alt="หูฟัง Bluetooth ไร้สายที่ดีที่สุดจากจีน หูฟังราคาถูกที่ดีที่สุดจาก aliexpress" title="หูฟัง Bluetooth ไร้สายที่ดีที่สุดจากจีน หูฟังราคาถูกที่ดีที่สุดจาก aliexpress"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/windows-7/luchshie-naushniki-s-aliexpress-luchshie-besprovodnye-bluetooth-naushniki-iz-kitaya-luchshie/" rel="bookmark" title="หูฟัง Bluetooth ไร้สายที่ดีที่สุดจากจีน หูฟังราคาถูกที่ดีที่สุดจาก aliexpress">หูฟัง Bluetooth ไร้สายที่ดีที่สุดจากจีน หูฟังราคาถูกที่ดีที่สุดจาก aliexpress</a></h3> </div> </div> <div class="td-block-span12"> <div class="td_module_mx4 td_module_wrap td-animation-stack td-meta-info-hide"> <div class="td-module-image"> <div class="td-module-thumb"><a href="https://redcomrade.ru/th/monitors/otkryvaem-faily-cdw-chto-takoe-rasshirenie-faila-cwd-cdw-chem-otkryt/" rel="bookmark" title="ไฟล์นามสกุล CWD คืออะไร?"><img width="218" height="150" class="entry-thumb" src="/uploads/ab6af9869e684e98cbe29e95b56a2f7b.jpg" alt="ไฟล์นามสกุล CWD คืออะไร?" title="ไฟล์นามสกุล CWD คืออะไร?"/ loading=lazy loading=lazy></a></div> <a href="" class="td-post-category"></a> </div> <h3 class="entry-title td-module-title"><a href="https://redcomrade.ru/th/monitors/otkryvaem-faily-cdw-chto-takoe-rasshirenie-faila-cwd-cdw-chem-otkryt/" rel="bookmark" title="ไฟล์นามสกุล CWD คืออะไร?">ไฟล์นามสกุล CWD คืออะไร?</a></h3> </div> </div> </div></div></div> <div class="clearfix"></div><aside class="td_block_template_1 widget widget_text"> <div class="textwidget"> </div> </aside><aside class="td_block_template_1 widget widget_text"> <div class="textwidget"> </div> </aside> </div> </div> </div> </div> <div class="td-sub-footer-container td-container-wrap "> <div class="td-container"> <div class="td-pb-row"> <div class="td-pb-span td-sub-footer-menu"> </div> <div class="td-pb-span td-sub-footer-copy">ลิขสิทธิ์ 2024 - ซ่อมคอมพิวเตอร์และแล็ปท็อป การ์ดแสดงผล, ฮาร์ดไดรฟ์, อินเทอร์เน็ต, จอภาพ</div> </div> </div> </div> </div> <style type="text/css" media="screen"> /* custom css theme panel */ .td-post-header .entry-title { font-weight: normal !important; } h1.entry-title { font-weight: normal !important; border-bottom:#c44c4c 2px dotted; } h1.entry-title:before { content: "\f184"; font-family: "FontAwesome"; margin-right:10px; color:#c44c4c; } .sf-menu ul .td-menu-item > a:hover, .sf-menu ul .sfHover > a, .sf-menu ul .current-menu-ancestor > a, .sf-menu ul .current-category-ancestor > a, .sf-menu ul .current-menu-item > a { color: #edf3f7; } .td-post-content h2 { border-bottom:#c44c4c 2px dotted;} .td-post-content h2:before { content: "\f184"; font-family: "FontAwesome"; margin-right:10px; color:#c44c4c; } .td-post-content h3 { border-bottom:#c44c4c 2px dotted;} .td-post-content h3:before { content: "\f103"; font-family: "FontAwesome"; margin-right:10px; color:#c44c4c; } .category-my .td-page-title { color:#c44c4c; font-weight: 400; font-size: 36px; } .post header .entry-title { line-height: 40px; } .td-category-description h2, .td-category-description h3 { color:#c44c4c;} .td-category-description h2 { border-bottom:#c44c4c 2px solid;} .td-category-description h2:before { content: "\f055"; font-family: "FontAwesome"; margin-right:10px; color:#c44c4c; } .td-category-description h3 { border-bottom:#c44c4c 2px solid;} .td-category-description h3:before { content: "\f103"; font-family: "FontAwesome"; margin-right:10px; color:#c44c4c; } .td-category-description ol, .td-category-description ul { margin-top:20px !important; margin-bottom:20px !important;} .td-category-description ul, .td-post-content ul { padding:0; margin:0; list-style:none; clear:both;} .td-category-description ul li, .td-post-content ul li { padding:0 0 0 15px; margin:0 0 10px 35px; position:relative;} .td-category-description ul li:before, .td-post-content ul li:before { content: "\f192"; font-family: "FontAwesome"; color:#c44c4c; position:absolute; left:-10px;} .td-category-description ol, .td-post-content ol { padding:0; margin:0 0 0 5px; list-style:none; counter-reset: lipoint; clear:both;} .td-category-description ol li, .td-post-content ol li { padding:0 0 0 15px; margin:0 0 10px 35px; position:relative;} .td-category-description ol li:before, .td-post-content ol li:before { content: counter(lipoint); counter-increment: lipoint; color:#fff; position:absolute; left:-16px; background:#c44c4c; width:20px; height:20px; line-height:20px; text-align:center; -webkit-border-radius: 20px;border-radius: 20px; font-size:12px; top:3px;} .toc_list li:before { display:none} .td-header-style-9 .td-header-menu-wrap-full { /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#c44c4c+0,c10000+100 */ background: #c44c4c; /* Old browsers */ background: -moz-linear-gradient(top, #c44c4c 0%, #c10000 100%); /* FF3.6-15 */ background: -webkit-linear-gradient(top, #c44c4c 0%,#c10000 100%); /* Chrome10-25,Safari5.1-6 */ background: linear-gradient(to bottom, #c44c4c 0%,#c10000 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#c44c4c', endColorstr='#c10000',GradientType=0 ); /* IE6-9 */ } .sf-menu > li > a { color: #fff; } .td-header-style-9 .header-search-wrap .td-icon-search { color: #fff; } .td-affix a { color:#000 !important;} </style> <script type='text/javascript'> /* <![CDATA[ */ var tocplus = { "smooth_scroll":"1"} ; /* ]]> */ </script> <script type='text/javascript' src='https://redcomrade.ru/wp-content/plugins/table-of-contents-plus/front.min.js'></script> <script type='text/javascript' src='https://redcomrade.ru/wp-content/plugins/wp-postratings/js/postratings-js.js'></script> <script type='text/javascript' src='https://redcomrade.ru/wp-content/themes/Newspaper/js/tagdiv_theme.js'></script> <script type='text/javascript' src='/wp-includes/js/comment-reply.min.js'></script> <script type='text/javascript'> /* <![CDATA[ */ var boxzilla_options = { "testMode":"","boxes":[]} ; /* ]]> */ </script> <script type='text/javascript' src='https://redcomrade.ru/wp-content/plugins/boxzilla/assets/js/script.min.js'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js'></script> <script type='text/javascript' src='https://redcomrade.ru/wp-content/plugins/simple-lightbox/client/js/prod/lib.core.js'></script> <script type='text/javascript' src='https://redcomrade.ru/wp-content/plugins/simple-lightbox/client/js/prod/lib.view.js'></script> <script type='text/javascript' src='https://redcomrade.ru/wp-content/plugins/simple-lightbox/themes/baseline/js/prod/client.js'></script> <script type='text/javascript' src='/assets/client1.js'></script> <script type='text/javascript' src='https://redcomrade.ru/wp-content/plugins/simple-lightbox/template-tags/item/js/prod/tag.item.js'></script> <script type='text/javascript' src='https://redcomrade.ru/wp-content/plugins/simple-lightbox/template-tags/ui/js/prod/tag.ui.js'></script> <script type='text/javascript' src='https://redcomrade.ru/wp-content/plugins/simple-lightbox/content-handlers/image/js/prod/handler.image.js'></script> <script> (function(){ var html_jquery_obj = jQuery('html'); if (html_jquery_obj.length && (html_jquery_obj.is('.ie8') || html_jquery_obj.is('.ie9'))) { var path = '/wp-content/themes/Newspaper/style.css'; jQuery.get(path, function(data) { var str_split_separator = '#td_css_split_separator'; var arr_splits = data.split(str_split_separator); var arr_length = arr_splits.length; if (arr_length > 1) { var dir_path = '/wp-content/themes/Newspaper'; var splited_css = ''; for (var i = 0; i < arr_length; i++) { if (i > 0) { arr_splits[i] = str_split_separator + ' ' + arr_splits[i]; } //jQuery('head').append('<style>' + arr_splits[i] + '</style>'); var formated_str = arr_splits[i].replace(/\surl\(\'(?!data\:)/gi, function regex_function(str) { return ' url(\'' + dir_path + '/' + str.replace(/url\(\'/gi, '').replace(/^\s+|\s+$/gm,''); } ); splited_css += "<style>" + formated_str + "</style>"; } var td_theme_css = jQuery('link#td-theme-css'); if (td_theme_css.length) { td_theme_css.after(splited_css); } } } ); } } )(); </script> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="https://www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><br> <br> </body> </html>