دورة XML : الدرس الثاني

.

  • البنية الهيكلية :

الهيكلية الشبيهة بالشجرة Treelike Structure :

هي أحد أشهر أشكال تنظيم البيانات في الحاسوب ، حيث تخزّن البيانات في وحداتٍ Nodes متفرّعة عن بعضها البعض ، تبدأ من الجذر Root الَّذي يحمل جميع الوحداتِ الأخرى ، وتنتهي بالأوراق Leaves الّتي لا تتفرّع عنها أيّ وحدات ، ومن هنا جاء الاسم treelike structure ، غير أنّ الفرق بين الشجرة الحقيقيّة وشجرة البيانات هو أنّ جذر الشجرة الحقيقيّة يكون في الأسفل بينما تكون أوراقها في الأعلى ، لكنّ جذر شجرة البيانات يكون في الأعلى وتكون الأوراق في الأسفل .

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

.

.

وشجرة البيانات تنتهج نهجًا وراثيًا ، حيث :

1-     لكلّ شجرة جذر واحد فقط ، لا يمكن للشجرة أن يكون لها أكثر من جذرٍ ولا أقل ، والجذر هو الوحدة الوحيدة الَّتي ليس لها أب تتفرّع عنه .

2-     كلّ الوحداتِ الَّتي تتفرّع عن وحدةٍ ما تصبح أبناء Children لها.

3-     أبناء الأبناء يصبحون أحفادًا  descendants للوحدة الأب .

4-     آباء الآباء يُعرفون بالأجداد أو الأسلاف ancestors للوحدة الابن .

5-     الوحدات الَّتي تتفرّع عن الأب نفسه تسمّى بالإخوة Siblings .

وبالنظر إلى شكل الشجرة أعلاه ، يمكننا استنتاج أنّه :

1-     جذر هذه الشجرة هو الوحدة A .

2-     يتفرَّع من الجذر A  ابنين هما الوحدتين B1,B2 .

3-     يتفرَّع من الوحدة B2 ابنين هما الوحدتين C1,C2 .

4-     يتفرَّع من الوحدة C1 ابنين هما الوحدتين D1,D2 .

5-     الوحدة B1 هو أخ للوحدة B2 .

6-     الوحدة C1 هو أخ للوحدة C2 .

7-     الوحدة D1 هو أخ للوحدة D2 .

8-     النصّ ( Learn XML ) هو وحدة نصيّة “Text Node” متفرعة كابن من الوحدة C2 .

9-     النصّ ( E7san ) هو وحدة نص متفرعة كابن من الوحدة D2 .

وليست ملّفات الـ XML وحدها لها هيكليّة شبيهة بالشجرة ، فكما أردفنا في الدرس الأول ، الهيكلية الشبيهة بالشجرة هي ميزة تتميّز بها لغات الترميز عامّة ، HTML أيضَا على سبيل المثال .

بعض النقاط المهمّ إدراكها عند التعامل مع ملفات XML :

1-     تُعرف الوحدات في ملف XML بالعناصر XML Elements .

2-     هذه العناصر :

* قد تحمل بياناتٍ نصيّة.

* أو قد تحمل وحداتٍ أخرى .

* أو قد تجمع بين هذا وذاك .

* أوقد تكون عناصر فارغة .

على اختلاف وكثرة اللغات والتقنيات الَّتي تتعامل برمجيًّا مع ملفات XML ، إلاّ أنّها في النهاية تتفق على فهم الهيكليّة الشجريّة للـ XML .

.

.

  • إنشاء ملف XML :

1-     افتح برنامج المفكرة أو أي محرر آخر .

ملاحظة :

توجد محررات خاصّة بلغة XML ، لكنّي أنصح باستخدام محرر Notepad++ لتحرير ملفات الـ XML والـ HTML والـ CSS وغيرها  .

2-     يفضل كتابة إعلان ” Declaration ” في أعلى الصفحة عن ملف الـ XML يحتوي على رقم الإصدار وعلى نوع التشفير :

