مثال ها (DTD Examples)
اینجا سه نمونه عملی از «DTD (Document Type Definition)» می بینی. با دیدن این الگوها، ساختار سندها را بهتر درک می کنی و سریع تر تمرین می زنی.
برنامه تلویزیونی (TV Schedule DTD)
این DTD یک شبکه تلویزیونی را مدل می کند. «عنصر (Element)» واحد سازنده است. «ویژگی (Attribute)» توضیح اضافه می دهد.
<!DOCTYPE TVSCHEDULE [>
<!ELEMENT TVSCHEDULE (CHANNEL+)>
<!ELEMENT CHANNEL (BANNER,DAY+)>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
<!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT DESCRIPTION (#PCDATA)>
<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ATTLIST TITLE RATING CDATA #IMPLIED>
<!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>
]>
نکته: علامت «+» یعنی یک بار یا بیشتر. علامت «?» یعنی اختیاری.
مقاله روزنامه (Newspaper Article DTD)
اینجا عناصر خبر مثل «سرتیتر» و «بدنه» تعریف شده اند. همچنین «موجودیت (Entity)» برای متن های ثابت استفاده شده است.
<!DOCTYPE NEWSPAPER [>
<!ELEMENT NEWSPAPER (ARTICLE+)>
<!ELEMENT ARTICLE (HEADLINE,BYLINE,LEAD,BODY,NOTES)>
<!ELEMENT HEADLINE (#PCDATA)>
<!ELEMENT BYLINE (#PCDATA)>
<!ELEMENT LEAD (#PCDATA)>
<!ELEMENT BODY (#PCDATA)>
<!ELEMENT NOTES (#PCDATA)>
<!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED>
<!ATTLIST ARTICLE EDITOR CDATA #IMPLIED>
<!ATTLIST ARTICLE DATE CDATA #IMPLIED>
<!ATTLIST ARTICLE EDITION CDATA #IMPLIED>
<!ENTITY NEWSPAPER "Vervet Logic Times">
<!ENTITY PUBLISHER "Vervet Logic Press">
<!ENTITY COPYRIGHT "Copyright 1998 Vervet Logic Press">
]>
نکته: «#REQUIRED» یعنی وجود ویژگی اجباری است. «#IMPLIED» یعنی اختیاری است.
کاتالوگ محصول (Product Catalog DTD)
در این مثال از «فهرست شده ها (Enumerations)» برای مقداردهی کنترل شده استفاده شده است. این کار کیفیت داده را بالا می برد.
<!DOCTYPE CATALOG [>
<!ENTITY AUTHOR "John Doe">
<!ENTITY COMPANY "JD Power Tools, Inc.">
<!ENTITY EMAIL "jd@jd-tools.com">
<!ELEMENT CATALOG (PRODUCT+)>
<!ELEMENT PRODUCT (SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
<!ATTLIST PRODUCT NAME CDATA #IMPLIED>
<!ATTLIST PRODUCT CATEGORY (HandTool|Table|Shop-Professional) "HandTool">
<!ATTLIST PRODUCT PARTNUM CDATA #IMPLIED>
<!ATTLIST PRODUCT PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago">
<!ATTLIST PRODUCT INVENTORY (InStock|Backordered|Discontinued) "InStock">
<!ELEMENT SPECIFICATIONS (#PCDATA)>
<!ATTLIST SPECIFICATIONS WEIGHT CDATA #IMPLIED>
<!ATTLIST SPECIFICATIONS POWER CDATA #IMPLIED>
<!ELEMENT OPTIONS (#PCDATA)>
<!ATTLIST OPTIONS FINISH (Metal|Polished|Matte) "Matte">
<!ATTLIST OPTIONS ADAPTER (Included|Optional|NotApplicable) "Included">
<!ATTLIST OPTIONS CASE (HardShell|Soft|NotApplicable) "HardShell">
<!ELEMENT PRICE (#PCDATA)>
<!ATTLIST PRICE MSRP CDATA #IMPLIED>
<!ATTLIST PRICE WHOLESALE CDATA #IMPLIED>
<!ATTLIST PRICE STREET CDATA #IMPLIED>
<!ATTLIST PRICE SHIPPING CDATA #IMPLIED>
<!ELEMENT NOTES (#PCDATA)>
]>
گام های تمرین سریع
- یک دامنه ساده انتخاب کن؛ مثل کتابخانه.
- عناصر را فهرست کن؛ مثل کتاب، نویسنده.
- روابط را به ترتیب در DTD تعریف کن.
هشدار: ترتیب فرزندان در توالی با کاما مهم است. جابجایی باعث خطا می شود.
مطالب مرتبط: عناصر (DTD Elements) · ویژگی ها (DTD Attributes) · موجودیت ها (DTD Entities).
جمع بندی سریع
- مثال ها الگوی DTD را روشن می کنند.
- از علائم + ? * درست استفاده کن.
- فهرست شده ها کیفیت داده را بالا می برند.
- ویژگی اجباری را با #REQUIRED مشخص کن.