CodeGym /جاوا بلاگ /Random-SD /XML جاوا ۾
John Squirrels
سطح
San Francisco

XML جاوا ۾

گروپ ۾ شايع ٿيل
سلام اڄ اسان هڪ ٻيو ڊيٽا فارميٽ متعارف ڪنداسين جنهن کي XML سڏيو ويندو آهي. هي هڪ تمام اهم موضوع آهي. جڏهن حقيقي جاوا ايپليڪيشنن تي ڪم ڪري رهيا آهيو، توهان کي لڳ ڀڳ ضرور ضرور ملندو XML سان لاڳاپيل ڪم. جاوا ڊولپمينٽ ۾، هي فارميٽ تقريباً عالمگير طور استعمال ڪيو ويندو آهي (اسان اهو معلوم ڪنداسين ته هيٺ ڇو)، تنهن ڪري مان سفارش ڪريان ٿو ته توهان هن سبق جو سطحي جائزو نه وٺو، بلڪه هر شيءِ جي مڪمل ڄاڻ حاصل ڪريو ۽ اضافي ادب/لنڪن جو مطالعو ڪريو :) هي يقيني طور تي وقت ضايع نه ٿيندو. سو، اچو ته آسان شين سان شروع ڪريون: ”ڇا“ ۽ ”ڇو“!

Java XML ڇا آهي؟

XML جو مطلب آهي ايڪسٽينيبل مارڪ اپ ٻولي. توهان شايد اڳ ۾ ئي هڪ مارڪ اپ ٻولي سان واقف آهيو - ڇا توهان HTML بابت ٻڌو آهي، جيڪو ويب صفحا ٺاهڻ لاء استعمال ڪيو ويندو آهي :) XML ڇا آهي؟  - 1HTML ۽ XML جيتوڻيڪ هڪجهڙائي ظاهر ڪن ٿا:
HTML 1
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
ايڪس ايم ايل 1
<headline>title</headline>
<paragraph>paragraph<paragraph>
<paragraph>paragraph<paragraph>
HTML 2
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
ايڪس ايم ايل 2
<chief>title</chief>
<paragraph>paragraph<paragraph>
<paragraph>paragraph<paragraph>
ٻين لفظن ۾، XML ڊيٽا بيان ڪرڻ لاء هڪ ٻولي آهي.

توهان کي XML جي ضرورت ڇو آهي؟

XML اصل ۾ ايجاد ڪئي وئي هئي وڌيڪ آساني سان ڊيٽا کي ذخيرو ڪرڻ ۽ موڪلڻ، بشمول انٽرنيٽ ذريعي. ان ۾ ڪيترائي فائدا آھن جيڪي توھان کي حاصل ڪرڻ ۾ مدد ڪن ٿيون. پهريون، انسان ۽ ڪمپيوٽر ٻنهي کي پڙهڻ آسان آهي. منهنجو خيال آهي ته توهان آساني سان سمجهي سگهو ٿا ته هي XML فائل ڇا بيان ڪري ٿو:
<?xml version="1.0" encoding="UTF-8"?>
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
هڪ ڪمپيوٽر پڻ آساني سان هن فارميٽ کي سمجهي ٿو. ٻيو، جيئن ته ڊيٽا سادي متن جي طور تي ذخيرو ٿيل آهي، اتي ڪو به مطابقت وارو مسئلو نه هوندو جڏهن اسان ان کي هڪ ڪمپيوٽر کان ٻئي ڏانهن منتقل ڪندا آهيون. اهو سمجهڻ ضروري آهي ته XML قابل عمل ڪوڊ نه آهي - اها ڊيٽا جي وضاحت جي ٻولي آهي. XML استعمال ڪندي ڊيٽا کي بيان ڪرڻ کان پوء، توهان کي ڪوڊ لکڻو پوندو (مثال طور، جاوا ۾) جيڪو هن ڊيٽا کي موڪلي / وصول / پروسيس ڪري سگهي ٿو.

XML ڪيئن ٺهيل آهي؟

