امروزه بيشتر شركتها در صنايع مختلف از مول Relational يا (RDBMS) براي ذخيره كردن و مديريت اطلاعات مهم كاري و شغلي استفاده مي كنند. در حقيقت سه عرضه كننده مهم Data Base بزرگترين شركتهاي نرم افزاري در كل دنيا هستند، oracle، CBM (DB2)، Microsoft (S21 Server) در طول ۴ سال گذشته XML به طور غير قابل بحثي هم براي تبادل داده ها و هم براي مديريت contentها به صورت استاندارد درآمده است. بنابراين بسياري از توسعه‌دهندگانData Base و Applicationها با اين مساله روبرو شده اند كه داده هاي XML را به شكل relational تبديل كنند.
بعد از اينكه دلايل imput كردن (اكيومنتهاي XML به Relational Data Base را مطرح كرديم، با استفاده از مثالهاي ساده به صورت مفهومي شرح خواهيم داد كه چگونه هر XML Document را به Relational Data Base map كنيم، در بخش آخر كه به توسعه دهندگان Java اختصاص مي يابد شرح خواهيم داد كه چگونه XML را به طول رابطه اي Data Base مپ كنيم، JDBC و SAXAPI براي هر برنامه‌نويس يك راه جهاني براي mport كردن داكيومنتهاي XML به مدل رابطه‌اي پايگاه داده فراهم
مي كنند.
 
I. مباني XML/ RDB
چرا Data Base هاي رابطه اي و  XML تكميل كننده يكديگر هستند به جاي اينكه در رقابت با يكديگر باشند؟  XML تاثير بسيار وسيعي روي تكنولوژي صنعت داشته است تا آنجا كه بسياري فكر مي كنند Data Base هاي XML سرانجام جايگزين بيشتر RDBMS هاي رايج خواهد شد. حالا كه حرفه اي هاي IT شروع به پياده سازي راه حلهاي قابل دوام براي XML كرده اند در اين زمينه هيجان و برانگيختگي براي تلاش به وجود آمده است.

با توجه به اين تكنولوژي جديد به اين نتيجه مي رسيم كه XML و RDBMS مي‌توانند به عنوان تكنولوژيهاي تكميل كننده هم مطرح شوند در واقع بهايي كه براي استفاده هوشمندانه از اين دو تكنولوژي پرداخته مي شود قابل توجه است براي اينكه توانايي هاي منحصر به فرد اين دو داراي جنبه هاي بسيار متنوعي است.

Relational Data Base ها بلند آوازه هستند به خاطر قابليت جستجو، استفاده از SQL و براي پرس و جوي موثر و كارايي چون از indexها استفاده مي كند آنها Data را به طور كار آمدي ذخيره مي كنند بدون هيچ افزدنگي. چون هر واحد از اطلاعات در يك مكان ذخيره شده است (نرمال سازي).
قابليت اطمينان آنها و قابليت سنجش آنها برابر است و مي توانند در دسترس باشند براي تعداد زيادي از كاربردهاي همروند به علاوه با استفاده از مكانيزم هاي loclcing و caching داراي مديريت قوي و جنبه هاي امنيتي بالايي هستند.
هرچند با وجود ابتكارات اخير در زمينه  XML و تكامل استانداردهاي پديد آمده جديد مثل xquerg هنوز هم  XML از رقابت با تكنولوژي كامل و چندين ساله‌اي مانند RDBMS به عنوان يك قالب براي Data Base دور است.

Abstract كردن دستورالعملهاي قابل خواندن توسط ماشين به متنهاي قابل خواندن توسط انسان بدون قيمت به دست نمي آيد و XML هنوز به عنوان مخزن ذخيره سازي Data و مكانيزم دسترسي كم بازده است توانايي هاي XML در جنبه هاي مختلفي قرار گرفته اند.

۱- Text Base است. ۲- قابل خواندن توسط انسان است. ۳- مستقل از Platform است و ۴- Open Standard است در واقع براي همه Systemها كم كم به صورت Lingua France در مي آيد.
ماهيت خود تشريح كننده آن باعث مي شود كه داده هاي ساخت يافته را بدون هيچ اطلاعات اضافي تشريح كند.
ساختار آن اصلي است. و براي يك سند XML باعث صحت و درستي انتقال و ارائه بيشتر آن مي شود. اينكه بيشتر از هر استاندارد ديگري قابليت درك شدن مستقيم را دارد از پيش معلوم است كه در آينده به دليل قابليت اطمينان، قابل سنجش بودن و كارايي بالايي Save شدن Dataها در مول Relational حالا ديگر ضروري است كه بتوانيم  XML را به Relational Data Base، map كنيم.

۲- چرا مستندات  XML را به Relational Data Base، import كنيم؟

a- تبادل داده ها
حرفه ها در سراسر صنايع بر اين تلاش هستند كه XML را سازگار كنند با اينكه Data را بين Application ها (A2A) و سازمانها (B2B) به اشتراك بگذارد XML يك راه بديهي است براي سيستمهاي ناهمگن (Heterogenous) كه داده ها را در شبكه به اشتراك بگذارند. به علاوه به عنوان روش استانداردي براي ارسال و دريافت داده ها توسط شركتهاي نرم افزاري پذيرفته مي شود. در واقع پيام رساني XML به صورت تصاعدي جايگزين قالب اختصاصي EDI مي شود به منظور انجام معاملات Bussiness to Bussiness ماهيت خود تشريحي  XML باعث تبادل آسان تراكنشي اطلاعات بين شركاي حرفه اي سيستمهاي ناسازگار مي شود، بنابراين به طور كلي ارتباطات B2B را آسان مي كند و آن را جايگزين EDI مي كند.

b-  XML Data Repositorg
جنبه پرس و جويي قدرتمند RDBMS مي توانند مثل يك اهرم به كار رود هنگام تجزيه سندهاي بزرگ  اگر اندازه فايلهاي XML از يك حد مشخصي تجاوز كند يا خيلي زياد باشد، سودمند است كه اطلاعات را به قالبي كه بتواند به طور موثر بازيابي شود، تبديل كنيم.
بزرگترين رقيبان در زمينه XML Data Base، Oracle، S2L Server هستند.

متاسفانه اينترفيس RDMS XML از يك فروشنده به فروشنده ديگر متفاوت است و قابل حمل نيست.
به عنوان باقيمانده اين مقاله سعي دارد ثابت كند كه تفاوت ماهيتي بين شكل ذخيره‌سازي داده در اين دو فرم باعث مي شود map كردن يكي به ديگري بسيار سخت شود و import كردن سندهاي XML به Relational Data Base لازم است.
هرچند كه اين يك پروسه بحراني است كه تجارت انتخاب كرده است.

c- امكان پيشرفت Relational Data توسط سرويسهاي وب
سرويسهاي وب همان علاقه اوليه اي ار كه Java، S سال پيش XML دو سال پيش در صنعت كامپيوتر داشت را تجربه مي كنند.
و توسط تمام غولهاي نرم افزار مثل Inicrosoft، NET و FBM و Sun و Oracle و HP و… پشتيباني مي شود. يك سرويس وب يك Application Interface وابسته به برنامه را توسط Remote Application ها قابل دستيابي مي كند همانطور كه يك HTML Server يك واسط كاربر را براي Bruser قابل دستيابي مي كند.
سرويسهاي وب با استفاده از يك پروتكل مبني بر XML به نام Simple Abject Access Protocol (SOAP) قابل دستيابي مي شوند.

همچنين Data به عنوان نوع XML باز گردانده مي شود. بنابراين با استفاده از سرويسهاي وب داده هاي XML مي توانند به صورت Transparent با Data Base، import شوند.
توسعه دهندگاني كه قصد دارند كه از پايگاه داده Relation شان به عنوان يك سرويس وب استفاده كنند، قانونهاي Mapping اين مقاله را بسيار آموزنده يافته اند.

۳- مدل Relational در مقابل نمايش سلسله مراتبي Data:
هنگامي كه به map كردن XML به يك Relational Data Base نگاه مي كنيم با دو ساختار داده اي كاملاً متفاوت مواجه مي شويم.

a- ساختار داده اي Relational:
يك پايگاه داده Relational به بهترين نحو به عنوان يك اسكماي Data Base توصيف شده است و توسط موجوديتهاي گوناگون (جداول) كه ساخته شده براي پاسخگويي به نيازهاي كاربران تعريف شده است Relational Data Base توسط مجموعه اي از جداول كه توسط روابط يك به يك، يك به چند و چند به چند به هم پيوند داده مي شوند نشان داده مي شود هر جدول از مجموعه ثابتي از ستونهاي ثابت (كه فيلدهم ناميده مي شوند) ساخته مي شوند كه همان Attoibute ها در Data Model هستند.

همچنين تعداد نامحدودي از سطرها (يا ركوردها) كه در هر جدول وجود دارند. يك پايگاه داده رابطه‌ي از سيارها از Data Type ها پشتيباني مي كند هر جدول با يك كليد منحصر به فرد (Primary Key) مشخص مي شود كه بقيه جداول مي توانند از طريق كليد خارجي خودشان به اين كليد اصلي ارجاع داشته باشند طراحي جداول Relational، Data Base را جواب تمام نيازهاي موجود مي كند وتوسط نرمال سازي تمام Dataها با جزئيات قابل استفاده اند چون هر بخش غير كليدي داده تنها در يك مكان حق قرار گرفتن دارد. (نرمال سازي)

b- ساختار داده اي XML
در مقايسه، بهترين راه نمايش داده متعلق به XML، ساختار درخت است و روابط بين عناصر نيز توسط Containment بيان مي شود. هر نود درخت توسط يك عضو متعلق به XML مشخص مي شود كه مي تواند يك يا چند Attribute را در خود نگاه دارد درجه پيچيدگي اين درخت  توسط يك DTD مشخص مي شود (Document Type Definition) يا يك اسكماي XML.

توانايي XML بعضي وقتها نقطه ضعف آن است چون مي تواند يك قالب همه منظوره داشته باشد و يك ساختاري پايه كه هر عنصر داده اي را تقريباً همه جا نشان دهد، در مقابل مي تواند به عنوان يك ساختار سلسله مراتبي محكم در Application هاي ديگر مطرح شود كه همه اينها بستگي به DTD يا اسكماي XML اي دارد كه آن را مشخص مي كند. اگرچه ذاتاً نمايش دادن داده هاي رابطه اي براي XML سخت است چون به سختي مي تواند مجموعه اي از روابط موجود بين جداول رابطه اي در يك سند XML را نمايش دهند Constraint هايي كه در RDBMS وجود دارند و باعث مي شوند كه بسيار كارا باشد در XML وجود ندارند به علاوه قالب بندي شل XML به كلي با استراتژيهاي كاراي XML ضديت دارد بنابراين مپ كردن يك سند XML به يك پايگاه داده رابطه اي در بيشتر حالتها پيچيده است همچنين نياز به يكسري تخصصها و مهارتها هم براي RDMS  و هم طراحي داده هاي XML هست و همينطور يك متد براي مپ كردن هر عنصر از اسكماي XML به اسكماي  Data Base.

۴- XML Schemas VS.DTDS
براي رسيدن به مقصودمان بايد راهي بيابيم براي تعريف دقيق ساختار درختي XML قبل از شروع به map كردن آن، بخشي از توانايي XML از انعطاف پذيري آن در ساختن عناصر و Attribnte ها ناشي مي شود بنابراين براي تعريف و معتبر كردن ساختار XML به فايل ديگري نياز داريم در ابتدا به اين خاطر كه XML از نسخه قديمي تري به نام SGML پديد آمده تنها توسط DTD ها تعريف مي شود.
امروزه، با وجود اينكه اكثر سندهاي XML توسط DTDها تعريف مي شوند، اسكماهاي XML كه توسط W3C تعريف شده اند- به جاي DTDها جايگزين مي‌شوند تا بر محدوديتهايي كه ماهيتاً در DTDها وجود داشت غلبه كنند به اين دليل مايكروسافت براي خودش فرمت و شكلي از اسكماي XML تعريف كرده XDR (XML Data Reduced).

ممكن است ظرف ۳-۲ سال آينده  اسكماي XML راهي جهاني شود براي نشان دادن ساختار اطلاعات مربوط به XML در مقايسه با DTDها كه از Syntax متفاوتي استفاده مي كنند اسكماهاي XML تنها يك Document ديگر از XML است در نتيجه قابل توسعه است. به علاوه آنها از مجموعه ارزشمندي از انواع داده و محدوديتهاي عناصر كه خيلي مهمند پشتيباني مي كنند همچنين مي توانيم تعداد عناصر تكرار شده را هنگامي كه داده تعريف مي شود نگاه داريم كه اين كار در DTDها ممكن نبود.

به اين خاطر كه اسكماهاي XML، همان داكيومنتهاي XML هستند به راحتي مي‌توانند توسط Style Sheet هاي XML نمايش داده شوند براي نشان دادن سازگاري سريع اين استاندارد جديد بعضي از XMLها با گروهها كار مي كنند مانند Legal XML كه در نظر دارد حركتي به سمت XML Schema داشته باشد. در بقيه اين مقاله ها از XML Schema به جاي DTD استفاده مي كنيم به خاطر مزايايي كه در بالا يادآور شديم و همينطور براي آشنا كردن خوانندگان با استاندارد جديد.
در بخش ۲ از كلمات كليدي Chice و Sequence استفاده خواهيم كرد كه توسط اسكماي XML W3C تعريف شده است.

II. Unmarshaling به وسيله مثالها:
XML Schema پيش از ۴۴ نوع داده (Data Type) درون خود دارد در مقايسه با DTD كه تعداد كمي Data Type دارد، به عنوان پيامد انواع داده XML Schema مي‌توانند به درستي به نوع داده هاي مدل Relational Data Base، map شوند.

۱- mapping مبني بر Table و جدول
قبل از Unmarshaling سندهاي پيچيده XML به مدل Relational Data Base، با آسانترين تغيير شكل به يك Relational Data Base شروع مي كنيم: Mapping مبتي بر جدول
در زير سند XML را Unmarshall مي كنيم كه دو سري از كارمندان را در يك سازمان ليست مي كند.
همانطور كه طراحي شده اين داده مي تواند به آساني در يك جدول Relationa مانند زير Insert شود.

به خاطر Unique بودن، EMPND  مي تواند به عنوان كليد اصلي در اين جدول استفاده شود همچنين اگر نتوانستيم يك ستون يا تركيبي از چند ستون بيابيم كه خاصيت Unique بودن را داشته باشد خودمان بايد يك ستون اضافي ايجاد كنيم كه نقش كليد اصلي را بازي كند.
هنگامي كه به Relatioonal Data Base، map مي كنيم، Attributeهاي XML مي‌توانند به ستونها مپ شوند دقيقاً با همان روشي كه عناصر XML مي توانند مپ شوند هر دوي آنها يك نوع از رابطه را براي RDBMS نمايش مي دهند: (Containment) بنابراين داده متعلق به XML مي توانند به همين شكل map شود.

در واقع روش آخر بهتر است چون فشرده تر است و به جدول Relational، نزديكتر است بنابراين آسان تر اينست كه سندهاي XML را با اسكماي XML مپ كنيم به شكل زير كه يك عنصر تركيبي با ليستي منحصر به فرد از Attribute ها را نشان مي دهد.
اين اسكماي XML حداقل سندهاي XML را نشان مي دهد با تنها يك نوع تركيبي و با ليستي از Attribute هاي تكراري.

۲- Exressing Containment
اكثر سندهاي XML ساختار پيچيده تر و سطوح Containment سخت تري از مثال بالا دارند فرض مي كنيم كه سند XML شامل آدرس خانه هر كارمند است.
طابق با خصوصايت W3C، يك نوع پيچيده داراي يك يا چند عنصر است، مندرجات تركيبي و بعضي از Attributeها جايي كه يك نوع ساده مقدار داده اي منفردي را نگاه مي دارد. براي هر عنصر با نوع ساده، نيازمند اين هستيم كه جدول جديدي بسازيم كه داده مطابق با آن را نگاه دارد كه در اين مثال اطلاعات مربوط به آدرس خانه كارمند است. به عنوان يك قانون عمومي يك نوع Complex توسط كليد اصلي به جدول map مي شود و يك نوع Single (ساده) به يك ستون map مي‌شود، در اغلب موارد ما مطمئن نيستيم كه مقدار يك عنصر خاص XML، منحصر به فرد باشد پس بايد هنگام map كردن يك كليد اصلي ايجاد كنيم.

بنابراين همزمان مجبوريم كه يك كليد اصلي ايجاد كنيم كه مقدارش خارج از جداول Relational بي معني است تا بتوانيم قانون جامعيت بازگشتي را حفظ كنيم. هنگام Import كردن داكيومنتهاي Complex، XML تعداد بسياري از كليدها ممكن است ساخته شوند و Join هاي بسياري ممكن است صورت بگيرد اگر تعداد Join بين جداول زياد شود، باعث كاهش كارايي مي شود و همينطور باعث مي شود كه اسكماي Data Base بسيار پيچيده شود و از حالت قابل نگهداري بيرون بيايد.
توجه: براي اينكه بتوانيم Primary Key را به صورت خودكار در يك

Relational Data Base ايجاد كنيم مي توانيم از نوع داده Identity استفاده كنيم كه توسط اكثر پايگاههاي داده رابطه اي پشتيباني مي شود.
هنگامي كه عنصري شامل عنصر ديگري است و يا اينكه Attribute كه تنها يك پدر دارد از همان نوع خودش و هيچ عنصر تكراري ندارد رابطه اي كه به آن نياز داريم از نوع يك به يك است همينطور مي توانيم يك كليد خارجي در هر كدام از دو جدول انتخاب كنيم دو مثال ما، مي خواهيم كليد خارجي را به جدول Home Adress اضافه كنيم كه با آن به جدول كارمندان ارجاع داشته باشيم.
يا براي پردازش سريعتر مي توانيم يك ستون اضافه كنيم كه به Home Address در جدول Employe ارجاع داشته باشيم.

۳- بعضي از قوانين ساده Mapping
a- ترتيب عناصر در يك سند XML با ترتيب ستونها در جدول نشان داده مي‌شود و ترتيب عناصر و Attribute در اسكماي XML توسط كلمه كليدي <xsd:Sequence> بيان مي شود براي اينكه همان ترتيبي كه داده هادر مدل Relational دارند حفظ شود بايد مطمئن شويم كه سطرها توسط Primarykag (كليد اصلي) مرتب شده اند و همان ترتيب عناصر XML را دنبال مي كنند. اگر چنين نبود بايد يك ستون اضافه كنيم كه اعداد صحيحي را در خود دارد كه اين ترتيب را مطابقت مي دهد.

b- عناصر دلخواه XML
اگر بخواهيم نشان دهيم كه يك عنصر XML دلخواه است ستون نظير آن را Anllable مي كنيم براي مثال اگر Ittredate يك Attribute دلخواه باشد (minoccurs=0) ستون مپ شده بايد قابليت Null شدن را داشته باشد. مدل XML آن به صورت زير است.
در مثال ما عنصر Jub ممكن است تنها شامل عناصر زير باشد.
CEO، CTO و CFO و DIRECTOR و MANAEER و GNGINEER و SALESMAN، CONSULTANT و ASSISTANT.
اسكماي XML زير اين روش را نشان مي دهد.