واجهة برمجة تطبيقات جافا لمعالجة 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.41.1
1.51.3
1.61.4
1.7.01.4.5
1.7.401.5
1.81.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

الميزات الرئيسية للواجهة هي

تم تعريف واجهتين مجردتين 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>

الاقتباسات

مراجع

  • هورستمان ، كاي (15 أبريل 2022). جافا الأساسية . أوراكل الصحافة جافا. رقم ISBN 978-0-13-787107-0.