مکيه حصو ٽيگ آهي: اهي شيون آهن زاوي بریکٹ ۾:
<book>
</book>
اتي اوپننگ ٽيگ ۽ بند ڪرڻ جا ٽيگ آھن. بند ٿيڻ واري ٽيگ ۾ اضافي علامت (" / ") آهي، جيئن مٿي ڏنل مثال ۾ ڏسي سگھجي ٿو. هر افتتاحي ٽيگ کي بند ڪرڻ واري ٽيگ هجڻ گهرجي. اهي ڏيکاريندا آهن جتي فائل ۾ هر عنصر جي وضاحت شروع ٿئي ٿي ۽ ختم ٿئي ٿي. ٽيگ nested ٿي سگهي ٿو! اسان جي ڪتاب جي مثال ۾، <book> ٽيگ ۾ 3 nested ٽيگ آهن: <title>، <author>، ۽ <year>. اهو nesting جي هڪ سطح تائين محدود نه آهي: nested tags جا پنهنجا پنهنجا nested tags وغيره هوندا. هن ڍانچي کي ٽيگ ٽري چئبو آهي. اچو ته هن وڻ کي ڏسو هڪ نموني XML فائل استعمال ڪندي جيڪو ڪار ڊيلرشپ کي بيان ڪري ٿو:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
</carstore>
هتي اسان وٽ هڪ اعلي سطحي ٽيگ آهي: <carstore>. اهو پڻ سڏيو ويندو آهي روٽ عنصر. <carstore> وٽ ھڪڙو ٻار ٽيگ آھي: <car>. <car>، موڙ ۾، 3 ٻارن جا ٽيگ پڻ آھن: <model>، <year> ۽ <price>. هر ٽيگ ۾ خاصيتون هجن ٿيون، جن ۾ اضافي اهم معلومات شامل آهي. اسان جي مثال ۾، <model> ٽيگ ۾ هڪ "lang" وصف آهي، جيڪو اشارو ڪري ٿو ته ٻولي ماڊل جو نالو رڪارڊ ڪرڻ لاء استعمال ڪيو ويو آهي:
<model lang="en">Scania R 770</model>
هتي اسان اشارو ڪريون ٿا ته نالو انگريزيء ۾ لکيل آهي. اسان جي <قيمت> ٽيگ ۾ هڪ "ڪرنسي" خاصيت آهي.
<price currency="US dollar">150000.00</price>
هتي اسان اشارو ڪريون ٿا ته ڪار جي قيمت آمريڪي ڊالر ۾ ڏني وئي آهي. اهڙيء طرح، XML هڪ "خود بيان" نحو آهي. توهان ڊيٽا کي بيان ڪرڻ لاءِ گهربل معلومات شامل ڪري سگهو ٿا. اضافي طور تي، فائل جي چوٽي تي، توهان هڪ لائن شامل ڪري سگهو ٿا جيڪو اشارو ڪري ٿو XML ورزن ۽ ڊيٽا لکڻ لاءِ استعمال ٿيل انڪوڊنگ. هن کي "پرولوگ" سڏيو ويندو آهي ۽ اهو هن وانگر ڏسڻ ۾ اچي ٿو:
<?xml version="1.0" encoding="UTF-8"?>
اسان استعمال ڪري رهيا آهيون XML ورجن 1.0 ۽ UTF-8 انڪوڊنگ. اهو ضروري ناهي، پر اهو ڪم ۾ اچي سگهي ٿو، مثال طور، توهان جي فائل مختلف ٻولين ۾ متن استعمال ڪري ٿي. اسان ذڪر ڪيو آهي ته XML جو مطلب آهي "Extensible Markup Language"، پر ڇا مطلب آهي "Extensible"؟ ان جو مطلب اهو آهي ته اهو توهان جي شين ۽ فائلن جي نئين نسخن ٺاهڻ لاء ڀرپور آهي. مثال طور، فرض ڪريو ته اسان پنهنجي ڪار ڊيلرشپ تي موٽر سائيڪلون وڪڻڻ شروع ڪرڻ چاهيون ٿا! انهي چيو ته، اسان کي اسان جي پروگرام جي ضرورت آهي ته ٻنهي نسخن کي سپورٽ ڪرڻ جي ضرورت آهي <carstore>: پراڻو (بغير موٽر سائيڪل) ۽ نئون. هتي اسان جو پراڻو نسخو آهي:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
</carstore>
۽ هتي نئون وڌايو ويو آهي:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
   <motorcycle>
       <title lang="en">Yamaha YZF-R6</title>
       <year>2018</year>
       <price currency="Russian Ruble">1000000.00</price>
       <owner>Vasia</owner>
   </motorcycle>
   <motorcycle>
       <title lang="en">Harley Davidson Sportster 1200</title>
       <year>2011</year>
       <price currency="Euro">15000.00</price>
       <owner>Petia</owner>
   </motorcycle>
