|
|
|||||||
|
تحدّثنا في الدرس الثاني عن الهيكليّة الشجريّة لملفات XML ، وقلنا بأنّه من الجائز أن نعطي نفس الاسم لأكثر من عنصر لأنّ الوصول إلى العناصر لا يتمّ عبر اسمها فحسب . في الدرس الثالث وضعنا مثالاً تطبيقيًا لإنشاء ملف XML يحمل بيانات كتّاب عالم التقنيّة . الآن ، ماذا لو أردنا الوصول إلى بيانات كاتبٍ معين ، عن طريق رقم الـ id الخاصّ به مثلاً .. أو عن طريق اسمه أو رابط مدونته ؟ إنّ معرفتنا لاسم العنصر الَّذي يحمل بيانات الكاتب الواحد وهو <author> لا يكفي ، لا بدّ إذًا من وجود طريقة تساعدني على الوصول إلى عناصر معيّنة ، بعبارةٍ أخرى أسلوب للإبحار في ملفات XML ” XML Files Navigation ” . توجد طريقتين لذلك وهما : 1- استخدام لغات مخصّصة للاستعلام في ملفات XML ، وعلى رأسها : XPath ، XQuery هذه اللغات تقدّم أسلوبًا معيّنًا للبحث في ملف XML بالاعتماد على وجود معلوماتٍ حول العناصر ، على سبيل المثال :
2- التعامل المباشر مع الهيكل الشجريّ لملف الـ XML ، وهنا يكون الوصول للعنصر عن طريق تتبع المسار الوراثي له . بالنسبة للغة XPath فسوف نتناولها بالتفصيل في الجزء الثاني من الدورة بإذن الله ، أمّا درسنا اليوم فسوف نتحدّث فيه عن الطريقة الثانية . مع ملاحظة أنّنا نستطيع الجمع بين الطريقتين أثناء البرمجة . . . افتح ملف techwldAuthors.xml الذي قمنا بإنشائه في المرة السابقة عبر المتصفح . لاحظ الهيكلية الشجرية التي تحدثنا عنها في الدرس الأول ، فهم هذه الهيكلية مهمّ جدًا للتعامل مع عناصر الـ XML برمجيًا .
لاحظ المستويات المختلفة في الشجرة ، التي تبدأ بالجذر ، ثمّ بأبناء الجذر ، ثم بأبناء أبناءه .. وهكذا . 1- الوصول إلى العناصر سيكون عبر ترقيمها ، طريقة الترقيم سهلة جدًا لكن تحتاج إلى تركيز شديد أثناء التنفيذ ، ببساطة سوف نأخذ كل مجموعة إخوة "Siblings” ونقوم بترقيمهم بدءًا من الصفر ثم 1 .. 2 .. 3 وهكذا . 1- لكل عنصر مسار "path” يجب عبوره للوصول إليه ، المسار يبدئ من رقم الجذر 0 ويمر بجميع أرقام آباء العنصر حتى يصل إليه . بعبارة أخرى ، كتابة مسار العنصر يشبه كتابة اسم الإنسان ! نحن نكتب اسم الفرد ثم اسم والده ثم اسم جده .. حتى نصل إلى جده الكبير ، في حالة العناصر يحدث العكس ، حيث نبدأ بكتابة رقم الجد الكبير وهو ” الجذر ” ثمّ رقم الجد الذي يليه .. حتى نصل إلى رقم الأب ثمّ رقم العنصر المراد الوصول إليه : 1- مسار الوصول إلى العنصر techwld_authors: 0 . 2- مسار الوصول إلى العنصر author : 00 . 3- مسار الوصول إلى العنصر author : 01 . 4- مسار الوصول إلى العنصر author : 02 . 5- مسار الوصول إلى العنصر name : 000 . 6- مسار الوصول إلى العنصر skills : 001 . 7- مسار الوصول إلى العنصر techwld_page : 002 . 8- مسار الوصول إلى العنصر blog : 003 . 9- مسار الوصول إلى العنصر skill: 0010 . 10- مسار الوصول إلى العنصر skill: 0011 . لتقريب المفهوم صوريًا ، للوصول إلى العنصر blog نتبع المسار التالي 003 :
أنبّه على أمرٍ مهم ، لو لاحظتم الوسم author مكرر في المستوى الواحد ، قد أجده في الخانة 0 أو 1 أو حتى 1000 ، لذلك فمن الاستحالة الوصول إليه إلاّ بمعرفة معلومات يحملها ، على سبيل المثال رقم الـ id أو اسم الكاتب name ، كذلك ينطبق الأمر على الوسم skill .. من المستحيل تحديد ما هي المهارة الَّتي أبحث عنها دون أن أعرفها ” بالنصّ ” حتى لو كنتُ قد توصلتُ لصاحبها . بالنسبة للوسوم name , blog , skills , techwld_page فهي وسوم غير مكررة في المستوى الواحد ، دائمًا سوف يكون الوسم name في الخانة 0 والوسم blog في الخانة 3 ، لذلك فبمجرّد وصولي للوسم author يصبح بإمكاني الوصول إليها جميعًا . أمر آخر ، المسارات الَّتي ذكرتُها سابقًا تبدأ من جذر الملف ، أستطيع أن أبدأ من أيّ عنصرٍ آخر ، على سبيل المثال إذا وصلت إلى العنصر author باتباعي المسار 002 فأستطيع مباشرةً أن أنتقل إلى 0 للوصول إلى العنصر name . قد يبدو الأمر سهلاً ومملاً للوهلة الأولى ، لكنّ هذا نموذج صغير جدًا لملف XML . عندما يصل عدد المستويات في الملف الواحد إلى 20 مستوى ، كل مستوى يحتوي على عشرات العناصر المتداخلة يصبح الأمر مثيرًا ومشوقًا جدًا جدًا ، شخصيًا أجد أنّه من أكثر المهام التي تجعلني أشعر بالمتعة والحماس في التعامل مع ملفات الـ XML هو الإبحار فيها . ما رأيكم بكتابة مسار للوصول بجانب كل عنصر في ملف techwldAuthors.xml ؟ view source |
جميع الحقوق محفوظة © 2024 |