همراه هر سند در زبان XML باید یک ساختار بنام شِما باشد. هدف این شِما اعتبارسنجی برای سندXML است، سندی را اصطلاحاً معتبر و یا خوشفرم میگویند که با شِمای خود مطابقت کند. از مهمترین ویژگیهای XML این است که ساختیافته نیست، یعنی الزامی وجود ندارد که شِمای یک سند XML مشخص باشد زیرا خود- تعریف است. با این حال برای تبادل دادههای XML، به خصوص در تفسیر دادههای دریافتی، شِما اهمیت زیادی خواهد داشت. اصولاً شِمای یک سند را میتوان به دو صورت زیر تعریف کرد:
• مبتنی بر گرامر ، که بر اساس یکسری از علائم تعریف میشود.
• ساختار درختی ، که این ساختار شبیه به درخت DOM است.
دو مکانیزم اصلی تعریف شِما در XML عبارتند از:
۱٫ Document Type Definition (DTD) ، که بسیار رایج و مرسوم است.
۲٫ XML Schema ، که جدیدتر و پیچیدهتر از DTD میباشد.
در DTD ساختار و شمای XML را از نظر المانهای موجود، صفات و زیرالمانهای هر المان مشخص مینمائیم اما هیچ محدودیتی راجع به نوع دادهها تعیین نمیکنیم زیرا در XML تمام مقادیر از نوع رشته میباشند. شکل کلی DTD برای تعیین ساختار المانها به صورت زیر است:
<! ELEMENT element_name (subelements_specification)>
که در آن element_name نام المان یا همان بر چسب مربوط به المان را نشان میدهد و درون پرانتز، لیست نام زیرالمانهای آن که با یک کاما از هم جدا میشوند مشخص میگردد. در بخش subelements_specification به جای نام زیر المانها، میتوان از کلمه کلیدی #PCDATA که معرف رشته کارکتری بودن مقدار آن المان است (که برای همه المانهای دارای مقدار، اینگونه خواهد بود)، استفاده کرد یا از EMPTY و یا ANY به ترتیب به معنای “فاقد زیر المان” و “هر چیزی به عنوان زیر المان”.
اصول نگارشی در DTD شبیه به عبارات منظم است، لذا میتوان تعداد دفعاتی که چنین المانی میتواند در المان خارجیتر خود وجود داشته باشد را نیز نشان داد. نمادهای زیر را میتوان با توجه به مفهوم آنها در بخش subelements_specification بکار برد:
| : یای انتخابی
+ : یک یا بیشتر
* : صفر یا بیشتر
برای مثال در زیر یک قسمت از یک DTD آورده شده است:
<! ELEMENT edu (book*)>
<! ELEMENT book (title, authors+, chapter*, ref*, CD*)>
<! ELEMENT chapter (text | section)*>
<! ELEMENT ref book>
<! ELEMENT title #PCDATA>
<! ELEMENT author #PCDATA>
<! ELEMENT section #PCDATA>
<! ELEMENT text #PCDATA>
برای تعیین ساختار صفتها از شکل کلی زیر استفاده میشود:
<! ATTLIST element_name (attributes_specification)>
attributes_specification شامل نام و نوع صفت مورد نظر میباشد. نوع صفت یا CDATA است یا یکی از این سه مقدار ID ، IDREF ، IDREFS .
به عنوان مثال در زیر نمونهای از یک ساختار صفت نشان داده شده است.
<! ATTLIST price CDATA “$ 37.0”>
XML Schema روش جدیدی است که W3C منتشر کرده است. اصول نگارشی آن تا حد زیادی شبیه به کدنویسی به زبان XML است. این روش که مشکلات روش DTD را رفع میکند، بسیار پیچیدهتر از آن میباشد، به گونهای که هنوز به طور رایج از آن استفاده نمیشود. مهمترین امکانات تعبیه شده در XML Schema عبارتند از:
• مقادیر میتوانند انواعی مثل string ، integer و … داشته باشند.
• میتوان حداقل و حداکثر مقدار را نیز تعیین نمود.
• کاربر میتواند انواع داده مورد نظر خود را تعریف نماید.
• بر خلاف DTD، شکل کلی خودش نیز با XML مشخص میشود.
شکل نمونهای از یک شمای XML که با این متدولوژی ایجاد شده است را نشان میدهد.