پس از عرضه XML ، مجموعه اي از تکتولوژي هاي ديگر در رابطه با آن و با هدفمندي خاصي مطرح و ارائه گرديده است . بهمين دليل است که امروزه XML بعنوان خانواده اي بزرگ از ساير تکنولوژي ها در نظر گرفته مي شود .XSD) XML Schema Definition) ، يکي از تکنولوژي هاي موجود در اين زمينه است. در مجموعه مقالاتي که در اين رابطه ارائه خواهد شد، به بررسي جايگاه XSD و نحوه ارتباط آن با XML خواهيم پرداخت . در اين مقاله ، به بررسي ضرورت استفاده از XSD و معرفي برخي از ويژگي هاي آن اشاره خواهد شد .
چرا به Schema نياز است ؟
يکي از مزاياي مهم XML ،ارائه انعطاف و تسهيلات لازم براي طراحان و پياده کنندگان در رابطه با تشريح ساختار داده ها است. سندهاي XML ، داراي مخاطبان خاص خود ( انسان و يا ساير برنامه هاي کامپيوتري ) بوده و مي بايست امکانات لازم از زاويه استفاده کننده نيز مورد توجه قرار گيرد . در اين رابطه مي بايست مجوزهاي لازم بمنظور ارائه هر يک از عناصر و يا خصلتهاي موجود در سند مشخص گردد.ترتيب عناصر و خصلت هاي موجود در يک سند XML نيز بسيار حائز اهميت بوده و همواره مورد نياز منابعي خواهد بود که بنحوي از سندهاي XML بعنوان ساختاري براي تامين داده هاي خود استفاده مي نمايند. همانگونه که اشاره شد، سندهاي XML ممکن است توسط انسان و يا ساير برنامه ها و نرم افزارها استفاده گردند. بديهي است با فراگير شدن استفاده از داده ها با فرمتي که توسط سندهاي XML مطرح مي گردد ،انتظار حمايت از انواع داده ها که در ساير زبانهاي برنامه نويسي نظير Java، VB، C++ ، SQL وجود دارد ،بشدت مورد نياز خواهد بود. پياده کنندگان سندهاي XML بدنبال يک راهکار مناسب براي تعريف نوع داده ها (Date ، String ، Integer) و ساير موارد مربوط به قانونمند نمودن ساختار داده ها در رابطه با يک سند XML بودند .بدين ترتيب تعريف Schema براي سندهاي XML ، امري حياتي و ضروري تلقي گرديد .
Schema ، محتواي مجاز يک کلاس از اسناد XML را تشريح مي کند.
تاريخچه XML Schema
براي نوشتن سندهاي XML ،در ابتدا از شکل ساده اي از زبان نشانه گذاري SGML استفاده مي گرديد .SGML ، صرفا" براي نشانه گذاري اسناد مورد استفاده قرار مي گرفت . جايگاه استفاده از XML در ابتدا براي برنامه نويسان مشخص نبود و اکثر عرضه کنندگان مرورگرهاي وب ، از تکنولوژي فوق حمايت نمي کردند . پس از مدت زمان کوتاهي، تکنولوژي XML جايگاه خاصي را در بين متقاضيان خصوصا" برنامه نويسان پيدا کرد . اکثر استفاده کنندگان به اين نکته پي بردند که XML گزينه اي مناسب براي اکثر نيازهاي آنان بوده و کاربرد آن بسيار فراتر از نشانه گذاري اسناد است .
در زمان عرضه XML 1.0 توسط کنسرسيوم وب ، از تکنولوژي DTD براي تشريح سندهاي XML استفاده مي گرديد . گرامر استفاده شده در DTD ، پاسخگوي برخي از نيازهاي جديد خصوصا" در رابطه با انتقال اطلاعات بود . در ادامه نياز هاي جديدي در رابطه با پردازش داده هاي موجود در اسناد XML مطرح گرديد . بمنظور ارائه قابليت فوق براي منابع مصرف کننده ، مي بايست امکاناتي بمنظور تشريح مناسب داده ها ( ارتباط ، نوع داده و ... ) در اختيار برنامه نويسان قرار گيرد . بدين ترتيب برنامه نويسان قادر به تشخيص رفتار داده ها در يک سند XML و انجام پردازش هاي لازم در رابطه با داده هاي موجود در يک سند XML خواهند بود . بمنظورپاسخ مناسب به خواسته هاي فوق ، کنسرسيوم وب تصميم به طراحي يک زبان توصيفي جديد با نام XML Schema گرفت . در اين رابطه يک گروه کاري با همين نام تاسيس گرديد . مهمترين هدف گروه فوق، ايجاد يک زبان توصيفي جديد با قابليت استفاده توسط استفتاده کنندگان ، توليدکنندگان و برنامه نويسان با توجه به طيف گسترده انتظارات هر گروه بود . گروه XML Schema کنسرسيوم وب ، فعاليت خود را از فوريه سال 1999 آغاز و پس از دو سال در 2001 موفق به طراحي زبان توصيفي شدند . تکنولوژي فوق با نام XML Schema Definition و يا XSD معرفي گرديد . در زمانيکه گروه فوق ، سرگرم طراحي زبان توصيفي خود بودند، راهکارهاي متفاوتي در اين خصوص توسط ساير شرکت ها ارائه گرديد . مثلا" شرکت ماکروسافت تکنولوژي XDR را عرضه نمود . تکنولوژي استاندارد شده کنسرسيوم وب ، در مدت زمان کوتاهي پس از عرضه ، بعنوان گزينه اي مناسب براي تشريح ساختار داده ها ي موجود در يک سند XML ، مورد توجه عموم متقاضيان قرار گرفت .
ويژگي هاي مهم XSD
• فرمت آن همانند يک سند XML است. بنابراين ضرورتي به فراگيري گرامر جديدي براي ايجاد XSD نخواهد بود . بدين ترتيب مي توان از تمام ابزارهاي موجود در رابطه با سندهاي XML ، در ارتباط با XSD نيز استفاده کرد .
• ضمن حمايت از انواع داده (Data Type) تعريف شده در اکثر زبانهاي برنامه سازي، امکان تعريف نوع داده مورد نظر استفاده کننده را نيز فراهم مي نمايد . بدين ترتيب مي توان محتويات سند را محدود به نوع داده مورد استفاده در نرم افزار خود نمود و يا حتي از خصلت فيلدهاي موجود در بانک اطلاعاتي کپي برداري کرد .
• امکان تعريف کليد يکتا (Key) در عناصر اطلاعاتي را بمنظور عمليات يکتا سازي(Uniqe) فراهم مي نمايد .
• از خصلت توارث مدل شئ گراء ، بخوبي تبعيت مي نمايد . بدين ترتيب يک توصيف مي تواند از توصيف ديگر به ارث رسيده باشد .ويژگي فوق ، توانائي توليد توصيف هائي با قابليت استفاده مجدد را ميسر مي سازد .
• امکان تعريف عناصر با ارزش NULL ، و يا فاقد ارزش ، در XSD وجود دارد .
• از Namespace بخوبي حمايت مي نمايد . بدين ترتيب امکان توصيف اسناد با استفاده از Namespace مختلف فراهم مي گردد . اين ويژگي در راستاي توليد توصيف هائي با قابليت استفاده مجدد است .
• اسناد XSD ، نيز نظير سندهاي XML ، توسط پارسر اعتبار سنجي شده و در صورت وجود خطا ء گزارشات لازم ارائه مي گردد .
گرامر XSD
براي تشريح گرامر XSD ،در ابتدا به ذکر يک مثال پرداخته و سپس المانهاي موجود در آن تشريح مي گردد. جدول زير نمونه سند XML را نشان مي دهد :
يک سند نمونه XML |
<?XML Version = "1.0"?> <Students> <Student> <ID>12345</ID> <GPA>3.5</GPA> </Student> <Student> <ID>67890</ID> <GPA>4.0</GPA> </Student> </Students> |
توصيف سند فوق، بر اساس متد XSD بصورت زير است :
توصيف سند XMLبا استفاده از متد XSD |
<?XML Version = "1.0"?> <XSD:Schema xmlns:xsd='http://www.W3.org/2001/xmlschema'> <XSD:Element Name="student" Minoccurs="0" MaxOccurs="Unbounded"/> <XSD:ComplexType> <XSD:Sequence> <XSD:Element Name="ID" Type="XSD:String" MinOccurs="1" MaxOccurs="1"/> <XSD:Element Name="GPA" Type="XSD:String" MinOccurs="1" MaxOccurs="1"/> </XSD:Sequence> </XSD:ComplexType> </XSD:Element> </XSD:Schema> |
در ادامه با توجه به سند XML اشاره شده وXSD مربوطه ، به تجزيه و تحليل توصيف تعريف شده خواهيم پرداخت .
اعلاميه XML
با توجه به اينکه XSD خود يک سند XML است ، پس خط اول آن ميتواند يک اعلاميه XML باشد . (به خط اول توصيف تعريف شده XSD توجه نمائيد )
المان ريشه در توصيف XSD
المان ريشه در يک سند XSD ،همواره با تگ <Schema> مشخص مي گردد . بمنظور اعلام به پارسر XML که توصيف ارائه شده از روش XSD تبعيت مي نمايد ، لازم است Namespace مرجع در المان <schema> تعيين گردد. Namespace فوق توسط کنسرسيوم وب ارائه شده است .(به خط دوم توصيف تعريف شده XSD توجه نمائيد )
<XSD:Schema xmlns:xsd='http://www.W3.org/2001/xmlschema'> . . . </XSD:Schema> |
نکته : پيشوند XSD که در مثال فوق از آن استفاده شده است، نشاندهنده متد بکارگرفته شده بمنظور توصيف سند است . پيشوند فوق ، در صورت تعريف در NameSpace مرجع ، مي تواند هر چيز ديگري را نيز شامل شود . همچنين اگر NameSpace مربوطه بصورت پيش فرض مشخص گردد ، مي توان آن را حذف نمود. پيشنهاد مي گردد بمنظور افزايش خوانائي سند و همچنين جلوگيري از مشکلات آتي خصوصا" زماني که در توصيف مربوطه از توصيف ديگري استفاده ميگردد، ( Import) حتما" از پيشوند فوق ، استفاده گردد .
عناصر (Elements)
المان ها ، مهمترين بخش در يک سند XSD مي باشند . جهت معرفي هر المان مي بايست خصلت هاي زير تعريف گردند .
• Name : خصلت اجباري فوق ، نام عنصر مورد نظر را مشخص مي نمايد .
• Type : خصلت فوق ، نوع داده (Data Type) عنصر مورد نظر را مشخص و مي تواند ساده نظير String و يا از انواع داده مرکب باشد .
• MinOccurs : خصلت فوق،اختياري بودن يا اجباري بودن عنصرمورد نظر را مشخص مي نمايد. اين خصلت اجباري نبوده و در صورت عدم مقدار دهي ، بصورت پيش فرض عدد يک براي آن در نظر گرفته خواهد شد . جدول ذيل مقادير مختلف خصلت فوق را نشان مي دهد.
توضيحات | مقدار نسبت داده شده |
عنصر اختياري است | 0 |
عنصر بايد حداقل به تعداد مشخص شده در سندوجود داشته باشد | Integer > 0 |
• MaxOccurs : خصلت فوق، تعداد مجاز عنصر در سند را مشخص مي نمايد. اين خصلت نيز اجباري نبوده و در صورت عدم مقدار دهي ،بصورت پيش فرض عدد يک براي آن در نظر گرفته خواهد شد . جدول ذيل مقادير مختلف خصلت فوق را نشان مي دهد.
توضيحات | مقدار نسبت داده شده |
عنصر فقط مي تواند به اندازه عدد مشخص شده درسند وجود داشته باشد | Integer > 0 |
محدوديتي در ظهور عنصر در سند وجودندارد | Unbounded |
اين تگ(نشانه) زماني استفاده مي گردد، که توالي عناصر در سند براي ما اهميت داشته باشد. از نشانه فوق، فقط در تعريف عناصر مرکب (عناصري که بيش از يک جزء داشته باشند) ميتوان استفاده نمود ، در چنين حالتي محل قرارگيري آن مي بايست قبل از تعريف اجزاء مربوطه باشد .
با توجه به توضيحات فوق و مشاهده مجدد سند توصيفي نمونه، آناليز سند XML مربوطه به شرح ذيل خواهد بود .
توصيف سند XMLبا استفاده از متد XSD |
<?XML Version = "1.0"?> <XSD:Schema xmlns:xsd='http://www.W3.org/2001/xmlschema'> <XSD:Element Name="student" Minoccurs="0" MaxOccurs="Unbounded"/> <XSD:ComplexType> <XSD:Sequence> <XSD:Element Name="ID" Type="XSD:String" MinOccurs="1" MaxOccurs="1"/> <XSD:Element Name="GPA" Type="XSD:String" MinOccurs="1" MaxOccurs="1"/> </XSD:Sequence> </XSD:ComplexType> </XSD:Element> </XSD:Schema> |
• اين سند شامل عناصري است به نام Student که يا اصلا" در سند وجود ندارد و يا به هر تعداد ممکن است وجود داشته باشد چراکه MinOccurs آن برابر صفر است و MaxOccurs آن برابر Unbounded .
• عنصر Student ، شامل دو زير عنصر به نامهاي ID و GPA و از نوع String بوده و هرکدام فقط ميتوانند يک بار در سند ظاهر شوند چرا که MinOccurs و MaxOccurs آنها برابر يک است (در مثال فوق ،در صورت حذف خصلت هاي MinOccurs و MaxOccurs مربوط به توصيف عناصر ID و GPA ،هيچ تغييري در ماهيت توصيف ايجاد نمي شود، چرا که مقادير پيش فرض آنها برابر يک است ).
• عناصر ID و GPA در سند بايد به صورت پشت سرهم بيايند چرا که در توصيف سند از نشانه Sequence استفاده شده است .