XSD چیست ؟


پس از عرضه 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 چیست ؟( بخش دوم )

در بخش اول  این مقاله ، به  بررسی ضرورت استفاده از XSD و معرفی برخی از ویژگی های آن اشاره گردید، در بخش دوم به بررسی  گرامر XSD  خواهیم پرداخت .

گرامر 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 توجه نمائید )

<?XML Version = "1.0"?>

المان ریشه  در توصیف XSD

المان ریشه در یک سند XSD ،همواره با تگ  <Schema> مشخص می گردد . بمنظور اعلام به پارسر XML که توصیف ارائه شده از روش XSD تبعیت می نماید ، لازم است Namespace مرجع در المان <schema> تعیین گردد. Namespace  فوق  توسط کنسرسیوم وب ارائه شده  است .(به خط دوم توصیف تعریف شده XSD توجه نمائید )

 

    <XSD:Schema xmlns:xsd='http://www.W3.org/2001/xmlschema'>

            .

            .

            .

      </XSD:Schema>

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

XSD چیست ؟( بخش سوم )

در بخش اول این مقاله به بررسی  مقاهیم و جایگاه نکنولوژی XSD اشاره  و در بخش دوم به بررسی  بررسی  گرامر XSD   پرداخته گردید . در این بخش به بررسی انواع داده ساده ( simple type ) و مرکب ( complex type ) ، خواهیم پرداخت .

انواع داده ( ساده ، مرکب ) 

جهت توصیف داده ها در یک سند XML با استفاده از تکنولوژی XSD ، از دو نوع  ساده و مرکب استفاده می گردد که بمنظور بکارگیری آنان در گرامر XSD  ، نشانه هائی با همین عنوان یعنی <SimpleType> و <ComplexType>  در نظر گرفته شده است . قبل از تشریح هر یک از موارد فوق ، لازم است جایگاه استفاده از هر یک بدرستی مشخص گردد .

نوع داده مرکب <ComplexType> زمانی استفاده میگردد که :

        عنصر داده  دارای عناصر زیر مجموعه باشد  و/  یا .

        عنصر داده دارای خصائص (Attribute) باشد .

نوع داده ساده <SimpleType> زمانی استفاده میگردد که :

        تصمیم داریم با اعمال شرایط و یا محدودیتهائی بر روی یک نوع داده استاندارد (مثل String) یک نوع داده جدید (User Define Data Type) ایجاد نمائیم  و / یا

        عنصر مورد نظر دارای عناصر زیر مجموعه و یا خصائص (Attribute) نمی باشد.

بمنظور آشنائی با برخی از مفاهیم اولیه در این خصوص ، مجددا" به مثال ارائه شده در بخش دوم مقاله ، مراجعه می نمائیم .

یک سند 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 دارای دو زیر عنصر ID و GPA است. بنابراین می بایست عنصر Student بصورت مرکب توصیف گردد. بدین منظور لازم است پس از توصیف عنصر مربوطه و پیش از توصیف عناصر زیر مجموعه آن از نشانه <ComplexType> استفاده شده  و در ادامه عناصر زیر مجموعه را درون بلاکی  از این نشانه قرار دهیم.( خطوط چهارم و نهم )

فرض کنید ، می خواهیم بر روی عنصر GPA که از نوع استاندارد String است ، محدودیتی خاص را اعمال نمائیم،  بطوریکه طول آن چهار حرف  و فرمت آن به صورت (Digit.DigitDigit) باشد .بمنظور تامین خواسته فوق ، لازم است یک نوع داده جدید با لحاظ نمودن محدودیت اشاره شده ، بر روی نوع داده استاندارد String تعریف گردد . با توجه به ضرورت تعریف یک نوع داده جدید ، می بایست از نشانه <SimpleType> استفاده گردد . تشریح نوع داده جدید بر اساس تکنولوژی XSD ، بصورت زیر خواهد بود. ( در مقالات بعد، بصورت مفصل تر به بررسی اعمال  محدودیت ، ارزش ها و الگوهای مختلف ، پرداخته خواهد شد ).

تعریف یک نوع داده ساده با اعمال محدودیت

<XSD:simpletype  name="studentgpa"  minoccurs="1"   maxoccurs="1">

     <XSD:restriction  base="XSD:string">

           <XSD:length  value="4"/>

           <XSD:pattern value="\d{1}.\d{2}"/>

     </XSD:restriction>

</XSD:simpletype>

با توجه به تعریف نوع ساده مورد نظر و لحاظ نمودن محدودیت های مربوطه ، سند XSD مثال قبل به شکل ذیل خواهد بود :

