دورة XML: الدرس الرابع


.

.

  • · الإبحار في ملفات الـ XML :

تحدّثنا في الدرس الثاني عن الهيكليّة الشجريّة لملفات 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 ؟

[xml] <?xml version="1.0" encoding="utf-8"?>
<techwld_authors> <!–path:0–>
<author id="1">    <!–path:00–>
<name>سعود الهواوي</name> <!–path:000–>
<skills> <!–path:001 –>
<skill>برمجة تطبيقات </skill><!–path:0010–>
<skill>التعامل مع تقارير الكريستال ريبورت</skill> <!–path:0011 –>
</skills>
<techwld_page><!–path:002 –>
http://www.tech-wd.com/wd/author/saud-hawawi/
</techwld_page>
</author>

<author id="2"> <!–path:01–>
<name>عبد الملك الثاري</name> <!–path:010–>
<skills> <!–path:011–>
<skill>تصميم جرافيكي</skill> <!–path:0110–>
<skill>تصميم مواقع الويب</skill> <!–path:0111–>
<skill>برمجة مواقع الويب</skill> <!–path:0112–>
</skills>
<techwld_page> <!–path:012–>
http://www.techwd.com/wd/author/althari/
</techwld_page>
<blog>http://althari.ws/</blog> <!–path:013–>
</author>

<author id="3"> <!–path:02–>
<name>إحسان فهمي</name> <!–path:020–>
<skills> <!–path:021–>
<skill>تصميم مواقع الويب</skill> <!–path:0210–>
<skill>برمجة مواقع الويب</skill> <!–path:0211–>
</skills>
<techwld_page> <!–path:022–>
http://www.tech-wd.com/wd/author/e7san/
</techwld_page>
<blog>http://e7san1988.wordpress.com/</blog> <!–path:023–>
</author>
</techwld_authors>

[/xml]

.

.

.

  • · XML name spaces :

اقرأ ملف الـ XML التالي  :

[xml] <?xml version="1.0" encoding="utf-8"?>
<html>
<head>
<title>web page</title>
</head>
<body></body>
</html>

[/xml]

هل هذا ملف XML أم XHTML ؟ O_O

في حال تشابه أسماء العناصر واختلاطها علينا فإنّنا نستخدم ما يُعرف بفضاءات الأسماء أو الـ Namespaces .

لنفرض أنّ لدينا 3 عناصر تحمل الاسم <html> لكنّ كلاً منها يعبّر عن محتوىً مختلف ، سوف نُلحق كلّ وسم بلاحقٍ مختلف يميّزه عن الآخر .

تتكون فضاءات الأسماء في لغة xml من جزئين :

1-     Prefix  Name ، وهو اللاحق الذي يوضع قبل اسم العنصر لتمييزه ، ونفصل بينهما بعلامة ( : )

2-     وصف الـ Name Prefix ونوضّحه في العنصر الجذر root element .

ليصبح ملفّ الـ XML بهذا الشكل :

[xml] <?xml version="1.0" encoding="utf-8"?>
<d:html>
<d:head>
<d:title>web page</d:title>
</d:head>
<d:body></d:body>
</d:html>
[/xml]

ثمّ نضع تعريف لكلّ name prefix  في عنصر الـ root :

صيغة التعريف هي :

[xml] xmlns:prefix="URI"
[/xml]

ماذا نعني بالـ URI ؟

هو رابط لصفحة إنترنت تقدّم معلوماتٍ حول مصطلح معين ، هذه الصفحة تكون غالبًا تابعة لمؤسسات رسميّة أو معتمدة .

وبدلاً من أن يضع المطورون وصف للـ namespaces في تعريفهم له ، يشيرون إلى روابط تعرّفها وبذلك يختصرون على أنفسهم الوصف المتكرر الَّذي لا طائل له .

ليصبح الملفّ بهذا الشكل :

[xml] <?xml version="1.0" encoding="utf-8"?>
<d:html xmlns:d="http://www.w3schools.com/furniture">
<d:head>
<d:title>web page</d:title>
</d:head>
<d:body></d:body>
</d:html>
[/xml]

هل سأستفيد من استخدام فضاءات الأسماء في التطوير ؟

غالبًا لا .. لكنّي أحببتُ وضعها ضمن الدروس لأنّ الكثير من اللغات والملفات المساعدة للـ XML تعتمد عليها .

على سبيل المثال ملّفات xml schema الَّتي تُستخدم لتعريف عناصر الـ xml تستخدم فضاء اسم هو / xmlns:xs=”http://www.w3.org/2001/XMLSchema” .

.

.

انتهى الدرس الرابع ..

للتو انتبه بأنّه كان طويلااااااا !!

ربما يعجب هذا البعض 😀

في الدرس الخامس إن شاء الله سوف نتحدث عن بعض اللغات والتقنيات المبنيّة على الـ XML ^_^

