پی ایچ پی میں ایکس ایم ایل ڈیٹا پڑھیں

سافٹ ویئر ڈیویلپمنٹ کی دنیا میں بہت سی پروگرامنگ لینگویجز اور ڈیٹابیسز استعمال ہوتی ہیں، مختلف ضروریات کےلیے بننے والے سافٹ ویئرز کے لیے طرح طرح کی ٹیکنالوجیز کام میں لائی جاتی ہیں۔ ایسے میں جب ایک سافٹ ویئر کا ڈیٹا کسی دوسرے سافٹ ویئر کو مہیا کرنے کی ضرورت پیش آتی ہے تو وہاں مسئلہ پیدا ہو جاتا ہے۔ اس لیے کہ ایک سافٹ ویئر کا کوڈ اور ڈیٹابیس کا ڈھانچہ (Table structure) دوسرے سافٹ ویئر سے مختلف ہوتے ہیں، دونوں کی آپس میں مطابقت (Compatibility) نہیں ہوتی۔ اس مسئلے کے حل کے لیے XML اسٹینڈرڈ متعارف کرایا گیا جس نے ایک سافٹ ویئر سے دوسرے سافٹ ویئر تک مواد کی ترسیل آسان کر دی۔

XML کے متعارف ہونے سے پہلے سافٹ ویئرز کے درمیان مواد کی ترسیل کا عمل کسی خاص معیار کے تحت نہیں ہوتا تھا، بلکہ پروگرامرز اپنی مرضی کے مطابق الگ سے چھوٹے پروگرامز لکھتے تھے جن کی مدد سے ایک سافٹ ویئر کا مواد دوسرے سافٹ ویئر کے لیے قابل استعمال بنایا جاتا تھا۔ ظاہر بات ہے اس کے لیے وقت اور مشقت درکار ہوتی تھی۔ لیکن XML نے اس کام کو یہ کہہ کر آسان بنا دیا کہ بھئی جس سافٹ ویئر نے ڈیٹا مہیا کرنا ہے وہ XML فارمیٹ میں مہیا کرے، اور جس سافٹ ویئر نے ڈیٹا وصول کرنا ہے اس کی پروگرامنگ لینگویج میں XML فارمیٹ پڑھنے کی صلاحیت ہونی چاہیے- چنانچہ دنیا کی تمام معروف پروگرامنگ لینگویجز نے XML اسٹینڈرڈ قبول کرتے ہوئے اپنے اندر اسے استعمال کرنے کی صلاحیت پیدا کرلی اور یوں ایک سافٹ ویئر سے ڈیٹا دوسرے سافٹ ویئر میں بھیجنا آسان ہوگیا۔

XML ڈیٹا کی ایک مثال

آئیں پہلے XML فارمیٹ پر ایک نظر ڈال لیتے ہیں- درج ذیل مثال میں:

  • book ایک روٹ ٹیگ ہے جس کے اندر keywords, price, title, authors کے ناموں سے چار مزید ٹیگز ہیں۔
  • authors ٹیگ کے اندر author کے نام سے دو مزید ٹیگز ہیں۔ ان دونوں ٹیگز میں آپ id بھی دیکھ رہے ہیں جو ٹیگ کی خصوصیت (Attribute) کہلاتی ہے۔
  • title اور price ٹیگز کے اندر مزید کوئی ٹیگ نہیں ہے بلکہ ان کے اندر صرف ویلیوز ہیں۔
  • keywords ٹیگ کے اندر keyword کے نام سے دو مزید ٹیگز ہیں۔

جن ٹیگز کے اندر ایک یا اس سے زیادہ ٹیگز ہوں وہ Nested tags کہلاتے ہیں۔ XML میں ٹیگز اور ایٹری بیوٹس کے نام اپنی مرضی سے ڈیٹا کی نوعیت کے مطابق رکھے جاتے ہیں۔

XML ڈیٹا کی ایک مثال


PHP میں XML ڈیٹا کیسے پڑھیں؟

PHP 5 میں SimpleXML ایکسٹینشن شامل کی گئی ہے جس کی مدد سے XML ڈیٹا ایک آبجیکٹ میں تبدیل کر کے پروگرام میں قابل استعمال بنا لیا جاتا ہے۔ مثال کے طور پر درج ذیل ڈیٹا دیکھیں:

<?xml version="1.0" encoding="UTF-8"?>
<library>
    <book>
        <authors>
            <author id="47">John Doe</author>
            <author id="58">Peter Pan</author>
        </authors>
        <title>Database Systems</title>
        <price>29</price>
        <keywords>
            <keyword>SQL</keyword>
            <keyword>relational</keyword>
        </keywords>
    </book>
    <book>
        <authors>
            <author id="40">Juliana Fitzwater</author>
        </authors>
        <title>PHP</title>
        <price>25</price>
        <keywords>
            <keyword>web development</keyword>
            <keyword>programming</keyword>
        </keywords>
    </book>
</library>


