في 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>
استثناء لبلدي سمة القاعدة
قواعد دائما استثناءات.
بلدي حكم حول سمات لها استثناء واحد:
أحيانا يمكنني تعيين مراجع معرف لعناصر. هذه المراجع معرف يمكن استخدامها للوصول إلى عناصر 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) يجب أن يتم تخزين كما السمات، ويجب أن يتم تخزين البيانات نفسها العناصر.