یک سند 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="StudentGpa"/>

                    </XSD:Sequence>

                </XSD:ComplexType>

            </XSD:Element>

<XSD:simpletype  name="studentgpa"  minoccurs="1"   maxoccurs="1">

     <XSD:restriction  base="XSD:string">

           <XSD:length  value="4"/>

           <XSD:pattern value="\d{1}.\d{2}"/>

     </XSD:restriction>

</XSD:simpletype>                                                                                                                 </XSD:Schema>

سند فوق، به شکل زیر نیز می تواند ارائه گردد :

یک سند 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="string"  minoccurs="1" maxoccurs="1"/>

                       <XSD:simpletype >

                          <XSD:restriction  base="XSD:string">

                               <XSD:length  value="4"/>

                               <XSD:pattern value="\d{1}.\d{2}"/>

                          </XSD:restriction>

                      </XSD:simpletype>                                                                                                                               </XSD:Sequence>

                </XSD:ComplexType>

            </XSD:Element>

</XSD:Schema>

تفاوت موجود در ارتباط با هر یک از روش های ارائه شده به قابلیـت استفاده مجدد از نوع تعریف شده برمی گردد. در حالت اول،  نوع داده جدید studentgpa را میتوان در هر محلی از سند (در تشریح هر یک از عناصر دیگر ) استفاده کرد (قابلیت استفاده مجدد). در حالت دوم، نوع تعریف شده صرفا" بر روی عنصر GPA اعمال و امکان استفاده مجدد از وجود نخواهد داشت (غیر قابل استفاده مجدد) .

جمع بندی

بمنظور تشریح عناصر ( نوع ساده و یا نوع مرکب ) ، از سه روش متفاوت استفاده می گردد : 

        روش اول : میتوان در یک خط نام عنصر و نوع آن و حداقل و حداکثر حضور آن در سند را تعیین نمود .در واقع روش فوق ، علیرغم اینکه از نشانه <Simpletype> استفاده  نشده است ، یک عنصر ساده را تشریح می نماید.چرا که نوع داده این نوع عناصر از انواع داده استاندارد بوده و در انتهای خط نیز توصیف با علامت " / " خاتمه یافته است . توصیف عناصر ID و GPA در مثال ابتدای مقاله از مصادیق این روش توصیف عناصر است .

<XSD:element name="name"  Type="type"  minoccurs="int"  maxoccurs="int"/>

        روش دوم : در این روش نام عنصر، حداقل و حداکثر حضور آن در سند به عنوان عنصر مادر تشریح شده و سپس عناصر زیر مجموعه آن در داخل یک بلاک <Complextype> تعیین میگردند . این نوع توصیف در  خصوص انواع داده مرکب یعنی عناصری که دارای زیر مجموعه و یا خصائص (attribute) میباشند، استفاده می گردد . توصیف عنصر Student در مثال ابتدای مقاله از مصادیق این روش است .

تعریف یک نوع مرکب

 <XSD:Element Name="name" Minoccurs="int" MaxOccurs="int">

     <XSD:ComplexType>

          .

          .

          .

     </XSD:ComplexType>

</XSD:Element>

        روش سوم : در این روش نام عنصر ، حداقل و حداکثر حضور آن در سند توصیف و سپس محدودیت اعمال شده بر روی نوع داده استاندارد در یک بلوک <Simpletype> جهت تعریف یک نوع داده جدید،  توصیف میگردد. در واقع روش فوق، نوع دیگر توصیف انواع داده ساده Simpletype  بوده  که با اعمال محدودیت بر روی یکی از انواع داده استاندارد ایجاد شده است . تعریف studentgpa در مثال قبل از مصادیق بکارگیری این روش در توصیف عناصر است.

تعریف یک نوع ساده

<XSD:element  name = "name"  minoccurs="int"  maxoccurs="int" />

      <XSD:simpletype>

           <XSD:restriction>

                 .

                 .

                 .

           </XSD:restriction>

      </XSD:simpletype>

</XSD:element>

 توانائی ایجاد انواع داده جدید با اعمال محدودیت بر روی انواع داده استاندارد از ویژگیهای بسیار مهم و توانمند تکنولوژی XSD میباشد .

در بخش چهارم این مقاله به بررسی خصلت ها ، خواهیم پرداخت .

________________________________________

XSD چیست ؟( بخش چهارم)

آنچه تاکنون گفته شده است :

بخش اول :  مقاهیم و جایگاه نکنولوژی XSD

بخش دوم :  گرامر XSD 

