دورة XML : الدرس الرابع
قائمة الموقع

نصيحة هامة

تسجيل الدخول

أهلاً بك, ضيف · RSS 2019-09-16, 11:45 AM




  • · الإبحار في ملفات الـ 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 ؟

view source

print?
01xml version="1.0" encoding="utf-8"?>
02<techwld_authors> <!--path:0-->
03 <author id="1">    <!--path:00-->
04 <name>سعود الهواوي</name> <!--path:000-->
05 <skills> <!--path:001 -->
06 <skill>برمجة تطبيقات </skill><!--path:0010-->
07 <skill>التعامل مع تقارير الكريستال ريبورت</skill> <!--path:0011 -->
08 </skills>
09 <techwld_page><!--path:002 -->
10 
11http://www.tech-wd.com/wd/author/saud-hawawi/
12 
13 </techwld_page>
14 </author>
15 
16 <author id="2"> <!--path:01-->
17 <name>عبد الملك الثاري</name> <!--path:010-->
18 <skills> <!--path:011-->
19 <skill>تصميم جرافيكي</skill> <!--path:0110-->
20 <skill>تصميم مواقع الويب</skill> <!--path:0111-->
21 <skill>برمجة مواقع الويب</skill> <!--path:0112-->
22 </skills>
23 <techwld_page> <!--path:012-->
24 
25http://www.techwd.com/wd/author/althari/
26 
27 </techwld_page>
28 <blog>http://althari.ws/</blog> <!--path:013-->
29 </author>
30 
31 <author id="3"> <!--path:02-->
32 <name>إحسان فهمي</name> <!--path:020-->
33 <skills> <!--path:021-->
34 <skill>تصميم مواقع الويب</skill> <!--path:0210-->
35 <skill>برمجة مواقع الويب</skill> <!--path:0211-->
36 </skills>
37 <techwld_page> <!--path:022-->
38 
39http://www.tech-wd.com/wd/author/e7san/
40 
41 </techwld_page>
42 <blog>http://e7san1988.wordpress.com/</blog> <!--path:023-->
43 </author>
44</techwld_authors>

.

.

.

  • · XML name spaces :

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

view source

print?
1xml version="1.0" encoding="utf-8"?>
2<html>
3<head>
4<title>web page</title>
5</head>
6<body></body>
7</html>

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

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

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

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

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

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

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

view source

print?
1xml version="1.0" encoding="utf-8"?>
2<d:html>
3<d:head>
4<d:title>web page</d:title>
5</d:head>
6<d:body></d:body>
7</d:html>

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

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

view source

print?
1xmlns:prefix="URI"

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

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

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

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

view source

print?
1xml version="1.0" encoding="utf-8"?>
2<d:html xmlns:d="http://www.w3schools.com/furniture">
3<d:head>
4<d:title>web page</d:title>
5</d:head>
6<d:body></d:body>
7</d:html>

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

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

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

.

.


جميع الحقوق محفوظة © 2019
الموقع يتم التحكم به بواسطةuCoz