[xml] <?xml version="1.0" encoding="utf-8"?>
[/xml]

* سوف نقوم بتحويل مثال الشجرة البيانيّة أعلاه إلى ملف XML عن طريق تحويل الوحدات إلى وسوم مزدوجة “Tags” :

[xml] <?xml version="1.0" encoding="utf-8"?>
<A></A>
[/xml]

العنصر الأول هو عنصر الجذر A ، جميع العناصر الأخرى سوف تكون محصورةً بين الوسمين <A></A>.

لذلك عادة ما يكون اسم الجذر معبرًا عن محتوى ملف الـ XML ، فإذا كان لدينا ملف XML يحتوي على بيانات زوار الموقع مثلاً ، يكون اسم الجذر : visitors_info .

[xml] <?xml version="1.0" encoding="utf-8"?>
<A>
<B1></B1>
<B2></B2>
</A>
[/xml]

قمنا بتحويل الوحدتين B1 وB2 إلى وسمين مزدوجين ووضعهما داخل عنصر الجذر ، وهكذا .. كلّ وحدة سوف تُحوّل إلى وسم فتح ووسم إغلاق يوضع داخل وسمي العنصر الأب لها .

[xml] <?xml version="1.0" encoding="utf-8"?>
<A>
<B1></B1>
<B2>
<C1></C1>
<C2></C2>
</B2>
</A>
[/xml] [xml] <?xml version="1.0" encoding="utf-8"?>
<A>
<B1></B1>
<B2>
<C1>
<D1></D1>
<D2></D2>
</C1>
<C2></C2>
</B2>
</A>
[/xml]

* أخيرًا ، نكتب الوحدات النصيَّة داخل الوسوم :

[xml] <?xml version="1.0" encoding="utf-8"?>
<A>
<B1></B1>
<B2>
<C1>
<D1></D1>
<D2>E7san</D2>
</C1>
<C2> Learn XML</C2>
</B2>
</A>
[/xml]

*  قم بحفظ الملف بامتداد .xml مثال / any_name.xml .

الآن لو قمتَ بفتح هذا الملف عبر المتصفح سوف تظهر لك العناصر بشكلٍ شجري دون أي تنسيق .

الصفات Attributes :

عناصر الـXML يمكن أن تحتوي على صفة أو أكثر تقدّم معلومات إضافية يكتبها المبرمج حول العنصر .

تُكتب هذه الصفات داخل وسم الفتح ، وتتكون من جزئين :

1-      اسم الصفة .

2-     قيمة الصفة .

[xml] <?xml version="1.0" encoding="utf-8"?>
<A attribute_name="value">
<B1 parent="A" ></B1>
<B2 parent="A">
<C1>
<D1></D1>
<D2>E7san</D2>
</C1>
<C2> Learn XML</C2>
</B2>
</A>
[/xml]

وبهذا ينتهي الدرس الثاني ، آمل أن يحوز على رضاكم وأن تخرجوا بفائدة منه ..

