|
شو هي تقنيات الxml ؟ طيب هاد هو الجواب!:
أولاً لغة الxml - extensible markup language هي لغة شبيهة بال html من ناحية استخدامها للtags لكنها تتختلف عنها بأنها لا تحدد tags معينة مثل html,head,body,p (وتسمى الtags أيضاً عناصراً elements)...و بعبارة ثانية لا توجد كلمات محجوزة للغة وإنما بإمكانك مثلاً تحديد العناصر tags الخاصة بك . لهذا هي لغة قابلة للتوسع ...كما أنه يوجد قاعدتين للغة xml
1- كل مستند xml يحوي على جذر واحد فقط (عنصر أو عقدة واحدة تحوي بداخلها عدد غير محدد من العقد) (كما في الhtml يوجد جذر هو <html></html> )
2- كل tag يجب إغلاقها بعكس ال html التي ليس من الضروري إغلاق بعض tags (راجع المثال في الرد السابق)
مثال
<Library name="Nawwar's Library">
<book isbn="123456">
<title> Oracle 9i XML Handbook</title>
<author fname="Ben" lname="Chang" />
<author fname="Mark" lname="Scardina" />
</book>
<book>
<title> XML Apps with ASP.NET </title>
</book>
<book isbn="4567895">
<title> XML Web-services and server components</title>
<author fname="Kenneth" lname="Lind" />
<price unit="USD"> 45 </price>
</book>
</Library>
الآن إذا حددت أسماء معينة للعناصر وواصفاتها attributes وترتيبها (هيكل المستند) تكون قد أنشأت أو اشتققت "لغة" جديدة تعتمد على xml، مثلاُ إذا حددت أن أسماء العناصر يجب أن تكون html,body,p,table....و أن html هو جذر المستند....إلخ تحصل على لغة ال xhtml التي ما هي إلا html بعد تطبيق قواعد xml (إغلاق جميع ال tags و جذر واحد للمستند..)
طبعاً ملف xml دون تحديد أسماء معينة للعناصر و هيكل الملف عديم الفائدة (لأن جميع العناصر تصبح متشابهة و لا معنى محدد لكل عنصر)، لذلك يجب تحديد شكل مستند الxml عن طريق إما ملف DTD أو ملف XSD، أو مخزن أسماء namespace معرف مسبقاً (كما هو الحال بالنسبة لمستندات xhtml مثلاُ)
تطبيقات الxml (و اللغات المرتبطة بها)
بسبب شكل xml القابل للتوسع فإن تطبيقاتها لانهائية... أما اللغات المتعلقة بها فهي
-DTD أي Document-Type Definition وهي إما نص مضمن ضمن ملف الxml أو ملف مستقل مرتبط معه، تحوي على تعريف العناصر وواصفاتها attributes و هيكل ملف الxml
-XSD أي XML-Schema Definition مثل السابقة لكنها الأحدث، و تتميز بإمكانية تحديد أنماط المعطيات لمحتويات العناصر وواصفاتها بأنماط قياسية محددة مثل integer,float,Date,String... كما أن ملف xsd هو ملف xml بحد ذاته من حيث التنسيق(و يستخدم مخزن أسماء قياسي) (يعني ال xsd مشتق من xml بعكس DTD)
الجدير بالذكر أن ملفات XSD يمكن تحويلها إلى صفوف classes ضمن بعض لغات البرمجة مثل Java و C# (صفوف تحوي متحولات أعضاء بنفس أسماء العناصر المعرفة ضمن ملف الxsd) كما أن تعريف غرض من هذه الصفوف يكافئ أنشاء ملف xml يحقق الشكل المحدد ضمن ملف الxsd و تقابل قيم المتحولات الأعضاء محتويات ملف الxml.. فمثلاً حساب المثال السابق و باستخدام ملف xsd مناسب بمكن كتابة ما يشبه البرنامج التالي للوصول إلى اسم الكتاب الثالث:
Library lib;
// load lib from library.xml
String s= lib.book[2].title;
float f= lib.book[2].price;
-XSL أي Extensible Stylesheet Language و هي لغة مشتقة من xml أيضاً (لها مخزن أسماء خاص بها) تستخدم لكتابة تحويلات XSL-Transformations XSLT التي تسمح بتحويل ملف xml إلى تنسيق إخر من الxml أو ممكن html أو حتى ملف pdf ...إلخ
مثلاً يمكن كتابة تحويل xslt يقوم بتحويل ملف xml إلى html بحيث محتويات الواصفة name للعنصر library تصبح محتويات العنوان title و كل كل عنصر book يحول إلى سطر في جدول أي tr ...إلخ..
تحويلات ال xslt يمكن تطبيقها على ملفات ال xml حصراً و بالتالي ملفات ال html لا يمكن تحويلها إلا إذا كانت منسقة بتنسيق xml أي xhtml (أي إغلاق جميع الtags)
أنا طرحت فكرة استخدام الxml لان كل المطلوب كتابة برنامج من بضعة أسطر (ربما سطر واحد فقط) بأي لغة برمجة لتطبيق تحويل XSLT على ملف الxml (أو xhtml) المصدر ، إضافة إلى كتابة ملف XSLT بسيط. و هذه العملية أسهل من كتابة برنامج معقد يقوم بالتجوال ضمن العناصر و اختبار نوعها وقراءة محتوياتها و محتويات الواصفات وإعادة كتابة البيانات على ملف نصي جديد بطريقة معينة لأن الطريقة الأخيرة صعبة التصحيح و التعديل و أعقد و أطول وقد ينتج عنها أخطاء كثيرة، أما باستخدام تحويلات XSLT من أجل تعديل التحويل يكفي تعديل ملف xslt من أي محررنصوص دون الحاجة لإعادة بناء البرنامج الأساسي...و حتى لو احتجتوا للتجوال ضمن ملف ال xml فهالشي سهل جداً باستخدام عدة طرق مثل DOM أو SAX... فال DOM (وهي قياسية مدعومة بمعظم لغات البرمجة) تقوم عند تحميل مستند xml بإنشاء شجرة تمثله في الذاكرة حيث تمثل كل عقدة عنصراً ضمن ملف xml و يمكن التجوال و إضافة و حذف و قراءة و كتابة العقد بسهولة بهذه الطريقة..
كما أنه إذا كان الملف الهدف بتنسيق xml فإن إعادة التحويل بالاتجاه المعاكس سهلة باستخدام ملف XSLT ثاني معاكس للأول ...أما إذا كان الملف الهدف ملفاً نصياً فقط، عندئذ نحتاج إلى برنامج بسيط لقراءة الملف النصي وإنشاء ملف xml أو xhtml باستخدام ال DOM...
سأقوم بكتابة أمثلة بسيطة عن ملفات xml و إجراء التحويلات عليها في رد لاحق إنشاء الله...
|