واجهة برمجة تطبيقات بسيطة (XML)

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

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

## التعريف
انه وعلى عكس دوم، لا نجد الرسمية في مواصفات ساكس. في جافا تنفيذ ساكس تعتبر المعيارية. كما ان ساكس هي عمليات وثائق الدولة بشكل مستقل، على النقيض والكعس تماما من DOM الذي يستخدم في الدولة التي تعتمد على تجهيز مستندات XML.

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

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

يستغرق هذا وقتًا ومساحة كبيرين للمستندات الكبيرة (ان تخصيص الذاكرة وبناء البنيه الخاصة بالبيانات ياخذ الكثير من الوقت). الميزة التعويضية، بالطبع، هي أنه بمجرد تحميل *أي* جزء من المستند يمكن الوصول إليه بأي ترتيب.

نظرًا لطبيعة SAX التي تعتمد على الأحداث، فإن معالجة المستندات تكون بشكل عام أسرع بكثير من محللات نمط DOM ، *طالما* أن المعالجة يمكن لها ان تجري في ممر من البداية إلى النهاية. فإنه بهذه الطريقة يمكن القيام بالعديد من المهام، مثل الفهرسة، والتحويل إلى تنسيقات أخرى، والتنسيق البسيط للغاية وما شابه ذلك بهذه الطريقة.

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

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

تطمس مثل هذه التطبيقات المفاضلات بين DOM / SAX ، ولكنها غالبًا ما تكون فعالة جدًا في الممارسة وهذا مايلاحظه الفنيون وغيرهم ممن يعملون على معالجة البيانات وغيرها.

نظرًا لطبيعة DOM ، تتطلب القراءة المتدفقة من القرص تقنيات عاليه مثل التقييم البطيء، أو ذاكرات التخزين المؤقته، أو الذاكرة الافتراضية، أو هياكل البيانات الثابتة، أو تقنيات أخرى (فإنه تم الكشف عن إحدى هذه التقنيات في براءة الاختراع الأمريكية 5557722).

يُعتقد أحيانًا أن معالجة مستندات XML الأكبر من الذاكرة الرئيسية انه لأمر مستحيل لأن بعض موزعي DOM لا يسمحون بذلك. ومع ذلك، فإنه لا يقل احتمالًا عن فرز مجموعة بيانات أكبر من الذاكرة الرئيسية باستخدام مساحة القرص كذاكرة لتجاوز هذا القيد.

## العيوب
يعد نموذج SAX المستند إلى الحدث مفيدًا لتحليل XML , ولكن له بعض العيوب التي سوف نسردها الآن:

يتطلب أي نوع من التحقق من صحة XML تقريبًا الوصول إلى المستند بالكامل. ولعل أبسط مثال هو أن السمة المعلنة في DTD على أنها من النوع IDREF ، إن هذه السمة تتطلب وجود عنصر واحد فقط في المستند يستخدم نفس القيمة لسمة ID. للتحقق من صحة ذلك في محلل SAX ، يجب على المرء تتبع جميع سمات المعرف (*قد* ينتهي الأمر بالإشارة إلى أي منها بواسطة سمة IDREF في النهاية).

وكذلك كل سمة IDREF حتى يتم حلها. وبالمثل، للتحقق من أن كل عنصر يحتوي على تسلسل مقبول من العناصر الفرعية، يجب الاحتفاظ بالمعلومات حول العناصر الفرعية التي تمت رؤيتها لكل من الاساسيين حتى يتم إغلاق العنصر الرئيسي.

بالإضافة إلى ذلك، تتطلب بعض أنواع معالجة XML ببساطة الوصول إلى المستند بأكمله. XSLT وXPath .

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

## معالجة XML باستخدام SAX
المحلل اللغوي والذي يطبق SAX (أي *SAX Parser*) يعمل كمحلل دفق، مع واجهة برمجة تطبيقات مدفوعة بالأحداث. يحدد المستخدم عددًا من طرق رد الاتصال التي سيتم استدعاؤها عند حدوث أحداث أثناء التحليل. وتشمل هذه الأحداث SAX (من بين أمور أخرى):

* عقد نص XML
* يبدأ عنصر XML وينتهي
* تعليمات معالجة XML
* تعليقات XML

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

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

## الأمثلة
بالنظر إلى مستند XML التالي:
```xml
<?xml version="1.0" encoding="UTF-8"?>
 <DocumentElement param="value">
   <FirstElement>
     ¶ Some Text
   </FirstElement>
   <?some_pi some_attr="some_value"?>
   <SecondElement param2="something">
     Pre-Text <Inline>Inlined text</Inline> Post-text.
   </SecondElement>
</DocumentElement>
```
مستند XML هذا، عند تمريره عبر المحلل SAX ، سينشئ سلسلة من الأحداث وهذه الاحداث مثل ما يلي:

* بدء عنصر XML ، المسمى *DocumentElement* ، *بمعلمة* سمة تساوي «القيمة»
* بدء عنصر XML ، المسمى *FirstElement*
* عقدة نص XML ، ببيانات تساوي «&#x26; # xb6 ؛ بعض النص» (ملاحظة: يمكن تغيير بعض المسافات البيضاء)
* نهاية عنصر XML ، المسمى *FirstElement*
* حدث تعليمات المعالجة، مع الهدف *some_pi* والبيانات *بعض_اتر = «بعض_قيمة»* (المحتوى بعد الهدف هو مجرد نص؛ ومع ذلك، من الشائع جدًا تقليد بناء جملة سمات XML ، كما في هذا المثال)
* يبدأ عنصر XML ، المسمى *SecondElement* ، مع سمة *param2* تساوي «شيء»
* عقدة نص XML ، مع بيانات تساوي «نص مسبق»
* بدء عنصر XML ، المسمى *Inline*
* عقدة نص XML ، ببيانات تساوي «نص مضمّن»
* نهاية عنصر XML ، المسمى *Inline*
* عقدة نص XML ، ببيانات تساوي «نص ما بعد».
* نهاية عنصر XML ، المسمى *SecondElement*
* نهاية عنصر XML ، المسمى *DocumentElement*

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

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

* بدء عنصر XML ، الذي يسمى *FirstElement*
* عقدة نص XML ، ببيانات تساوي " &#x26; # xb6؛" (حرف Unicode U + 00b6)
* عقدة نص XML ، مع بيانات تساوي أو تعرف باسم «بعض النص»
* نهاية عنصر XML ، المسمى *FirstElement*

## انظر أيضًا
* لغة الترميز القابلة للامتداد
* جافا

## المراجع

## للقراءة المتعمقة
* 
* 

## روابط خارجية
* الصفحة الرئيسية لـ SAX

تصنيف:واجهات برمجة التطبيقات