لیست Xsd از مقادیر ممکن. الگوهای طراحی XSD قرار دادن و مدیریت طرحواره ها

1. یک سند XML Shema حاوی انواع داده های داخلی در مورد هر موضوعی ایجاد کنید

نمایش سند در مرورگر

کار آزمایشگاهی №2

تعریف انواع داده ها و فضاهای نام ساده

هدف کار:

انواع داده ها و فضاهای نام ساده XMLShema را کاوش کنید

پیشرفت کار:

در طرحواره های XML، می توانید از انواع داخلی برای تعریف انواع عناصر ساده جدید به سه روش استفاده کنید. به عنوان وارد می شوند باریک شدن(محدودیت) از نوع ساده داخلی یا تعریف شده قبلی، فهرست(فهرست) یا انجمن(اتحاد) انواع ساده. یک نوع ساده توسط یک جزء طرحواره simpieType، که دارای فرم است، تعریف می شود

نوع تعریف

باریک شدن

یک نوع ساده باریک توسط یک جزء محدودیت تعریف می‌شود، که در آن ویژگی پایه نوع ساده را مشخص می‌کند و محتوا محدودیت‌هایی را مشخص می‌کند که نوع ساده تعریف‌شده را برجسته می‌کند. به عنوان مثال، کد پستی را می توان به صورت شش رقم عربی به صورت زیر تعریف کرد

راه دیگر برای تعریف Zip نوع ساده به عنوان یک عدد صحیح مثبت است که از 100000 تا 999999 متغیر است:

  • فهرست کنید

نوع لیست ساده نوعی عنصر است که در بدنه آن چندین مقدار از یک نوع ساده به تفکیک فاصله نوشته شده است. به عنوان مثال، یک سند XML ممکن است حاوی عنصر زیر باشد که حاوی لیستی از اعداد صحیح است:

21 34 55 4 6

یک لیست توسط یک جزء لیست تعریف می شود، که در آن ویژگی itemType نوع عناصر لیست را مشخص می کند. نوع عناصر لیست را نیز می توان در محتوای عنصر لیست تعیین کرد. به عنوان مثال، روز عنصر سند XML نشان داده شده در بالا را می توان در طرحی مانند این تعریف کرد:

و نوع listofinteger مورد استفاده در تعریف آن را به عنوان لیست تنظیم کنید

حداکثر از پنج عدد صحیح به شرح زیر:

· انجمن

یک نوع اتحادیه ساده توسط یک جزء اتحادیه تعریف می‌شود، که در آن ویژگی MemberTypes می‌تواند برای تعیین نام انواعی که باید ادغام شوند استفاده شود. به عنوان مثال:

راه دیگر نوشتن تعاریف انواع ساده موجود در اتحادیه در محتویات جزء اتحادیه است. به عنوان مثال:

یک محدودیت است که می تواند برای محدود کردن مجموعه مقادیر ممکن برای تقریباً هر نوع ساده استفاده شود.

فضاهای نام زبان XSD

نام عناصر و صفت مورد استفاده هنگام نوشتن طرحواره ها در فضای نام با شناسه http://www.w3.org/2001/XMLSchema تعریف می شوند. پیشوند نام هایی که به این فضا اشاره می کنند اغلب xs یا xsd نامیده می شوند.

شما می توانید این فضای نام را پیش فرض قرار دهید، اما سپس باید فضای نامی را برای انواع و عناصر تعریف شده در طرح مشخص کنید. برای راحتی چنین تعریفی، مفهوم فضای نام هدف(فضای نام هدف). شناسه فضای نام هدف توسط ویژگی targettiamespace تعیین می شود، به عنوان مثال:

لازم به ذکر است که تنها نام های جهانی، که توضیحات آن مستقیماً در عنصر طرحواره ریشه قرار دارند.

فضای نام استاندارد دیگری اغلب در طرحواره ها و اسناد XML استفاده می شود. توصیه زبان XSD چندین ویژگی را تعریف می کند:

نوع، صفر، schemaLocation، noNamespaceSchemaLocation که اعمال می شوند

نه تنها در نمودارها، بلکه مستقیماً در نمودارهایی که توسط این طرح ها توضیح داده شده است

اسناد XML فراخوانی شد نمونه هایی از مدارها(نمونه طرحواره XML). این ویژگی ها به فضای نام http://www.w3.org/2001/XMLSchema-instance اشاره دارد. این فضای نام اغلب پیشوند xsi داده می شود، به عنوان مثال:

xmins:xsi="http://www.w3.org/2001/XMLSchema-instance">

با انجام کارهای زیر یک سند XMLShema با انواع داده ها و فضای نام ساده ایجاد کنید:

  1. یک فایل جدید در ویرایشگر متن خود باز کنید و متن سند XMLShema را وارد کنید که لیست آن در زیر ارائه شده است.

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  1. از دستور Save ویرایشگر متن خود برای ذخیره سند در هارد دیسک خود استفاده کنید و نام آن را ProstTip.xsd بگذارید.
  2. فایل را در مرورگر خود باز کنید و آنچه در شکل 3.1 نشان داده شده است را دریافت خواهید کرد.

شکل 3.1

کار آزمایشگاهی شماره 3

روزی در زندگی هر تحلیلگر و برنامه نویسی فرا می رسد که از وجود قالب های طراحی طرحواره XML مطلع می شود و زندگی اش تغییر می کند. به عنوان مثال برای من، درک زیبایی طراحی با این دانش آغاز شد.

امروز می‌خواهم در مورد الگوهای طراحی XSD، مزایا و معایب هر کدام و اینکه چرا «باغ عدن» را برای وظایف خود انتخاب کردیم، صحبت کنم.

به عنوان مثال، اجازه دهید سند XML زیر را به عنوان منبع داده در نظر بگیریم.

100 پل اورلوف

اوگرشسکایا 2 مسکو 115088

و بیایید ببینیم چگونه می‌توانیم ساختار یکسان یک سند XML را به روش‌های مختلف توصیف کنیم.
اساس تقسیم بندی الگو، اصل تعریف عناصر کلی و/یا انواع داده در XSD است.

ماتریوشکا (عروسک روسی)


ماهیت الگو این است که طرح واره آینه ای از سند XML است که توصیف می کند: اگر عناصر پیچیده حاوی عناصر پیچیده دیگری باشند و به نوبه خود حاوی عناصر ساده باشند، در XSD توضیحات چنین عناصری در داخل قرار می گیرند. یکدیگر نام این الگو به افتخار عروسک ماتریوشکای ما که در جهان معروف است، با قیاس با نحوه کپسوله شدن عناصر فرزند در یک الگو در قالب‌های والد داده شده است.

نموداری که ساختار فایل منبع ما را با استفاده از الگوی Matryoshka توصیف می کند به این صورت است:


ویژگی های قالب:

  • عدم شفافیت محتوامحتویات یک XSD برای سایر طرحواره ها و حتی سایر بخش های همان طرحواره غیر شفاف است. در نتیجه، هیچ یک از انواع یا عناصر موجود در XSD قابل استفاده مجدد نیستند.
  • مناطق پنهاننواحی طرحواره ای که عناصر محلی در آنها تعریف شده اند («شهر» و «زیپ» در مثال) در عنصر ریشه («آدرس») محلی می شوند. در نتیجه، اگر elementFormDefault = "unqualified" را در طرح تنظیم کنید، فضاهای نام عنصر محلی ("City" و "Zip") در طرح پنهان می شوند.
  • استقلال.با این طراحی، هر جزء مدار مستقل است (یعنی با اجزای دیگر به هم متصل نیست). بنابراین، تغییرات در اجزای جداگانه تأثیر محدودی خواهد داشت. به عنوان مثال، اگر عنصر FlatNumber را به آدرس اضافه کنید، این به هیچ وجه بر سایر عناصر طرح تأثیر نخواهد گذاشت.
  • فشردگی.به لطف این طراحی، تمام داده های معنی دار در مدار به اجزای مستقل ترکیب می شوند، یعنی. اجزا جمع و جور هستند.

برش سالامی


ماهیت الگو این است که سند XML توصیف شده به عناصر مؤلفه تقسیم می شود که هر کدام در XSD به عنوان جهانی توصیف می شوند. سپس عناصر توصیف شده با هم ترکیب می شوند.

نموداری که ساختار فایل منبع را با استفاده از الگوی Salami توصیف می‌کند به این صورت است:


ویژگی های قالب:

  • شفافیت محتواهمه عناصر می توانند طرحواره های دیگر و همچنین سایر اجزای این XSD را ببینند.
  • جهانی بودناز آنجایی که تمام عناصر طرح به صورت سراسری اعلان می شوند، صرف نظر از مقدار elementFormDefault فضای نام طرحواره، کل مجموعه ویژگی ها در سند XML نشان داده می شوند (ممکن است برخی از آنها خالی باشند).
  • وابستگی متقابل.با این طراحی، عناصر پیچیده به قسمت های دیگر مدار اشاره می کنند، یعنی به آنها وابسته هستند. در نتیجه، تغییرات در اجزای جداگانه می تواند منجر به تغییرات گسترده در کل مدار شود.
  • فشردگی.

پرده ونیزی


ماهیت الگو این است که سند XML توصیف شده به انواع ترکیبی تقسیم می شود که هر کدام در XSD به عنوان جهانی توصیف می شوند. سپس یک عنصر ریشه، مربوط به نوع سراسری که طرحواره را به یکدیگر متصل می کند، اعلام می شود.

نموداری که ساختار فایل منبع را با استفاده از الگوی Venecia Blinds توصیف می کند، به این صورت است:


ویژگی های قالب:

  • شفافیت محتواانواع داده ها از طرحواره های دیگر قابل مشاهده هستند و برای اجزای این XSD نیز قابل مشاهده هستند.
  • حداکثر پنهان شدن ناماعلان‌های عنصر محلی هستند، بنابراین الگو حداکثر پتانسیل را برای پنهان کردن نام دارد.
  • به راحتی پنهان کردن ویژگی های خالی را کنترل کنید.اگر فضاهای نام پنهان هستند، نشان دادن یا عدم نمایش ویژگی های خالی در اسناد توسط یک سوئیچ، elementFormDefault کنترل می شود.
  • وابستگی متقابل.با این طراحی، انواع داده های پیچیده به سایر بخش های طرحواره ارجاع می دهند، یعنی به آنها وابسته هستند. در نتیجه، تغییرات در اجزای جداگانه می تواند منجر به تغییرات گسترده در کل مدار شود.
  • فشردگی.به لطف این طراحی، تمام داده های معنی دار در مدار به اجزای مستقل ترکیب می شوند، یعنی اجزا جمع و جور هستند.

باغ عدن


چیزی که در مورد Garden of Eden عالی است این است که هر عنصر و نوع داده ترکیبی را به عنوان جهانی تعریف می کند. این به شما اجازه می دهد تا به هر نوع یا عنصری در یک XSD یا هر XSD دیگر و حتی از WSDL ارجاع دهید. این تنها راه برای کنترل کامل معنایی هر دو نوع و عناصر است.

نموداری که ساختار فایل منبع را با استفاده از الگوی Garden of Eden توصیف می‌کند به شکل زیر است:


ویژگی های قالب:

  • حداکثر شفافیت محتواهر دو نوع و عناصر داده از طرحواره های دیگر قابل مشاهده هستند و همچنین برای اجزای این XSD قابل مشاهده هستند.
  • حداکثر افشای نامهیچ چیزی به صورت محلی تعریف نشده است، بنابراین قابلیت مشاهده نام ها حداکثر است.
  • وابستگی متقابل.با این طراحی، انواع داده ها و عناصر پیچیده به سایر بخش های طرحواره ارجاع می دهند، یعنی به آنها وابسته هستند. در نتیجه، تغییرات در اجزای جداگانه می تواند منجر به تغییرات گسترده در کل مدار شود.
  • حجیم.داده های مرتبط معنادار با تعریف نوع و عنصر "لکه دار" می شوند. "خواندن" چنین نموداری دشوارتر است.

یک الگو را انتخاب کنید

هنگام انتخاب یک الگو، مهم است که چندین معیار را در نظر بگیرید:
  1. تا چه حد امکان استفاده مجدد از اجزای مدار وجود دارد.
  2. کار با مدار چقدر آسان است.
  3. اجزای مدار تا چه حد باید به هم وابسته یا مستقل باشند؟

اغلب، هنگام انتخاب یک الگوی طراحی، باید توانایی استفاده مجدد از اجزای مدار و عمق اتصال بین اجزا را متعادل کنید. شکل، پتانسیل هر یک از قالب ها را در زمینه این دو جنبه نشان می دهد.

