ใน XML มีกฎระเบียบที่เกี่ยวกับเมื่อใช้แอตทริบิวต์และเมื่อใช้องค์ประกอบไม่มีบุตร
การใช้องค์ประกอบกับแอตทริบิวต์
ข้อมูลที่สามารถเก็บไว้ในองค์ประกอบของเด็กหรือคุณลักษณะ
ลองดูตัวอย่างต่อไปนี้:
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
ในตัวอย่างมีเซ็กซ์ครั้งแรกเป็นคุณลักษณะ ในช่วงเพศเป็นองค์ประกอบของเด็ก ตัวอย่างทั้งสองให้ข้อมูลเดียวกัน
มีกฎระเบียบที่เกี่ยวกับเมื่อใช้แอตทริบิวต์และเมื่อจะใช้องค์ประกอบของเด็กไม่มี ประสบการณ์ของฉันที่แอตทริบิวต์ที่มีประโยชน์ในรูปแบบ HTML แต่ใน XML คุณควรพยายามหลีกเลี่ยงพวกเขา ใช้องค์ประกอบของเด็กหากข้อมูลที่ให้ความรู้สึกเหมือนข้อมูล
วิธีที่ชื่นชอบของฉัน
I like to store data in child elements.
ต่อไปนี้สามเอกสาร XML มีตรงข้อมูลเดียวกัน:
แอตทริบิวต์วันที่ถูกนำมาใช้ในตัวอย่างแรก:
<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>
องค์ประกอบการขยายตัววันที่ถูกนำมาใช้ในไตรมาสที่สาม: (THIS IS MY FAVORITE) :
<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>
หลีกเลี่ยงการใช้แอตทริบิวต์?
คุณควรหลีกเลี่ยงการใช้แอตทริบิวต์?
บางส่วนของปัญหาที่มีคุณลักษณะดังนี้
- คุณลักษณะที่ไม่สามารถมีค่าหลายค่า (child elements can)
- คุณลักษณะที่ไม่ได้ขยายได้อย่างง่ายดาย (for future changes)
- คุณลักษณะที่ไม่สามารถอธิบายโครงสร้าง (child elements can)
- คุณลักษณะที่มีมากขึ้นยากที่จะจัดการตามรหัสโปรแกรม
- ค่าแอตทริบิวต์ไม่สะดวกในการทดสอบกับเป็น DTD
หากคุณใช้แอตทริบิวต์เป็นภาชนะสำหรับข้อมูลคุณจะจบลงด้วยเอกสารที่ยากต่อการอ่านและการบำรุงรักษา พยายามที่จะใช้ elements ในการอธิบายข้อมูล ใช้แอตทริบิวต์เท่านั้นที่จะให้ข้อมูลที่ไม่เกี่ยวข้องกับข้อมูล
จะไม่จบลงเช่นนี้ (this is not how XML should be used) :
<note day="12" month="11" year="2002"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note>
ข้อยกเว้นแอตทริบิวต์ของฉัน
กฎมักจะมีข้อยกเว้น
กฎของฉันเกี่ยวกับคุณลักษณะที่มีข้อยกเว้น:
บางครั้งผมกำหนดอ้างอิง ID เพื่อองค์ประกอบ อ้างอิงรหัสเหล่านี้สามารถใช้ในการเข้าถึงองค์ประกอบ XML ในทางเดียวกันมากเป็นชื่อหรือรหัสแอตทริบิวต์ใน 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 และไม่ได้เป็นส่วนหนึ่งของข้อมูลที่บันทึกได้
สิ่งที่ฉันพยายามที่จะบอกว่าที่นี่เป็นที่ที่เมตาดาต้า (data about data) ควรจะเก็บไว้เป็นคุณลักษณะและข้อมูลที่ตัวเองควรจะเก็บไว้เป็นองค์ประกอบ