بخش سوم :انواع داده ( ساده ، مرکب )

در این بخش به بررسی Attribute خواهیم پرداخت .

 

در تشریح ساختار داده های یک موجودیت (Entity)  ، برخی مواقع  به اجزاء  و یا المانهائی برخورد خواهیم کرد  که ارتباط تنگاتنگی با موجودیت داشته و بنوعی بعنوان یک خصلت یا ویژگی موجودیت مورد بررسی ، شناخته می گردند.نحوه حضور این اجزاء در ساختمان داده موجودیت از قبیل مقادیر پیش فرض،مقادیر ثابت یا خصلت تغییر ناپذیری از ویژگی های مهم این اجزاء محسوب می گردند . بعنوان مثال فرض کنید در یک سازمان بزرگ برای تشکیل پرونده پرسنل، از یک  فیلد اطلاعاتی با  نام ملیت  استفاده می شود.بیش از 98 درصد پرسنل شرکت مزبور دارای ملیت ایرانی بوده  و تنها ممکن است یک  و یا دو درصد از پرسنل ، ملیت غیر ایرانی داشته باشند.با توجه به وضعیت فوق ، می توان  فیلد ملیت  را به صورت پیش فرض مقدار دهی  و از تکرار آن در سند XML مربوطه جلوگیری  و صرفا" ملیت افراد غیر ایرانی  را در سند مشخص نمود. در چنین مواردی علاوه بر حفظ یکپارچگی اطلاعات به مقدار زیادی در حجم اطلاعات سند XML  نیز صرفه جوئی خواهد شد . در تکنولوژی  XSD برای معرفی اینگونه اجزاء ، نشانه ای تحت عنوان <Attribute> پیش بینی  شده است . گرامر استفاده از attribute بصورت زیر است :

گرامر استفاده از attribute

<XSD:attribute Name="name" Type="simple type"  Use="how used"  Value="value"/>

Name : نام Attribute را مشخص  و یک خصلت اجباری است .