</carstore>
اسان جي فائل ۾ موٽرسائيڪلن جي وضاحت شامل ڪرڻ ڪيترو آسان ۽ سادو آهي :) وڌيڪ ڇا آهي، اسان کي بلڪل ضروري ناهي ته موٽر سائيڪلن لاءِ ٻارن جا ٽيگ ساڳيا هجن جيئن ڪارن لاءِ. مهرباني ڪري نوٽ ڪريو ته موٽر سائيڪل، ڪارن جي برعڪس، هڪ <مالڪ> عنصر آهي. هي ڪمپيوٽر (يا انسان) کي ڊيٽا پڙهڻ کان روڪي نٿو سگهي.

XML ۽ HTML جي وچ ۾ فرق

اسان اڳ ۾ ئي چيو آهي ته XML ۽ HTML ظاهر ۾ تمام گهڻو هڪجهڙا آهن. انهي کي اهو ڄاڻڻ تمام ضروري آهي ته اهي ڪيئن مختلف آهن. پهرين، اهي مختلف مقصدن لاء استعمال ٿيندا آهن. HTML ويب صفحن کي نشانو بڻائڻ لاءِ آهي. مثال طور، ويب سائيٽ ٺاهڻ وقت، توهان HTML استعمال ڪري سگهو ٿا وضاحت ڪرڻ لاءِ: "مينيو مٿي ساڄي ڪنڊ ۾ هجڻ گهرجي. ان ۾ اهڙا ۽ اهڙيون بٽڻون هجڻ گهرجن". ٻين لفظن ۾، HTML جو ڪم ڊيٽا کي ڊسپلي ڪرڻ آهي. XML معلومات کي محفوظ ڪرڻ ۽ موڪلڻ لاءِ آهي هڪ فارم ۾ انسانن ۽ ڪمپيوٽرن لاءِ آسان. ھن فارميٽ ۾ ڪو به اشارو نه آھي ته ھن ڊيٽا کي ڪيئن ڏيکاريو وڃي: اھو منحصر آھي پروگرام جي ڪوڊ تي جيڪو ان کي پڙھي ٿو. ٻيو، اتي هڪ اهم ٽيڪنيڪل فرق آهي. HTML ٽيگ اڳواٽ بيان ڪيل آهن. ٻين لفظن ۾، هڪ HTML هيڊر ٺاهڻ (مثال طور، صفحي جي چوٽي تي هڪ وڏو ڪيپشن) صرف <h1></h1> ٽيگ استعمال ڪري ٿو (<h2></h2> ۽ <h3></h3> استعمال ڪيا ويا آهن. ننڍن وڏن لاء). توهان ٻين ٽيگ استعمال ڪندي HTML هيڊر ٺاهي نٿا سگهو. XML اڳواٽ طئي ٿيل ٽيگ استعمال نٿو ڪري. توھان ٽيگ ڏئي سگھوٿا ڪو به نالو جيڪو توھان چاھيو: <header>, <title>, <idontknow2121>.

جھيڙي جھڳڙي جو حل

آزادي جيڪا XML مهيا ڪري ٿي ڪجهه مسئلا پيدا ڪري سگهي ٿي. مثال طور، هڪ ۽ ساڳيو ادارو (مثال طور، هڪ ڪار) مختلف مقصدن لاء هڪ پروگرام جي استعمال ڪري سگهجي ٿو. مثال طور، اسان وٽ ھڪڙو XML فائل آھي جيڪو ڪارن کي بيان ڪري ٿو. بهرحال، اسان جا پروگرامر پاڻ ۾ اڳئين معاهدي تي پهچي نه سگهيا. ۽ ھاڻي، حقيقي ڪارن بابت ڊيٽا کان علاوه، اسان شايد پنھنجي XML ۾ رانديڪن ڪارن بابت ڊيٽا ڳولي سگھون ٿا! ان کان سواء، اهي ساڳيون خاصيتون آهن. اچو ته اسان جو پروگرام اهڙي XML فائل ۾ پڙهي. اسان هڪ حقيقي ڪار کي رانديڪن ڪار کان ڪيئن فرق ڪري سگهون ٿا؟
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">100.00</price>
   </car>
