واجهة برمجة تطبيقات جافا لمعالجة XML
في مجال الحوسبة ، توفر واجهة برمجة تطبيقات جافا لمعالجة XML ( JAXP ) ( تُلفظ / ˈdʒækspiː / JAKS - pee ) ، وهي إحدى واجهات برمجة تطبيقات تطبيقات جافا XML ، إمكانية التحقق من صحة مستندات XML وتحليلها . وتتضمن ثلاث واجهات تحليل أساسية:
- واجهة تحليل نموذج كائن المستند أو واجهة DOM
- واجهة برمجة التطبيقات البسيطة لتحليل XML أو واجهة SAX
- واجهة برمجة تطبيقات البث لـ XML أو StAX (جزء من JDK 6؛ ملف jar منفصل متاح لـ JDK 5)
بالإضافة إلى واجهات التحليل، توفر واجهة برمجة التطبيقات واجهة XSLT لتوفير تحويلات البيانات والهيكلية على مستند XML.
تم تطوير JAXP في إطار عملية مجتمع جافا كـ JSR 5 (JAXP 1.0)، وJSR 63 (JAXP 1.1 و1.2)، وJSR 206 (JAXP 1.3).
| إصدار Java SE | إصدار JAXP المرفق |
|---|---|
| 1.4 | 1.1 |
| 1.5 | 1.3 |
| 1.6 | 1.4 |
| 1.7.0 | 1.4.5 |
| 1.7.40 | 1.5 |
| 1.8 | 1.6 [ 1 ] |
تم إصدار JAXP الإصدار 1.4.4 في 3 سبتمبر 2010. تم الإعلان عن انتهاء دعم JAXP 1.3 في 12 فبراير 2008.
واجهة DOM
تقوم واجهة DOM بتحليل مستند XML كامل وإنشاء تمثيل كامل في الذاكرة للمستند باستخدام الفئات ونمذجة المفاهيم الموجودة في المواصفات الأساسية لنموذج كائن المستند المستوى 2.
يُطلق على محلل DOM اسم محلل ، لأنه يبني تمثيلًا في الذاكرة . يتم إنشاء هذا التمثيل بواسطة محلل . [ 2 ] يقوم محلل بإنشاء مثيل - وهو بنية شجرية تحتوي على عقد في مستند XML. تُنفذ كل عقدة شجرية في البنية الواجهة . من بين الأنواع العديدة المختلفة لعقد الشجرة، والتي يمثل كل منها نوع البيانات الموجودة في مستند XML، تشمل أهمها ما يلي:DocumentBuilderDocumentjavax.xml.parsers.DocumentBuilderjavax.xml.parsers.DocumentBuilderFactoryDocumentBuilderorg.w3c.dom.Documentorg.w3c.dom.Node
- عقد العناصر التي قد تحتوي على سمات
- عقد نصية تمثل النص الموجود بين علامتي البداية والنهاية لعنصر المستند.
واجهة SAX
يُنشئ هذا javax.xml.parsers.SAXParserFactoryمحلل SAX، المسمى بـ SAXParser. على عكس محلل DOM، لا يُنشئ محلل SAX تمثيلًا في الذاكرة لمستند XML، وبالتالي يعمل بشكل أسرع ويستهلك ذاكرة أقل. بدلًا من ذلك، يُعلم محلل SAX العملاء ببنية مستند XML عن طريق استدعاء دوال رد النداء، أي عن طريق استدعاء طرق على DefaultHandlerنسخة مُقدمة للمحلل. تُسمى هذه الطريقة للوصول إلى المستند بـ "تدفق XML" .
DefaultHandlerتُنفّذ هذه الفئة الواجهات التالية ContentHandler: و و ErrorHandlerو DTDHandlerو EntityResolver. سيهتم معظم العملاء بالأساليب المُعرّفة في هذه ContentHandlerالواجهة والتي يتم استدعاؤها عندما يُصادف مُحلّل SAX العناصر المُقابلة في مستند XML. أهم الأساليب في هذه الواجهة هي:
startDocument()والأساليبendDocument()التي يتم استدعاؤها في بداية ونهاية مستند XML.startElement()والأساليبendElement()التي يتم استدعاؤها في بداية ونهاية عنصر المستند.characters()طريقة يتم استدعاؤها باستخدام محتويات البيانات النصية الموجودة بين علامتي البداية والنهاية لعنصر مستند XML.
يُقدّم العملاء فئة فرعية من الفئة الأصلية DefaultHandlerتُعيد تعريف هذه الأساليب وتُعالج البيانات. وقد يشمل ذلك تخزين البيانات في قاعدة بيانات أو كتابتها إلى دفق بيانات.
أثناء عملية التحليل، قد يحتاج المحلل إلى الوصول إلى مستندات خارجية. من الممكن تخزين ذاكرة تخزين مؤقتة محلية للمستندات المستخدمة بكثرة باستخدام فهرس XML .
تم تقديم هذا مع Java 1.3 في مايو 2000. [ 3 ]
واجهة StAX
صُممت StAX لتكون وسيطًا بين واجهة DOM وواجهة SAX. في هذا السياق، تُمثل نقطة الدخول البرمجية مؤشرًا يُشير إلى موقع داخل المستند. يُحرك التطبيق المؤشر للأمام، مُستجلبًا المعلومات من المُحلل حسب الحاجة. يختلف هذا عن واجهة برمجة التطبيقات القائمة على الأحداث، مثل SAX، التي تُرسل البيانات إلى التطبيق، مما يتطلب من التطبيق الاحتفاظ بحالة بين الأحداث لتتبع الموقع داخل المستند.
واجهة XSLT
تتيح لغة أنماط XML للتحويلات ، أو XSLT ، تحويل مستند XML إلى أشكال بيانات أخرى. يوفر JAXP واجهات في حزمة تسمح للتطبيقات باستدعاء تحويل XSLT. كانت هذه الواجهة تُسمى في الأصل TrAX (واجهة برمجة تطبيقات تحويل XML)، وقد طُوّرت من خلال تعاون غير رسمي بين مطوري عدد من معالجات Java XSLT.javax.xml.transform
الميزات الرئيسية للواجهة هي
- فئة مصنع تسمح للتطبيق باختيار معالج XSLT الذي يرغب في استخدامه بشكل ديناميكي (
TransformerFactory,TransformerFactory.newInstance(),TransformerFactory.newInstance(String factoryClassName, ClassLoader classLoader). - تتضمن فئة المصنع طرقًا لإنشاء
Templatesكائن يُمثل الشكل المُجمَّع لورقة الأنماط. هذا الكائن آمن للاستخدام في بيئات متعددة الخيوط، ويمكن استخدامه بشكل متكرر، بالتسلسل أو بالتوازي، لتطبيق ورقة الأنماط نفسها على عدة مستندات مصدرية (أو على نفس المستند المصدر بمعاملات مختلفة).TransformerFactory.newTemplates(Source source)كماTransformerFactory.newTransformer(Source source)تتضمنTransformerFactory.newTransformer()طريقةً لإنشاء ملف تنفيذي يُمثل الشكل القابل للتنفيذ لورقة الأنماط. لا يمكن مشاركة هذا الملف بين الخيوط، ولكنه قابل لإعادة الاستخدام بالتسلسل. يوفر هذا الملف طرقًا لضبط معلمات ورقة الأنماط وخيارات التسلسل (على سبيل المثال، ما إذا كان يجب وضع مسافة بادئة للإخراج)، وطريقةً لتشغيل التحويل فعليًا .Templatesjavax.xml.transform.TransformerTemplates.newTransformer()TransformerTransformerFactory.transformer(Source xmlSource, Result outputTarget)
تم تعريف واجهتين مجردتين Sourceلتمثيل Resultمدخلات ومخرجات التحويل. يُعد هذا استخدامًا غير تقليدي لواجهات جافا، إذ لا يُتوقع من المعالج قبول أي فئة تُنفذ الواجهة - فلكل معالج حرية اختيار أنواع المدخلات والمخرجات التي يُريد التعامل معها. عمليًا، تدعم جميع معالجات JAXP عدة أنواع قياسية من المدخلات (Source ، وResult) وعدة أنواع قياسية من المخرجات (Result ) ، وربما تطبيقات أخرى خاصة بها.SourceResultDOMSourceSAXSourceStreamSourceDOMResultSAXResultStreamResult
مثال
قد يبدو المثال الأكثر بدائية ولكن الأكثر اكتمالاً لإطلاق تحويل XSLT على النحو التالي:
/* ملف src/examples/xslt/XsltDemo.java */ حزمة examples.xslt ;استيراد java.io.StringReader ؛ استيراد java.io.StringWriter ؛استيراد javax.xml.transform.Transformer ؛ استيراد javax.xml.transform.TransformerException ؛ استيراد javax.xml.transform.TransformerFactory ؛ استيراد javax.xml.transform.TransformerFactoryConfigurationError ؛ استيراد javax.xml.transform.stream.StreamResult ؛ استيراد javax.xml.transform.stream.StreamSource ؛public class XsltDemo { public static void main ( String [] args ) throws TransformerFactoryConfigurationError , TransformerException { //language=xslt String xsltResource = """ <?xml version='1.0' encoding='UTF-8'?> <xsl:stylesheet version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> <xsl:output method='xml' indent='no'/> <xsl:template match='/'> <reRoot><reNode><xsl:value-of select='/root/node/@val' /> world</reNode></reRoot> </xsl:template> </xsl:stylesheet> """ ; // language=XML String xmlSourceResource = """ <?xml version='1.0' encoding='UTF-8'?> <root><node val='hello'/></root> """ ;StringWriter xmlResultResource = new StringWriter ();Transformer xmlTransformer = TransformerFactory.newInstance (). newTransformer ( new StreamSource ( new StringReader ( xsltResource ) ) ) ;xmlTransformer.transform ( new StreamSource ( new StringReader ( xmlSourceResource ) ) , new StreamResult ( xmlResultResource ) ) ;System.out.println ( xmlResultResource.getBuffer ( ) . toString ( ) ) ; } }يطبق هذا البرنامج تحويل XSLT المبرمج مسبقًا التالي :
<?xml version='1.0' encoding='UTF-8'?> <xsl:stylesheet version= '2.0' xmlns:xsl= 'http://www.w3.org/1999/XSL/Transform' > <xsl:output method= 'xml' indent= 'no' /> <xsl:template match= '/' > <reRoot><reNode><xsl:value-of select= '/root/node/@val' /> world </reNode></reRoot> </xsl:template> </xsl:stylesheet>إلى مستند XML المضمن التالي :
<?xml version='1.0' encoding='UTF-8'?> <root><node val= 'hello' /></root>ستكون نتيجة التنفيذ
<?xml version="1.0" encoding="UTF-8"?> <reRoot><reNode> hello world </reNode></reRoot>الاقتباسات
- ↑ "برنامج عملية مجتمع جافا (SM) - JSRS: طلبات مواصفات جافا - تفاصيل JSR# 206" .
- ↑ هورستمان 2022 ، §3.3 تحليل مستند XML.
- ↑ قارن فهرس واجهة برمجة تطبيقات Java 1.2.1 مع فهرس الإصدار 1.3 . تم الانتهاء منطلب مواصفات Java (JSR) 5، مواصفات تحليل XML ، في 21 مارس 2000 .
مراجع
- هورستمان ، كاي (15 أبريل 2022). جافا الأساسية . أوراكل الصحافة جافا. رقم ISBN 978-0-13-787107-0.
روابط خارجية
- الصفحة الرئيسية لمشروع تطبيق JAXP المرجعي (مؤرشفة بتاريخ 12 أغسطس 2011 على موقع Wayback Machine)
- واجهة برمجة تطبيقات جافا لـ XML
- طلبات مواصفات جافا
- محللات XML
