« مروري بر DTD | صفحه اصلی | يك كد javascript كوچك »
ادامه مروري بر DTD
November 4, 2007 03:42 PM
Element ها در DTD
سينتكس Elements
در DTD با سينتكس زير element ها تعريف مي شوند:
سينتكس Elements
در DTD با سينتكس زير element ها تعريف مي شوند:
<!ELEMENT element-name category>
يا
<!ELEMENT element-name (element-content)>
يا
<!ELEMENT element-name (element-content)>
Empty Elements
در اين نوع Element ها category برابر EMPTY مقداردهي مي شود:
در اين نوع Element ها category برابر EMPTY مقداردهي مي شود:
<!ELEMENT element-name EMPTY>
مثال:
<!ELEMENT br EMPTY>
مثال:
<!ELEMENT br EMPTY>
در XML با توجه به اين DTD تعريف br بايد چنين باشد:
<br />
Element هاي با Parsed Character Data
<!ELEMENT element-name (#PCDATA)>
Element هاي با هر محتوا
مي توانند هر تركيبي از داده هاي قابل پارس را بپذيرند:
مي توانند هر تركيبي از داده هاي قابل پارس را بپذيرند:
<!ELEMENT element-name ANY>
Element هاي داراي فرزند
<!ELEMENT element-name (child1)>
يا
<!ELEMENT element-name (child1,child2,…)>
مثال:
<!ELEMENT note (to,from,heading,body)>
يا
<!ELEMENT element-name (child1,child2,…)>
مثال:
<!ELEMENT note (to,from,heading,body)>
فرزندان به همان ترتيبي كه در تعريف آمده اند بايد در سند XML ظاهر شوند.
فرزندان خود مي توانند داراي فرزند باشند.
تعداد element هاي ممكن
در مثال هاي ذكر شده تا به حال تنها مي توان يك عدد از element را در XML قرار داد.
اگر بخواهيم كه تعداد تكرار يك element را مشخص نماييم از اين فرمت ها استفاده مي نماييم:
+ براي يك يا چند ،مثل
فرزندان خود مي توانند داراي فرزند باشند.
تعداد element هاي ممكن
در مثال هاي ذكر شده تا به حال تنها مي توان يك عدد از element را در XML قرار داد.
اگر بخواهيم كه تعداد تكرار يك element را مشخص نماييم از اين فرمت ها استفاده مي نماييم:
+ براي يك يا چند ،مثل
<!ELEMENT element-name (child-name+)>
* براي صفر يا چند ، مثل
<!ELEMENT element-name (child-name*)>
? براي صفر يا يك ، مثل
<!ELEMENT element-name (child-name?)>
محتواي دو حالتي
تعريف زير اشاره دارد به اينكه note element داراي يك to، يك from و يك header است، به علاوه يكي از عناصر message يا body (يا message يا body)
تعريف زير اشاره دارد به اينكه note element داراي يك to، يك from و يك header است، به علاوه يكي از عناصر message يا body (يا message يا body)
<!ELEMENT note (to,from,header,(message|body))>
محتواي تركيبي
تعريف زير اشاره دارد به اينكه note element داراي صفر يا چند تكرار از Parsed Character data، to، from، header يا message است.
تعريف زير اشاره دارد به اينكه note element داراي صفر يا چند تكرار از Parsed Character data، to، from، header يا message است.
<!ELEMENT note (#PCDATA|to|from|header|message)*>
Attribute ها در DTD
در DTD تعريف attribute ها با عبارت ATTLIST انجام مي شود. سينتكس آن بدين شكل است:
در DTD تعريف attribute ها با عبارت ATTLIST انجام مي شود. سينتكس آن بدين شكل است:
<!ATTLIST element-name attribute-name attribute-type default-value>
مثل
<!ATTLIST payment type CDATA "check">
مثل
<!ATTLIST payment type CDATA "check">
كه در XML بدين شكل بايد پياده شود:
<payment type="check" />
لازم به ذكر است كه لازم نيست در سند XML حتما مقدار attribute را مساوي با defalt-value قرار دهيم. بلكه هر مقدار معتبري مطابق با type مشخص شده مي تواند باشد. ولي اگر مقداري به آن نسبت داده نشده باشد، مقدار آن برابر با default-value مي گردد.
به جاي default-value و نه همراه با آن، از سه عبارت REQUIRED# و IMPLIED# و FIXED value# هم مي توانيد استفاده كنيد. در ادامه اين سه مورد معرفي مي شوند.
REQUIRED#
عبارت #REQUIRED مشخص مي كند كه attribute وجودش در عنصر مربوطه الزامي است. مثل
به جاي default-value و نه همراه با آن، از سه عبارت REQUIRED# و IMPLIED# و FIXED value# هم مي توانيد استفاده كنيد. در ادامه اين سه مورد معرفي مي شوند.
REQUIRED#
عبارت #REQUIRED مشخص مي كند كه attribute وجودش در عنصر مربوطه الزامي است. مثل
<!ATTLIST person number CDATA #REQUIRED>
از REQUIRED# وقتي استفاده نماييد كه مقداري بعنوان مقدار پيش فرض نداريد، اما در عين حال مي خواهيد كه حتما اين attribute وجود داشته باشد.
IMPLIED#
از IMPLIED# وقتي استفاده كنيد كه مقداري بعنوان default نداريد و همچنين الزامي هم در وجود اين attribute وجود ندارد. مثال:
IMPLIED#
از IMPLIED# وقتي استفاده كنيد كه مقداري بعنوان default نداريد و همچنين الزامي هم در وجود اين attribute وجود ندارد. مثال:
<!ATTLIST contact fax CDATA #IMPLIED>
FIXED value#
از اين عبارت وقتي استفاده كنيد كه مي خواهيد attribute يك مقدار مشخص داشته باشد و نويسنده XML نتواند چيز ديگري به جاي آن بنويسد. اگر نويسنده چيز ديگري بنويسد، پارسر XML خطا برميگرداند. مثال:
از اين عبارت وقتي استفاده كنيد كه مي خواهيد attribute يك مقدار مشخص داشته باشد و نويسنده XML نتواند چيز ديگري به جاي آن بنويسد. اگر نويسنده چيز ديگري بنويسد، پارسر XML خطا برميگرداند. مثال:
<!ATTLIST sender company CDATA #FIXED "Microsoft">
Attribute هاي داراي مقداير Enumerated
وقتي كه attribute مقادير مشخصي را مي تواند بپذيرد، اين مقادير در قسمت attribute-type تعريف مي شوند. مثال:
وقتي كه attribute مقادير مشخصي را مي تواند بپذيرد، اين مقادير در قسمت attribute-type تعريف مي شوند. مثال:
<!ATTLIST payment type (check|cash) "cash">
لازم به ذكر است كه attribute-type علاوه بر CDATAو enumerated عبارات ديگري را نيز مي تواند بپذيرد. از جمله ID، IDREF، IDREFS، NMTOKEN، NMTOKENS، ENTITY، ENTITIES، NOTATION و xml. براي آشنايي بيشتر با اين موارد به ساير منابع موجود در ارتباط با DTD از جمله مرجع اين نوشته رجوع نماييد:
ENTITY ها در DTD
Entity ها متغيرهايي هستند كه بعنوان shortcut براي برخي متون يا كاراكترهاي ديگر به كار مي روند. Entity به دو صورت internal و external قابل تعريف است.
تعريف Entity بصورت internal
سينتكس:
ENTITY ها در DTD
Entity ها متغيرهايي هستند كه بعنوان shortcut براي برخي متون يا كاراكترهاي ديگر به كار مي روند. Entity به دو صورت internal و external قابل تعريف است.
تعريف Entity بصورت internal
سينتكس:
<!ENTITY entity-name "entity-value">
مثال:
<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright W3Schools.">
مثال:
<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright W3Schools.">
و نحوه استفاده آنها در XML بدين صورت است:
<author>&writer;©right;</author>
توجه كنيد كه قبل از نام entity كاراكتر "&" و بعد از آن ";" مي آيد.
تعريف Entity بصورت external
سينتكس:
تعريف Entity بصورت external
سينتكس:
<!ENTITY entity-name SYSTEM "filename/URL">
مثال:
<!ENTITY writer SYSTEM "http://www.w3schools.com/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3schools.com/entities.dtd">
مثال:
<!ENTITY writer SYSTEM "http://www.w3schools.com/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3schools.com/entities.dtd">
نحوه استفاده از external entity مانند internal است.
نظرخواهی