</carstore>
هتي اڳڀرائي ۽ نالي جي جڳهه اسان جي مدد ڪندا. اسان جي پروگرام ۾ رانديڪن ڪارن کي حقيقي ماڻهن کان ڌار ڪرڻ لاءِ (۽ حقيقت ۾ انهن جي حقيقي هم منصبن مان ڪي به رانديڪا)، اسان متعارف ڪرايون ٿا ٻه اڳڪٿيون: ”حقيقي“ ۽ ”راند“.
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
هاڻي اسان جو پروگرام مختلف ادارن جي وچ ۾ فرق ڪرڻ جي قابل هوندو! هر شيءِ جنهن ۾ رانديڪن جو اڳياڙي آهي ان کي رانديڪن وانگر سمجهيو ويندو :) بهرحال، اسان اڃا تائين مڪمل نه ڪيو آهي. اڳياڙين کي استعمال ڪرڻ لاءِ، اسان کي انهن مان هر هڪ کي نالي جي جاءِ طور رجسٽر ڪرڻ جي ضرورت آهي. دراصل، "رجسٽر" ھڪڙو مضبوط لفظ آھي :) اسان کي صرف انھن مان ھر ھڪڙي لاء ھڪڙو منفرد نالو آڻڻ جي ضرورت آھي. اهو طبقن سان گڏ آهي: هڪ طبقي جو مختصر نالو آهي ( Cat ) ۽ هڪ مڪمل طور تي قابل نالو آهي جنهن ۾ سڀئي پيڪيجز شامل آهن ( zoo.animals.Cat ). هڪ URI عام طور تي استعمال ڪيو ويندو آهي هڪ منفرد نالي جي جڳهه جو نالو ٺاهڻ لاء. ڪڏهن ڪڏهن اهو انٽرنيٽ ايڊريس استعمال ڪندي ڪيو ويندو آهي، جتي هن نالي جي جڳهه جا ڪم بيان ڪيا ويا آهن. پر اهو ضروري ناهي ته صحيح انٽرنيٽ ايڊريس هجي. گهڻو ڪري، منصوبا صرف URI-like strings استعمال ڪندا آهن جيڪي مدد ڪن ٿا نالو اسپيس جي درجه بندي کي ٽريڪ ڪرڻ ۾. هتي هڪ مثال آهي:
<?xml version="1.0" encoding="UTF-8"?>
<carstore xmlns:real="http://testproject.developersgroup1.companyname/department2/namespaces/real"
         xmlns:toy="http://testproject.developersgroup1.companyname/department2/namespaces/toy">
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
</carstore>
يقينن، "http://testproject.developersgroup1.companyname/department2/namespaces/real" تي ڪا به ويب سائيٽ موجود ناهي، پر هي اسٽرنگ مفيد معلومات تي مشتمل آهي: ڊپارٽمينٽ 2 ۾ گروپ 1 جا ڊولپرز "حقيقي" نالي جي جڳهه ٺاهڻ جا ذميوار آهن. . جيڪڏهن اسان کي نوان نالا متعارف ڪرائڻ گهرجن يا ممڪن تڪرارن تي بحث ڪرڻ جي ضرورت آهي، اسان کي خبر پوندي ته ڪيڏانهن وڃو. ڪڏهن ڪڏهن ڊولپر هڪ حقيقي تشريحاتي ويب ايڊريس استعمال ڪندا آهن هڪ منفرد نالي جي جڳهه جي نالي سان. مثال طور، اهو ٿي سگهي ٿو هڪ وڏي ڪمپني جو معاملو جنهن جي منصوبي کي دنيا جي لکين ماڻهن طرفان استعمال ڪيو ويندو. پر اهو يقيني طور تي هميشه نه ڪيو ويو آهي: اسٽيڪ اوور فلو هن مسئلي تي بحث ڪيو آهي. عام طور تي، URIs کي استعمال ڪرڻ جي ڪا سخت ضرورت نه آهي نالن جي جڳهه جي طور تي: توهان پڻ استعمال ڪري سگهو ٿا بي ترتيب واري تار. هي اختيار پڻ ڪم ڪندو:
xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
اهو چيو ته، يو آر آئي استعمال ڪندي ڪيترائي فائدا آهن. توهان هن بابت وڌيڪ پڙهي سگهو ٿا هتي .

بنيادي XML معيار

