docs:xml_basics
اختلافات
عرض الاختلافات بين النسخة المختارة و النسخة الحالية من الصفحة.
جانبي المراجعة السابقةالمراجعة السابقةالمراجعة التالية | المراجعة السابقة | ||
docs:xml_basics [2010/04/14 17:27] – تدقيق لغوي djilani | docs:xml_basics [2015/04/23 03:20] (حالي) – تحرير خارجي 127.0.0.1 | ||
---|---|---|---|
سطر 1: | سطر 1: | ||
+ | {{tag> | ||
+ | ====== بدهيات XML ====== | ||
+ | هذه الوثيقة لم تكتمل بعد | ||
+ | ===== مقدمة ===== | ||
+ | |||
+ | ===== الأدوات ===== | ||
+ | |||
+ | ===== الصياغة ===== | ||
+ | يتم صياغة مستندات xml في أبسط صورها هكذا | ||
+ | <code xml> | ||
+ | <?xml version=" | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | حيث نعرف عن نوع المستند وعن الترميز المتبع فيه (في مثالنا utf8) بواسطة السطر الأول | ||
+ | <code xml> | ||
+ | <?xml version=" | ||
+ | </ | ||
+ | |||
+ | ثم بعد ذلك يأتي العنصر الجذر وهو الجد الأكبر لكل عقد شجرة xml في ملفات xhtml يمكن أن يكون اسم هذا العنصر html هكذا | ||
+ | <code xml> | ||
+ | <?xml version=" | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ثم تتوالى أحفاده من العناصر بنفس الطريقة حيث يبدأ العنصر أو الوسم بكتابة اسمه بين حاصرتين زاويتين (علامتي أكبر وأصغر) وتنتهي بوضع علامة / قبل اسم العنصر. | ||
+ | |||
+ | العناصر التي لا محتويات لها يمكن إغلاقها فورا هكذا | ||
+ | <code xml> | ||
+ | <br/> | ||
+ | </ | ||
+ | |||
+ | ==== أنواع العقد nodes ==== | ||
+ | * العناصر elements وهي الاسم بعد بداية القوس الزاوي | ||
+ | * الصفات attributes وهي بين الاسم وبين إغلاق القوس الزاوي (وهي عبارة عن قيمة ثم علامة = ثم قيمة بين علامتي اقتباس) | ||
+ | * النص الموسوم (إما معرَب PCDATA | ||
+ | * فضاء التسمية وهو بأن نذكر الفضاء ثم : ثم العنصر | ||
+ | * تعليمات المعالجة وهي التي تكون بين علامتي سؤال داخل القوسين الزاويين كما في php | ||
+ | * عقد التوثيق وهي التي تحتوي علامة ! بعد القوس الزاوي. | ||
+ | * تعليقات ليست جزء من متن الوثيقة حيث يتم تجاهلها | ||
+ | |||
+ | ==== العلاقات بين العقد ==== | ||
+ | تتوزع العقد في شجرة كما في شجرة العائلة. | ||
+ | |||
+ | * علاقة parent/ | ||
+ | * علاقة | ||
+ | * siblings أي الأشقاء وهي العقد التي لها نفس الوالد. | ||
+ | |||
+ | ==== التخطي escaping ==== | ||
+ | بما أن الأقواس الزاوية تستخدم في عمل عناصر xml لذا يمكن أن تكون جزء من البيانات (النص المعرَب) بل يجب تخطيها مثلا إن كنت تريد أن تضع كود برنامج به علامة أصغر فإن ما يلي **خطأ** | ||
+ | < | ||
+ | < | ||
+ | if (x<y) {printf(" | ||
+ | </ | ||
+ | </ | ||
+ | والصواب هو: | ||
+ | <code xml> | ||
+ | < | ||
+ | if (x& | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | حيث نستخدم علامة خاصة هي & ثم اسم الكيان في مثالنا lt أي less than ثم فاصلة منقوطة ; | ||
+ | وبنفس الطريقة نتخطى علامة > بالكيان gt أي greater than | ||
+ | وبما أن & علامة خاصة تحدد الكيانات لذا يجب تخطيها بواسطة الكيان amp | ||
+ | |||
+ | إن كان هناك نص طويل مليء بالكود الذي يحتاج تخطي (مثلا كود javascript) فإن من الأسهل استخدام البيانات غير المعربة CDATA | ||
+ | <code xml> | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | هكذا | ||
+ | <code xml> | ||
+ | < | ||
+ | < | ||
+ | if (x < y && z > y) { | ||
+ | printf(" | ||
+ | } | ||
+ | |||
+ | ]]> | ||
+ | </ | ||
+ | </ | ||
+ | عوضا عن استخدام الكيانات | ||
+ | <code xml> | ||
+ | < | ||
+ | if (x < y & | ||
+ | printf(" | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== الكيانات entities ===== | ||
+ | ==== الكيانات التلقائية ==== | ||
+ | إضافة إلى lt و gt و amp التي تلزم للتخطي هناك quot و apos | ||
+ | ^ الكيانات التلقائية في xml ^^ | ||
+ | ^ الكيان ^ القيمة ^ | ||
+ | | lt | علامة أقل < | | ||
+ | | gt | علامة أكبر > | | ||
+ | | amp | علامة & | | ||
+ | | apos | علامة ' | | ||
+ | | quot | علامة الاقتباس " | | ||
+ | |||
+ | في لغة html فإن هناك الكثير من الكيانات التي لا تكون معرفة تلقائيا في xml مثل | ||
+ | nbsp والتي تعني مسافة ومثل infin والتي تعني علامة ∞ للمزيد انظر | ||
+ | |||
+ | * [[http:// | ||
+ | |||
+ | ==== تعريف كيانات خاصة واستخدامها ==== | ||
+ | إن كان هناك نص يتكرر بكثرة أو يتغير بكثرة في أكثر من موضع أو غير موجود على لوحة المفاتيح قد ترغب في استخدام الكيانات. | ||
+ | |||
+ | يتم تعريف الكيان عبر عقدة وثيقة أي بعد ! وذلك بالشكل التالي | ||
+ | <code xml> | ||
+ | <!ENTITY entityName "text to be substituted"> | ||
+ | </ | ||
+ | |||
+ | مثلا عند عمل وثيقة الإصدار 7.2 من برنامج ثم جاءت إصدارة 7.3 الجديدة عوضا عن البحث عن 7.2 وتعديلها نعمل كيان اسمه الإصدار ونعرفه في رأس الوثيقة | ||
+ | <code xml> | ||
+ | <!ENTITY version " | ||
+ | <doc> | ||
+ | Welcome to Product & | ||
+ | you are using Product & | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== استخدام كيانات من ملف خارجي ==== | ||
+ | يمكنك جلب محتوى الكيان في ملف آخر هكذا | ||
+ | <code xml> | ||
+ | <!ENTITY entityName SYSTEM " | ||
+ | </ | ||
+ | |||
+ | ويمكن الاستفادة من هذه الطريقة في احتواء ملفات خارجية وذلك بتعريف كيانات تشير لها ثم استدعاء الكيان هكذا | ||
+ | <code xml> | ||
+ | <!ENTITY ch1 SYSTEM " | ||
+ | <!ENTITY ch2 SYSTEM " | ||
+ | <!ENTITY ch3 SYSTEM " | ||
+ | < | ||
+ | &ch1; | ||
+ | &ch2; | ||
+ | &ch3; | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== فضاءات التسمية namespaces ==== | ||
+ | |||
+ | أحيانا يمكنك تنضيد أكثر من نوع من أنواع xml في وثيقة واحدة مثلا xhtml و svg و xsl و OpenDocument Formate وغيرها لكن تخيل أن وسم معين له معان مختلفة في تلك الأنواع لذا نستخدم فضاءات التسمية لتجنب حصول تضارب بين تلك الأنواع ويكون ذلك بوضع تعريف فضاء التسمية xmlns على أي عقدة غالبا العقدة الجذر وصيغته تشبه تعيين الصفات حيث تتبع بعلامة المساواة ثم معرف الفضاء الذي مثلا في حالة xhtml هو | ||
+ | http:// | ||
+ | |||
+ | <code xml> | ||
+ | <?xml version=" | ||
+ | <html xmlns=" | ||
+ | <br> | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | هذا يعني أن العنصر br هو من فضاء التسمية التلقائي الذي هو xhtml. يمكن حديد أكثر من فضاء تسمية وذلك بذكر : ثم اسم الفضاء ثم = ثم معرف الفضاء. وعند سرد العناصر نضع الفضاء ثم : ثم العنصر | ||
+ | <code xml> | ||
+ | <?xml version=" | ||
+ | <html xmlns=" | ||
+ | < | ||
+ | < | ||
+ | |||
+ | <svg:svg width=" | ||
+ | < | ||
+ | stroke-width=" | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | هذا يعني أن الفضاء التلقائي هو xhtml وهناك فضاء svg أيضا. مثلا p هنا تنتمي لفضاء xhtml يعني هي تكافئ | ||
+ | |||
+ | **ملاحظة: | ||
+ | |||
+ | ===== طرق التحقق validation ===== | ||
+ | |||
+ | ==== سلامة البنية well-formed ==== | ||
+ | |||
+ | ==== تعريف نوع الوثيقة DTD ==== | ||
+ | يتم تعريف نوع الوثيقة DTD أي Document Type Definition | ||
+ | من خلال فرض المزيد من الشروط على عقد xml بحيث نحدد ترتيب العقد وصفاتها مثلا | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | | ||
+ | | ||
+ | | ||
+ | > | ||
+ | </ | ||
+ | تعني أن عنصر الكتاب book يجب أن يحتوي على عنصر للعنوان ثم عنصر آخر للمؤلف ثم قد يأتي ناشر وقد لا يأتي. والصفات التي يجوز أن يأخذها المؤلف هي المعرّف (ضمني) وعام الوفاة (إلزامي) وهل هو متوفى أم لا (إما yes أو no والتلقائي هو yes). | ||
+ | |||
+ | يتم التحقق من مطابقة وثيقة ما لمخطط التعريف عبر xmllint هكذا | ||
+ | |||
+ | <code bash> | ||
+ | xmllint --noout --dtdvalid file:/// | ||
+ | </ | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | ==== الجيل الجديد RelaxNG | ||
+ | وهي المخطط الجديد لتعريف هيئة xml خاصة وتعني REgular LAnguage for XML Next Generation وتختصر Relax NG أو RNG. | ||
+ | |||
+ | يتم التحقق من مطابقة وثيقة ما لمخطط التعريف المطلوب عبر xmllint هكذا | ||
+ | <code bash> | ||
+ | xmllint --noout --relaxng schema.rng doc.xml | ||
+ | </ | ||
+ | حيث schema.rng هو التعريف و doc.xml هي الوثيقة المطلوب فحصها. | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | < | ||
+ | يمكنك مقارنة DTD و RNG من خلال مقارنة ملفين يصفان نفس هيئة xml مثلا ملفي | ||
+ | [[http:// | ||
+ | [[http:// | ||
+ | اللذان يصفان ملفات comps.xml التي تستخدم في توزيعة فيدورا | ||
+ | </ | ||
+ | |||
+ | ==== مزايا rng ==== | ||
+ | ==== ربط وثيقة مع مخطط rng ==== | ||
+ | ==== كتابة rng ==== | ||
+ | |||
+ | ===== معالجة ملفات xml ===== | ||
+ | ==== Xpath ==== | ||
+ | |||
+ | ==== XSLT ==== | ||
+ | |||
+ | * [[http:// | ||
+ | |||
+ | ===== طرق الإعراب في اللغات المختلفة ===== |