XML برای برنامه نويسان VB و ASP

XML از کلمات Extensible Markup Language اقتباس شده است . XML را نمی توان بعنوان يک زبان برنامه نويسی در نطر گرفت . XML ، سيستمی برای تعريف ساير زبان ها ( زبان هائی در رابطه با داده ها ) است . کنسرسيوم وب ، XML را بدين صورت تعريف کرده است : " يک گرامر مناسب برای بيان ساختار داده ها " .Html و XML هر دو از SGML)Standard Generalized Markup Language) اقتباس شده اند .
جمعه، 30 اسفند 1387
تخمین زمان مطالعه:
موارد بیشتر برای شما
XML برای برنامه نويسان VB و ASP
XML برای برنامه نويسان VB و ASP
XML برای برنامه نويسان VB و ASP






XML از کلمات Extensible Markup Language اقتباس شده است . XML را نمی توان بعنوان يک زبان برنامه نويسی در نطر گرفت . XML ، سيستمی برای تعريف ساير زبان ها ( زبان هائی در رابطه با داده ها ) است . کنسرسيوم وب ، XML را بدين صورت تعريف کرده است : " يک گرامر مناسب برای بيان ساختار داده ها " .Html و XML هر دو از SGML)Standard Generalized Markup Language) اقتباس شده اند . SGML زبانی بمنظور تعريف يک زبان نشانه گذاری مبتنی بر سند است . Html ، دارای مجموعه ای ثابت از تگ ها است . XML ، مشابه SGML امکان تعريف تگ را فراهم می نمايد.

XML چيست ؟

• يک استاندارد ارائه شده توسط کنسرسيوم وب است .
• يک زبان نشانه گذاری مبتنی بر تگ است .
• يک زبان متا ديتا است . زبانی که امکان تعريف ساير زبان ها را فراهم می نمايد.
• روشی برای ارائه داده است .
• نسبت به حروف بزرگ و کوچک دارای حساسيت است .
• خود را بگونه ای مناسب تشريح می نمايد .
• خوانائی بالائی دارد .
• يک روش قدرتمند برای اشتراک و ارسال اطلاعات بين برنامه ها ، سيستم ها و پردازه ها است .

XML شامل موارد زير نيست :

• جايگزين Html نخواهد بود .
• درگير نمايش اطلاعات نخواهد شد .
• مالکيت آن در انحصار يک شرکت و يا توليد کننده خاص نمی باشد .
• مورد حمايت تمام مرورگر های وب نمی باشد .
• يک بانک اطلاعاتی نيست .
XML ، امکان تفکيک داده از نمايش را فراهم می نمايد( XML نحوه تشريح داده ها ، Html نحوه نمايش داده ها ) . با استفاده از XML ، می توان سندهای حاوی اطلاعاتی را ايجاد که بسادگی از يک محل به محل ديگر ارسال گردند. XML استانداردی برای مبادله داده های ساختيافته بين عناصر نرم افزاری ، برنامه و سيستم ها است .

آشنائی عملياتی با XML

بمنظور آشنائی با سندهای XML ، مثال زير را در نظر بگيريد :

مثال :  يک سندXML

<?xml version="1.0"?>
<mycomputer>
  <pc>
       <type>Laptop</type>
       <brand>Toshiba</brand>
       <model>Tecra 8000</model>
       <processor>300 Mhz Pentium II</processor>
       <ram>128 MB</ram>
       <drives>
           <drive>9 MB Hard Disk</drive>
           <drive>1.4 MB Floppy Disk</drive>
           <drive>CD-ROM</drive>
       </drives>
       <display>14 inch active matrix LCD panel</display>
        <modem>Toshiba internal V.90</modem>
          <network>Xircom Cardbus Ethernet II 10/100</network>
   </pc>
   <docking_station/>
   <case>
          <brand>USL</brand>
          <color>black</color>
         <fabric>vinyl</fabric>
    </case>
</mycomputer>

در رابطه با مثال فوق ، ذکر موارد زير ضروری است :
• محتويات سند فوق بصورت متنی است .
• بر خلاف Html ، تگ ها جملگی بدرستی استفاده شده و بنوعی داده مورد نظر خود را تشريح می نمايند .
• همانگونه که مشاهده می شود ، XML امکان داده های سلسله مراتبی تودر تو را حمايت می نمايد .
• سند فوق با توجه به تعريف مناسب تگ ها ، بخوبی خود را تشريح می نمايند .
جدول زير برخی از مفاهيم و تعاريف اوليه در رابطه با مثال فوق ، را نشان می دهد .

توضيحات

ويژگی

<?xml version="1.0"?>

