docs:xml_basics

بدهيات XML

هذه الوثيقة لم تكتمل بعد

مقدمة

الأدوات

الصياغة

يتم صياغة مستندات xml في أبسط صورها هكذا

<?xml version="1.0" encoding="utf-8"?>
<myRoot>
  <myElement>
    <someChild>Data goes here</someChild>
  </myElement>
</myRoot>

حيث نعرف عن نوع المستند وعن الترميز المتبع فيه (في مثالنا utf8) بواسطة السطر الأول

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

ثم بعد ذلك يأتي العنصر الجذر وهو الجد الأكبر لكل عقد شجرة xml في ملفات xhtml يمكن أن يكون اسم هذا العنصر html هكذا

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

ثم تتوالى أحفاده من العناصر بنفس الطريقة حيث يبدأ العنصر أو الوسم بكتابة اسمه بين حاصرتين زاويتين (علامتي أكبر وأصغر) وتنتهي بوضع علامة / قبل اسم العنصر.

العناصر التي لا محتويات لها يمكن إغلاقها فورا هكذا

<br/>

أنواع العقد nodes

  • العناصر elements وهي الاسم بعد بداية القوس الزاوي
  • الصفات attributes وهي بين الاسم وبين إغلاق القوس الزاوي (وهي عبارة عن قيمة ثم علامة = ثم قيمة بين علامتي اقتباس)
  • النص الموسوم (إما معرَب PCDATA وإما غير معرَب CDATA)
  • فضاء التسمية وهو بأن نذكر الفضاء ثم : ثم العنصر
  • تعليمات المعالجة وهي التي تكون بين علامتي سؤال داخل القوسين الزاويين كما في php
  • عقد التوثيق وهي التي تحتوي علامة ! بعد القوس الزاوي.
  • تعليقات ليست جزء من متن الوثيقة حيث يتم تجاهلها

العلاقات بين العقد

تتوزع العقد في شجرة كما في شجرة العائلة.

  • علاقة parent/child أي أب/ابن حيث كل عقدة لها أب واحد فقط (إلا الجذر)
  • علاقة Ancestors/Descendants أي جد/سليل مثلا العقدة الجذر جد لكل العقد. وكل العقد من سلالتها (أحفادها)
  • siblings أي الأشقاء وهي العقد التي لها نفس الوالد.

التخطي escaping

بما أن الأقواس الزاوية تستخدم في عمل عناصر xml لذا يمكن أن تكون جزء من البيانات (النص المعرَب) بل يجب تخطيها مثلا إن كنت تريد أن تضع كود برنامج به علامة أصغر فإن ما يلي خطأ

<program>
if (x<y) {printf("x is less than y");}
</program>

والصواب هو:

<program>
if (x&lt;y) {printf("x is less than y");}
</program>

حيث نستخدم علامة خاصة هي & ثم اسم الكيان في مثالنا lt أي less than ثم فاصلة منقوطة ; وبنفس الطريقة نتخطى علامة > بالكيان gt أي greater than وبما أن & علامة خاصة تحدد الكيانات لذا يجب تخطيها بواسطة الكيان amp

إن كان هناك نص طويل مليء بالكود الذي يحتاج تخطي (مثلا كود javascript) فإن من الأسهل استخدام البيانات غير المعربة CDATA

<![CDATA[data goes here]]>

هكذا

<program>
<![CDATA[
if (x < y && z > y) {
  printf("hello");
}
 
]]>
</program>

عوضا عن استخدام الكيانات

<program>
if (x &lt; y &amp;&amp; z &gt; y) {
  printf("hello");
}
</program>

الكيانات entities

الكيانات التلقائية

إضافة إلى lt و gt و amp التي تلزم للتخطي هناك quot و apos

الكيانات التلقائية في xml
الكيان القيمة
lt علامة أقل <
gt علامة أكبر >
amp علامة &
apos علامة '
quot علامة الاقتباس “

في لغة html فإن هناك الكثير من الكيانات التي لا تكون معرفة تلقائيا في xml مثل nbsp والتي تعني مسافة ومثل infin والتي تعني علامة ∞ للمزيد انظر

تعريف كيانات خاصة واستخدامها

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

يتم تعريف الكيان عبر عقدة وثيقة أي بعد ! وذلك بالشكل التالي

<!ENTITY entityName "text to be substituted">

مثلا عند عمل وثيقة الإصدار 7.2 من برنامج ثم جاءت إصدارة 7.3 الجديدة عوضا عن البحث عن 7.2 وتعديلها نعمل كيان اسمه الإصدار ونعرفه في رأس الوثيقة

<!ENTITY version "7.2">
<doc>
Welcome to Product &version; documentation
you are using Product &version; 
</doc>

استخدام كيانات من ملف خارجي

يمكنك جلب محتوى الكيان في ملف آخر هكذا

<!ENTITY entityName SYSTEM "file.txt">

ويمكن الاستفادة من هذه الطريقة في احتواء ملفات خارجية وذلك بتعريف كيانات تشير لها ثم استدعاء الكيان هكذا

<!ENTITY ch1 SYSTEM "ch1.xml">
<!ENTITY ch2 SYSTEM "ch2.xml">
<!ENTITY ch3 SYSTEM "ch3.xml">
<book>
&ch1;
&ch2;
&ch3;
</book>

فضاءات التسمية namespaces

أحيانا يمكنك تنضيد أكثر من نوع من أنواع xml في وثيقة واحدة مثلا xhtml و svg و xsl و OpenDocument Formate وغيرها لكن تخيل أن وسم معين له معان مختلفة في تلك الأنواع لذا نستخدم فضاءات التسمية لتجنب حصول تضارب بين تلك الأنواع ويكون ذلك بوضع تعريف فضاء التسمية xmlns على أي عقدة غالبا العقدة الجذر وصيغته تشبه تعيين الصفات حيث تتبع بعلامة المساواة ثم معرف الفضاء الذي مثلا في حالة xhtml هو http://www.w3.org/1999/xhtml هذا العنوان مجرد معرّف وليس بالضرورة أن يحتوي الموقع المشار له أي شيء.

<?xml version="1.0" encoding="utf-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<br>
</html>

هذا يعني أن العنصر br هو من فضاء التسمية التلقائي الذي هو xhtml. يمكن حديد أكثر من فضاء تسمية وذلك بذكر : ثم اسم الفضاء ثم = ثم معرف الفضاء. وعند سرد العناصر نضع الفضاء ثم : ثم العنصر

<?xml version="1.0" encoding="utf-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg">
<body>
<p>This is an HTML paragraph</p>
 
<svg:svg width="100" height="100" version="1.1" >
<svg:circle cx="50" cy="50" r="40" stroke="black"
stroke-width="2" fill="green" />
</svg:svg>
 
</body>
</html> 

هذا يعني أن الفضاء التلقائي هو xhtml وهناك فضاء svg أيضا. مثلا p هنا تنتمي لفضاء xhtml يعني هي تكافئ xhtml:p في حين circle جاءت من فضاء svg لأنها محددة صراحة.

ملاحظة: المثال أعلاه لا يعمل في المتصفحات وهو مجرد توضيح لمفهوم فضاءات التسمية.

طرق التحقق validation

سلامة البنية well-formed

تعريف نوع الوثيقة DTD

يتم تعريف نوع الوثيقة DTD أي Document Type Definition من خلال فرض المزيد من الشروط على عقد xml بحيث نحدد ترتيب العقد وصفاتها مثلا

<!ELEMENT book (title, author, publisher?)>
<!ATTLIST author 
   id     ID       #IMPLIED
   death_year    CDATA    #REQUIRED
   dead  (yes|no) "no"
>

تعني أن عنصر الكتاب book يجب أن يحتوي على عنصر للعنوان ثم عنصر آخر للمؤلف ثم قد يأتي ناشر وقد لا يأتي. والصفات التي يجوز أن يأخذها المؤلف هي المعرّف (ضمني) وعام الوفاة (إلزامي) وهل هو متوفى أم لا (إما yes أو no والتلقائي هو yes).

يتم التحقق من مطابقة وثيقة ما لمخطط التعريف عبر xmllint هكذا

xmllint --noout --dtdvalid file:///path/to/schema.dtd doc.xml

الجيل الجديد RelaxNG

وهي المخطط الجديد لتعريف هيئة xml خاصة وتعني REgular LAnguage for XML Next Generation وتختصر Relax NG أو RNG.

يتم التحقق من مطابقة وثيقة ما لمخطط التعريف المطلوب عبر xmllint هكذا

xmllint --noout --relaxng schema.rng doc.xml

حيث schema.rng هو التعريف و doc.xml هي الوثيقة المطلوب فحصها.

<note> يمكنك مقارنة DTD و RNG من خلال مقارنة ملفين يصفان نفس هيئة xml مثلا ملفي comps.dtd و comps.rng اللذان يصفان ملفات comps.xml التي تستخدم في توزيعة فيدورا </note>

مزايا rng

ربط وثيقة مع مخطط rng

كتابة rng

معالجة ملفات xml

Xpath

XSLT

طرق الإعراب في اللغات المختلفة

نقاش

DZr3d, 2010/07/14 01:52

مبدع ىاخي بارك الله فيك وننتضر باقي الدروس

الي الامام

بن عبد الله يوسف, 2011/03/20 08:48

بارك الله فيك أخي على المعلومات المفيدة بانتظار تكميل الوثيقة و حبذا لو تذكر لنا أمثلة عن مواقع تستخدم تقنية xml و الية عملها و شكرا لك اخي

Will, 2012/04/01 20:03

A rolling stone is worth two in the bush, thanks to this artlice.

Marlien, 2012/09/03 18:49

That's a skillful asnewr to a difficult question

Dolley, 2012/12/13 09:44

You've maanged a first class post

xnkzdaib, 2012/12/14 16:56

M0S8N6 , [url=http://lwdslmbsflxf.com/]lwdslmbsflxf[/url], [link=http://pjhubqvirorx.com/]pjhubqvirorx[/link], http://smrcmvldwwpr.com/

أدخل تعليقك:
 
آخر تعديل:: 23 نيسان 2015 الساعة 00:20 (تحرير خارجي)