XML معيار ملندڙن جو ھڪڙو سيٽ آھن جيڪي XML فائلن ۾ اضافي ڪارڪردگي شامل ڪن ٿا. XML جا ڪيترائي معيار آھن، پر اسان صرف سڀ کان وڌيڪ اھم معيارن تي نظر ڪنداسين ۽ معلوم ڪنداسين ته اھي AJAX کي ممڪن بڻائين ٿا، جيڪو ھڪڙو مشهور XML معيار آھي. اهو توهان کي ويب پيج جي مواد کي ٻيهر لوڊ ڪرڻ جي بغير تبديل ڪرڻ جي اجازت ڏئي ٿو! XSLT توهان کي XML ٽيڪسٽ کي ٻين فارميٽ ۾ تبديل ڪرڻ جي اجازت ڏئي ٿي. مثال طور، توهان XML کي HTML ۾ تبديل ڪرڻ لاءِ XSLT استعمال ڪري سگهو ٿا! جيئن اسان چيو آهي، ايڪس ايم ايل جو مقصد ڊيٽا کي بيان ڪرڻ آهي، نه ان کي ڊسپلي ڪرڻ. پر XSLT سان اسان هن حد جي چوڌاري حاصل ڪري سگهون ٿا! XML DOM توهان کي هڪ XML فائل مان انفرادي عناصر کي ٻيهر حاصل ڪرڻ، تبديل ڪرڻ، شامل ڪرڻ، يا حذف ڪرڻ جي اجازت ڏئي ٿو. هتي هڪ ننڍڙو مثال آهي ته اهو ڪيئن ڪم ڪري ٿو. اسان وٽ هڪ books.xml فائل آهي:
<bookstore>
   <book category="cooking">
       <title lang="en">Everyday Italian</title>
       <author>Giada De Laurentiis</author>
       <year>2005</year>
       <price>30.00</price>
   </book>
   <book category="children">
       <title lang="en">Harry Potter</title>
       <author>J. K. Rowling</author>
       <year>2005</year>
       <price>29.99</price>
   </book>
</bookstore>
ان ۾ ٻه ڪتاب آهن. ڪتابن ۾ هڪ <عنوان> عنصر هوندو آهي. هتي اسان پنهنجي XML فائل مان سڀني ڪتابن جا عنوان حاصل ڪرڻ لاءِ جاوا اسڪرپٽ استعمال ڪري سگهون ٿا ۽ پهرين کي پرنٽ ڪنسول ڏانهن:
<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
  myFunction(this);
  }
};
xhttp.open("GET", "books.xml", true);
xhttp.send();

function myFunction(xml) {
    var xmlDoc = xml.responseXML;
  document.getElementById("demo").innerHTML =
  xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
}
</script>

</body>
</html>
DTD ("دستاويز جي قسم جي تعريف") توهان کي اجازت ڏئي ٿي ته توهان هڪ XML فائل ۾ هڪ اداري لاءِ اجازت ڏنل عنصرن جي فهرست بيان ڪريو. مثال طور، فرض ڪريو ته اسان ڪتاب اسٽور جي ويب سائيٽ تي ڪم ڪري رهيا آهيون ۽ سڀ ڊولپمينٽ ٽيمون ان ڳالهه تي متفق آهن ته XML فائلن ۾ ڪتاب جي عناصر لاءِ صرف عنوان، ليکڪ، ۽ سال جون خاصيتون بيان ڪيون وڃن. پر اسان پاڻ کي بي پرواهه کان ڪيئن بچائي سگهون ٿا؟ تمام آسان!
<?xml version="1.0"?>
<!DOCTYPE book [
       <!ELEMENT book (title,author,year)>
       <!ELEMENT title (#PCDATA)>
       <!ELEMENT author (#PCDATA)>
       <!ELEMENT year (#PCDATA)>
       ]>

<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
</book>
هتي اسان <book> لاءِ صحيح خاصيتن جي فهرست بيان ڪئي آهي. اتي ھڪڙو نئون عنصر شامل ڪرڻ جي ڪوشش ڪريو ۽ توھان کي فوري طور تي غلطي ملندي!
<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
   <mainhero>Frodo Baggins</mainhero>
</book>
غلطي! "عنصر مکيه هيرو هتي اجازت ناهي" اتي ٻيا ڪيترائي XML معيار آهن. توهان انهن مان هر هڪ سان پنهنجو پاڻ کي واقف ڪري سگهو ٿا ۽ ڪوڊ ۾ گهڻي کوٽائي ڪرڻ جي ڪوشش ڪري سگهو ٿا. بهرحال، جيڪڏهن توهان کي XML تي معلومات جي ضرورت آهي، توهان اتي تقريبا هر شيء ڳولي سگهو ٿا :) ۽ انهي سان، اسان جو سبق ختم ٿئي ٿو. اهو وقت آهي ڪمن ڏانهن واپس وڃڻ جو! :) ٻئي دفعي تائين!
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION