XML Tutorial

XML หน้าแรก บทนำ XML XML วิธีใช้งาน XML Tree ไวยากรณ์ XML องค์ประกอบ XML คุณสมบัติ XML XML เนมสเปซ จอแสดงผล XML XML HttpRequest XML Parser XML DOM XML XPath XML XSLT XML XQuery XML XLink เครื่องมือตรวจสอบ XML XML DTD XML Schema XML Server ตัวอย่าง XML แบบทดสอบ XML ใบรับรอง XML

XML AJAX

บทนำ AJAX AJAX XMLHttp คำขอ AJAX การตอบสนอง AJAX ไฟล์ AJAX XML AJAX PHP AJAX ASP ฐานข้อมูล AJAX แอปพลิเคชัน AJAX ตัวอย่าง AJAX

XML DOM

บทนำ DOM โหนด DOM การเข้าถึง DOM ข้อมูลโหนด DOM รายการโหนด DOM DOM Traversing การนำทาง DOM DOM รับค่า DOM เปลี่ยนโหนด DOM ลบโหนด DOM แทนที่โหนด DOM สร้างโหนด DOM เพิ่มโหนด DOM โคลนโหนด ตัวอย่าง DOM

บทช่วย สอนXPath

บทนำ XPath โหนด XPath ไวยากรณ์ XPath แกน XPath ตัวดำเนินการ XPath ตัวอย่าง XPath

กวดวิชาXSLT

บทนำ XSLT ภาษา XSL การแปลง XSLT XSLT <แม่แบบ> XSLT <ค่าของ> XSLT <for-each> XSLT <sort> XSLT <if> XSLT <เลือก> ใช้ XSLT XSLT บนไคลเอนต์ XSLT บนเซิร์ฟเวอร์ XSLT แก้ไข XML ตัวอย่าง XSLT

กวดวิชาXQuery

บทนำ XQuery ตัวอย่าง XQuery XQuery FLWOR XQuery HTML ข้อกำหนด XQuery ไวยากรณ์ XQuery XQuery เพิ่ม XQuery Select ฟังก์ชัน XQuery

XML DTD

บทนำ DTD บล็อกตัวต่อ DTD องค์ประกอบ DTD คุณสมบัติ DTD องค์ประกอบ DTD เทียบกับ Attr หน่วยงาน DTD ตัวอย่าง DTD

ส คีมา XSD

บทนำ XSD XSD วิธีการ XSD <schema> องค์ประกอบ XSD แอตทริบิวต์ XSD ข้อจำกัด XSD

XSD Complex

องค์ประกอบ XSD XSD ว่างเปล่า องค์ประกอบ XSD เท่านั้น XSD Text เท่านั้น XSD ผสม ตัวชี้วัด XSD XSD <ใด ๆ> XSD <anyAttribute> การทดแทน XSD XSD ตัวอย่าง

ข้อมูลXSD

XSD สตริง วันที่ XSD XSD ตัวเลข XSD เบ็ดเตล็ด ข้อมูลอ้างอิง XSD

บริการเว็บ

XML Services XML WSDL XML SOAP XML RDF XML RSS

อ้างอิง

ประเภทโหนด DOM โหนด DOM DOM NodeList DOM NamedNodeMap เอกสาร DOM องค์ประกอบ DOM แอตทริบิวต์ DOM ข้อความ DOM DOM CDATA ความคิดเห็นของ DOM DOM XMLHttpRequest DOM Parser องค์ประกอบ XSLT ฟังก์ชัน XSLT/XPath

องค์ประกอบ XML กับแอตทริบิวต์


ใน XML ไม่มีกฎว่าเมื่อใดควรใช้แอตทริบิวต์ และเมื่อใดควรใช้องค์ประกอบย่อย


การใช้องค์ประกอบกับคุณสมบัติ

ข้อมูลสามารถเก็บไว้ในองค์ประกอบย่อยหรือในแอตทริบิวต์

ดูตัวอย่างเหล่านี้:

<person sex="female">
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

<person>
  <sex>female</sex>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

ในตัวอย่างแรกเพศเป็นคุณลักษณะ สุดท้ายแล้ว เพศเป็นองค์ประกอบของเด็ก ทั้งสองตัวอย่างให้ข้อมูลเหมือนกัน

ไม่มีกฎเกณฑ์ว่าเมื่อใดควรใช้แอตทริบิวต์และเมื่อใดควรใช้องค์ประกอบย่อย ประสบการณ์ของฉันคือแอตทริบิวต์มีประโยชน์ใน HTML แต่ใน XML คุณควรพยายามหลีกเลี่ยง ใช้องค์ประกอบย่อยหากข้อมูลรู้สึกเหมือนเป็นข้อมูล


วิธีโปรดของฉัน

ฉันชอบเก็บข้อมูลในองค์ประกอบย่อย

เอกสาร XML สามรายการต่อไปนี้มีข้อมูลเหมือนกันทุกประการ:

แอตทริบิวต์ date ถูกใช้ในตัวอย่างแรก:

<note date="12/11/2002">
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

องค์ประกอบวันที่ถูกใช้ในตัวอย่างที่สอง:

<note>
  <date>12/11/2002</date>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

องค์ประกอบวันที่ขยายใช้ในองค์ประกอบที่สาม: (นี่คือรายการโปรดของฉัน):

<note>
  <date>
    <day>12</day>
    <month>11</month>
    <year>2002</year>
  </date>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>


หลีกเลี่ยงการใช้แอตทริบิวต์?

คุณควรหลีกเลี่ยงการใช้แอตทริบิวต์หรือไม่

ปัญหาบางประการเกี่ยวกับแอตทริบิวต์คือ:

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

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

อย่าจบลงแบบนี้ (นี่ไม่ใช่วิธีที่ควรใช้ XML):

<note day="12" month="11" year="2002"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note>

ข้อยกเว้นกฎแอตทริบิวต์ของฉัน

กฎมีข้อยกเว้นเสมอ

กฎของฉันเกี่ยวกับแอตทริบิวต์มีข้อยกเว้นหนึ่งข้อ:

บางครั้งฉันกำหนดการอ้างอิง ID ให้กับองค์ประกอบ การอ้างอิง ID เหล่านี้สามารถใช้เพื่อเข้าถึงองค์ประกอบ XML ในลักษณะเดียวกับแอตทริบิวต์ NAME หรือ ID ใน HTML ตัวอย่างนี้แสดงให้เห็นสิ่งนี้:

<messages>
<note id="p501">
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

<note id="p502">
  <to>Jani</to>
  <from>Tove</from>
  <heading>Re: Reminder</heading>
  <body>I will not!</body>
</note>
</messages>

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

สิ่งที่ฉันพยายามจะพูดที่นี่คือ metadata (ข้อมูลเกี่ยวกับข้อมูล) ควรจัดเก็บเป็นแอตทริบิวต์ และข้อมูลนั้นควรจัดเก็บเป็นองค์ประกอบ