واجهة برمجة تطبيقات بسيطة لـ XML

SAX ( واجهة برمجة تطبيقات بسيطة لـ XML ) هي خوارزمية فورية تعتمد على الأحداث لتحليل وتفسير مستندات XML، وقد طُوّرت واجهة برمجة تطبيقاتها بواسطة قائمة بريد XML-DEV . [ 1 ] توفر SAX آلية لقراءة البيانات من مستند XML كبديل لآلية نموذج كائن المستند (DOM). فبينما يعمل DOM على المستند ككل - حيث يبني شجرة بناء الجملة المجردة الكاملة لمستند XML لتسهيل الأمر على المستخدم - تعمل محللات SAX على كل جزء من مستند XML على حدة، مُصدرةً أحداث تحليل أثناء مرورها عبر دفق الإدخال مرة واحدة .

تعريف

يُعتبر تطبيق SAX في لغة جافا معيارياً لعدم وجود مواصفات رسمية له . [ 2 ] يعالج SAX المستندات بشكل مستقل عن حالتها، على عكس DOM الذي يُستخدم لمعالجة مستندات XML التي تعتمد على حالتها. [ 3 ]org.xml.sax

فوائد

لا يحتاج محلل SAX إلا ​​إلى الإبلاغ عن كل حدث تحليل فور حدوثه، وعادةً ما يتجاهل معظم هذه المعلومات بعد الإبلاغ (مع ذلك، يحتفظ ببعض البيانات، مثل قائمة بجميع العناصر التي لم تُغلق بعد، وذلك لاكتشاف الأخطاء اللاحقة كترتيب علامات الإغلاق بشكل خاطئ). وبالتالي، فإن الحد الأدنى من الذاكرة المطلوبة لمحلل SAX يتناسب طرديًا مع أقصى عمق لملف XML (أي شجرة XML) وأقصى حجم للبيانات المُتضمنة في حدث XML واحد (مثل اسم وسمات علامة بدء واحدة، أو محتوى تعليمات المعالجة، إلخ).

عادةً ما يُعتبر هذا القدر من الذاكرة ضئيلاً. في المقابل، يتعين على محلل DOM بناء تمثيل شجري للمستند بأكمله في الذاكرة أولاً، وبالتالي استخدام ذاكرة تتزايد مع طول المستند. وهذا يتطلب وقتًا ومساحة كبيرين للمستندات الكبيرة (تخصيص الذاكرة وبناء بنية البيانات يستغرقان وقتًا). [ 4 ] أما الميزة المُعوِّضة، بالطبع، فهي أنه بمجرد تحميل المستند، يُمكن الوصول إلى أي جزء منه بأي ترتيب.

بسبب طبيعة SAX القائمة على الأحداث، فإن معالجة المستندات أسرع بكثير من محللات DOM، طالما أمكن إتمام المعالجة في دورة واحدة شاملة. [ 5 ] يمكن إنجاز العديد من المهام بهذه الطريقة، مثل الفهرسة والتحويل إلى تنسيقات أخرى والتنسيق البسيط وما شابه. أما مهام أخرى، مثل الفرز وإعادة ترتيب الأقسام والانتقال من رابط إلى وجهته والبحث عن معلومات حول عنصر ما للمساعدة في معالجة عنصر لاحق، فتتطلب الوصول إلى بنية المستند بترتيبات معقدة، وستكون أسرع بكثير باستخدام DOM مقارنةً بمعالجة المستندات عبر دورات SAX المتعددة.

بعض التطبيقات لا تنتمي تمامًا إلى أي من الفئتين: فنهج DOM يُبقي بياناته الدائمة على القرص، مُنظمة بذكاء لزيادة السرعة (كما تفعل برامج التحرير مثل SoftQuad Author/Editor ومتصفحات/فهرسات المستندات الكبيرة مثل DynaText )؛ بينما يُمكن لنهج SAX تخزين المعلومات مؤقتًا بذكاء لاستخدامها لاحقًا (أي مُحلل SAX مُدقّق يحتفظ بمعلومات أكثر مما ذُكر أعلاه). تُخفي هذه التطبيقات المفاضلات بين DOM وSAX، ولكنها غالبًا ما تكون فعّالة جدًا في الواقع.