از طرف دیگر، آن دسته از طرح هایی که از استفاده مجدد از اجزا به خوبی پشتیبانی می کنند، دارای ارتباطات متقابل قوی بین اجزا هستند. اگر نیاز به تغییر چیزی در چنین طرحواره ای باشد، توسعه دهنده طرحواره ممکن است با این واقعیت مواجه شود که بسیاری از عناصر و/یا انواع مرتبط باید تغییر کنند. مدیریت چنین طرح هایی پس از آن دشوار است.

به طور کلی، قوانین زیر را برای انتخاب یک الگو می توان استخراج کرد:

  • اگر استفاده مجدد از مؤلفه های طرحواره ضروری نیست، اگر سهولت استفاده از XSD توسط توسعه دهندگان مهم تر است و نیازی به کنترل نام مؤلفه ها نیست، باید «Matryoshka» را انتخاب کنید.
  • اگر استفاده مجدد از مؤلفه‌ها مهم‌تر از راحتی توسعه‌دهنده است و نام عناصر داده باید در سراسر سیستم کنترل شود، باید Salami را انتخاب کرد.
  • اگر علاوه بر نکته قبلی، کنترل نام انواع داده ها و امکان استفاده مجدد از انواع داده ها مهم است، باید "باغ عدن" را انتخاب کنید.
  • "پرده های ونیز" در صورتی مناسب هستند که هم استفاده مجدد از اجزا و هم آزادی در تعریف نام محلی آنها (یا توانایی پنهان کردن آنها در مدار) مهم باشد.

مهمترین چیز برای ما در پروژه استفاده مجدد از انواع و عناصر طرحواره و در مرحله دوم کنترل معنایی کامل نام ها بود. انتخاب الگو واضح بود - باغ عدن.

یک انحراف غزلی کوچک. جالب ترین استفاده از الگوهای طراحی طرحواره XML که به یاد دارم هیپنوتیزم مخاطب بود و هنوز هم هست. یکی از تحلیلگران برنده جایزه ما دوست دارد با صحبت در مورد این موضوع ابتکار عمل را به دست بگیرد. زمانش را تنظیم کردم، بعد از 5 دقیقه چشمان شنوندگان تار شد و آنها در جایی دور در خودشان عقب نشینی کردند. در "باغ عدن" آگاهی اکثریت خاموش است.

و در پایان، می خواهم اضافه کنم که ترکیب قالب ها نیز امکان پذیر است، ما با آنها ملاقات کرده ایم.

منابع و منابع.

از محدودیت ها برای تعریف مقادیر قابل قبول برای عناصر یا ویژگی های XML استفاده می شود. محدودیت های موجود در عناصر XML نیز "وجوه" نامیده می شود.

محدودیت های ارزشی

سن"با یک محدودیت. این عنصر قرار است سن یک فرد را نشان دهد و سن یک فرد، همانطور که مشخص است، نمی تواند کمتر از 0 و بیشتر از 120 باشد:

محدودیت در مجموعه ارزش ها

برای محدود کردن محتوای یک عنصر XML به مجموعه خاصی از مقادیر قابل قبول، باید از جداکننده شمارش استفاده کنید.

مثال زیر عنصر " را تعریف می کند ماشینبا محدودیت. تنها مقادیر قابل قبول آن آئودی، گلف، بی‌ام‌و است:

مثال بالا را می توان به صورت زیر نیز نوشت:

در این مورد نوع " carType"می تواند توسط عناصر دیگر استفاده شود زیرا بخشی از عنصر نیست" ماشین".

محدودیت های سری ارزش

برای محدود کردن محتوای یک عنصر XML به یک سری اعداد یا حروف، باید از جداکننده الگو استفاده کنید.

مثال زیر عنصر " را تعریف می کند نامه" با یک محدودیت. تنها مقدار معتبر آن می تواند یک حرف کوچک در محدوده "a" تا "z" باشد:

مثال زیر یک عنصر "ابتدای" را با یک محدودیت تعریف می کند. تنها مقدار معتبر آن می تواند سه حرف بزرگ در محدوده "a" تا "z" باشد:

حروف اول" با یک محدودیت. تنها مقدار معتبر آن می تواند سه حرف کوچک یا بزرگ در محدوده "a" تا "z" باشد:

مثال زیر عنصر " را تعریف می کند انتخاب" با یک محدودیت. تنها مقدار معتبر آن می تواند یکی از سه حرف x، y یا z باشد:

مثال زیر عنصر " را تعریف می کند برنده" با یک محدودیت. تنها مقدار معتبر آن می تواند پنج رقم متوالی باشد و هر رقم باید در محدوده 0 تا 9 باشد:

محدودیت های دیگر در سری مقادیر

مثال زیر عنصر " را تعریف می کند نامه" با محدودیت. مقدار معتبر آن صفر یا بیشتر حروف کوچک در محدوده a تا z است:

مثال زیر نیز عنصر " را تعریف می کند نامه" با محدودیت. مقدار قابل قبول آن یک یا چند جفت حرف خواهد بود، که هر جفت حاوی یک حرف کوچک به دنبال آن یک حرف بزرگ است. به عنوان مثال، "sToP" با الگوی داده شده مطابقت دارد، و "Stop" یا "STOP" یا "ایست" نه:

مثال زیر عنصر " را تعریف می کند جنسیت"با یک محدودیت. مقدار قابل قبول آن فقط رشته خواهد بود" مرد "یا" زن ":

مثال زیر عنصر " را تعریف می کند رمز عبورمقدار آن باید رشته ای از 8 کاراکتر باشد و این کاراکترها می توانند حروف کوچک یا بزرگ از a تا z یا اعداد از 0 تا 9 باشند:

محدودیت فضای خالی

برای تعیین نحوه برخورد با کاراکترهای فضای خالی، از یک جداکننده استفاده می شود فضای سفید.

مثال زیر عنصر " را تعریف می کند آدرس whitespace روی "تنظیم شده است حفظ کند "، که به تجزیه کننده XML می گوید که هیچ کاراکتر فضای خالی را حذف نکند:

مثال زیر نیز عنصر " را تعریف می کند آدرس"با محدودیت. محدود کننده فضای سفیدتنظیم به " جایگزین کنید "، که به تجزیه کننده XML می گوید که تمام کاراکترهای فضای خالی (tab، space، feed line و carriage return) را با کاراکترهای فاصله جایگزین کند:

مثال زیر نیز عنصر " را تعریف می کند آدرس"با محدودیت. محدود کننده فضای سفیدتنظیم به " فروپاشی "، که به تجزیه کننده XML می گوید که همه کاراکترهای فضای خالی را حذف کند (کاراکترهای برگه، فاصله، تغذیه خط، بازگشت و فاصله انتهایی حذف شده و چندین فاصله با یک کاراکتر فاصله جایگزین می شود):

محدودیت های طول

برای محدود کردن طول مقدار یک عنصر، باید از جداکننده استفاده کنید طول, حداکثر طولو طول دقیقه.

مثال زیر عنصر " را تعریف می کند رمز عبور" با یک محدودیت. طول مقدار آن باید دقیقا 8 کاراکتر باشد:

مثال زیر عنصر دیگری را تعریف می کند " رمز عبور" با یک محدودیت. طول مقدار آن باید حداقل 5 و حداکثر 8 کاراکتر باشد:

محدودیت های نوع داده

محدود کنندهتوضیحات
شمارشلیستی از مقادیر قابل قبول را تعریف می کند
fractionDigitsحداکثر تعداد ارقام اعشار را تعیین می کند. باید مساوی یا بزرگتر از صفر باشد
طولتعداد دقیق کاراکترها یا اشیاء فهرست را مشخص می کند. باید مساوی یا بزرگتر از صفر باشد
maxExclusiveیک کران بالایی برای مقادیر عددی مشخص می کند (مقدار باید کمتر از مقدار مشخص شده در اینجا باشد)
maxInclusiveیک کران بالایی برای مقادیر عددی مشخص می کند (مقدار باید کمتر یا مساوی با مقدار مشخص شده در اینجا باشد)
حداکثر طولحداکثر تعداد کاراکترها یا اشیاء فهرست را مشخص می کند. باید مساوی یا بزرگتر از صفر باشد
من انحصاریکران پایین را برای مقادیر عددی تعریف می کند (مقدار باید بزرگتر از مقدار مشخص شده در اینجا باشد)
minInclusiveیک کران پایین برای مقادیر عددی مشخص می کند (مقدار باید بزرگتر یا مساوی با مقدار مشخص شده در اینجا باشد)
طول دقیقهحداقل تعداد کاراکترها یا اشیاء لیست را مشخص می کند. باید مساوی یا بزرگتر از صفر باشد
الگویتوالی دقیق شخصیت های قابل قبول را مشخص می کند
totalDigitsتعداد دقیق ارقام معتبر را مشخص می کند. باید بزرگتر از صفر باشد
فضای سفیدنحوه استفاده از کاراکترهای فضای خالی را مشخص می کند