تعريف XML. هر سند XML، می بايست با تعريف XMLآغاز گردد. تعريف فوق می بايست بصورت حروف کوچک انجام گردد . تعريف XMLبخشی از قسمت Prologيک سند XMLاست . در مثال ارائه شده ، تنها بخش موجود در prologهمين تعريف است . در بخش Prologمی توان DTDو يا XSLرا نيز مشخص نمود.

<?xml version="1.0"?>
<mycomputer>
...
</mycomputer>
 

المان های XML. سندهای XMLاز المان های متفاوتی تشکيل می گردند. يک المان دارای يک تگ آغاز ، محتويات و يک تگ پايان است .  <ram>128 MB</ram>  . تمام سندهای XMLدارای يک المان ريشه می باشند . در مثال ارائه شده mycomputer  بمنزله المان ريشه است .

<ram>128 MB</ram>

اسامی المان ها . نام درنظر گرفته برای المان ها ، می بايست با يک حرف ، _ ،  و يا يک کالون شروع شود. هر کاراکتر بعد از حرف اول ، می تواند يک حرف ، يک عدد ،  يک _ يک کالون ، يک Hyphenو يا يک نقطه باشد . اسامی المان ها نمی تواند شامل فضای خالی باشد .

Character

Entity Reference

&lt;

&gt;

&

&amp;

محتويات المان ها . متن موجود بين تگ های آغاز و پايان بعنوان محتويات يک المان در نظر گرفته شده و می تواند شامل : >  ، <  و & باشد. با توجه به استفاده  خاص از کاراکترهای فوق در سندهای XML، در صورت ضرورت به استفاده از حروف فوق در متن محتويات يک المان ، می توان از کد معادل آنها استفاده کرد . مثلا" در صورت تعريف المان <formula> ، می توان محتويات آن را  بصورت زير مشخص می گردد .
 <formula>x &lt; y + 5</formula>

المان های تودرتو صحيح :
 <case>
    <brand>USL</brand>
    <color>black</color>
    <fabric>vinyl</fabric>
</case>
 

المان های تودرتو . تمام المان های تودرتو بطور کامل همراه المان های مادر خود قرار گرفته و می بايست شامل تگ های آغاز و پايان در بلاک داخلی مربوطه باشند .  در صورتيکه المان های فرزند دارای تگ های پايان در ساختار داخلی مربوطه نباشند ، سند XML  درست نخواهد بود . در مثال زير المان <brand> فرزند المان <case> است . بنابراين می بايست تگ پايان آن نيز درون المان <case>  قرار گيرد .
<case>
 <brand>    
<color>black</color>    
<fabric>vinyl</fabric>    
     </case>
</brand>

روش اول :
<element/>
روش دوم :
<element></element>

المان تهی .  يک المان تهی  را می توان به دو صورت مشخص نمود . در مثال ارائه شده يک المان تهی تعريف شده است :
<docking_station/>
 

فايل XML زير ، شامل داده های مشابه با مثال قبلی بوده با اين تفاوت که برخی از اطلاعات با استفاده از خصلت ها ارائه شده اند .

مثال :  يک سندXML با تاکيد بر استفاده از خصلت ها برای ارائه اطلاعات اضافه

<?xml version="1.0"?>
<mycomputer>
   <pc type="Laptop" brand="Toshiba" model="Tecra 8000">
    <processor>300 Mhz Pentium II</processor>
    <ram>128 MB</ram>
    <drives>
       <drive>9 MB Hard Disk</drive>
       <drive>1.4 MB Floppy Disk</drive>
       <drive>CD-ROM</drive>
     </drives>
   <display>14 inch active matrix LCD panel</display>
   <modem>Toshiba internal V.90</modem>
   <network>Xircom Cardbus Ethernet II 10/100</network>
 </pc>
<docking_station/>
<case brand="USL">
   <color>black</color>
    <fabric>vinyl</fabric>
</case>
</mycomputer>

جدول زير برخی از مفاهيم و تعاريف اوليه در رابطه با مثال فوق ، را نشان می دهد .

توضيحات

ويژگی

<element  
attribute_1="value_1" attribute_2="value_2" ...
attribute_n="value_n">
 

خصلت ها . المان PC،  دارای سه خصلت است .
<pc type="Laptop" brand="Toshiba" model="Tecra 8000">
خصلت ها در XMLشامل نام و مقدار می باشند . برخلاف Html، مقدار خصلت های استفاده شده در XML  ، می بايست بين علامت " " ، قرار گيرد .

<!-- توضيحات دلخواه-->
 

توضيحات . برای ارا ئه توضيحات در فايل های XML از فرم عمومی روبرو استفاده می شود .