نظراً لطبيعة نموذج كائن المستند (DOM)، تتطلب القراءة المتدفقة من القرص تقنيات مثل التقييم الكسول ، والذاكرة المؤقتة، والذاكرة الافتراضية ، وهياكل البيانات المستمرة، أو غيرها من التقنيات (إحدى هذه التقنيات مُفصّلة في براءة الاختراع الأمريكية رقم 5557722). يُعتقد أحياناً أن معالجة مستندات XML التي تتجاوز حجم الذاكرة الرئيسية أمرٌ مستحيل لأن بعض محللات DOM لا تسمح بذلك. مع ذلك، فإن الأمر لا يقلّ إمكانية عن فرز مجموعة بيانات أكبر من الذاكرة الرئيسية باستخدام مساحة القرص كذاكرة لتجاوز هذا القيد. [ 6 ]

العيوب

يُعد نموذج SAX القائم على الأحداث مفيدًا لتحليل XML، ولكنه يحتوي على بعض العيوب.

يتطلب أي نوع من أنواع التحقق من صحة XML تقريبًا الوصول إلى المستند بالكامل. أبسط مثال على ذلك هو أن السمة المُعرَّفة في DTD من النوع IDREF، تتطلب وجود عنصر واحد فقط في المستند يستخدم القيمة نفسها لسمة ID. للتحقق من ذلك في محلل SAX، يجب تتبع جميع سمات ID (إذ قد تتم الإشارة إلى أي منها بواسطة سمة IDREF في النهاية)؛ بالإضافة إلى تتبع كل سمة IDREF حتى يتم حلها. وبالمثل، للتحقق من أن كل عنصر يحتوي على تسلسل مقبول من العناصر الفرعية، يجب الاحتفاظ بمعلومات حول العناصر الفرعية التي تمت رؤيتها لكل عنصر أب حتى يتم إغلاق العنصر الأب.

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

معالجة XML باستخدام SAX

يعمل محلل SAX (أي محلل SAX ) كمحلل تدفق بيانات، مع واجهة برمجة تطبيقات تعتمد على الأحداث . [ 1 ] يُحدد المستخدم عددًا من دوال الاستدعاء التي تُستدعى عند وقوع أحداث أثناء التحليل. تشمل أحداث SAX (من بين أمور أخرى):

تُقابل بعض الأحداث كائنات XML التي يُمكن إرجاعها دفعةً واحدة بسهولة، مثل التعليقات. مع ذلك، يُمكن أن تحتوي عناصر XML على العديد من كائنات XML الأخرى، ولذا يُمثلها SAX كما يُمثلها XML نفسه: بحدث واحد في البداية، وآخر في النهاية. وبالمعنى الدقيق، لا تتعامل واجهة SAX مع العناصر ، بل مع الأحداث التي تُقابل إلى حد كبير الوسوم . تحليل SAX أحادي الاتجاه؛ فلا يُمكن إعادة قراءة البيانات التي تم تحليلها مُسبقًا دون بدء عملية التحليل من جديد.

توجد العديد من التطبيقات المشابهة لـ SAX. عمليًا، تختلف التفاصيل، لكن النموذج العام واحد. على سبيل المثال، تُمرَّر سمات XML عادةً كمعاملات اسم وقيمة إلى أحداث العناصر، ولكن يمكن أيضًا تمريرها كأحداث منفصلة، ​​أو عبر جدول تجزئة أو مجموعة مشابهة لجميع السمات. كذلك، توفر بعض التطبيقات دوال رد نداء "Init" و"Fin" لبدء عملية التحليل ونهايتها، بينما لا توفرها تطبيقات أخرى. كما تختلف الأسماء الدقيقة لأنواع الأحداث اختلافًا طفيفًا بين التطبيقات.

مثال

بالنظر إلى مستند XML التالي:

<?xml version="1.0" encoding="UTF-8"?> <DocumentElement param= "value" > <FirstElement>  نص ما </FirstElement> <?some_pi some_attr="some_value"?> <SecondElement param2= "something" > نص سابق <Inline> نص مضمن </Inline> نص لاحق. </SecondElement> </DocumentElement>

عند تمرير مستند XML هذا عبر محلل SAX، فإنه سيولد سلسلة من الأحداث على النحو التالي:

  • بداية عنصر XML، المسمى DocumentElement ، مع سمة param تساوي "value".
  • بداية عنصر XML، المسمى FirstElement
  • عقدة نص XML، مع بيانات تساوي " & #xb6; نص ما" (ملاحظة: يمكن تغيير بعض المسافات البيضاء)
  • نهاية عنصر XML، المسمى FirstElement
  • معالجة حدث التعليمات، مع الهدف some_pi والبيانات some_attr="some_value" (المحتوى الذي يلي الهدف هو مجرد نص؛ ومع ذلك، من الشائع جدًا محاكاة بناء جملة سمات XML، كما هو الحال في هذا المثال)
  • عنصر XML بداية، يُسمى SecondElement ، مع سمة param2 تساوي "شيء ما".
  • عقدة نص XML، مع بيانات تساوي "Pre-Text"
  • بداية عنصر XML، المسمى Inline
  • عقدة نص XML، مع بيانات تساوي "نص مضمن"
  • نهاية عنصر XML، المسمى Inline
  • عقدة نص XML، مع بيانات تساوي "نص المنشور".
  • نهاية عنصر XML، المسمى SecondElement
  • نهاية عنصر XML، المسمى عنصر المستند

لاحظ أن السطر الأول من المثال أعلاه هو إعلان XML وليس تعليمات معالجة؛ على هذا النحو لن يتم الإبلاغ عنه كحدث تعليمات معالجة (على الرغم من أن بعض تطبيقات SAX توفر حدثًا منفصلاً لإعلان XML فقط).

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

  • بداية عنصر XML، المسمى FirstElement
  • عقدة نص XML، مع بيانات تساوي " & #xb6;" (حرف Unicode U+00b6)
  • عقدة نص XML، مع بيانات تساوي "بعض النصوص"
  • نهاية عنصر XML، المسمى FirstElement

انظر أيضاً

مراجع

  1. 1 2 "SAX" . webopedia.com . WEBOPEDIA. 14 أغسطس 2003. تاريخ الاسترجاع: 2 مايو 2011. اختصار لـ Simple API for XML، وهي واجهة برمجة تطبيقات قائمة على الأحداث، تُتيح، كبديل لـ DOM، الوصول إلى محتويات مستند XML. كانت SAX في الأصل واجهة برمجة تطبيقات خاصة بلغة Java فقط. يدعم الإصدار الحالي بيئات لغات برمجة متعددة غير Java. طُوّرت SAX بواسطة أعضاء القائمة البريدية XML-DEV.
  2. "saxproject.org" .
  3. "واجهة برمجة تطبيقات بسيطة لـ XML" . oracle.com . أوراكل . تاريخ الاسترجاع: 2011-05-02 . ملاحظة: باختصار، يركز SAX على المعالجة المستقلة عن الحالة، حيث لا تعتمد معالجة عنصر ما على العناصر السابقة. أما StAX، فيركز على المعالجة المعتمدة على الحالة. لمزيد من المقارنة التفصيلية، انظر SAX وStAX في المعايير الأساسية ومتى يُستخدم SAX.
  4. وو، د.؛ تشاو، ك. ت.؛ وانغ، ج.؛ بان، س. (يناير 2019). دراسة مقارنة لأداء واجهات برمجة تطبيقات محلل XML (DOM وSAX) من حيث كفاءة التحليل . المؤتمر الدولي الثالث حول التشفير والأمن والخصوصية. كوالالمبور، ماليزيا: رابطة آلات الحوسبة. ص 88-92 . doi : 10.1145/3309074.3309124 . 
  5. وانغ، تشاو (2020). تقنية تحليل XML . الحوسبة المبتكرة: IC 2020. كوالالمبور، ماليزيا: سبرينغر. ص 1519-1526 . doi : 10.1007/978-981-15-5959-4_185 . 
  6. تشارلي، فرانك (فبراير 2001). "محللات XML: اختبار DOM وSAX" . devX . تم الاسترجاع في 20 أكتوبر 2011. على الرغم من أن هذه الاختبارات لا تُظهر ذلك، إلا أن محللات SAX عادةً ما تكون أسرع مع المستندات الكبيرة جدًا حيث يصل نموذج DOM إلى الذاكرة الافتراضية أو يستهلك كل الذاكرة المتاحة.

للمزيد من القراءة

  • براونيل، ديفيد (2002). ساكسفون 2. أورايلي. رقم ISBN 0-596-00237-8.
  • مينز، دبليو. سكوت؛ بودي، مايكل أ. (2002). كتاب الساكسفون . دار نشر نو ستارش. رقم ISBN 1-886411-77-8.