کار با XML schemas
در این درس تخصصی از دوره SQL Server Essential Training، به بررسی جامع مفاهیم XML Schemas در SQL Server پرداخته میشود؛ از معرفی اهمیت XML Schema در اعتبارسنجی ساختار دادههای XML تا نحوه ایجاد و مدیریت XML Schema Collection با استفاده از دستور CREATE XML SCHEMA COLLECTION و انتساب آن به ستونهای نوع XML، تمامی مباحث به صورت عملی و با ارائه کدهای نمونه، راهکارهای بهینه برای مدیریت و تضمین صحت دادههای XML را به متخصصان و مهندسان ارائه میدهد.
مایکروسافت اس کیو ال توانایی ذخیره XML schema و داده های معتبر XML یا به عبارتی validate XML رو برای این گونه طرحها و این نمونه از اسناد XMl رو داره. تعریفxml schema در واقع زبان و شالوده یا ساختار نحوه تعریف یک طرح استاندارد Xml برای همه اسناد و داکیومنت ها هست. یعنی xml schema ساختار سند xml رو میاد و بصورت استاندارد تعریف میکنه. اون دست از افرادی که الان دارن این آموزش رو می بینن بخوبی میدونن که زبان xml schema با عنوان XML Schema Definition یا همون XSD هم معرفی میشه. xml هزاران استاندارد مختلف داره و یکی از پایه ای ترین و اساسی ترین اونها که به بحث پیرامون اجزاء ساختار یک کد xml می پردازه همین XML Schema هستش. اجازه بدین جلو بریم و یه طرح xml یا همون XML schema رو ایجاد کنیم و در ادامه در ویدئوی آموزشی بعدی این طرحمون رو بررسی کنیم و ببینیم که آیا این طرحی که الان تعریف کردیم خروجی استاندارد XML schema رو به ما میده یا خیر.
من برخی کدها رو برای شما به منظور پیشروی درهمین آموزش ویدئویی طبقه بندی کردم و اونها رو کپی میکنم و در پنجره query جدید پیست میکنم.
اجازه بدین قبل این که اون رو اجرا کنم یه بررسی روی اون داشته باشیم. اون با کلمه کلیدی CREATE XML SCHEMA COLLECTION شروع شده و بعد از اون نامی رو بهش میدیم که عملکرد رو تحت تاثیر قرار نده یعنی در واقع نباید اسممون یکی از دستورات مایکروسافت اس کیو ال سرور باشه و باید یک اسم عادی باشه یک اسم عادی مثل testSchema1.
در خط دوم، کلمه کلیدی as و در نهایت کل باقی مونده این نمونه کدی هست که الان پیست کردم در خط 3 تا 14، یک طرح schema xml استانداردی هست که ما قصد داریم اون رو ایجاد کنیم و در ویدئوی آموزشی بعدی این طرحمون رو روی یک کد واقعی Xml اعمال کنیم و نتایج رو طبق این طرحمون ببینیم.
مهمترین خطوط از این کدم، خطوط 8 و 9 و 10 هست.
خط 8 یه عنصر یا المنت با نام firstname، که از نوع داده رشته ای یا string محسوب میشه، رو تعریف میکنه که minoccurs اون، یک هست. بد نیست بدونید (minoccure حداقل تعداد دفعاتی که element میتونه رخ بده)، هستش.
خط بعد هم یه element تعریف میکنه که اسمش lastname هست و نوع داده اون هم string یا رشته ای هست و minoccurs این هم مجدداً برابر با 1 هست و خط 10 عنصر یا المنت با نام middlename رو تعریف میکنه که نوع داده اون هم برابر با string هست و minoccurs اون هم برابر با 0 هست. بنابراین از این میتونیم بفهمیم که minoccure یک گزینه اختیاری هست. این خوبه که حداقل تعداد رخداد اون صفر باشه.
من پیش میرم و این کدم رو اجرا میکنم و میبینم که پیام تکمیل با موفقیت رو بهم میده.
برای فراخونیXML schema ایجاد شده مون باید بسراغ object explorer بریم و Program Ability رو با زدن روی علامت + گسترش بدیم.
و بعد از اون Types رو گسترش میدم و بعد از اون Schema Collection رو گسترش میدم و روی اون کلیک راست میکنم و بعد هم رفرشش میزنیم و اونجا schema xml جدیدمون رو با نام testschema1 میبینیم.
اجازه بدین پیش برم و از اون استفاده کنم و یک جدول جدید برای ذخیره xml ایجاد کنم. جدولی که میخام انواع خروجی های مد نظرم رو برای یک کد xml مشخص بهم بده که یکی از ستونهای این جدول همین نمونه طرح استانداردی هستش که الان ایجاد کردم و نهایتاً میخام خروجی جدول وقتی که یک کد Xml بهش میدم به این شکل استاندارد باشه.
من روی جداول یا گزینه Tables از همین ساختار درختی کلیک راست میکنم و با زدن New و بعدش هم Table به یک جدول جدید میرم.
خب؛ میدونید که ما میتونیم متغیرها، پارامترها و ستون ها رو با Xml ایجاد کنیم که در این صورت نوع داده ها typed محسوب میشه و فهمیدیم که باXML schema هم می تونیم یک collection یا مجموعه از متغیرها، پارامترها و ستون ها رو بصورت استاندارد و طبق طرح مد نظرمون تعریف کنیم که در این صورت نوع داده ها untyped محسوب میشه و در ابتدا میخوام که یک untyped xml رو وارد کنم به این معنی که اگه بهش یک داده Xml بدیم خروجی ای که بهمون میده درschema xml ای که به عنوان یک طرح استاندارد چند لحظه پیش تعریف کردیم معتبر و استاندارد نیستن. بنابراین برای Column Name یا نام ستون نام untyped رو میذارم و برای Data type یا نوع داده xml رو قرار میدم. یعنی یک خروجی ساده xml رو ما از این ستون از جدولمون می تونیم داشته باشیم.
سپس به ستون بعدی میرم و، میخوام xml ، typed باشه. به عبارت دیگه در schema xml ای که به عنوان یک طرح معتبر و استاندارد تعریف کردیم خروجی رو مورد بررسی قرار بده و خروجی رو دقیقاً به اون شکل استاندارد تعریف شده بهمون برگردونه. بنابراین ما میخوایم یک ستون با نام typed داشته باشیم.
نوع داده هم xml خواهد بود و به همین منظور بار دیگه من xml رو به عنوان نوع داده انتخاب میکنم.
سپس در حالی که Xml رو برای Data type بصورت انتخاب دارم برای رسیدن به ایده مد نظرم به قسمت پایینی میرم، جایی که به اون column properties گفته میشه و می بینیم که یکی از گزینه ها XML Type Specification هست که اون از من schema collection ای رو میخواد
که دوست دارم أزش برای خروجی این سر ستون از جدولم أزش استفاده کنم و من از قسمت کشویی testSchema1 رو که چند لحظه پیش تعریف کردم رو انتخاب میکنم و ما فقط یکی ایجاد کرده بودیم و اون هم اینجاست؛ پس انتخابش می کنم و حالا توجه کنین که این، Data type یا نوع داده رو بروز رسانی میکنه.
من این قسمت data type رو کمی بزرگتر میکنم. بنابراین حالا میتونم Data type یا نوع داده xml و بعد از اون داخل پرانتز CONTENT dbo.testSchema1رو ببینم.
سپس در ستون بعد، بجای استفاده از نوع داده xml، ما میخوایم که از نوع داده text استفاده کنیم و به یاد داشته باشین که xml فقط نوع خاصی ازtext هست و بنابراین ما میتونیم اون رو در هر ستون که به صورت text ذخیره شده وارد کنیم و نام ستون رو در قسمت column name، justtext قرار میدیم.
پس اینطوری اومدم و خروجی متنی هم برای یک نمونه از کد Xml هم در این جدولم ایجاد کردم.
هر سه در قسمت allow nulls تیک خوردند. ما میخوایم که رکوردها رو در این جدول قرار بدیم و ممکنه بعضی از اونها null هم بگیره.
من این ها رو میبندم و بمحض اینکه روی علامت ضربدر میزنم اون از من میپرسه که ایا میخواید تغییرات ذخیره بشه و yes رو انتخاب میکنم.
در مرحله بعد از من نامی که میخوام براش بذارم رو میپرسه. من میخوام نام جدولم xmltest باشه و اوکی رو انتخاب میکنم. اجازه بدین پیش برم و مطمئن بشم که جدول xmltest در لیست tables ظاهر شده .
روی tables کلیک راست میکنم و رفرش رو میزنم. من حالا dbo.xmlTest رو دارم.
ما میتونیم اون رو گسترش بدیم وستون ها رو ببینیم.
و سه ستون همانطور که مشخص شده بود، وجود داره.
خب؛ عالیه، ما یک جدولی رو ایجاد کردیم که xml رو یکم متفاوتتر و با روش های مختلفی ذخیره کرد. یکی از اونها توسط schema ای که چند لحظه پیش ایجادش کردیم معتبر شد و در قسمت بعدی، ما داده های زیادی رو در جدول قرار خواهیم داد تا در واقع بیایم و XML schema رو بطور کامل بررسی کنیم و ببینیم که قراره چه اتفاقی بیافته. در واقع میام و یک کد xml مشخص رو برای هر 3 ستون این جدولم تعریف می کنم و میخام ببینم که خروجی جدول برای سر ستون untyped که یک خروجی معمولی هست چطوره ؛ و اینکه برای سر ستونtyped که یک خروجی معتبر برای طرح استاندارد تعریف شده schema xml این ویدئوی آموزشیم هست، چطوره و نهایتاً خروجی های متنی رو هم در سر ستون آخری یعنی Data type بررسی کنم. پس با من در ویدئوی آموزشی بعدی همراه بشید. ولی این رو بدونید که schema xml هزاران استاندارد مختلف داره که داره از طریق کلاینت های مختلف استفاده میشه و من یکی از این استانداردهای schema xml ای رو در نرم افزاری که مایکروسافت برای ایجاد پایگاه داده تعریف کرده، در این ویدئوی آموزشی بکار بردم.