Type : نوع داده attribute را مشخص و جزء خصلت های اجباری است ( نوع داده حتما" باید از انواع داده ساده (simple type) باشد).

Use : نحوه استفاده از attribute را مشخص و می تواند مقادیر زیر  را داشته باشد :

توضیحات       مقدار نسبت داده شده

خصلت اجباری است          Required

خصلت دارای مقدار پیش فرض است        Default

خصلت دارای مقدار ثابت و غیر قابل تغییر است   Fixed

خصلت اختیاری است         Optional

خصلت محافظت شده است         Prohibited

Value : اگر ویژگی Use دارای ارزش Default و یا Fixed باشد آنگاه ارزش مورد نظر می بایست مشخص و در غیر اینصورت نیازی به استفاده از ویژگی فوق ، نخواهد بود.

جایگاه فیزیکی و نحوه تعریف attribute در یک سند XSD

همانگونه که در بخش سوم این مقاله اشاره گردید ،  عناصر مرکب (ComplexType) عناصری هستند که دارا عناصر زیر مجموعه و یا attribute باشند . بنابراین جایگاه فیزیکی attribute در داخل یک بلاک Complextype است (انتهای بلاک و پس از توصیف کلیه عناصر زیر مجموعه) . بمنظور بررسی نحوه استفاده از attribute ، مثال ارائه شده در بخش سوم این مقاله را مجددا" بررسی می نمائیم .در مثال فوق ، قصد داریم عنصر ID را بصورت یک attribute تعریف  نمائیم . در چنین حالتی توصیف سند بصورت زیر خواهد بود :

نحوه استفاده از Attribute در یک سند 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:Element Name="GPA" Type="XSD:String" MinOccurs="1" MaxOccurs="1"/>

                    <XSD:Attribute Name="ID"  Type="XSD:String"  Use="Required" />

                </XSD:ComplexType>

            </XSD:Element>

      </XSD:Schema>

روش های توصیف attribute

جهت توصیف یک attribute از دو روش متفاوت استفاده می گردد . اگر نوع داده attribute مورد نظر از انواع داده استاندارد و یا از پیش تعریف شده باشد ، آنگاه طبق گرامر ارائه شده ، می توان  توصیف یک attribute را  بصورت زیر انجام داد :

روش اول : توصیف یک Attribute

<XSD:attribute Name="name" Type="simple type"  Use="how used"  Value="value"/>

اما اگر بخواهیم نوع داده attribute را با اعمال محدودیت بر روی  یک نوع داده استاندارد تشریح نمائیم ، می توان از گرامر زیر استفاده کرد :

روش دوم : توصیف یک Attribute

<XSD:attribute Name="name"   Use="how used"  Value="value" >

     <XSD:simpletype>

            <XSD:restriction  Base="simple type">

                   <XSD:facet  Value="value" />

            </XSD:restriction>

     </XSD:simpletype>

</XSD:attribute>

facet ، حالات و ارزش های متفاوت آن در مقالات بعد به طور مفصل بررسی خواهد شد. جهت تشریح بهتر روش دوم،  به بررسی یک مثال  دیگر می پردازیم . فرض کنید که در مثال قبل ، قصد داریم  بر روی  نوع داده attribute ID ، محدودیتی خاصی را اعمال نمائیم :"طول رشته پنج و کاراکترهای آن عدد باشند " ، در چنین حالتی توصیف سند بصورت زیر خواهد بود :

مثال : توصیف یک سند با اعمال محدودیـت در رابطه با Attribute

<?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:Element Name="GPA" Type="XSD:String" MinOccurs="1" MaxOccurs="1"/>

                    <XSD:Attribute Name="ID"    Use="Required">

                         <XSD:simpletype>

                               <XSD:restriction  Base="XSD:String">

                                        <XSD:Length="5" />

                                        <XSD:Pattern = "\d{5}" />

                               </XSD:restriction>

                         </XSD:simpletype>

                     </XSD:attribute>

                </XSD:ComplexType>

            </XSD:Element>

      </XSD:Schema>

همانگونه که مشاهده می گردد ( با اندکی دقت ! ) ، توصیف های ارائه شده برای خصلت ID داخلی بوده و امکان استفاده مجدد از آن وجود نخواهد داشت . در صورت نیاز به استفاده مجدد از توصیف یک Attribute در مکان هائی دیگر از سند ، می بایست توصیف Attribute مورد نظر در خارج از محدوده داخلی قرار گیرد .

در بخش پنجم این مقاله به بررسی حالات متفاوت ساختار ، خواهیم پرداخت .

________________________________________

XSD چیست ؟( بخش پنجم)  

آنچه تاکنون گفته شده است :

بخش اول :  مقاهیم و جایگاه نکنولوژی XSD

بخش دوم :  گرامر XSD 

بخش سوم :انواع داده ( ساده ، مرکب )

بخش چهارم : بررسی Attribute

در این بخش به بررسی نحوه تشریح یک عنصر در سند XSD  خواهیم پرداخت .

دو راه متفاوت جهت تشریح عناصر یک سند XML با استفاده از متد XSD وجود دارد:

        روش اول : در این روش ، زیر مجموعه های یک عنصر و خصلت های آن در داخل یک بلاک <COMPLEXTYPE> و بعد از تعریف عنصر اصلی مستقر و  تشریح می گردند.روش  فوق ، توصیف داخلی یا Nested نامیده می شود .

        روش دوم : در این روش ، توصیف عناصر زیر مجموعه در داخل بدنه اصلی Schema ارائه گردیده و سپس در داخل بلاک <Complextype>  به عناصر مربوطه مراجعه خواهد شد. روش فوق ، توصیف عمومی یا Global نامیده می شود.

انتخاب هر یک از روش های فوق در توصیف عناصر ، بستگی به ماهیت خود عنصر و دیدگاه طراح دارد . بعبارت دیگر اگر تعریف یک عنصر با نوع داده ساده حالت انحصاری داشته باشد و در سایر عناصر سند جاری و یا عناصر اسناد دیگر قصد استفاده از آنان وجود نداشته باشد ، مناسب است از روش اول بمنظور تشریح عنصر استفاده گردد. در صورت عدم تحقق شرایط فوق ، مناسب است از روش دوم استفاده گردد. در واقع روش دوم، امکان استفاده مجدد از  توصیف انجام شده را فراهم می نماید.  مثال زیر نحوه تشریح یک عنصر در سند 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:Element Name="ID"      Type="XSD:String" MinOccurs="1" MaxOccurs="1"/>

                    <XSD:Element Name="GPA"  Type="XSD:String" MinOccurs="1" MaxOccurs="1"/>

                </XSD:ComplexType>

            </XSD:Element>

      </XSD:Schema>

در مثال فوق،عنصر Student به عنوان یکی از زیر مجموعه های عنصر ریشه یا همان Schema توصیف و لذا به عنوان یک تعریف عمومی مطرح و  می توان ازآن  در هر محل  دیگر سند جاری و یا حتی اسناد دیگر استفاده نمود . اما عناصر ID و GPA به صورت عناصر زیر مجموعه عنصر Student و آنهم در داخل آن (Nested) تشریح گردیده اند، لذا توصیف این عناصر صرفا" در عنصر Student معتبر بوده و در هیچ محل دیگر سند جاری و یا اسناد دیگر، قابل استفاده نخواهند بود . فرض کنید در ساختار سند فوق ،عنصر دیگری با نام Teacher ، وجود داشته باشد که دارای  دو زیر عنصر ID و GPA می باشد. با توجه به فرضیات فوق ، مناسب است از روش دوم استفاده و تعاریف مربوط به عناصر ID و GPA را در داخل عنصر ریشه قرار دهیم . بدین ترتیب ، قادر خواهیم بود از تعاریف دو عنصر فوق در عناصر Student و Teacher بصورت  یکسان استفاده نمائیم . به مثال ذیل توجه کنید :

مثال : توصیف یک سند و ضرورت استفاده از تعریف عمومی

<?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:Element Ref="ID"      MinOccurs="1" MaxOccurs="1"/>

                    <XSD:Element Ref="GPA"  MinOccurs="1" MaxOccurs="1"/>

                </XSD:ComplexType>

            </XSD:Element>

          <XSD:Element Name="Teacher" Minoccurs="0" MaxOccurs="Unbounded">

               <XSD:ComplexType>

                    <XSD:Element Ref="ID"      MinOccurs="1" MaxOccurs="1"/>

                    <XSD:Element Ref="GPA"  MinOccurs="1" MaxOccurs="1"/>

                </XSD:ComplexType>

            </XSD:Element>

      <XSD:Element Name="ID"     Type="XSD:String"/>

      <XSD:Element Name="GPA" Type="XSD:String"/>

      </XSD:Schema>

در مثال فوق ، از خصلت Ref در مقابل Name استفاده شده است .در صورت نیاز به هر نوع تغییردر توصیف عناصر ID وGPA کافی است تغییر مورد نظر را صرفا" در یک محل ( محلی که توصیف آنان انجام شده است ) اعمال نمود . بدین ترتیب ، تمام سند  و در هر مکانی که از عناصر فوق استفاده شده است ، متاثر از تغییر ایجاد شده بصورت اتوماتیک می گردد .

روش های فوق ، در خصوص انواع داده ساده (Simpletype) نیز صادق است . همانگونه که در بخش سوم این مقاله اشاره گردید ،  تعریف یک عنصر ساده (Simpletype) را  میتوان بصورت داخلی (Nested) و یا بصورت زیر مجموعه ای از عنصر ریشه (Schema) ،  انجام داد. در حالت دوم ، امکان استفاده مجدد از  تعریف انجام شده وجود  داشته و می توان از آن در هر مکانی از توصیف جاری و یا حتی توصیفهای دیگر استفاده نمود. مثال ارائه شده در بخش سوم این مقاله ، نحوه اعمال محدودیت بر روی یک  نوع داده استاندارد نظیر  String و ایجاد نوع داده جدیدی با نام StudentGpa  را نشان می دهد . مثال فوق ، در این راستا می تواند مفید واقع شود .

دسترسی به سایر توصیف ها

همانگونه که اشاره گردید، عناصر و انواع داده ئی که بعنوان عنصر زیر مجموعه ریشه Schema در یک توصیف  قرار می گیرند ، امکان استفاده مجدد از آنان در سایر توصیف ها وجود خواهد داشت . بدین منظور و در اولین مرحله می بایست از  Import  و یا Include استفاده گردد مثال زیر ، نحوه استفاده از Include را نشان می دهد .

مثال : نحوه و جایگاه استفاده از Include

<?XML Version = "1.0"?>

<XSD:Schema Xmlns:XSD="http://www.w3.org/2001/xmlschema"

                          TargetNameSpace="URI goes here">

<XSD:Include Schemalocation="XSDfilename goes here"/>

     .

     .

     .

</XSD:Schema>

از گرامر فوق ، زمانی استفاده می شود که توصیف جاری و یا بعبارت دیگر Targetnamespace و توصیفی که می خواهیم از عناصر و یا انواع داده آن استفاده نمائیم ، در یک موقعیت فیزیکی  و یا Location قرار داشته باشند . به مثال ذیل توجه فرمائید :

مثال : نحوه استفاده از Include

<?XML Version = "1.0"?>

<XSD:Schema Xmlns:XSD="http://www.w3.org/2001/xmlschema"

                          TargetNameSpace="http://www.srco.ir/students">

<XSD:Include Schemalocation="StudentGpa1.xsd"/>

    <XSD:Element Name="teacher"  Minoccurs="0"  MaxOccurs="Unbounded">

       <XSD:ComplexType>

          <XSD:Sequence>

               <XSD:Element Ref = "StudentGPA" Minoccurs="1"  MaxOccurs="1" />

               <XSD:Element Name="University" Type="XSD:String" />

          </XSD:Sequence>

       </XSD:Complextype>

    </XSD:Element>

</XSD:Schema>

در مثال فوق ، موقعیت فیزیکی توصیف جاری و توصیفی که می خواهیم از آن استفاده نمائیم (StudentGpa1.xsd) یکسان است . در تشریح عنصر Teacher ، از تعریف StudentGpa که در سند StudentGpa1.xsd توصیف شده است، استفاده گردیده است .

در صورتیکه موقعیت فیزیکی سند جاری و یا Targetnamespace و سندی که می خواهیم از تعاریف آن استفاده نمائیم یکسان نباشد ، می بایست از گرامر ذیل استفاده گردد :

مثال : نحوه و جایگاه استفاده از Import

<?XML Version = "1.0"?>

<XSD:Schema Xmlns:XSD="http://www.w3.org/2001/xmlschema"

                          TargetNameSpace="URI goes here">

<XSD:Import Namespace="URI goes here" 

                         Schemalocation = "XSD filename goes here"/>

     .

     .

     .

</XSD:Schema>

فرض کنید در مثال قبل ، موقعیت فیزیکی سند جاری و یا Targetnamespace و سندی که تعریف studentgpa در آن توصیف شده است یکسان نباشد ، در چنین مواردی می توان از Import استفاده و توصیف سند مورد نظر را بصورت زیر انجام داد :

مثال : نحوه استفاده از Import

<?XML Version = "1.0"?>

<XSD:Schema Xmlns:XSD="http://www.w3.org/2001/xmlschema"

                          TargetNameSpace="http://www.srco.ir/Teachers">

<XSD:Import Namespace = "http://www.srco.ir/students"

                         Schemalocation="StudentGpa1.xsd"/>

    <XSD:Element Name="teacher"  Minoccurs="0"  MaxOccurs="Unbounded">

       <XSD:ComplexType>

          <XSD:Sequence>

               <XSD:Element Name = "TeacherGPA" Type = "StudentGpa1:StudentGpa"

                                         Minoccurs="1"  MaxOccurs="1" />

               <XSD:Element Name="University" Type="XSD:String" />

          </XSD:Sequence>

       </XSD:Complextype>

    </XSD:Element>

</XSD:Schema>

همانگونه که مشاهده می گردد ، موقعیت فیزیکی  سند جاری  و سندی که از آن استفاده شده است ، یکسان نمی باشد (به نحوه استفاده از تعریف عنصر studentGpa توجه نمائید ) .

در بخش ششم این مقاله ، به بررسی انواع داده در XSD  و نحوه مستند سازی اسناد مربوطه ، خواهیم پرداخت .

________________________________________

XSD چیست ؟( بخش ششم)  

آنچه تاکنون گفته شده است :

بخش اول :  مقاهیم و جایگاه نکنولوژی XSD

بخش دوم :  گرامر XSD 

بخش سوم :انواع داده ( ساده ، مرکب )

بخش چهارم : بررسی Attribute

بخش پنجم : تشریح یک عنصر در سند XSD

در این بخش به بررسی  انواع داده در XSD  ، خواهیم پرداخت .

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

انواع داده ساده یا استاندارد

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

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

تعریف یک نوع داده در XSD

     .

     .

     .

 <XSD:Element Name="ID"      Type="XSD:String" MinOccurs="1" MaxOccurs="1"/>

     .

     .

     .

 جدول زیر ، انواع داده مهم حمایت شده در XSD  را نشان می دهد .

انواع داده حمایت شده در XSD

نوع داده        توضیحات و مثال

anyuri          Uniform Resource Locator

Example : http://www.srco.ir

base64Binary         MIME STYLE base64 encoded binary data

hexBinary    Hexadecimal encoded binary data

boolean       TRUE(1) Or FALSE(0)

byte   Numbers between -128 To 127

dateTime     Date in a subset of  the ISO8601 format

Time and Timezone are optional

Example: 2003-04-15T10:40:15.000-05:00

date   Date in a subset of the ISO8601 format

Example: 2003-04-15

decimal        Positive or negative arbitrary precision decimal value

Examples: -5.34,0,5.34,5000.00

double         double precision 64-bit floating point

duration       Duration of time specified in years , months , days , hours , minutes and seconds format , as defined in the ISO8601 standards extended format PnYnMnDTnHnMnS.nY is then number of years , nM is the number of months and so on .The P is required but the other items are optional

Example:To specify duration of one year and two months you would specify : P1Y2M

float   Single precision 32-bit floating point

gDay  Day in Gregorian format

Example: --31 every 31th day,regardless of month

gMonth        Month in Gregorian format

Example: --06-- every may

gMonthDay  Month and day in Gregorian format

Example: --07-31 every july 31th

gYear Year in Gregorian format

Example: 2000

gYearMonth Year and month in Gregorian format

Example:2000-02

Int     Integer.Sign is optional

Range: -2147483648 to 2147483647

Integer        The standard mathematical concept of integer numbers

Range: An infinite set of negative or positive numbers

Language     Any valid XML language value as defined by RFC 1766

Example: en-US

Long  Integer

Range: -9223372036854775808 to

             9223372036854775807

Name XML 1.0 name type

NCName      XML namespace ncname (An XML name without the prefix and colon)

negativeInteger     Range : Negative infinity to -1

nonNegativeInteger        Range : 0 to infinity

positiveInteger      Range : 1 to infinity

nonPositiveInteger Range : Negative infinity to 0

normalizedString   String of character data. Newline,tab and carriage-return characters are converted to spaces before schema processing.

Short Range : -32768 to 32767

String String of character data .(characters that match CHAR from XML 1.0)

Time  Time in hh:mm:ss.sss-TimeZone format . Time zone is optional . The time zone is based on the number of hours ahead or behind coordinated universal time (as define in ISO8601)

Example : 11:45:33.20-05:00 where 05:00 means 5 hours behind universal time .

Token          string of character data . Like normalizedstring the newline,tab and carriage-return characters are converted to spaces before schema processing . In addition , adjacent space characters are collapsed to a single space and leading and trailing spaces are removed .

unsignedByte        Unsigned byte .

Range : 0 to 255

unsignedInt Unsigned integer .

Range : 0 to 4294967295

unsignedlong         Unsigned long integer .

Range : 0 to 18446744073709551615

unsignedShort       Unsigned short integer.

Range : 0 to 65535

QName        XML namespace QName.

NOTATION   XML 1.0 NOTATION attribute type. to retain compatibility between XSD and XML DTD 1.0s. these should only be used with attributes.

NMTOKEN    Name token value. string consisting of one word in a set of letters , digits and other characters in any combination .to retain compatibility between XSD and XML DTD 1.0s. these should only be used with attributes.

NMTOKENS  List of name tokens separated by whitespace. to retain compatibility between XSD and XML DTD 1.0s. these should only be used with attributes.

ID      The ID value must be unique throughtout all elements in the XML document. This attribute is refrenced by other attributes such as idref and idrefs. to retain compatibility between XSD and XML DTD 1.0s. these should only be used with attributes.

IDREF          References the value in an ID attribute within the XML document. to retain compatibility between XSD and XML DTD 1.0s. these should only be used with attributes.

IDREFS        References multiple ID type values separated by whitespace. to retain compatibility between XSD and XML DTD 1.0s. these should only be used with attributes.

ENTITY        XML 1.0 ENTITY attribute type. to retain compatibility between XSD and XML DTD 1.0s. these should only be used with attributes.

ENTITIES     XML 1.0 ENTITIES attribute type. ENTITIES contain a set of ENTITY values.  to retain compatibility between XSD and XML DTD 1.0s. these should only be used with attributes.

 

ایجاد انواع داده دلخواه

همانگونه که در بخش های قبل این مقاله اشاره گردید ، ، در  XSD  این امکان وجود خواهد داشت  که کاربر با استفاده از انواع داده استاندارد (جدول فوق) و اعمال محدودیت های دلخواه بر روی آنان  ، اقدام به تعریف انواع داده ساده (Simple) دلخواه خود نموده و از آنها در توصیف جاری و یا حتی سایر توصیف ها استفاده نماید .

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

پارمترهای محدود سازی (Facets)

خلاصه سازی و یا محدود سازی بستگی مستقیم به نوع داده پایه ای دارد که میخواهیم محدود سازی را بر روی آن اعمال نمائیم . در خصوص داده هائی از نوع رشته‏ ای، پارمترهای مختلف محدود سازی به شرح ذیل می باشند :

        enumeration

        length

        minlength

        maxlength

        pattern

        whitespace

جدول زیر نحوه استفاده از پارامتر الگو(pattern) و اعمال  کنترل های مختلف بمنظور تشریح  الگو را نشان می دهد :

Regular Expression          Explanation  Example(s)

\d      Digit   1,2,3, etc.

[a-z]  Lower case ASCII characters     a,b,c, etc.

[A-Z]  Upper case ASCII characters     A,B,C, etc.

*        Wildcard      A*Z=ABZ,AbnmZ,ADDFZ, etc.

?        Single placeholder A?Z=ABZ,AbZ,ACZ, etc.

+       Inclusive of at least the specified values, but more are allowed .         A+Z=AZ,ABZ,ABCZ, etc.

(Value1|Value2)    Or      (A|Z)+Q=AQ,ZQ,ABQ,ZBQ, etc.

[abcde]        Another way to specify or , but with single character only.        [abc]=a,b, or c

[^0-9]         Any non-digit character   A,B,C,a,b,c, etc.

{integer}     The number of occurrences that there must be of the previous value .          az{2} = azz

\d{3} = 123,456,789,444, etc.

(az){2} = azaz

مثال یک : در مثال زیر نحوه استفاده از پارامتر الگو ، نشان داده شده است :

مثال  یک : نحوه استفاده از پارامتر الگو

<XSD:simpleType name="StudentGPA"   minOccurs="1"   maxOccurs="1">

     <XSD:restriction   base="XSD:string">

            <XSD:length  value="4" />

            <XSD:pattern value="/d{1} . /d{2}" />

     </XSD:restriction>

</XSD:simpleType>

مثال دوم : در مثال زیر نحوه استفاده از پارامتر الگو ، نشان داده شده است :

مثال  دو : نحوه استفاده از پارامتر الگو

<XSD:simpleType name="StudentGPA"   minOccurs="1"   maxOccurs="1">

     <XSD:restriction   base="XSD:string">

           <XSD:enumeration Value = "2.0" />

           <XSD:enumeration Value = "2.5" />

           <XSD:enumeration Value = "3.0" />

           <XSD:enumeration Value = "3.5" />

           <XSD:enumeration Value = "4.0" />

     </XSD:restriction>

</XSD:simpleType>

نکته : در مثال دوم، ارزش های مختلفی  که یک سند برای عنصر StudentGPA می تواند داشته باشد 2.0 یا 2.5 یا 3.0 یا 3.5 یا 4.0 است . اما در مثال اول طول رشته باید چهار حرف بوده و الگوی آن نیز معادل الگوی تعریف شده در pattern باشد . حال سئوال اینجا است که در محدود سازی یک نوع داده ، جایگاه واقعی استفاده از  and و یا or چگونه است ؟. جواب این سئوال پیچیده نیست ، در واقع ، در مواردیکه از خصلت های enumoration و pattern استفاده می گردد ، واقعیت or حکمفرما بوده  و  در صورت استفاده از سایر خصلت ها ، واقعیت and حکم فرما خواهد بود.

در خصوص داده های عددی ، پارامترهای محدود سازی(Facets) به شرح ذیل می باشد :

        enumeration

        fractionDigits

        maxExclusive

        minExclusive

        maxInclusive

        minInclusive

        pattern

        totalDigits

        whiteSpace

مثال : در مثال زیر نحوه استفاده از پارامترهای محدودسازی در خصوص داده های عددی را نشان می دهد :

مثال : نحوه استفاده از پارامترهای محدودسازی در خصوص داده های عددی

<XSD:simpleType name="courseNumber"   minOccurs="0"   maxOccurs="10">

     <XSD:restriction   base="XSD:integer">

            <XSD:minInclusive  value="1000" />

            <XSD:maxInclusive value="3000" />

     </XSD:restriction>

</XSD:simpleType>

در این مثال نوع داده دلخواهی جهت توصیف عنصر شماره درس ایجاد شده است که طبق آن هر دانشجو میتواند تا 10 درس را ثبت نام نموده و شماره هر درس نیز بین 1000 تا 3000 باید باشد . بنابر این در صورتیکه در یک سند XML  که از توصیف فوق استفاده نموده وعنصر course دارای مقدار 4000 و بصورت زیر باشد،پارسر XSD خطائی مبنی بر ایجاد مشکل در نوع داده ارائه و سند اعتبار سنجی نخواهد شد .

<course>4000</course>

در بخش هفتم این مقاله به بررسی  مستند سازی یک توصیف یا سند XSD  خواهیم پرداخت .

________________________________________

 

نظرات 1 + ارسال نظر
hoda جمعه 17 تیر‌ماه سال 1390 ساعت 03:51 ب.ظ

خیلی ممنون عالی بود

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد