إكس إس إل تي

(تم التحويل من XSLT)

XSLT (تحويلات لغة الأنماط القابلة للامتداد) هي لغة تحويل مستندات إكس إم إل إلى مستندات إكس إم إل أخرى،[1]أو تنسيقات أخرى مثل HTML لـ صفحات الوب، نص عادي أو كائنات تنسيق إكس إس إل، والتي قد يتم تحويلها لاحقاً إلى تنسيقات أخرى، مثل PDF و پوست‌سكرپت و PNG.[2] إكس إس إل تي

XSLT
ParadigmDeclarative
DeveloperWorld Wide Web Consortium (W3C)
First appeared1998
الإصدار المستقر
3.0 / يونيو 8 2017 (2017-06-08); 2523 days ago
Filename extensions.xslt
Websitewww.w3.org/TR/xslt-30/
Major implementations
libxslt, Saxon, Xalan
Influenced by
DSSSL

1.0 مدعوم على نطاق واسع في متصفحات الوب الحديثة.[3]

لم يتم تغيير المستند الأصلي ؛ بدلاً من ذلك، يتم إنشاء مستند جديد بناءً على محتوى مستند موجود.[4]عادةً ما تكون مستندات الإدخال عبارة عن ملفات XML، ولكن أي شيء يمكن للمعالج أن يبني منه نموذج بيانات إكس‌كويري و إكس‌پاث يمكن استخدامه، مثل قاعدة البيانات الترابطية أو جداول نظم المعلومات الجغرافية.[1]

على الرغم من أن XSLT مصممة كلغة ذات أغراض خاصة لتحويل XML، فإن اللغة يمكن استخدامها لمحاكاة تورنگ، مما يجعلها قادرة نظرياً على إجراء حسابات عشوائية.[5]

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

تاريخ

تتأثر XSLT بـ اللغات الوظيفية،[6] ومن خلال لغات مطابقة الأنماط النصية مثل SNOBOL و AWK. أهم سابقه المباشر هو DSSSL، والتي أثر في SGML ما فعله XSLT مع XML.[7]

  • XSLT 1.0: كان XSLT جزءًا من جهود تطوير [[[لغة الأنماط القابلة للامتداد | لغة الأنماط القابلة للامتداد]] (XSL) لجمعية شبكة الوب العالمية (W3C) عام 1998-1999، وهو مشروع أنتج أيضاً XSL-FO و إكس‌پاث. بعض أعضاء لجنة المعايير التي طورت XSLT، بما في ذلك المحرر جيمس كلارك، الذي عمل سابقاً على DSSSL. وقد تم نشر XSLT 1.0 توصية W3C في نوفمبر 1999.[8] على الرغم من فترتها، لا تزال XSLT 1.0[9]مستخدمةً على نطاق واسع (اعتباراً من 2018)، نظراً لأن الإصدارات الأحدث غير مدعومة أصلاً في متصفحات الوب أو لبيئات مثل لامپ.
  • XSLT 2.0: بعد محاولة فاشلة لإنشاء إصدار 1.1 في عام 2001،[10]انضمت مجموعة عمل XSL إلى مجموعة العمل إكس‌كويري لإنشاء إكس‌پاث 2.0،[11]بنموذج بيانات أكثر ثراء ونظام كتابة يعتمد على مخطط XML. بناء على ذلك تم تطوير XSLT 2.0،[12] بإدارة تحرير مايكل كاي، والذي وصل إلى حالة التوصية في يناير 2007.[13] تشمل أهم الابتكارات في XSLT 2.0 :
    • معالجة السلاسل باستخدام التعبيرات القياسية
    • دوال ومشغلات لمعالجة التواريخ والأوقات والفترات الزمنية
    • مستندات الإخراج المتعددة
    • التجميع (إنشاء هيكل هرمي من تسلسلات الإدخال المسطحة)
    • نظام أكثر ثراءً وفحصاً أقوى للنماذج
  • XSLT 3.0: أصبح توصية W3C في 8 يونيو 2017. الميزات الجديدة الرئيسية هي:[14]
    • تحويلات التدفق: في الإصدارات السابقة كان لابد من قراءة مستند الإدخال بالكامل في الذاكرة قبل معالجته،[15]ولا يمكن كتابة الإخراج حتى انتهاء المعالجة. يسمح XSLT 3.0 دفق XML والذي يكون مفيداً لمعالجة المستندات الكبيرة جداً بحيث لا تتناسب مع الذاكرة أو عندما تكون التحويلات مقيدة في قنوات XML.
    • الحزم ، لتحسين الأنماط الكبيرة.
    • معالجة محسّنة للأخطاء الديناميكية باستخدام، على سبيل المثال، xsl: جرّب التعليمات.
    • دعم الخرائط والمصفوفات ، مما يمكّن XSLT من التعامل مع JSON وكذلك XML.
    • يمكن الآن أن تكون الدوال وسائط لدوال أخرى ذات (مرتبة أعلى).


نموذج التصميم والمعالجة

 
رسم تخطيطي للعناصر الأساسية وتدفق العملية لتحولات لغة الأنماط القابلة للتمدد.

يأخذ معالج XSLT واحداً أو أكثر من مستندات مصدر XML، بالإضافة إلى أنماط XSLT واحدة أو أكثر، ويعالجها لإنتاج مستند الإخراج. على النقيض من البرمجة الإلزامية المطبقة على نطاق واسع مثل سي، فإن XSLT هي لغة تصريحية.[16] نموذج المعالجة الأساسي هو مطابقة الأنماط.[17]بدلاً من سرد تسلسل حتمي من الإجراءات التي يجب تنفيذها في بيئة ذات حالة، تحدد قواعد النموذج فقط كيفية التعامل مع عقدة تتطابق مع نمط معين يشبه إكس‌پاث، إذا كان يجب أن يقابل المعالج واحد، وتشتمل محتويات القوالب بشكل فعال على تعبيرات وظيفية التي تمثل بشكل مباشر شكلها المُقيَّم: شجرة النتائج، التي هي أساس إخراج المعالج.

يتصرف المعالج النموذجي على النحو التالي. أولاً، بافتراض أن الأنماط قد تمت قراءتها وإعدادها بالفعل، يقوم المعالج ببناء مصدر شجرة من مستند إدخال XML. ثم يقوم بمعالجة العقدة الجذرية لشجرة المصدر، والعثور على أفضل قالب مطابق لتلك العقدة في ورقة الأنماط ، وتقييم محتويات القالب. تعمل الإرشادات الموجودة في كل قالب بشكل عام على توجيه المعالج إما لإنشاء عقد في شجرة النتائج، أو لمعالجة المزيد من العقد في شجرة المصدر بنفس طريقة العقدة الجذرية. أخيراً يتم تسلسل شجرة النتائج كنص XML أو HTML.

إكس‌پاث

يستخدم XSLT إكس‌پاث لتحديد مجموعات فرعية من شجرة المستند المصدر وإجراء العمليات الحسابية. يوفر إكس‌پاث أيضاً نطاقاً من الدوال، والتي يعززها XSLT نفسه.

يستخدم XSLT 1.0 إكس‌پاث 1.0، بينما يستخدم XSLT 2.0 إكس‌پاثى2.0. سيعمل XSLT 3.0 مع إكس‌پاث 3.0 أو 3.1. في حالة الإصدار 1.0 و 2.0، تم نشر مواصفات XSLT و إكس‌پاث في نفس التاريخ. لم تعد متزامنة مع 3.0؛ وأصبحت إكس‌پاث 3.0 توصية في أبريل 2014، تليها إكس‌پاث 3.1 في فبراير 2017؛ وقد تمت متابعة XSLT 3.0 في يونيو 2017.

مقارنة إكس‌كويري

تتداخل تشغيلات XSLT مع تشغيلات إكس‌كويري، والتي تم تصورها في البداية كلغة استعلام لمجموعات كبيرة من مستندات XML.

تم تطوير معايير XSLT 2.0 و إكس‌كويري 1.0 بواسطة مجموعات عمل منفصلة داخل W3C، والعمل معاً لضمان اتباع نهج مشترك عند الاقتضاء. تتشاركان في نفس نموذج البيانات، ونوع النظام، ومكتبة الدوال، وكلاهما يتضمن إكس‌پاث 2.0 كلغة فرعية.

ومع ذلك، فإن اللغتين متجذرتان في معارف مختلفة وتخدم احتياجات المجموعات المختلفة. تم تصميم XSLT بشكل أساسي كلغة نمطية كان هدفها الأساسي تقديم XML للقارئ على الشاشة، على الوب ( لغة قالب الوب)، أو على الورق. تم تصميم إكس‌كويري بشكل أساسي على أنها لغة استعلام قاعدة البيانات في تقليد إس كيو إل.

لأن اللغتين نشأتا في مجموعات مختلفة، فإن XSLT أقوى في تعاملها مع المستندات السردية ذات البنية الأكثر مرونة، في حين أن إكس‌كويري أقوى في معالجة البيانات، على سبيل المثال عند إجراء الوصلات الترابطية.[بحاجة لمصدر]

نوع الوسائط

يمكن أن يأخذ عنصر <output> نوع وسائط media-type الخصائص اختيارياً، والتي تسمح للشخص تعيين نوع الوسائط (أو نوع MIME) للمخرجات الناتجة، على سبيل المثال: <xsl:output output="xml" media-type="application/xml"/>. تؤيد توصية XSLT 1.0 بأنواع الخصائص الأكثر عمومية text/xml و application/xml لأنه لم يكن هناك نوع وسائط مسجل لـ XSLT لفترة طويلة. خلال هذا الوقت، أصبح text/xsl المعيار الفعلي. في XSLT 1.0، لم يتم تحديد كيفية استخدام قيم media-type.

مع إصدار XSLT 2.0، أوصى W3C بتسجيل نوع وسائط MIME application/xslt+xml[18] وقد تم تسجيله لاحقاً لدى هيئة أرقام الإنترنت المخصصة.[19]

استخدمت مسودات العمل لما قبل الإصدار 1.0 text/xsl في أمثلة التضمين الخاصة بها، وقد تم تنفيذ هذا النوع ولا يزال يتم الترويج له بواسطة مايكروسوفت في إنترنت إكسپلورر[20] و MSXML. كما أنه معروف على نطاق واسع في تعليمات المعالجة xml-stylesheet بواسطة المتصفحات الأخرى. لذلك، من الناحية العملية، فإن المستخدمين الراغبين في التحكم في التحول في المتصفح باستخدام تعليمات المعالجة هذه ملزمون باستخدام نوع الوسائط غير المسجل هذا.[21]

أمثلة

تستخدم هذه الأمثلة مستند XML الوارد التالي

<?xml version="1.0" ?>
<persons>
  <person username="JS1">
    <name>John</name>
    <family-name>Smith</family-name>
  </person>
  <person username="MI1">
    <name>Morka</name>
    <family-name>Ismincius</family-name>
  </person>
</persons>

مثال 1 (تحويل XML إلى XML)

توفر أنماط XSLT قوالب لتحويل مستند XML:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/persons">
    <root>
      <xsl:apply-templates select="person"/>
    </root>
  </xsl:template>

  <xsl:template match="person">
    <name username="{@username}">
      <xsl:value-of select="name" />
    </name>
  </xsl:template>

</xsl:stylesheet>

ينتج عن تقييمه مستند XML جديد، له بنية أخرى:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <name username="JS1">John</name>
  <name username="MI1">Morka</name>
</root>

مثال 2 (تحويل XML إلى XHTML)

معالجة ملف XSLT في المثال التالي

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://www.w3.org/1999/xhtml">

  <xsl:output method="xml" indent="yes" encoding="UTF-8"/>

  <xsl:template match="/persons">
    <html>
      <head> <title>Testing XML Example</title> </head>
      <body>
        <h1>Persons</h1>
        <ul>
          <xsl:apply-templates select="person">
            <xsl:sort select="family-name" />
          </xsl:apply-templates>
        </ul>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="person">
    <li>
      <xsl:value-of select="family-name"/><xsl:text>, </xsl:text><xsl:value-of select="name"/>
    </li>
  </xsl:template>

</xsl:stylesheet>

مع ملف إدخال XML الموضح أعلاه، فإن النتائج التالية XHTML تم تعديل ( المسافة البيضاء هنا من أجل الوضوح):

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head> <title>Testing XML Example</title> </head>
  <body>
    <h1>Persons</h1>
      <ul>
        <li>Ismincius, Morka</li>
        <li>Smith, John</li>
      </ul>
  </body>
</html>

يولد XHTML الناتج أدناه عند تقديمه في مستعرض وب.

 
تم إنشاء XHTML الذي تم عرضه من ملف إدخال XML وتحويل XSLT.

لكي يتمكن مستعرض الوب من تطبيق تحويل XSL على مستند XML المعروض، يمكن إدراج تعليمات معالجة أنماط XML في XML. لذلك، على سبيل المثال، إذا كانت الأنماط في المثال 2 أعلاه متاحة كـ "example2.xsl"، فيمكن إضافة التعليمات التالية إلى XML الجديد الأصلي:[22]

<?xml-stylesheet href="example2.xsl" type="text/xsl" ?>

في هذا المثال، يعد text/xsl غير صحيح من الناحية التقنية وفقاً لمواصفات W3C[22] (الذي يشير إلى أن النوع يجب أن يكون application/xslt+xml)، ولكنه نوع الوسائط الوحيد المدعوم على نطاق واسع عبر المتصفحات اعتباراً من عام 2009.

تطبيقات المعالج

  • راپترإكس إم إل من ألتوڤا هو معالج XSLT 3.0 متوفر في مجموعة أدوات تطوير XMLSpy وكتطبيق مخدم قائم بذاته، يتم استدعاؤه باستخدام واجهة رست REST.
  • تقدم شركة آي‌بي‌إم معالجة XSLT المضمنة في جهاز أجهزة لأغراض خاصة تحت العلامة التجارية داتا پاور.
  • libxslt هو مكتبة مجانية تم إصداره بموجب ترخيص إم آي تي يمكن إعادة استخدامه في التطبيقات التجارية. وهو مبني على libxml ويتم تنفيذه في سي للسرعة وإمكانية النقل. ويدعم ملحقات XSLT 1.0 و EXSLT.[23]
  • توفر مايكروسوفت معالجين XSLT (كلاهما XSLT 1.0 فقط). يوفر المعالج الأقدم MSXML واجهات COM؛ من MSXML 4.0 يتضمن أيضاً الأداة المساعدة لسطر الأوامرmsxsl.exe.[35]يتضمن وقت تشغيل .NET معالج XSLT مضمناً منفصلاً في مكتبة System.Xml.Xsl الخاصة به.
  • ساكسن هو معالج XSLT 3.0 و إكس‌كويري 3.1 مع مصدر مفتوح و احتكاري للتشغيل المستقل و جاڤا و جاڤا سكرپت و.NET. ويوفر المنتج المنفصل ساكسن-جيه إس[36] معالجة XSLT 3.0 على نود.جيه إس وفي المتصفح.
  • زلان هو معالج XSLT 1.0 مفتوح المصدر من مؤسسة أپاتشي للبرمجيات متاح لـ جاڤا و سي++. يتم تضمين متغير من معالج زلان باعتباره معالج XSLT الافتراضي في توزيع جاڤا القياسي من أوراكل.
  • جميع متصفحات الوب: سفاري و كروم و فايرفوكس و أوپرا و إنترنت إكسپلورر تدعم XSLT 1.0 (فقط). يمكن للمتصفحات إجراء تحويلات سريعة لملفات XML وعرض إخراج التحويل في نافذة المستعرض. يتم ذلك إما عن طريق تضمين XSL في مستند XML أو عن طريق الرجوع إلى ملف يحتوي على تعليمات XSL من مستند XML. قد لا يعمل الأخير مع كروم على ملفات من نظام الملفات المحلي بسبب نموذج الأمان الخاص به.[37]

الأداء

كانت معظم معالجات XSLT المبكرة مترجمين فوريين. في الآونة الأخيرة، أصبح إنشاء الكود شائعاً بشكل متزايد، باستخدام لغات وسيطة محمولة (مثل جاڤا بايت كود أو .NET لغة وسيطة شائعة كهدف. ومع ذلك، حتى المنتجات التفسيرية تقدم عموماً مراحل تحليل وتنفيذ منفصلة، مما يسمح بإنشاء شجرة تعبير محسّنة في الذاكرة وإعادة استخدامها لإجراء تحويلات متعددة. وهذا يعطي فوائد كبيرة في الأداء في تطبيقات النشر عبر الإنترنت، حيث يتم تطبيق نفس التحويل عدة مرات في الثانية على مستندات مصدر مختلفة.[38]ينعكس هذا الفصل في تصميم واجهات برمجة تطبيقات معالجة XSLT (مثل JAXP).

كان لدى معالجات XSLT المبكرة عدد قليل جداً من التحسينات. تمت قراءة مستندات الأنماط في نموذج كائن المستند وسيعمل المعالج عليها مباشرة. لم يتم تحسين محركات إكس‌پاث أيضاً. ومع ذلك، فإن معالجات XSLT تستخدم بشكل متزايد تقنيات التحسين الموجودة في لغات البرمجة الوظيفية ولغات استعلام قواعد البيانات، مثل إعادة الكتابة الثابتة لشجرة التعبير (على سبيل المثال، لنقل الحسابات خارج الحلقات)، والتقييم البطيء لتقليل أثر الذاكرة للنتائج الوسيطة (والسماح بـ "الخروج المبكر" عندما يتمكن المعالج من تقييم تعبير مثل following-sibling::*[1] بدون تقييم كامل لجميع التعبيرات الفرعية). تستخدم العديد من المعالجات أيضاً تمثيلات الشجرة الأكثر كفاءة (في كل من المكان والزمان)[39] من تطبيقات DOM ذات الأغراض العامة.

في يونيو 2014، قدمت ديبي لوكيت و مايكل كاي إطار عمل قياس الأداء مفتوح المصدر لمعالجات XSLT يسمى إكس تي-سپيدو.[40]


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

انظر أيضاً

المراجع

  1. ^ أ ب "Transformation". 2012-09-19.
  2. ^ "XML Output Method". 2012-09-19.
  3. ^ "What is XSLT Used For?". 2018-02-07.
  4. ^ "Introduction". XSL Transformations (XSLT) Version 1.0 W3C Recommendation. W3C. 16 November 1999. Retrieved November 7, 2012.
  5. ^ XSLT Version 2.0 Is Turing-Complete: A Purely Transformation Based Proof
  6. ^ Michael Kay. "What kind of language is XSLT?". Retrieved July 8, 2016.
  7. ^ "A Proposal for XSL". W3C. Retrieved November 7, 2012.
  8. ^ "XML and Semantic Web W3C Standards Timeline" (PDF).
  9. ^ "XSL Transformations (XSLT)". W3.org. 1999-11-16. Retrieved 2014-07-12.
  10. ^ "XSL Transformations (XSLT) Version 1.1". W3.org. 2001-08-24. Retrieved 2014-07-12.
  11. ^ "XML Path Language (XPath) 2.0 (Second Edition)". W3.org. 2010-12-14. Retrieved 2014-07-12.
  12. ^ "XSL Transformations (XSLT) Version 2.0". W3.org. 2007-01-23. Retrieved 2014-07-12.
  13. ^ "XML and Semantic Web W3C Standards Timeline" (PDF). 2012-02-04.
  14. ^ "What's New in XSLT 3.0?". w3. Retrieved 6 January 2014.
  15. ^ Kay, Michael. "A Streaming XSLT Processor". Balisage: The Markup Conference 2010 Proceedings. Retrieved 15 February 2012.
  16. ^ "Discover the Wonders of XSLT: XSLT Quirks". XSLT is a very specialized language with a distinct declarative flavor.
  17. ^ Kay, Michael. "What kind of language is XSLT?". IBM. Retrieved 13 November 2013.
  18. ^ "XSL Transformations (XSLT) Version 2.0". W3C. Retrieved 19 October 2012.
  19. ^ "Application Media Types". IANA. Retrieved 19 October 2012.
  20. ^ "XSLT Requirements for Viewing XML in a Browser". Microsoft. Retrieved 19 October 2012.
  21. ^ Kay, Michael (2008). XSLT 2.0 and XPath 2.0 Programmer's Reference. Wiley. p. 100. ISBN 978-0-470-19274-0.
  22. ^ أ ب "XSL Transformations (XSLT) Version 1.0: W3C Recommendation – Embedding Stylesheets". W3C. 16 November 1999. Retrieved 20 September 2016.
  23. ^ "The XSLT C library for GNOME: libxslt". Retrieved 23 November 2012.
  24. ^ "The XSLT C library for GNOME: The xsltproc tool". Retrieved 23 November 2012.
  25. ^ "xsltproc man page". Retrieved 23 November 2012.
  26. ^ "New package: libxslt". Retrieved 23 November 2012.
  27. ^ "The WebKit Open Source Project - XSLT". Retrieved 2009-10-25.
  28. ^ "The XML C parser and toolkit of Gnome: Python and bindings". Retrieved 23 November 2012.
  29. ^ "XML::LibXSLT - Interface to the GNOME libxslt library". CPAN. Retrieved 23 November 2012.
  30. ^ "libxslt-ruby". Retrieved 23 November 2012.
  31. ^ "libxml". Retrieved 23 November 2012.
  32. ^ "cl-libxml2 High-level wrapper around libxml2 and libxslt libraries".
  33. ^ "TclXML". Retrieved 21 May 2013.
  34. ^ "libxml++". sourceforge.net. Retrieved 23 November 2012.
  35. ^ "Command Line Transformation Utility (msxsl.exe)". Microsoft. Retrieved 22 October 2012.
  36. ^ "Saxon-JS". Saxonica. Retrieved 6 September 2018.
  37. ^ "Issue 58151: Fails to load xml file on local file system using XMLHttpRequest".
  38. ^ Saxon: Anatomy of an XSLT processor - Article describing implementation & optimization details of a popular XSLT processor.
  39. ^ Lumley, John; Kay, Michael (June 2015). "Improving Pattern Matching Performance in XSLT". XML London 2015: 9–25. doi:10.14337/XMLLondon15.Lumley01. ISBN 978-0-9926471-2-4.
  40. ^ Kay, Michael; Lockett, Debbie (June 2014). "Benchmarking XSLT Performance". XML London 2014: 10–23. doi:10.14337/XMLLondon14.Kay01. ISBN 978-0-9926471-1-7.

للاستزادة

وصلات خارجية

هناك كتاب ، XML - Managing Data Exchange/XSLT and Style Sheets، في معرفة الكتب.


التوثيق
مكتبات رموز XSLT
  • EXSLT is a widespread community initiative to provide extensions to XSLT.
  • FXSL is a library implementing support for Higher-order functions in XSLT. FXSL is written in XSLT itself.
  • The XSLT Standard Library xsltsl, provides the XSLT developer with a set of XSLT templates for commonly used functions. These are implemented purely in XSLT, that is they do not use any extensions. xsltsl is a SourceForge project.
  • Kernow A GUI for Saxon that provides a point and click interface for running transforms.
  • xslt.js – Transform XML with XSLT JavaScript library that transforms XML with XSLT in the browser.

قالب:XSL