عناصر (DTD Elements)
اینجا با «عنصر (Element)» در DTD آشنا می شویم. عنصر همان تگِ اصلی است. DTD با اعلان «ELEMENT!» شکل و محتوای مجاز عنصر را تعریف می کند. مثل قانون مدرسه که می گوید هر کلاس چه نیمکت هایی دارد.
اعلان عنصر (ELEMENT)
در DTD، عنصرها با دستور <!ELEMENT> تعریف می شوند. یا یک «دسته بندی» کلی می دهیم یا جزئیاتِ محتوا.
<!ELEMENT element-name category>
<!-- or -->
<!ELEMENT element-name (element-content)>
عنصر تهی (EMPTY)
اگر عنصر هیچ محتوایی ندارد، از کلمه EMPTY استفاده کن؛ مثل br.
<!ELEMENT element-name EMPTY>
<!ELEMENT br EMPTY>
<br />
عنصرِ فقط متنِ قابل تحلیل (#PCDATA)
پی سی دیتا (PCDATA) یعنی متن معمولی که پارسر آن را می فهمد و موجودیت ها را گسترش می دهد.
<!ELEMENT element-name (#PCDATA)>
<!ELEMENT from (#PCDATA)>
هر محتوایی (ANY)
کلمه ANY یعنی این عنصر می تواند هر نوع محتوای قابل تحلیل داشته باشد.
<!ELEMENT element-name ANY>
<!ELEMENT note ANY>
عنصر با فرزندها (توالی)
اگر عنصر فرزند دارد، نام فرزندها را داخل پرانتز می آوریم. جداکننده توالی، ویرگول است.
<!ELEMENT element-name (child1)>
<!ELEMENT element-name (child1,child2,...)>
<!ELEMENT note (to,from,heading,body)>
در اعلان کامل، باید خود فرزندها هم تعریف شوند.
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
تعداد وقوع ها (+,*,?)
با این عملگرها تعداد مجاز تکرار را تعیین کن؛ مثل قانون حضور در کلاس.
<!ELEMENT element-name (child-name)>
<!ELEMENT note (message)>
<!-- دقیقاً یک بار -->
<!ELEMENT element-name (child-name+)>
<!ELEMENT note (message+)>
<!-- یک بار یا بیشتر -->
<!ELEMENT element-name (child-name*)>
<!ELEMENT note (message*)>
<!-- صفر یا بیشتر -->
<!ELEMENT element-name (child-name?)>
<!ELEMENT note (message?)>
<!-- صفر یا یک بار -->
انتخاب یکی از چندتا (|)
علامت | یعنی «یا». یکی از گزینه های داخل پرانتز باید بیاید.
<!ELEMENT note (to,from,header,(message|body))>
محتوای ترکیبی (Mixed)
وقتی متن و تگ ها قاطی هستند، از الگوی mixed استفاده کن. ستاره یعنی تکرار آزاد.
<!ELEMENT note (#PCDATA|to|from|header|message)*>
گام های عملی
- نام عنصرها و ترتیب شان را لیست کن.
- نوع محتوا: EMPTY، #PCDATA، ANY یا فرزندها را تعیین کن.
- وقوع ها را با +، * یا ? مشخص کن.
- در صورت نیاز، الگوی mixed یا | را بنویس.
نکته: ترتیب در توالیِ فرزندها مهم است. کاما یعنی همین ترتیب باید رعایت شود.
مطالب مرتبط: بلوک های سازنده DTD · صفات در DTD · مقدمه DTD.
جمع بندی سریع
- <!ELEMENT> قانون محتوای عنصر را می نویسد.
- EMPTY یعنی بدون محتوا؛ #PCDATA یعنی متنِ معمولی.
- ANY یعنی هر محتوای قابل تحلیل مجاز است.
- +، *، ? تعداد وقوع را کنترل می کنند.
- | برای انتخاب یکی از چند گزینه است.