XSDزبانی برای توصیف ساختار یک سند XML است. به آن طرحواره XML نیز می گویند. هنگام استفاده از طرحواره XML، یک تجزیه کننده XML می تواند نه تنها نحو صحیح یک سند XML، بلکه ساختار، مدل محتوا و انواع داده های آن را نیز بررسی کند.

این رویکرد به زبان های برنامه نویسی شی گرا اجازه می دهد تا به راحتی اشیاء را در حافظه ایجاد کنند، که بدون شک راحت تر از تجزیه XML به عنوان یک فایل متنی معمولی است.

علاوه بر این، XSD قابل توسعه است و به شما اجازه می دهد تا دیکشنری های آماده را برای توصیف وظایف معمولی، به عنوان مثال سرویس های وب مانند SOAP، متصل کنید.

همچنین لازم به ذکر است که XSD دارای ابزارهای مستندسازی داخلی است که به شما امکان می دهد اسناد خود را ایجاد کنید که نیازی به توضیحات اضافی ندارند.

بیایید، به عنوان مثال، یک سند XSD را در نظر بگیریم که بخشی از ساختار حساب در Habré را توصیف می کند.

من متن طرحواره XSD و سند XML مربوط به این طرحواره را به دلیل اندازه آنها در مقاله درج نکردم.

خط اول نمودار نشان می دهد که سند است سند XMLو از رمزگذاری UTF-8 استفاده می کند.


خط بعدی شرح عنصر اصلی سند را آغاز می کند - habra_user.
< xs:element name ="habra_user" >
خطوط مستند کننده عنصر:
< xs:annotation >
< xs:documentation >عنصر اصلی طرح. یک کاربر habr را توصیف می کند

برچسب بزنید یک نوع داده "پیچیده" را توصیف می کند user_name. در صورت تمایل، می توان آن را به عنوان یک نوع داده جداگانه، با قیاس با contact_info. برای این کار به یک بلوک نیاز دارید حرکت به و صفت را مشخص کنید نام، و ویژگی عنصر را تنظیم کنید نوع.

عناصر user_name, first_name, نام خانوادگییک نوع رشته داشته باشد و کاربر، نام و نام خانوادگی صاحب حساب را توصیف کند.

عنصر تاریخ_تولددارای یک نوع داده تاریخ است و تاریخ تولد را توصیف می کند.

تاریخ ثبت نام را شرح می دهد ثبت_تاریخ، دارای نوع داده خاص خود است customDateTime. مقدار این تگ با استفاده از ویژگی تنظیم می شود ارزش. خطوط این را نشان می دهد.

< xs:attribute name ="value" use ="required" >
در این مورد، ویژگی مورد نیاز است. برای اطمینان از اینکه مقدار با الزامات مطابقت دارد، "چک ها" را شرح می دهیم:
< xs:simpleType >
< xs:restriction base ="xs:string" >
< xs:length value ="19" />
< xs:pattern value ="-- ::" />


در این حالت، طول خط همیشه 19 خواهد بود، این توسط تگ مشخص می شود و خود مقدار با الگوی مشخص شده در تگ مطابقت دارد .

عناصر contact_infoو وبلاگ- آرایه ها، این با ویژگی نشان داده می شود maxOccurs = unbound.

برچسب بزنید مشخص می کند که عنصر تودرتو یکی از عناصر ICQ یا linkedin خواهد بود.

برچسب بزنید نشان می دهد که عناصر تو در تو خواهند بود blog_nameو blog_urlدقیقا به همین ترتیب اگر دنباله مهم نیست، باید از تگ استفاده کنید .

وای فای