<?xml version="1.0"?>
<mycomputer>
<pc xmlns:org="url:test.com:schema-org"
   xmlns:pc="url:test.com:schema-pc"  >
<org:type>Accounting</org:type>
<pc:type>Laptop</pc:type>
 

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)

قبل از بررسی تکنولوژی DTD و Schema ذکر موارد زير مفيد خواهد بود :
• مولفين سندهای 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"?>
    <!DOCTYPE message [
    <!ELEMENT message (#PCDATA)>
    ]>
<message>
     Internal  DTD
</message>

• يک نمونه DTD خارجی

مثال :  يک نمونه  DTDخارجی

<?xml version="1.0"?>
<!DOCTYPE message SYSTEM "message.dtd">
<message>
   External  DTD
</message>

سندهای XML ، می توانند شامل يک DTD اختياری باشند . سندهای XML از گزينه فوق بمنظور تضمين فرمت مشخص شده استفاده می نمايند. مثال زير يک سند XML بهمراه DTD آن را نشان می دهد . سند XML در بخش اول مقاله ارائه شده است . در مثال فوق DTD بصورت داخلی و همراه سند استفاده شده است .

مثال :  يک سندXMLبهمراه DTDمربوطه

<?xml version="1.0"?>
<!DOCTYPE mycomputer [
<!ELEMENT mycomputer (pc, docking_station, case)>
<!ELEMENT pc (processor, ram, drives, display,modem, network)>
<!ATTLIST pc
type (Laptop|Desktop) "Desktop"
brand CDATA #IMPLIED
model CDATA #IMPLIED>
<!ELEMENT processor (#PCDATA)>
<!ELEMENT ram (#PCDATA)>
<!ELEMENT drives (drive*)>
<!ELEMENT drive (#PCDATA)>
<!ELEMENT display (#PCDATA)>
<!ELEMENT modem (#PCDATA)>
<!ELEMENT network (#PCDATA)>
<!ELEMENT docking_station (#PCDATA)>
<!ELEMENT case (color, fabric)>
<!ATTLIST case
brand CDATA #IMPLIED>
<!ELEMENT color (#PCDATA)>
<!ELEMENT fabric (#PCDATA)>
]>

<mycomputer>
<pc type="Laptop" brand="Toshiba" model="Tecra 8000">
<processor>300 Mhz Pentium II</processor>
<ram>128 MB</ram>
<drives>
<drive>9 MB Hard Disk</drive>
<drive>1.4 MB Floppy Disk</drive>
<drive>CD-ROM</drive>
</drives>
<display>14 inch active matrix LCD panel</display>
<modem>Toshiba internal V.90</modem>
<network>Xircom Cardbus Ethernet II 10/100</network>
</pc>
<docking_station/>
<case brand="USL">
<color>black</color>
<fabric>vinyl</fabric>
</case>
</mycomputer>

يکی ديگر از روش های استفاده از DTD در يک سند XML ، بصورت خارجی است . در اين حالت اطلاعات مربوط به DTD در يک فايل مجزا و با انشعاب dtd ذخيره و در ادامه در سند XML به آن مراجعه می گردد .

مثال :  بخش آغازين يک سندXML  و نحوه  استفاده از DTDبصورت خارجی

<?xml version="1.0"?>
<!DOCTYPE mycomputer SYSTEM "mycomputer.dtd">
<mycomputer>
        ....  
</mycomputer>

سندهای XML خوش شکل و معتبر

يک سند "خوش شکل" XML ، سندی است که دارای گرامر صحيح و تعريف شده در رابطه با XML باشد . گرامر مربوطه در قالب مجموعه ای از قوانين مشخض شده است . برخی از اين قوانين عبارتند از :
• سند می بايست دارای يک و يا چند المان باشد .
• سند می بايست دارای يک المان ريشه بوده که ساير عناصر با يک ساختار مناسب ( تودر تو ) به آن متصل می گردند .
• تمام المان های موجود در سند می بايست دارای تگ شروع و پايان باشند .
يک سند "خوش شکل" XML که شامل يک DTD ( داخلی و يا خارجی ) می باشد ، بعنوان يک سند معتبر در نظر گرفته خواهد شد . پارسر XML ( پردازنده نيز ناميده می شود ) با استفاده از يک DTD قادر به معتبر نمودن يک سند XML خواهد بود . بررسی جزئيات مربوط به تکنولوژی DTD از حوصله اين مقاله خارج است .

XML-Data and Schema

DTD دارای محدوديت و مسائل خاص خود می باشد :
• برای نوشتن 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">
<ElementType name="mycomputer" content="eltOnly" order="seq">
      <element type="pc"/>
      <element type="docking_station"/>
      <element type="case"/>
</ElementType>
<ElementType name="pc" content="eltOnly" order="seq">
     <element type="processor"/>
     <element type="ram"/>
     <element type="drives"/>
     <element type="display"/>
     <element type="modem"/>
     <element type="network"/>
</ElementType>
<ElementType name="pc">
     <AttributeType name="type"
      xmlns:dt="urn:schemas-microsoft-com:datatypes"
      dt:type="enumeration" dt:values="Laptop Desktop"
      default="Desktop"/>
     <AttributeType name="brand" required="no"/>
     <AttributeType name="model" required="no"/>
     <attribute type="type"/>
     <attribute type="brand"/>
     <attribute type="model"/>
</ElementType>
    <ElementType name="processor" content="textOnly"/>
    <ElementType name="ram" content="textOnly"/>
    <ElementType name="drives" content="eltOnly">
       <element type="drive" minOccurs="0" maxOccurs="*"/>
</ElementType>
    <ElementType name="drive" content="textOnly"/>
    <ElementType name="display" content="textOnly"/>
    <ElementType name="modem" content="textOnly"/>
    <ElementType name="network" content="textOnly"/>
    <ElementType name="docking_station" content="textOnly"/>
    <ElementType name="case" content="eltOnly" order="seq">
        <element type="color"/>
        <element type="fabric"/>
</ElementType>
<ElementType name="case">
    <AttributeType name="brand" required="no"/>
    <attribute type="brand"/>
</ElementType>
<ElementType name="color" content="textOnly"/>
<ElementType name="fabric" content="textOnly"/>
</Schema>

بررسی جزئيات تکنولوژی Schema از حوصله اين مقاله خارج است .

آيا معتبر سازی يک سند ، ضرورت دارد ؟

در صورتيکه سندهای XML دارای يک حيات طولانی بوده و يا از آنها بمنظور مبادله اطلاعات بين سيستم ها و برنامه های متفاوت استفاده می گردد ، لازم است که معتبر سازی يک سند XML بکمک DTD و يا Schema انجام گيرد . در صورتيکه از سند های XML برای ارسال اطلاعات بين لايه های متفاوت يک برنامه سه لايه استفاده می گردد ، ضرورتی به معتبر ساری يک سند XML نخواهد بود . اگر قصد ايجاد تعداد زيادی از سندهای معتبر را داشته باشيد ، می توان يک ابزار مناسب بمنظور ايجاد DTD و يا Schema را تهيه نمود .
*ساختار سلسله مراتبی اشياء در XML DOM
ساختار اشياء در XML DOM ، بصورت سلسله مراتبی و تصويری مناسب از اشياء موجود در سند XML است . شکل زير يک نمونه از ساختار سلسله مراتبی اشياء در XML DOM را نشان می دهد ..

 

اشياء XML DOM

XML DOM دارای چهار شی است :
• شی Document . شامل سند XML است . ( منظور گره ای با نام Document نيست )
• شی node . شامل يک گره در سند XML است .
• شی nodeList . شامل ليستی از گره های همزاد ( برادر و يا خواهر ) است . برخی از متدهای DOM يک شی nodeList را بعنوان خروجی برمی گردانند.
• شی ParseError . از شی فوق بمنظور بازيابی آخرين مورد خطاء در رابطه با پارسينگ استفاده می شود .
اشياء فوق دارای مجموعه ای از متدها و خصلت ها بوده و با استفاده از يک زبان اسکريپت ، می توان عمليات مورد نظر در رابطه با يک سند XML را بکمک آنها انجام داد .
مثال : فرض کنيد سند XML ارائه شده در بخش های قبل را داشته باشيم ( mycomputer.xml)

مثال :  يک سندXML  نمونه (mycomputer.xml)

<?xml version="1.0"?>
<mycomputer>
  <pc>
     <type>Laptop</type>
     <brand>Toshiba</brand>
     <model>Tecra 8000</model>
     <processor>300 Mhz Pentium II</processor>
     <ram>128 MB</ram>
     <drives>
        <drive>9 MB Hard Disk</drive>
        <drive>1.4 MB Floppy Disk</drive>
        <drive>CD-ROM</drive>
     </drives>
     <display>14 inch active matrix LCD panel</display>
     <modem>Toshiba internal V.90</modem>
     <network>Xircom Cardbus Ethernet II 10/100</network>
   </pc>
   <docking_station/>
    <case>
      <brand>USL</brand>
      <color>black</color>
      <fabric>vinyl</fabric>
   </case>
</mycomputer>

برنامه زير، نام اولين گره موجود در سند XML را برمی گرداند . در برنامه فوق تمام اسکريپت ها بر روی مرورگر سرويس گيرنده اجراء و به زبان VBSrcipt نوشته شده اند . اطلاعات فوق را در فايلی با نام دلخواه ذخيره و در ادامه آن را توسط مرورگر فعال و مشاهده نمائيد .

مثال :  بازيابی اولين گره موجود در سند mycomputer.xml  ( نسخه VBScript)

<HTML>
<HEAD>
<TITLE>XML Example </TITLE>
<SCRIPT LANGUAGE=vbscript>
<!--
Function getXML()
Dim xmlDoc
Dim xmlRoot
Dim xmlNode
Set xmlDoc = CreateObject("Microsoft.xmldom")
xmlDoc.async = False
xmlDoc.load("mycomputer.xml")
Set xmlRoot = xmlDoc.documentElement
Set xmlNode = xmlRoot.childNodes(0)
divHere.innerHTML = _
"<H3>" & xmlNode.nodeName & "</H3>"
End Function
-->
</SCRIPT>
</HEAD>
<BODY onload="getXML()">
<H1>بازيابی اولين گره</H1>
<DIV ID="divHere"></DIV>
</BODY>
</HTML>

در صورت مشاهده صفحه فوق در مرورگر ، خروجی زير مشاهده خواهد شد :
بازيابی اولين گره
pc

برنامه زير، نام اولين گره موجود در سند XML را برمی گرداند . در برنامه فوق تمام اسکريپت ها بر روی مرورگر سرويس گيرنده اجراء و به زبان JavaScript نوشته شده اند .( نسخه فوق با نسخه نوشته شده توسط VBScript دارای اختلاف اندکی می باشند ) . اطلاعات فوق را در فايلی با نام دلخواه ذخيره و در ادامه آن را توسط مرورگر فعال و مشاهده نمائيد .

مثال :  بازيابی اولين گره موجود در سند mycomputer.xml  ( نسخه JavaScript)

<HTML>
<HEAD>
<TITLE>XML Example </TITLE>
<SCRIPT LANGUAGE=javascript>
<!--
function getXML() {
var xmlDoc
var xmlRoot
var xmlNode
xmlDoc = new ActiveXObject("Microsoft.xmldom")
xmlDoc.async = false
xmlDoc.load("mycomputer.xml")
xmlRoot = xmlDoc.documentElement
xmlNode = xmlRoot.childNodes(0)
divHere.innerHTML =
"<H3>" + xmlNode.nodeName + "</H3>"
}
//-->
</SCRIPT>
</HEAD>
<BODY onload="getXML()">
<H1>بازيابی اولين گره</H1>
<DIV ID="divHere"></DIV>
</BODY>
</HTML>

در صورت مشاهده صفحه فوق در مرورگر ، خروجی زير مشاهده خواهد شد :
بازيابی اولين گره
pc

در ادامه بخش های متفاوت دو مثال فوق تشريح خواهند گرديد .

استقرار يک سند XML در حافظه

قبل از انجام هر گونه عمليات در رابطه با يک سند XML ، می بايست سند فوق در حافظه مستقر گردد . قبل از استقرار سند XML در حافظه ، می بايست نمونه ای از شی XML DOM را ايجاد نمود. کدهای زير که در مثال اول ( نسخه نوشته شده به زبان VBScript) ارائه شده اند ، نحوه ايجاد يک نمونه شی XML -DOM را با استفاده از متد CreateObject و استقرار يک سند XML را نشان می دهد .

 

مثال :  کدهای لازم بمنظور ايجاد يک نمونه شی XML DOMو استقرار سند XMLدر حافظه

Set xmlDoc = CreateObject("Microsoft.xmldom")
xmlDoc.async = False
xmlDoc.load("mycomputer.xml")

در مثال فوق ،از متد async مربوط به شی document بمنظور استقرار سند XML در حافظه بصورت همزمان استفاده شده است . بدين ترتيب مرورگر قبل از انجام هر گونه پردازش بر روی سند XML ، در انتظار استقرار تمام سند در حافظه باقی خواهد ماند . در صورتيکه از کد فوق استفاده نگردد ، مرورگر بمحض دريافت بخشی از سند ، عمليات پردازش را آغاز خواهد کرد . در برنامه فوق از متد Load بمنظور استقرار يک فايل XML در حافظه استفاده شده است . در صورتيکه قصد استقرار يک سند XML را از طريق يک رشته داشته باشيم ، می توان از متد LoadXML استفاده کرد .
در نسخه جاوا اسکريپت مثال فوق ،با استفاده از شی AxtiveXObject يک نمونه از شی XML DOM ايجاد شده است . کدهای فوق بصورت زير می باشند :

مثال :  کدهای لازم بمنظور ايجاد يک نمونه شی XML DOMو استقرار سند XMLدر حافظه

xmlDoc = new ActiveXObject("Microsoft.xmldom")
xmlDoc.async = false
xmlDoc.load("mycomputer.xml")

المان سند

کد زير بمنظور بازيابی يک مرجع به المان سند ( گره مادر در سند XML) استفاده شده است :( نسخه نوشته شده به زبان VBScript)
Set xmlRoot = xmlDoc.documentElement
کد معادل جاوا اسکريپت بصورت زير است :
xmlRoot = xmlDoc.documentElement

مجموعه ChildNodes

پس از ايجاد يک مرجع به گره Document ، می توان با استفاده از مجموعه childNodes مربوط به گره Document اقدام به بازيابی گره ها نمود . کد زير ، يک مرجع ( اشاره گر ) به اولين گره مجموعه childNodes مربوط به المان سند ، ايجاد می نمايد
Set xmlNode = xmlRoot.childNodes(0)
کد معادل جاوا اسکريپت بصورت زير است :
xmlNode = xmlRoot.childNodes(0)
تمام مجموعه ها در XML با صفر شروع می گردد . بنابراين اولين المان همواره صفر، دومين المان يک و ... خواهد بود.

نمايش XML بر روی صفحه

بمنظور نمايش داده های XML در يک صفحه Html ، می بايست از روش های خاصی استفاده نمود. يکی از مناسبترين اين روش ها ، استفاده از خصلت innerHTML يک تگ Html است . کد زير نحوه انجام عمليات فوق را نشان می دهد ( نسخه VBScript) . در کد فوق از خصلت nodeName مربوط به گره ، برای بدست آوردن نام المان XML استفاده شده است .
divHere.innerHTML = "<H3>" & xmlNode.nodeName & "</H3>"
کد زير نحوه نمايش داده های XML در يک صفحه Html را با استفاده از خصلت innerHTML نشان می دهد ( نسخه حاوا اسکريپت )
divHere.innerHTML ="<H3>" + xmlNode.nodeName + "</H3>"

صدا زدن کدهای اسکريپت DOM

در مثال های ارائه شده ( نسخه نوشته شده با VBScript و نسخه نوشته شده با جاوا اسکريپت ) ،از تابعی با نام getXML همزمان با فعال شدن صفحه استفاده شده است . تابع فوق مسئول استقرار سند XML در حافظه و يافتن اولين المان در بوده و ماحصل عمليات را در خروجی نمايش خواهد داد .
<BODY onload="getXML()">
<H1>Mycomputer XML Example</H1>
<DIV ID="divHere">
</DIV>
</BODY>
</HTML>
پس از ارائه توضيحات لازم در خصوص مثال های ارائه شده ، در ادامه نحوه انجام ساير عمليات بر روی يک سند XML بکمک XML DOM تشريح می گردد .

تکرار در بين گره های يک سند

سند XML ارائه شده در مثال قبل (mycomputer.xml) دارای ساختار درختی زير است :
با استفاده از مجموعه childNodes ، می توان عمليات تکرار در بازيابی تمام درخت XML مربوط به يک سند XML را انجام داد . برنامه زير تمام اطلاعات موجود در درخت XML را بازيابی و آنها را با يک فرمت قابل قبول ( مجموعه ای از جداول ) در خروجی نمايش خواهد داد . در اين برنامه اطلاعات مربوط به اولين سطح گره های موجود ( pc,case,docking_station) با استفاده از يک حلقه تکرار استخراج و برای بازيابی اطلاعات موجود در دومين سطح گره ها ( type, brand, model ) از يک حلقه تکرار ديگر استفاده شده است .

مثال :  بازيابی تمام گره های موجود در يک سند XMLو نمايش آنها با يک فرمت مناسب

<HTML>
<HEAD>
<TITLE>XML Example </TITLE>
<STYLE>
H3 {color: blue}
</STYLE>
<SCRIPT LANGUAGE=vbscript>
<!--
Option Explicit
Function getXML()
Dim xmlDoc
Dim xmlRoot
Dim xmlPNode
Dim xmlNode
Dim strDoc
Set xmlDoc = CreateObject("Microsoft.xmldom")
xmlDoc.async = False
xmlDoc.load("mycomputer.xml")
Set xmlRoot = xmlDoc.documentElement
For Each xmlPNode In xmlRoot.childNodes
  strDoc = strDoc & "<H3>" & xmlPNode.nodeName & "</H3>"
  If xmlPNode.childNodes.length = 0 Then
     strDoc = strDoc & "<I>No data</I>"
  Else
    strDoc = strDoc & "<TABLE border>"
    For Each xmlNode In xmlPNode.childNodes
    strDoc = strDoc & "<TR>" & _
    "<TD><B>" & xmlNode.nodeName & ":</B></TD>" & _
    "<TD>" & xmlNode.text + "</TD>" & "</TR>"
   Next
 End If
  strDoc = strDoc & "</TABLE>"
Next
divHere.innerHTML = strDoc
End Function
-->
</SCRIPT>
</HEAD>
<BODY onload="getXML()">
<H1 align="center" dir="rtl">بازيابی تمام المانهای يک سندXML</H1>
<DIV ID="divHere"></DIV>
</BODY>
</HTML>

خروجی برنامه فوق پس از مشاهده صفحه مربوطه در مرورگر به شکل زير خواهد بود :
بازيابی تمام المان های يک سند XML
pc


type:

Laptop

brand:

Toshiba

model:

Tecra 8000

processor:

300 Mhz Pentium II

ram:

128 MB

drives:

9 MB Hard Disk 1.4 MB Floppy Disk CD-ROM

display:

14 inch active matrix LCD panel

modem:

Toshiba internal V.90

network:

Xircom Cardbus Ethernet II 10/100

docking_station
No data
case


brand:

USL

color:

black

fabric:

vinyl

نسخه جاوا اسکريپت برنامه فوق به شکل زير است : ( فقط حلقه های تکرار مشخص شده اند )

مثال :  بازيابی تمام گره های موجود در يک سند XML (نسخه جاوااسکريپت )

xmlRoot = xmlDoc.documentElement
strDoc = "<TABLE>"
for (intI=0; intI <= xmlRoot.childNodes.length-1;intI++) {
      xmlPNode = xmlRoot.childNodes(intI)
      strDoc = strDoc +"<H3>" + xmlPNode.nodeName + "</H3>"
      if (xmlPNode.childNodes.length == 0)
         strDoc = strDoc + "<I>No data</I>"
     else {
               strDoc = strDoc + "<TABLE border>"
               for (intJ=0;intJ <= xmlPNode.childNodes.length-1;intJ++) {
                 xmlNode = xmlPNode.childNodes(intJ)
                 strDoc = strDoc + "<TR>" +
                 "<TD><B>" + xmlNode.nodeName + ":</B></TD>" +
                 "<TD>" + xmlNode.text + "</TD>" +
                "</TR>"
              }
       strDoc = strDoc + "</TABLE>"
     }
}

بازيابی يک گره خاص و يا مجموعه ای از گره ها

در برخی حالات علاقه مند به بازيابی گره ها از طريق حلقه تکرار نمی باشيم ، در چنين مواردی می توان مستقيما" اقدام به بازيابی مجموعه ای از گره ها در يک سند XML نمود . در اين رابطه می توان از متد getElementsByTagName استفاده کرد . گرامر استفاده از متد فوق بشکل زير است :
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()
  Dim xmlDoc
  Dim xmlNodes
  Set xmlDoc = CreateObject("Microsoft.xmldom")
  xmlDoc.async = False
  xmlDoc.load("mycomputer.xml")
  Set xmlNodes = xmlDoc.getElementsByTagName("pc/ram")
  divHere.innerHTML = xmlNodes.item(0).text
End Function

مثال: بازيابی يک المان خاص با استفاده از متد getElementsByTagName( نسخه javascript)

function getXML() {
   var xmlDoc
   var xmlNodes
   xmlDoc = new ActiveXObject("Microsoft.xmldom")
   xmlDoc.async = false
   xmlDoc.load("mycomputer.xml")
   xmlNodes = xmlDoc.getElementsByTagName("pc/ram")
   divHere.innerHTML = xmlNodes.item(0).text
}

*بازيابی خصلت ها
تمام اطلاعات در سند های XML از طريق محتويات المان ها ذخيره نشده و در برخی حالات از خصلت مربوط به يک المان استفاده و اطلاعات بکمک آن ذخيره می گردد . بمنظور بازيابی اطلاعات ذخيره شده در خصلت مربوط به يک المان می توان از مجموعه attributes استفاده کرد . برای ارائه توضيحات کاربردی بيشتر ، فايل mycomputer.xml ( در مثال های قبل از آن استفاده شده بود ) را با اندک تغييراتی که عمدتا" به استفاده از خصلت بهمراه المان ها بر می گردد ، تغيير نام و يک فايل ديگر با نام mycomputer1.xml را ايجاد که تگ های pc و case آن بصورت زير باشند :
<pc type="Laptop" brand="Toshiba" model="Tecra 8000">
...
<case brand="USL">
برنامه زيرخصلت های مربوط به المان PC را در خروجی نمايش می دهد .

مثال :  نمايش خصلت های يک المان ( نسخه VBScript)

<HTML>
<HEAD>
<TITLE>XML Example </TITLE>
<SCRIPT LANGUAGE=vbscript>
<!--
  Function getXML( )
    Dim xmlDoc
    Dim xmlAtt
    Dim xmlPNode
    Dim strDoc
    Dim xmlNodes
    Dim xmlPCNode
    Set xmlDoc = CreateObject("Microsoft.xmldom")
    xmlDoc.async = False
    xmlDoc.load("mycomputer.xml")
    Set xmlNodes = xmlDoc.getElementsByTagName("pc")
     Set xmlPCNode = xmlNodes.item(0)
     For Each xmlAtt in xmlPCNode.attributes
        strDoc = strDoc & "<BR><B>" & xmlAtt.nodeName & ":</B>" & _
        xmlAtt.text
     Next
     divHere.innerHTML = strDoc
  End Function
-->
</SCRIPT>
</HEAD>
<BODY onload="getXML( )">
<H1 align="center" dir="rtl">بازيابی خصلت های يکالمان</H1>
<DIV ID="divHere"></DIV>
</BODY>
</HTML>

خروجی برنامه فوق پس از مشاهده صفحه مربوطه در مرورگر به صورت زير است :
بازيابی خصلت های يک المان

type:Laptop
brand:Toshiba
model:Tecra 8000


مثال :  نمايش خصلت های يک المان ( نسخه JavaScript) - فقط حلقه تکرار آورده شده است .

 for (intI=0;intI <= xmlPCNode.attributes.length-1;intI++) {
   xmlAtt = xmlPCNode.attributes(intI)
   strDoc = strDoc +  "<BR><B>" + xmlAtt.nodeName + ": </B>" +
   xmlAtt.text
}

بمنظور بازيابی محتويات يک خصلت خاص، می توان از متد 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 را بر روی سرويس گيرنده پردازش می کردند. بمنظور پردازش فايل های XML بر روی سرويس دهنده ، می توان از عنصر XMLDOM از طريق صفحات ASP استفاده کرد . برنامه زير اطلاعات موجود در فايل mycomputer.xml ( در بخش های قبل از آن استفاده شده است ) را پردازش و با يک فرمت مناسب ( استفاده از سه جدول مجزا برای نمايش هر يک از المان های سطح اول ) در خروجی نمايش می دهد . ( نظير اين عمليات در بخش های قبل نيز ارائه گرديد در اين مثال عمليات مورد نظر بر روی سرويس دهنده انجام خواهد شد ) .

 

مثال :  پردازش يک فايل XMLبرروی سرويس دهنده و ارائه خروجی مناسب

<%@ Language=VBScript %>
<%Option Explicit%>
<HTML>
<HEAD>
<TITLE>XML/ASP Example </TITLE>
<STYLE>
H3 {color: blue}
</STYLE>
</HEAD>
<H1>Mycomputer XML Tree Parsed on the Server</H1>
<%
 Dim xmlDoc
 Dim xmlRoot
 Dim xmlPNode
 Dim xmlNode
 Dim strDoc
 Set xmlDoc = Server.CreateObject("Microsoft.xmldom")
 xmlDoc.async = False
 xmlDoc.load(Server.MapPath("mycomputer.xml"))
 Set xmlRoot = xmlDoc.documentElement
 For Each xmlPNode In xmlRoot.childNodes
  strDoc = strDoc & "<H3>" & xmlPNode.nodeName & "</H3>"
  If xmlPNode.childNodes.length = 0 Then
     strDoc = strDoc & "<I>No data</I>"
  Else
    strDoc = strDoc & "<TABLE border>"
    For Each xmlNode In xmlPNode.childNodes
      strDoc = strDoc & "<TR>" & _
      "<TD><B>" & xmlNode.nodeName & ":</B></TD>" & _
      "<TD>" & xmlNode.text + "</TD>" & _
      "</TR>"
   Next
 End If
 strDoc = strDoc & "</TABLE>"
Next
Response.Write strDoc
%>
</BODY>
</HTML>

پس از انجام پردازش های لازم بر روی سرويس دهنده ، خروجی مناسب برای نمايش در مرورگر ارسال خواهد شد . پردازش فايل XML وابسته به امکانات موجود در مرورگر نبوده و صرفا" مرورگرها ، نمايش دهنده اطلاعات ارسالی از سرويس دهنده خواهند بود .





نظرات کاربران
ارسال نظر
با تشکر، نظر شما پس از بررسی و تایید در سایت قرار خواهد گرفت.
متاسفانه در برقراری ارتباط خطایی رخ داده. لطفاً دوباره تلاش کنید.
مقالات مرتبط