المؤلف: Ma Xiaoning
XML (لغة التوصيف القابلة للتوسيع) قد تبدو وكأنها نوع من معايير W3C - ليس لها أي تأثير عملي الآن، وحتى لو كانت مفيدة في المستقبل، فسوف تكون كذلك بعد وقت طويل. ولكن في الواقع، يتم استخدامه بالفعل. لذا، لا تنتظر حتى تتم إضافة XML إلى محرر HTML المفضل لديك لبدء استخدامه. يمكنه الآن حل المشكلات الداخلية المختلفة ومشاكل نظام b2b.
في sparks.com، نستخدم لغة XML لتوحيد تمثيل البيانات بين الأنظمة المختلفة، بدءًا من كائنات Java وحتى عروض بيانات html.
وعلى وجه الخصوص، وجدنا أنه يمكن مشاركة البيانات ومعالجتها بسهولة أكبر عندما يتم توحيدها في بنية XML أساسية للغاية. في هذه العملية، اكتشفنا العديد من الطرق الفعالة لاستخدام لغة XML. فيما يلي وصف لتطبيقنا الحالي بالتفصيل.
توحيد قبل استخدام XML، قم بإنشاء تنسيق بيانات XML مختلف عن المعلومات التي تريد استخدامها.
إنشاء ملف XML ديناميكي
إن إنشاء لغة HTML من قاعدة بيانات ليس بالأمر الجديد، ولكن إنشاء لغة XML هو أمر جديد. نقدم هنا خطوات التوليد المحددة.
استخدام XSL كلغة القالب
تعد XSL (لغة أوراق الأنماط القابلة للتوسيع) طريقة جيدة لتحديد تنسيق عرض بيانات XML، وستكون أكثر فعالية إذا تمت كتابتها كقوالب ثابتة متعددة.
توليد HTML
XML بالإضافة إلى XSL يساوي HTML. قد لا يبدو هذا صحيحًا، ولكن صفحة html التي يراها المستخدمون هي في الواقع نتيجة لـ xml وxsl.
1.
القدرة على توحيد لغة XML تأتي من مرونتها. لكن لسوء الحظ، يكون الأمر مرنًا جدًا في بعض الأحيان بحيث تترك أمامك صفحة فارغة تتساءل عن كيفية حل المشكلة.
في أي مشروع XML، الخطوة الأولى هي إنشاء تنسيق بيانات قياسي. للقيام بذلك سوف تحتاج إلى اتخاذ القرارات التالية:
• ما هي البيانات التي سيتم تضمينها؟
• ما إذا كان سيتم استخدام dtd (تعريف نوع الملف)
• ما إذا كنت تريد استخدام DOM (نموذج كائن المستند) أو SAX (واجهة برمجة التطبيقات المبسطة لـ XML) لتحليل
البيانات وتحديدها:
نظرًا لعدم وجود تنسيق XML قياسي، يتمتع المطورون بحرية تطوير التنسيقات الخاصة بهم. ومع ذلك، إذا تم التعرف على التنسيق الخاص بك بواسطة تطبيق واحد فقط، فيمكنك تشغيل هذا التطبيق فقط لاستخدام التنسيق. من الواضح أنه سيكون أكثر فائدة إذا كانت هناك برامج أخرى يمكنها أيضًا قراءة تنسيق XML الخاص بك. إذا تم تعديل تنسيق XML، فقد يحتاج النظام الذي يستخدمه أيضًا إلى التعديل، لذا يجب عليك إنشاء التنسيق كاملاً قدر الإمكان. نظرًا لأن معظم الأنظمة تتجاهل العلامات التي لا تتعرف عليها، فإن الطريقة الأكثر أمانًا لتغيير تنسيق XML هي إضافة علامات، بدلاً من تعديلها.
انقر هنا لعرض مثال على تنسيق بيانات XML
في sparks.com، قمنا بمراجعة جميع بيانات المنتج المطلوبة للعروض التقديمية المختلفة للمنتجات. على الرغم من أن جميع الصفحات لا تستخدم جميع البيانات، فقد قمنا بتطوير تنسيق بيانات XML كامل جدًا ومناسب لجميع البيانات. على سبيل المثال، تعرض صفحة تفاصيل المنتج بيانات أكثر من تلك التي تعرضها صفحة تصفح المنتج. ومع ذلك، ما زلنا نستخدم نفس تنسيق البيانات في كلتا الحالتين لأن قالب xsl الخاص بكل صفحة يستخدم فقط الحقول التي يحتاجها.
ما إذا كان سيتم استخدام dtd
في sparks.com، نستخدم لغة XML جيدة التنظيم بدلاً من لغة XML الصحيحة فقط حيث أن الأولى لا تتطلب dtd. يضيف DTD طبقة من المعالجة بين نقر المستخدم ورؤيته للصفحة. لقد وجدنا أن هذه الطبقة تتطلب الكثير من المعالجة. بالطبع، لا يزال من الجيد استخدام DTDs عند التواصل مع الشركات الأخرى بتنسيق XML. لأن dtd يمكن أن يضمن صحة بنية البيانات عند الإرسال والاستقبال.
اختيار محرك التحليل يوجد الآن العديد من محركات التحليل التي يمكن استخدامها. أي واحد تختاره يعتمد بشكل كامل تقريبًا على احتياجات التطبيق الخاص بك. إذا قررت استخدام DTD، فيجب أن يكون محرك التحليل قادرًا على تمكين التحقق من XML الخاص بك بواسطة DTD. يمكنك وضع التحقق من الصحة في عملية منفصلة، ولكن ذلك قد يؤثر على الأداء.
ساكس ودوم هما نموذجان أساسيان للتحليل. يعتمد SAX على الأحداث، لذلك عندما يتم تحليل ملف XML، يتم إرسال الأحداث إلى المحرك. بعد ذلك، تتم مزامنة الأحداث مع ملف الإخراج. ينشئ محرك تحليل DOM بنية شجرة هرمية لبيانات XML الديناميكية وأوراق أنماط XSL. من خلال الوصول عشوائيًا إلى شجرة DOM، يمكن توفير بيانات XML كما لو تم تحديدها بواسطة ورقة أنماط XSL. يركز النقاش حول نموذج SAX بشكل أساسي على تقليل الذاكرة المفرطة لبنية DOM وتسريع وقت التحليل لورقة أنماط XSL.
ومع ذلك، وجدنا أن العديد من الأنظمة التي تستخدم sax لم تستخدمه بكامل قدراته. تستخدمه هذه الأنظمة لبناء هياكل DOM وإرسال الأحداث من خلال هياكل DOM. باستخدام هذا الأسلوب، يجب إنشاء DOM من ورقة الأنماط قبل أي معالجة لـ XML، لذلك سيتأثر الأداء.
2. إنشاء ملف xml ديناميكي
بمجرد إنشاء تنسيق xml، نحتاج إلى طريقة لنقله ديناميكيًا من قاعدة البيانات.
يعد إنشاء مستندات xml أمرًا بسيطًا نسبيًا لأنه يتطلب فقط نظامًا يمكنه التعامل مع السلاسل. قمنا ببناء نظام باستخدام Java Servlet، وEnterprise Javabean Server، وjdbc، وrdbms (نظام إدارة قواعد البيانات العلائقية).
• يتعامل servlet مع طلبات معلومات المنتج عن طريق إلغاء تحميل مهمة إنشاء مستندات xml إلى javabean (ejb) الخاص بالمؤسسة.
• يستخدم ejb jdbc للاستعلام عن تفاصيل المنتج المطلوبة من قاعدة البيانات.
• يقوم ejb بإنشاء ملف xml ويمرره إلى servlet.
يستدعي servlet محرك التحليل لإنشاء مخرجات html من ملفات xml وأوراق أنماط xsl الثابتة.
(للحصول على معلومات إضافية حول تطبيق XSL، راجع استخدام XSL كلغة قالب.)
مثال على إنشاء XML يمكن تقسيم التعليمات البرمجية الفعلية لإنشاء سلسلة مستند XML في Java إلى عدة طرق وفئات.
يتم وضع الكود الذي يبدأ عملية إنشاء XML في طريقة eJB. سيقوم هذا المثيل على الفور بإنشاء مخزن مؤقت لتخزين سلسلة XML التي تم إنشاؤها.
stringbuffer xml = new stringbuffer();
xml.append(xmlutils.begindocument("/browse_find/browse.xsl", "browse", request));
xml.append(product.toxml());
xml.append(xmlutils.enddocument("browse");
print(xml.tostring());
المتغيرات الثلاثة التالية xml.append() هي نفسها استدعاءات لطرق أخرى.
إنشاء رأس ملف تستدعي الطريقة الإضافية الأولى فئة xmlutils لإنشاء رأس ملف xml. الكود الموجود في Java servlet الخاص بنا هو كما يلي:
سلسلة ثابتة عامة تبدأ الوثيقة (ورقة أنماط السلسلة، صفحة السلسلة)
{
stringbuffer xml = new stringbuffer();
xml.append("<?xml version="1.0"?>n")
.append("<?xml-stylesheet href="")
.إلحاق(ورقة الأنماط).إلحاق(""")
.append(" type ="text/xsl"?>n");
xml.append("<").append(page).append(">n");
إرجاع xml.tostring();
}
يقوم هذا الرمز بإنشاء رأس ملف XML. تحدد العلامة <?xml> هذا الملف كملف xml يدعم الإصدار 1.0. يشير السطر الثاني من التعليمات البرمجية إلى موقع ورقة الأنماط الصحيحة لعرض البيانات. آخر شيء تم تضمينه هو علامة مستوى العنصر (<browse> في هذا المثال). في نهاية الملف، يجب إغلاق علامة <browse> فقط.
<?xml version="1.0"?> <?xml-stylesheet href="/browse_find/browse.xsl" type="text/xsl"?> <browse>
بعد ملء معلومات المنتج وإكمال رأس الملف، ستستدعي طريقة التحكم كائن Java لإنشاء ملف XML الخاص به. في هذا المثال، يتم استدعاء كائن المنتج. يستخدم كائن المنتج طريقتين لإنشاء تمثيل XML الخاص به. الطريقة الأولى toxml() تنشئ عقدة المنتج عن طريق إنشاء علامتي <product> و</product>. ثم يقوم بعد ذلك باستدعاء Internalxml()، الذي يوفر المحتوى المطلوب لملف XML للمنتج. Internalxml() عبارة عن سلسلة من استدعاءات stringbuffer.append(). يتم أيضًا تحويل المخزن المؤقت للسلسلة إلى سلسلة وإعادته إلى طريقة التحكم.
سلسلة عامة toxml()
{
stringbuffer xml = new stringbuffer("<product>n");
xml.append(internalxml());
xml.append("</product>n");
إرجاع xml.tostring();
}
سلسلة عامة Internalxml()
{
stringbuffer xml = new
المخزن المؤقت للسلسلة("t")
.append(producttype).append("n");
xml.append("t").append(idvalue.trim())
.append("n");
xml.append("t").append(idname.trim())
.append("n");
xml.append("t").append(page.trim())
.append("n");
بانغ؟
xml.append("t").append(amount).append("n");
xml.append("t").append(vendor).append("n");
xml.append("tn");
xml.append("t").append(pubdesc).append("n");
xml.append("t").append(vendesc).append("n";
بانغ؟
إرجاع xml.tostring();
}
وأخيرًا، يتم استدعاء الأسلوب xmlutils.enddocument() بعد إغلاق الملف. يؤدي هذا الاستدعاء إلى إغلاق علامة xml (في هذه الحالة) وإكمال ملف xml المنظم في النهاية. يتم أيضًا تحويل المخزن المؤقت للسلسلة بالكامل من طريقة التحكم إلى سلسلة وإعادته إلى servlet الذي يتعامل مع طلب http الأصلي.
3. استخدم xsl كلغة القالب
للحصول على مخرجات html، نقوم بدمج ملف xml الذي تم إنشاؤه مع قالب xsl الذي يتحكم في كيفية تمثيل بيانات xml. تتكون قوالب XSL الخاصة بنا من علامات XSL وHTML منظمة بعناية.
ابدأ في إنشاء القالب إن بداية قالب xsl الخاص بنا تشبه الكود أدناه. السطر الأول من التعليمات البرمجية مطلوب ويحدد هذا الملف على أنه ورقة أنماط xsl. تشير السمة xmlns:xsl= إلى مساحة اسم xml التي يستخدمها هذا الملف، وتحدد السمة version= رقم إصدار مساحة الاسم. في نهاية الملف نغلق العلامة.
يحدد السطر الثاني من التعليمات البرمجية الذي يبدأ بـ <xsl:template> وضع قالب xsl. سمة المطابقة مطلوبة وتشير هنا إلى علامة xml <basketpage>. في نظامنا، تحتوي علامة <basketpage> على علامة <product>، والتي تسمح لقالب xsl بالوصول إلى معلومات المنتج المضمنة في علامة <product>. مرة أخرى يتعين علينا إغلاق العلامة <xsl:template> في نهاية الملف.
بعد ذلك، دعونا نلقي نظرة على لغة HTML جيدة التنظيم. نظرًا لأنه ستتم معالجته بواسطة محرك تحليل XML، فيجب أن يتوافق مع جميع قواعد XML جيدة التنظيم. هذا يعني بشكل أساسي أن جميع العلامات الافتتاحية يجب أن يكون لها علامة إغلاق مقابلة. على سبيل المثال، يجب إغلاق العلامة <p> التي لا تكون مغلقة عادةً بـ </p>.
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/1999/xsl/transform "
الإصدار = "1.0">
<xsl:مطابقة القالب = "صفحة السلة">
<أتش تي أم أل>
<الرأس>
<title>حقيبة التسوق / ضبط الكمية</title>
</الرأس>
<body bgcolor="#cccc99" bgproperties="fixed" link="#990000" vlink="#990000">
<ر>
?br> </xsl:template>
</xsl:ورقة الأنماط>
يوجد داخل نص القالب العديد من علامات xsl المستخدمة لتوفير منطق عرض البيانات. تم شرح علامتين شائعتين الاستخدام أدناه.
يختار
العلامة <xsl:choose> تشبه بداية بنية if-then-else في لغات البرمجة التقليدية. في XSL، تشير علامة الاختيار إلى أنه في الجزء الذي يتم إدخال الكود فيه، سيؤدي التعيين إلى تشغيل الإجراء. العلامة <xsl:when> ذات السمات المعينة تتبع علامة الاختيار. إذا كان التعيين صحيحًا، فسيتم استخدام المحتوى الموجود بين علامتي الفتح والإغلاق لـ <xsl:when>. إذا كان التعيين خاطئًا، فسيتم استخدام المحتوى الموجود بين علامتي الفتح والإغلاق لـ <xsl:otherwise>. ينتهي القسم بأكمله بـ </xsl:choose>.
في هذا المثال، تقوم العلامة When بالتحقق من ملف XML الخاص بعلامة الكمية. إذا كانت علامة الكمية تحتوي على سمة خطأ بقيمة صحيحة، فستعرض علامة الكمية خلايا الجدول المدرجة أدناه. إذا كانت قيمة السمة غير صحيحة، فسيعرض xsl المحتوى بين العلامات الأخرى. في المثال أدناه، إذا كانت سمة الخطأ غير صحيحة، فلن يتم عرض أي شيء.
<xsl:اختر>
<xsl:when test="quantity[@error='true']">
<td bgcolor="#ffffff"><img height="1" width="1" src="