في الدرس الثالث سوف نناقش إن شاء الله :
1- قواعد كتابة ملفات الـ XML
2- تطبيق عملي لإنشاء ملف يحتوي على بيانات كتّاب مدونة جماعية .

  • الرسام

    شكرا على المجهود الطيب ولكن لدي سؤال مافائدة تكوين الصفات ولماذا تستخدم وهل هناك قواعد للصفة ام انها مفتوحة بدون قيود

    • الإجابة عن هذا السؤال مفصّلة في الدرس الثالث إن شاء الله ..
      أهلاً بك

  • SultanSh

    حرااااااااااااااااام
    أستغفر الله
    توني بديت أتحمس وخلص الدرس فجأة

  • منذ فترة وانا ابحث عن مصادر عربية لهذه اللغة حتى وجدت هذه الدورة الرائعة ذات الاسلوب السلس الجميل
    جزاكم الله خيرا

  • somiah

    جزاكي الله الف خير على هذا الدرس واسعدكي في الدنيا والاخره

    ولكن استاذتي
    اولا: كيف أحصل على نوع التشفير ورقم الإصدار
    ثانيا : مافائدة تكوين الصفات وماهي هذه الصفات التي شرحتيها(مثل سؤال الأخ الرسام)

    وشكرا

    • بالنسبة لنوع التشفير يمكنك استخدام أي نوع من الترميزات لكن يُفضّل استخدام UTF-8 أو UTF-16 لأنها ترميزات عالمية موحدة ، لغة XML تعتمدها إذا لم تحدد أنت نوع التشفير .

      بالنسبة للصفات مثلما أجبت عن الأخ وسام سنتحدث عن ذلك في الدرس الثالث بإذن الله .

  • السقاف

    الف شكر لك ولكن اريد اعرف فائدة حفظ البيانات بهذا الشكل (الشكل الشجري ) ومالذي جعل هذه اللغة بهذه الاهمية هل الاسلوب ام بساطتها ام ماذا وشكرا مرة اخرى

    • الـ treelike structure هي أحد أنواع تنظيم البيانات “data structure” وهو مصطلح حاسوبي يتناول أساليب تنظيم مجموعة من البيانات المترابطة لتسهيل البحث عنها وقراءتها ، يوجد انواع كثيرة من تنظيم البيانات مثل الطوابير والـ stacks والـ graphs و أيضًا الـ treelike structure .

      البيانات في لغة XML تنظم في هيكلية شبيهة بالشجرة ، تكمن أهميّة هذا النوع في هرميته الَّتي أعطت لملفات XML المنحى الوراثي الذي نستفيد منه .

      عندما يتكون الملف الواحد من جذر ومجموعة من الأبناء يحملون أبناءًا آخرين ، أو يحملون بياناتٍ منظمة ، فإنّ الوصول إلى هذه البيانات والتنقيب عنها سوف يكون أدق وأسرع وأسهل مهما كان حجم الملف .

      يمكنك قراءة المزيد بزيارة هذا الرابط : http://en.wikipedia.org/wiki/Tree_(data_structure)

      .
      .

      بالنسبة لقوة لغة XML فهي تكمن في نقطتين باختصار :
      1- أنّها تمنحك فرصة توصيف بياناتك بنفسك ، أو بمعنى أصح كتابة لغتك الخاصة بنفسك .
      2- يمكن لجميع اللغات البرمجيات والتقنيات الحديثة التعامل معها وقراءتها ، خذ مثلاً ملفات RSS المكتوبة بواسطة هذه اللغة ، أي مبرمج مهما كانت اللغة والتقنية التي يتعامل معها ( ASP.Net ، PHP ، AdobeAir ….. إلخ ) باستطاعته كتابة برنامج أو تطبيق يقرا هذه الملفات .

      أتمنى أن اكون قد أفدتك ^_^

  • 🙂 أخيراً وصل الدرس

    كنت أتمنى أخذ النقاط التي ناقشناها بعين الإعتبار بخصوص توضيح أنواع الـعناصر، وكيفية كتابة العناصر الفارغة !

    يبدو أننا أخطئنا التقدير فيما يخص الصفات، وكان إقتراح توضيح آلية الإستخدام بين العناصر والصفات أفضل في هذه المراحلة.

    إن شاء الله أعود غداً صباحاً لمناقشة الردود وتوضيح بعض النقاط

    دمتم بود

  • Dev:M-TAHA

    السلام عليكم ورحمة الله ،،
    أولا اشكرك على هذا الشرح الجميل ولكن لدي عدة أسالة ،،
    هل هذه الشجرة من نوع Binary search tree ؟
    ام اي نوع من انواع ال tree هي ؟

    ثانيا بالنسبة للاصدارة ما الفرق بين الاصدارات وكيف سأعرف ما هي الاصدارة التي يجب ان استخدمها ؟

    بالنسبة للصفات اعذريني لاني لم اتعود قراءة مثل هذه المواضيع باللغة العربية ،، فماذا يقصد بها هل هي فقط لتوضيح محتوى الخلية ام ماذا ؟

    وشكرا لك

    • العفو أخي الكريم ..
      بالنسبة لسؤالك ، لا .. لا تعتبر من نوع binary tree ، ولكن تعتبر tree عادية لا تندرج تحت الأنواع المخصصة .

      عن الصفات attributes ، فكما ذكرنا سيتم توضيحها في الدرس الثالث بإذن الله .

  • Ahmed

    جميل جدا لكن لو الدرس يكون مملوء بالمعلومات اكثر من ذلك يكون افضل, شكرا لافادتك للجميع .

  • اشكرك اخوي على هذا الدرس
    لكن لي ملاحظه بسيطه ,, ياريت تبتعد عن الروتين القديم في شرح الدروس
    وهو التفصيل بأسلوب لغوي فصيح وسرد معلومات كثيرة والناتج قليل
    صحيح كل المعلومات التي ذكرتها مفيدة لكن اغلب الكتب الي تشرح بهذا الاسلوب تكون مملة والفائدة منها قليلة بعكس لما يكون الشرح بطريقة بحثه على طول تدخل با الموضوع 1 + 2 = 3 بدون تفصل من وين جاء 1 ومن وين جاء 2
    لكن الي يريد تفصل اكثر يروح ويسئل واكيد بيلقى ,, لكن الهدف هو ايصال المعلومة بطريقة مبسطه ,,
    وتهمل الجانب النظري ,, لان النظري لا يسمن ولا يغني من جوع
    اتمنى لك التوفيق اخوي

    • العفو أخي ..
      اسمح لي ، لا أوافقك الرأي حول الدروس النظرية ، أنا مع المدرسة القديمة الَّتي تؤمن بالمنطق والفهم قبل إيمانها بالأكواد واللغات ، الدروس النظرية مهمّة جدًا .. لانّها تعطي المتلقّي القدرة على ابتكار أيّ تطبيق بطريقته الخاصّة طالما انّه فهم منطق اللغة جيدًا ووعاها ،

      الدروس العملية الَّتي تخبرني أنّ 1 + 2 = 3 دون أن تشرح لي ما هي هذه العملية ، سوف تجعلني أكتب مستقبلاً 2 + 4 = 3 ، دون أن استخدم مهاراتي الخاصّة في الاستفادة ممّا تعلمته .. مثل الوجبات السريعة ، لذيذة وشهية وممتعة لكنّها لا تقدّم فائدةً عميقة للجسم .

      بالنسبة للتفصيل ، قلت سابقًا وكررتها بأنّ هذه الدروس يمكن اختصارها في درس واحد فقط لكني احبّ الإسهاب فيها ، فالناس يختلفون في تلقيهم المعلومة ، تصدق أن هناك من طلب منّي التفصيل بشكل أكبر ؟

      إضافةً إلى أنّي نويتُ جعلها مرجعًا ، لذلك لم أحبذ الاختصار فيها .

      بالنسبة للفصحى ، في المرة الوحيدة التي كتبتُ فيها درس CSS بالعامية كتب أحدهم تعليق / رجاء اكتبي بالفصحى حتى يفهم جميع العرب الدرس !

      أو لعلك تقصد الفصحى الـ”قح” في الكلام ، فهو أسلوبي في الكتابة .. ربّما لا يكون مناسبًا للبعض ، قد أغيره إذا شعرتُ بأنّ هذا يُصعّب الفهم لدى المتلقي .

      أهلاً بك

  • أحمد

    الشرح رائع

  • توفيق

    يعطيك العافية على الدرس
    دمت بكا خير

  • slofanty

    جزاكم الله خيرا

    الدوره رائعه

  • tarik

    merci beaucoup pour l’explication vous rendez les cours tres attractifs

  • من البدآية و بديت أفحط !! ^^ الله يعين بس ,, جآري القرآءة كح

  • السلام عليكم
    درس مميز رغم اني لم افهم بعد فائدة هذه اللغة و ما دورها بالتحديد ؟
    و مجالات استخدامها

  • zidlah

    جزاكم الله خيرا

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