یہ ڈیٹا ہمارے پاس ایک فائل library.xml میں موجود ہے جسے ہم PHP کی مدد سے پڑھیں گے۔ درج ذیل مثال میں:

  • کوڈ کی پہلی لائن میں فائل کے مکمل XML ڈیٹا کو ایک ویری ایبل library$ میں آبجیکٹ کی صورت میں ڈال دیا گیا ہے۔ اس مقصد کے لیے PHP کا فنکشن ()simplexml_load_file استعمال کیا گیا ہے۔
  • دوسری لائن میں پہلی کتاب کے پہلے مصنف کا نام دکھایا گیا ہے۔

<?php
$library 
simplexml_load_file("library.xml");
echo 
$library->book[0]->authors->author[0];
?>

اس کوڈ کا نتیجہ یہ آیا ہے:

John Doe


اب ظاہر ہے کہ ہر ویلیو کے حصول کے لیے اس طرح کا کوڈ نہیں لکھا جائے گا بلکہ ہم Loop استعمال کرتے ہوئے ڈیٹا کی تمام ویلیوز حاصل کریں گے-

درج ذیل کوڈ میں کامنٹس کی لائنوں کے ساتھ نمبر دیے گئے ہیں، ان نمبروں کے لحاظ سے کوڈ کی وضاحت دیکھیں۔

  1. library.xml فائل کا ڈیٹا library$ ویری ایبل میں ایک آبجیکٹ کی صورت میں ڈال دیا گیا ہے۔
  2. foreach کا ایک لوپ چلایا گیا ہے جو library$ میں موجود ہر کتاب کو book$ ویری ایبل میں آبجیکٹ کی صورت میں ڈال دے گا۔
  3. اب ہم لوپ کے اندر ہیں جو کہ فہرست میں موجود تمام کتابوں سے گزرے گا۔ ہم لوپ کے جس چکر پر ہوں گے، اس نمبر کی کتاب ہمیں book$ ویری ایبل میں آبجیکٹ کی صورت میں میسر ہوگی۔ اس book$ آبجیکٹ کی پراپرٹی title کی مدد سے یہاں اس کتاب کا ٹائٹل دکھایا جا رہا ہے۔
  4. یہاں کتاب کی قیمت دکھائی جا رہی ہے۔
  5. یہاں foreach کا ایک اندرونی لوپ چلایا گیا ہے جو موجودہ کتاب کے تمام مصنفین کے نام ان کی id کے ساتھ دکھا دے گا۔
  6. یہاں بھی foreach کا ایک اندرونی لوپ چلایا گیا ہے جو موجودہ کتاب کے تمام کی ورڈز دکھا دے گا۔
  7. ایک کتاب کی تمام ویلیوز دکھانے کے بعد ایک لائن دکھانے کے لیے بیرونی لوپ کے آخر میں HTML کا ٹیگ hr استعمال کیا گیا ہے۔

<?php
// 1. Get xml data as an object
$library simplexml_load_file("library.xml");

// 2. Loop through books
foreach ($library as $book) {

    
// 3. Title
    
echo "<b>Title</b>: "$book->title "<br>";
    
    
// 4. Price
    
echo "<b>Price</b>: "$book->price "<br>";
    
    
// 5. Author(s)
    
echo "<b>Authors(s):</b><br>";
    foreach(
$book->authors->author as $book_author) {
        echo 
$book_author['id'] . "- " $book_author "<br>";
    }

    
// 6. Keyword(s)
    
echo "<b>Keywords(s):</b><br>";
    foreach(
$book->keywords->keyword as $book_keyword) {
        echo 
$book_keyword "<br>";
    }

    
// 7. Line
    
echo "<hr>";
}
?>

اس کوڈ کا نتیجہ یہ ہے:

Title: Database Systems
Price: 29
Authors(s):
47- John Doe
58- Peter Pan
Keywords(s):
SQL
relational
Title: PHP
Price: 25
Authors(s):
40- Juliana Fitzwater
Keywords(s):
web development
programming


library$ میں Objects کونسے ہیں اور Arrays کونسے ہیں؟

XML ڈیٹا پر کام کرتے ہوئے آبجیکٹس اور ارریز کا فرق معلوم ہو تو ڈیٹا سمجھنے میں آسانی رہتی ہے۔ یہ معلوم کرنے کے دو طریقے ہیں:

  1. جس ٹیگ کے اندر ویلیو ہو وہ آبجیکٹ بن جاتا ہے۔ اور جس ٹیگ کے اندر مزید ٹیگز ہوں وہ آبجیکٹس کے اررے میں تبدیل ہو جاتا ہے۔
  2. یہ جاننے کے لیے آپ var_dump($library) کا فنکشن بھی استعمال کر سکتے ہیں۔ یا پھر یوں کر سکتے ہیں کہ print_r($library) کا جو نتیجہ سامنے آئے اسے کسی Online Formatter کی مدد سے فارمیٹ کر لیں۔