عناصر در برابر ویژگی ها (DTD Elements vs Attr)
در XML، داده را یا در «عنصر (Element)» می گذاریم یا در «ویژگی (Attribute)». عنصر مثل برگه دفتر است؛ ویژگی مثل برچسب روی جلد. معمولاً، وقتی چیزْ «خود داده» است، بهتر است عنصر باشد.
کِی عنصر؟ کِی ویژگی؟
قاعده قطعی وجود ندارد. اما برای داده اصلی، عنصر خواناتر است. ویژگی بیشتر برای فراداده است؛ یعنی اطلاعات درباره داده، نه خود داده.
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
نمونه ها: تاریخ به صورت ویژگی یا عنصر
هر سه نمونه، یک معنا دارند. اما سطحِ گسترش فرق می کند. گسترش بیشتر، انعطاف بیشتر می دهد.
<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 هم سخت تر است.
<note day="12" month="11" year="2002" to="Tove" from="Jani" heading="Reminder" body="Don't forget me this weekend!">
</note>
استثنا: شناسه ها و فراداده
برای شناسه یکتا، ویژگی مفید است. چون فراداده است؛ یعنی درباره داده توضیح می دهد، نه خود متن.
<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>
گام های تصمیم گیری سریع
- بپرس: این خود داده است یا فراداده؟
- اگر داده است، عنصر بساز.
- اگر برچسب/شناسه است، ویژگی انتخاب کن.
- آیا آینده نیاز به گسترش دارد؟ عنصر مناسب تر است.
نکته: برای اعتبارسنجیِ قوی تر، ساختار را با عناصر مدل کن و از ویژگی ها برای تگ گذاری سبک استفاده کن.
مطالب مرتبط: ویژگی ها در DTD · عناصر در DTD · بلوک های سازنده DTD · عناصر در برابر ویژگی ها.
جمع بندی سریع
- داده اصلی را عنصر کن.
- فراداده را ویژگی کن.
- برای گسترش آینده، عنصر بهتر است.
- شناسه یکتا را ویژگی بده.
- خوانایی همیشه مهم تر است.