وقتًا طيبًا للجميع ،،

  • وائل

    مقال رائع و منظم..
    شكراً يا إحسان

  • Osama Abukmail

    السلام عليكم
    شرح جميل لكن هناك نقطة اتمنى توضيحها وهي ال NameSpaces

    ما الغرض منها وما الفرق عندما وضعنا ال NameSpaces وقبلها

    لان عندما يقرأ المطورين الجدد هذا الدرس سيقف عندها

    تحياتي

    • كما ذكرت في الدرس ..
      عندما وضعت namespace كأنّي حددت مجال محدد للوسوم لا تخرج عنه .
      لا نستخدم الـ namespaces عادةً أثناء التطوير العادي ، يستخدمها المطورون الَّذين يبنون لغات على أساس لغة XML مثل لغة XML Schema .
      لماذا يفعلون ذلك ؟ لخلق مرجع رسمي للغة لا يخرج عنه مستخدموها ، بحيث لو استخدمت وسم مطابق لاسم أحد وسومها بدون استخدام الـ namespace فإنها لا تقبل ، والعكس صحيح أيضًا .
      أتمنى أنّ الفكرة قد وصلتك وأعتذر عن تأخري في الرد لأني لم أنتبه إليه .

  • شكراً أستاذة إحسان 🙂

  • ثامر الهواوي

    مقال ممتاز . وجزاك الله خير

  • sultan

    الله يعطيك العافية في انتظار تكملة الدروس
    ولي رغبة كبيرة لمعرفة ربطها بقواعد البيانات

  • بارك الله فيك أختي إحسان..
    أنا أيضا أجد بعض الغموض الذي يلف NameSpaces، لكن قد نفهمه مع التطبيقات القادمة إن شاء الله..
    هنا أدرج ملاحظتي نفسها التي كتبتها في الدرس الثالث على الأرجح، وهي وجود خطأ حدث سهوا منك يخص عدم إغلاق الوسم .
    موفقة أختي لكل الخير..
    مني لك أرق تحية..

    • وضّحت أكثر فكرة الـ namespace في ردي على الأخ أسامة أعلاه .. وربّما لشدّة بساطتها يلفها هذا الغموض 🙂

      بالنسبة للوسوم تمّ تعديلها في الدرسين وأكرر شكري لتنبيهك ..

  • اتمنى توضيح اكثر للـ NameSpace
    بالرغم الرد على أسامه لم يكن كافي فأتمنى مزيد من التوضيح بمثال حي

  • Generally I don’t learn post on blogs, but I wish to say that this write-up very compelled me to check out and do so! Your writing taste has been amazed me. Thanks, quite nice post.

  • I would like to point out my respect for your kindness giving support to men and women who actually need help with in this topic. Your real dedication to passing the solution all-around appears to be particularly good and have frequently made others just like me to reach their endeavors. Your personal helpful guide signifies this much a person like me and a whole lot more to my office colleagues. Many thanks; from each one of us.

  • My spouse and I stumbled more than here by a different web address and thought I might check things out. I like what I see so i am just following you. Look forward to checking out your web page again.

  • Ugg Boots are special as they help people make an impressive fashion statement because of their unique design after the difference Genuine uggs are made from sheepskin and imitations made from wool should be avoided at all costs Ladies, care for yourself and wrap your feet in womens Ugg boot Normally, certain thing with superb durability and solace is expensive Next click on ‘online retailers But at that time, the civil aviation industry in the eighth five-year period, the pilot’s training plan every year around 600, overcapacityAn genuine pair is essential merely because genuine ugg boots sheepskin could be only found on genuine items Trusty jeans along using the hottest skirts could be each matched with this style

  • Hello! I just would like to give you a huge thumbs up for the amazing info you have in this article on it posting. I’ll be coming back to your blogs for even more soon.

  • There are some helpful tips in time in it writing but I don’t understand if I notice all of them core to heart. There may be some validity however I’ll bring hold belief unless I check into this further. Good article , thanks and we want even more! Added to FeedBurner as well

  • I like this post, enjoyed this one appreciate it for posting. “It is well to give when asked but it is better to give unasked, through understanding.” by Kahlil Gibran.

  • Nice post at دورة XML: الدرس الرابع | عالم التقنية. I was checking constantly this blog and I’m impressed! Very useful info specially the last part 🙂 I care for such info much. I was looking for this particular info for a very long time. Thank you and best of luck.

  • دورة XML: الدرس الرابع | عالم التقنية I was suggested this web site by my cousin. I am not sure whether this post is written by him as no one else know such detailed about my difficulty. You’re amazing! Thanks! your article about دورة XML: الدرس الرابع | عالم التقنيةBest Regards Cassetta

  • دورة XML: الدرس الرابع | عالم التقنية I was recommended this website by my cousin. I’m not sure whether this post is written by him as nobody else know such detailed about my trouble. You’re wonderful! Thanks! your article about دورة XML: الدرس الرابع | عالم التقنيةBest Regards Cindy

  • Pretty nice post. I just stumbled upon your blog and wanted to say that I’ve really enjoyed browsing your blog posts. In any case I will be subscribing to your feed and I hope you write again very soon!

  • Great post at دورة XML: الدرس الرابع | عالم التقنية. I was checking continuously this blog and I’m impressed! Very helpful information specifically the last part 🙂 I care for such info much. I was looking for this certain information for a very long time. Thank you and best of luck.

  • دورة XML: الدرس الرابع | عالم التقنية I was recommended this blog by my cousin. I’m not sure whether this post is written by him as no one else know such detailed about my problem. You are wonderful! Thanks! your article about دورة XML: الدرس الرابع | عالم التقنيةBest Regards Cassetta

  • دورة XML: الدرس الرابع | عالم التقنية Pretty nice post. I just stumbled upon your weblog and wanted to say that I’ve really enjoyed browsing your blog posts. After all I will be subscribing to your rss feed and I hope you write again soon!

  • whoаh this blog is excellеnt i lіke readіng your
    posts. Keep uр the gоod work!
    You rеalize, many persons are hunting rounԁ
    foг thiѕ infoгmаtion, уou can
    hеlp them greatly.

تعليقات عبر الفيسبوك