

XML برای برنامه نويسان VB و ASP
XML چيست ؟
• يک زبان نشانه گذاری مبتنی بر تگ است .
• يک زبان متا ديتا است . زبانی که امکان تعريف ساير زبان ها را فراهم می نمايد.
• روشی برای ارائه داده است .
• نسبت به حروف بزرگ و کوچک دارای حساسيت است .
• خود را بگونه ای مناسب تشريح می نمايد .
• خوانائی بالائی دارد .
• يک روش قدرتمند برای اشتراک و ارسال اطلاعات بين برنامه ها ، سيستم ها و پردازه ها است .
XML شامل موارد زير نيست :
• درگير نمايش اطلاعات نخواهد شد .
• مالکيت آن در انحصار يک شرکت و يا توليد کننده خاص نمی باشد .
• مورد حمايت تمام مرورگر های وب نمی باشد .
• يک بانک اطلاعاتی نيست .
XML ، امکان تفکيک داده از نمايش را فراهم می نمايد( XML نحوه تشريح داده ها ، Html نحوه نمايش داده ها ) . با استفاده از XML ، می توان سندهای حاوی اطلاعاتی را ايجاد که بسادگی از يک محل به محل ديگر ارسال گردند. XML استانداردی برای مبادله داده های ساختيافته بين عناصر نرم افزاری ، برنامه و سيستم ها است .
آشنائی عملياتی با XML
مثال : يک سندXML |
<?xml version="1.0"?> |
در رابطه با مثال فوق ، ذکر موارد زير ضروری است :
• محتويات سند فوق بصورت متنی است .
• بر خلاف Html ، تگ ها جملگی بدرستی استفاده شده و بنوعی داده مورد نظر خود را تشريح می نمايند .
• همانگونه که مشاهده می شود ، XML امکان داده های سلسله مراتبی تودر تو را حمايت می نمايد .
• سند فوق با توجه به تعريف مناسب تگ ها ، بخوبی خود را تشريح می نمايند .
جدول زير برخی از مفاهيم و تعاريف اوليه در رابطه با مثال فوق ، را نشان می دهد .
توضيحات | ويژگی | ||||||||
<?xml version="1.0"?> | تعريف XML. هر سند XML، می بايست با تعريف XMLآغاز گردد. تعريف فوق می بايست بصورت حروف کوچک انجام گردد . تعريف XMLبخشی از قسمت Prologيک سند XMLاست . در مثال ارائه شده ، تنها بخش موجود در prologهمين تعريف است . در بخش Prologمی توان DTDو يا XSLرا نيز مشخص نمود. | ||||||||
<?xml version="1.0"?> | المان های XML. سندهای XMLاز المان های متفاوتی تشکيل می گردند. يک المان دارای يک تگ آغاز ، محتويات و يک تگ پايان است . <ram>128 MB</ram> . تمام سندهای XMLدارای يک المان ريشه می باشند . در مثال ارائه شده mycomputer بمنزله المان ريشه است . | ||||||||
<ram>128 MB</ram> | اسامی المان ها . نام درنظر گرفته برای المان ها ، می بايست با يک حرف ، _ ، و يا يک کالون شروع شود. هر کاراکتر بعد از حرف اول ، می تواند يک حرف ، يک عدد ، يک _ يک کالون ، يک Hyphenو يا يک نقطه باشد . اسامی المان ها نمی تواند شامل فضای خالی باشد . | ||||||||
| محتويات المان ها . متن موجود بين تگ های آغاز و پايان بعنوان محتويات يک المان در نظر گرفته شده و می تواند شامل : > ، < و & باشد. با توجه به استفاده خاص از کاراکترهای فوق در سندهای XML، در صورت ضرورت به استفاده از حروف فوق در متن محتويات يک المان ، می توان از کد معادل آنها استفاده کرد . مثلا" در صورت تعريف المان <formula> ، می توان محتويات آن را بصورت زير مشخص می گردد . | ||||||||
المان های تودرتو صحيح : | المان های تودرتو . تمام المان های تودرتو بطور کامل همراه المان های مادر خود قرار گرفته و می بايست شامل تگ های آغاز و پايان در بلاک داخلی مربوطه باشند . در صورتيکه المان های فرزند دارای تگ های پايان در ساختار داخلی مربوطه نباشند ، سند XML درست نخواهد بود . در مثال زير المان <brand> فرزند المان <case> است . بنابراين می بايست تگ پايان آن نيز درون المان <case> قرار گيرد . | ||||||||
روش اول : | المان تهی . يک المان تهی را می توان به دو صورت مشخص نمود . در مثال ارائه شده يک المان تهی تعريف شده است : |
فايل XML زير ، شامل داده های مشابه با مثال قبلی بوده با اين تفاوت که برخی از اطلاعات با استفاده از خصلت ها ارائه شده اند .
مثال : يک سندXML با تاکيد بر استفاده از خصلت ها برای ارائه اطلاعات اضافه |
<?xml version="1.0"?> |
جدول زير برخی از مفاهيم و تعاريف اوليه در رابطه با مثال فوق ، را نشان می دهد .
توضيحات | ويژگی |
<element | خصلت ها . المان PC، دارای سه خصلت است . |
<!-- توضيحات دلخواه--> | توضيحات . برای ارا ئه توضيحات در فايل های XML از فرم عمومی روبرو استفاده می شود . |
<?xml version="1.0"?> | Namespace. فرض کنيد يک سند XMLرا ايجاد و قصد ترکيب آن با يک سند XMLديگر را داريم . يکی از مسائلی که ممکن است در زمان ترکيب دو سند مطرح گردد ، استفاده از اسامی مشابه برای المان هائی است که دارای مفهومی کاملا" متفاوت می باشند . ( مثلا" در يک سند از المان <name> بمنظور مشخص نمودن نام يک شهر استفاده شده و در سند ديگر از المان <name> برای مشخص نمودن نام کتاب استفاده شده است ) . بمنظور حل مشکل فوق از namespaceاستفاده می گردد . namespace، مجموعه ای از المان ها بهمراه خصلت های مربوطه بوده که به يک آدرس URLمرتبط تا منحصر بفرد بودن اسامی المان ها را تضمين نمايد . برای تعريف يک namespaceاز خصلت xmlnsبهمراه تگ شروع يک المان استفاده می گردد . پس از تعريف namespace، زمينه استفاده از آن برای هر يک از المان های موجود در سند xmlفراهم می گردد .در مثال روبرو ، دو namespaceبا نام pc و orgتعريف و در ادامه ساير المان ها ی موجود در سند از آنان استفاده نموده اند . |
<? name data?> | دستورالعمل های پردازش . از دستورالعمل های پردازش بمنظور ارسال اطلاعات خاص برای برنامه ای که قصد پردازش سند XMLرا دارد ، استفاده می گردد . تعريف XMLکه در ابتدای فايل های XMLقرار می گيرد ، نمونه ای از اينگونه دستورات است . برخی از دستورات پردازش که با xmlشروع می گردند، رزو شده می باشند . |
Document Type Definition ) DTD)
• مولفين سندهای XML می توانند ساختار دلخواه و مورد نظر خود را برای تشريح داده های مربوطه ايجاد نمايند .
• يک مولف سندهای XML ، نمی تواند اين اطمينان را داشته باشد که ساختار ايجاد شده برای سند ها ، توسط ساير مولفين سندهای XML تغيير نمی نمايد .
• ما بدنبال روشی هستيم که اين اطمينان را ايجاد نمايد که تغيير تصادفی ساختار يک سند XML تحقق پيدا نخواهد کرد .
• DTD ، روشی برای تشريح و مسنتد سازی ساختار استفاده شده در يک سند XML است . برای اعبتار سنجی يک سند XML وجود DTD ضرورت دارد ( ممکن است از تکنولوژی مشابه استفاده گردد )
• مولفين سندهای XML ، با استفاده از مجموعه ای قوانين که نوشته خواهند شد ، يک سند XML را معتبر می نمايند .
• يک سند XML ، زمانی " خوش شکل" ناميده می شود که گرامر مربوط به XML در آن رعايت شده باشد. صرف "خوش شکل " بودن يک سند XML ، بمنزله معتبر بودن آن نيست .
• با استفاده از DTD ، المان های مورد نياز يک سند XML تعريف ، المان های اختيار ی ، تعداد دفعات تکرار يک المان و ترتيب المان ها از لحاظ استقرار در يک سند XML مشخص می گردد.
• DTD ممکن است نوع داده های موجود در سند XML را نيز مشخص نمايد .( مشخص نمودن نوع در رابطه با المان و خصلت ها صدق خواهد کرد ) .
• DTD بعنوان بخشی از استاندارد XML بوده که توسط کنسرسيوم وب ارائه شده است .
• در زمان اعتبار سنجی يک سند XML از طريق يک DTD و بکمک بخش اعتبار سنجی پارسر ، سند XML بمنظور تشخيص حضور تمام المان ها و عدم تعريف يک المان بررسی خواهد شد . ساختار سلسله مراتبی المان ها ی تعريف شده در DTD نيز بررسی خواهد شد . مقدار تمامی خصلت ها نيز بمنظور اطمطنان از صحت موارد اعلام شده با مشاهده شده ، نيز کنترل می گردد .
• هر نوع اطلاعات لازم در خصوص يک سند XML ( از بالا تا پايين يک سند ) توسط DTD تعريف و معتبر خواهد شد .
• يک DTD می تواند بصورت داخلی و يا خارجی استفاده گردد . در مدل داخلی ، اطلاعات مربوط به DTD بهمراه سند XML قرار گرفته و يک فايل را تشکيل خواهند داد ( سند XML و DTD مربوطه ) . در مدل خارجی ، اطلاعات مربوط به DTD در يک فايل مجزا و با انشعاب dtd ذخيره و در سند XML مربوطه به آن مراجعه خواهد شد .
• در صورت تعريف يک DTD بصورت خارجی ، امکان مراجعه به آن توسط سندهای XML متعددی وجود خواهد داشت . با توجه به گفته فوق ، استفاده از روش فوق دارای مزايای عمده نسبت به حالتی است که DTD را بصورت داخلی و همراه با سند XML استفاده نمائيم .
• برای برنامه هائی که اطلاعات خود را بصورت XML مبادله می نمايند ، DTD مهم خواهد بود .
• يک نمونه DTD داخلی
مثال : يک نمونه DTDداخلی |
<?xml version="1.0"?> |
• يک نمونه DTD خارجی
مثال : يک نمونه DTDخارجی |
<?xml version="1.0"?> |
سندهای XML ، می توانند شامل يک DTD اختياری باشند . سندهای XML از گزينه فوق بمنظور تضمين فرمت مشخص شده استفاده می نمايند. مثال زير يک سند XML بهمراه DTD آن را نشان می دهد . سند XML در بخش اول مقاله ارائه شده است . در مثال فوق DTD بصورت داخلی و همراه سند استفاده شده است .
مثال : يک سندXMLبهمراه DTDمربوطه |
<?xml version="1.0"?> |
يکی ديگر از روش های استفاده از DTD در يک سند XML ، بصورت خارجی است . در اين حالت اطلاعات مربوط به DTD در يک فايل مجزا و با انشعاب dtd ذخيره و در ادامه در سند XML به آن مراجعه می گردد .
مثال : بخش آغازين يک سندXML و نحوه استفاده از DTDبصورت خارجی |
<?xml version="1.0"?> |
سندهای XML خوش شکل و معتبر
• سند می بايست دارای يک و يا چند المان باشد .
• سند می بايست دارای يک المان ريشه بوده که ساير عناصر با يک ساختار مناسب ( تودر تو ) به آن متصل می گردند .
• تمام المان های موجود در سند می بايست دارای تگ شروع و پايان باشند .
يک سند "خوش شکل" XML که شامل يک DTD ( داخلی و يا خارجی ) می باشد ، بعنوان يک سند معتبر در نظر گرفته خواهد شد . پارسر XML ( پردازنده نيز ناميده می شود ) با استفاده از يک DTD قادر به معتبر نمودن يک سند XML خواهد بود . بررسی جزئيات مربوط به تکنولوژی DTD از حوصله اين مقاله خارج است .
XML-Data and Schema
• برای نوشتن DTD لازم است که با يک زبان جديد آشنا شويم .
• DTD انتظارات لازم در خصوص نوع داده ها را بخوبی تامين نمی نمايد .
• DTD قابليت بسط و توسعه را ندارد .
XML-Data ، با هدف حل مشکلات فوق ايجاد شده است . XML-Data يک زبان مبتنی بر XML بوده که از آن بمنظور تشريح پيش نويس (Schema) يک سند استفاده می گردد . زبان فوق ، بسط پذير، انعطاف پذير و قدرتمند است . فايل های Schema با انشعاب xsd ذخيره می گردند . فايل های Schema خود بمنزله سندهای XML بوده و المان ريشه آنان Schema نام دارد . در ابتدای فايل های Schema ، می بايست namespace مربوطه تعريف گردد . جدول زير XML-Data Schema ، معادل DTD ارائه شده در مثال قبل را نشان می دهد :
مثال : XML-Data Schema مربوط به سند XML |
<schema xmlns = "http://www.w3.org/2001/XMLSchema"> |
بررسی جزئيات تکنولوژی Schema از حوصله اين مقاله خارج است .
آيا معتبر سازی يک سند ، ضرورت دارد ؟
*ساختار سلسله مراتبی اشياء در XML DOM
ساختار اشياء در XML DOM ، بصورت سلسله مراتبی و تصويری مناسب از اشياء موجود در سند XML است . شکل زير يک نمونه از ساختار سلسله مراتبی اشياء در XML DOM را نشان می دهد ..
اشياء XML DOM
• شی Document . شامل سند XML است . ( منظور گره ای با نام Document نيست )
• شی node . شامل يک گره در سند XML است .
• شی nodeList . شامل ليستی از گره های همزاد ( برادر و يا خواهر ) است . برخی از متدهای DOM يک شی nodeList را بعنوان خروجی برمی گردانند.
• شی ParseError . از شی فوق بمنظور بازيابی آخرين مورد خطاء در رابطه با پارسينگ استفاده می شود .
اشياء فوق دارای مجموعه ای از متدها و خصلت ها بوده و با استفاده از يک زبان اسکريپت ، می توان عمليات مورد نظر در رابطه با يک سند XML را بکمک آنها انجام داد .
مثال : فرض کنيد سند XML ارائه شده در بخش های قبل را داشته باشيم ( mycomputer.xml)
مثال : يک سندXML نمونه (mycomputer.xml) |
<?xml version="1.0"?> |
برنامه زير، نام اولين گره موجود در سند XML را برمی گرداند . در برنامه فوق تمام اسکريپت ها بر روی مرورگر سرويس گيرنده اجراء و به زبان VBSrcipt نوشته شده اند . اطلاعات فوق را در فايلی با نام دلخواه ذخيره و در ادامه آن را توسط مرورگر فعال و مشاهده نمائيد .
مثال : بازيابی اولين گره موجود در سند mycomputer.xml ( نسخه VBScript) |
<HTML> |
در صورت مشاهده صفحه فوق در مرورگر ، خروجی زير مشاهده خواهد شد : |
برنامه زير، نام اولين گره موجود در سند XML را برمی گرداند . در برنامه فوق تمام اسکريپت ها بر روی مرورگر سرويس گيرنده اجراء و به زبان JavaScript نوشته شده اند .( نسخه فوق با نسخه نوشته شده توسط VBScript دارای اختلاف اندکی می باشند ) . اطلاعات فوق را در فايلی با نام دلخواه ذخيره و در ادامه آن را توسط مرورگر فعال و مشاهده نمائيد .
مثال : بازيابی اولين گره موجود در سند mycomputer.xml ( نسخه JavaScript) |
<HTML> |
در صورت مشاهده صفحه فوق در مرورگر ، خروجی زير مشاهده خواهد شد : |
در ادامه بخش های متفاوت دو مثال فوق تشريح خواهند گرديد .
استقرار يک سند XML در حافظه
مثال : کدهای لازم بمنظور ايجاد يک نمونه شی XML DOMو استقرار سند XMLدر حافظه |
Set xmlDoc = CreateObject("Microsoft.xmldom") |
در مثال فوق ،از متد async مربوط به شی document بمنظور استقرار سند XML در حافظه بصورت همزمان استفاده شده است . بدين ترتيب مرورگر قبل از انجام هر گونه پردازش بر روی سند XML ، در انتظار استقرار تمام سند در حافظه باقی خواهد ماند . در صورتيکه از کد فوق استفاده نگردد ، مرورگر بمحض دريافت بخشی از سند ، عمليات پردازش را آغاز خواهد کرد . در برنامه فوق از متد Load بمنظور استقرار يک فايل XML در حافظه استفاده شده است . در صورتيکه قصد استقرار يک سند XML را از طريق يک رشته داشته باشيم ، می توان از متد LoadXML استفاده کرد .
در نسخه جاوا اسکريپت مثال فوق ،با استفاده از شی AxtiveXObject يک نمونه از شی XML DOM ايجاد شده است . کدهای فوق بصورت زير می باشند :
مثال : کدهای لازم بمنظور ايجاد يک نمونه شی XML DOMو استقرار سند XMLدر حافظه |
xmlDoc = new ActiveXObject("Microsoft.xmldom") |
المان سند
Set xmlRoot = xmlDoc.documentElement
کد معادل جاوا اسکريپت بصورت زير است :
xmlRoot = xmlDoc.documentElement
مجموعه ChildNodes
Set xmlNode = xmlRoot.childNodes(0)
کد معادل جاوا اسکريپت بصورت زير است :
xmlNode = xmlRoot.childNodes(0)
تمام مجموعه ها در XML با صفر شروع می گردد . بنابراين اولين المان همواره صفر، دومين المان يک و ... خواهد بود.
نمايش XML بر روی صفحه
divHere.innerHTML = "<H3>" & xmlNode.nodeName & "</H3>"
کد زير نحوه نمايش داده های XML در يک صفحه Html را با استفاده از خصلت innerHTML نشان می دهد ( نسخه حاوا اسکريپت )
divHere.innerHTML ="<H3>" + xmlNode.nodeName + "</H3>"
صدا زدن کدهای اسکريپت DOM
<BODY onload="getXML()">
<H1>Mycomputer XML Example</H1>
<DIV ID="divHere">
</DIV>
</BODY>
</HTML>
پس از ارائه توضيحات لازم در خصوص مثال های ارائه شده ، در ادامه نحوه انجام ساير عمليات بر روی يک سند XML بکمک XML DOM تشريح می گردد .
تکرار در بين گره های يک سند
با استفاده از مجموعه childNodes ، می توان عمليات تکرار در بازيابی تمام درخت XML مربوط به يک سند XML را انجام داد . برنامه زير تمام اطلاعات موجود در درخت XML را بازيابی و آنها را با يک فرمت قابل قبول ( مجموعه ای از جداول ) در خروجی نمايش خواهد داد . در اين برنامه اطلاعات مربوط به اولين سطح گره های موجود ( pc,case,docking_station) با استفاده از يک حلقه تکرار استخراج و برای بازيابی اطلاعات موجود در دومين سطح گره ها ( type, brand, model ) از يک حلقه تکرار ديگر استفاده شده است .
مثال : بازيابی تمام گره های موجود در يک سند XMLو نمايش آنها با يک فرمت مناسب | ||||||||||||||||||||||||
<HTML> | ||||||||||||||||||||||||
خروجی برنامه فوق پس از مشاهده صفحه مربوطه در مرورگر به شکل زير خواهد بود :
docking_station
|
نسخه جاوا اسکريپت برنامه فوق به شکل زير است : ( فقط حلقه های تکرار مشخص شده اند )
مثال : بازيابی تمام گره های موجود در يک سند XML (نسخه جاوااسکريپت ) |
xmlRoot = xmlDoc.documentElement |
بازيابی يک گره خاص و يا مجموعه ای از گره ها
nodelist = document.getElementsByTagName(tagname)
در گرامر فوق :
• nodelist ، يک شی از نوع nodelist است .
• document ، يک شی از نوع document است .
• tagname ، رشته ای بمنظور مسخص نمودن يک المان است . مثلا" "case/brand" . برای بازيابی تمام درخت XML می توان از "*" استفاده کرد .
متد getElementsByTagName ، يک شی nodeList را بر می گرداند . شی nodeList ذاتا" معادل مجموعه childNodes است . شی فوق دارای يک خصلت ( lenght) و سه متد ( item,nextNode,reset) است . از متد item مربوط به شی nodeList بمنظور بازيابی يک آيتم از مجموعه گره های موجود در nodeList استفاده می گردد . در مثال زير از متد getElementsByTagName بمنظور بازيابی متن مربوط به المان pc/ram استفاده شده است .
مثال : بازيابی يک المان خاص با استفاده از متد getElementsByTagName( نسخه Vbscript) |
Function getXML() |
مثال: بازيابی يک المان خاص با استفاده از متد getElementsByTagName( نسخه javascript) |
function getXML() { |
*بازيابی خصلت ها
تمام اطلاعات در سند های XML از طريق محتويات المان ها ذخيره نشده و در برخی حالات از خصلت مربوط به يک المان استفاده و اطلاعات بکمک آن ذخيره می گردد . بمنظور بازيابی اطلاعات ذخيره شده در خصلت مربوط به يک المان می توان از مجموعه attributes استفاده کرد . برای ارائه توضيحات کاربردی بيشتر ، فايل mycomputer.xml ( در مثال های قبل از آن استفاده شده بود ) را با اندک تغييراتی که عمدتا" به استفاده از خصلت بهمراه المان ها بر می گردد ، تغيير نام و يک فايل ديگر با نام mycomputer1.xml را ايجاد که تگ های pc و case آن بصورت زير باشند :
<pc type="Laptop" brand="Toshiba" model="Tecra 8000">
...
<case brand="USL">
برنامه زيرخصلت های مربوط به المان PC را در خروجی نمايش می دهد .
مثال : نمايش خصلت های يک المان ( نسخه VBScript) |
<HTML> |
خروجی برنامه فوق پس از مشاهده صفحه مربوطه در مرورگر به صورت زير است : |
مثال : نمايش خصلت های يک المان ( نسخه JavaScript) - فقط حلقه تکرار آورده شده است . |
for (intI=0;intI <= xmlPCNode.attributes.length-1;intI++) { |
بمنظور بازيابی محتويات يک خصلت خاص، می توان از متد getAttribute مربوط به شی node استفاده کرد . مثلا" کد زير خصلت brand مربوط به المان case را بازيابی می نمايد :
Set xmlNodes = xmlDoc.getElementsByTagName("case")
Set xmlPCNode = xmlNodes.item(0)
divHere.innerHTML = xmlPCNode.getAttribute("brand")
تاکنون به بررسی برخی از امکانات XML DOM بصورت بسيار محدود اشاره شد. XML DOM دارای مجموعه ای از خصلت ها و متد ها ی متنوع ديگر است . شرکت ماکروسافت نيز مجموعه ای ديگر از خصلت ها و متدها را در اين زمينه تعريف نموده است . بهرحال برای انجام يک عمليات بخصوص می توان از روش های متعددی استفاده و در اين زمينه يک راه حل شفاف و منحصر بفرد وجود ندارد .
استفاده از XML بر روی سرويس دهنده
مثال : پردازش يک فايل XMLبرروی سرويس دهنده و ارائه خروجی مناسب |
<%@ Language=VBScript %> |
پس از انجام پردازش های لازم بر روی سرويس دهنده ، خروجی مناسب برای نمايش در مرورگر ارسال خواهد شد . پردازش فايل XML وابسته به امکانات موجود در مرورگر نبوده و صرفا" مرورگرها ، نمايش دهنده اطلاعات ارسالی از سرويس دهنده خواهند بود .
/خ