دروس XML

الصفحة الرئيسية لـ XML مقدمة XML كيفية استخدام XML شجرة XML بناء جملة XML عناصر XML سمات XML مساحات أسماء XML عرض XML طلب XML HttpRequest محلل XML XML DOM XML XPath XML XSLT XML XQuery XML XLink مدقق XML XML DTD مخطط XML خادم XML أمثلة XML مسابقة XML شهادة XML

XML AJAX

مقدمة أجاكس أجاكس XMLHttp طلب AJAX استجابة AJAX ملف AJAX XML أجاكس بي إتش بي أجاكس آسيا والمحيط الهادئ قاعدة بيانات أجاكس تطبيقات أجاكس أمثلة AJAX

XML DOM

مقدمة حول DOM عقد DOM الوصول إلى DOM معلومات عقدة DOM قائمة عقدة DOM عبور DOM التنقل في DOM DOM احصل على القيم DOM تغيير العقد DOM إزالة العقد استبدل DOM Nodes DOM إنشاء العقد DOM أضف العقد عقد استنساخ DOM أمثلة DOM

دروس XPath

مقدمة XPath عقد XPath بناء جملة XPath محاور XPath مشغلي XPath أمثلة XPath

XSLT التعليمي

XSLT مقدمة لغات XSL تحويل XSLT XSLT <template> XSLT <قيمة> XSLT <للجميع> XSLT <ترتيب> XSLT <if> XSLT <اختر> XSLT تطبيق XSLT على العميل XSLT على الخادم XSLT تحرير XML أمثلة XSLT

XQuery تعليمي

XQuery مقدمة مثال XQuery XQuery FLWOR XQuery HTML شروط XQuery بناء جملة XQuery XQuery إضافة XQuery حدد وظائف XQuery

XML DTD

مقدمة DTD مكعبات بناء DTD عناصر DTD سمات DTD عناصر DTD مقابل Attr كيانات DTD أمثلة DTD

مخطط XSD

مقدمة XSD XSD كيف XSD <المخطط عناصر XSD سمات XSD قيود XSD

مجمع XSD

عناصر XSD XSD فارغ عناصر XSD فقط نص XSD فقط XSD مختلط مؤشرات XSD XSD <أي> XSD <أي سمة> تبديل XSD مثال XSD

بيانات XSD

سلسلة XSD تاريخ XSD XSD الرقمية XSD متفرقات مرجع XSD

خدمات الويب

خدمات XML XML WSDL صابون XML XML RDF XML RSS

مراجع

أنواع عقدة DOM عقدة DOM قائمة عقدة DOM DOM NamedNodeMap مستند DOM عنصر DOM سمة DOM نص DOM DOM CDATA تعليق DOM DOM XMLHttpRequest محلل DOM عناصر XSLT وظائف XSLT / XPath

صابون XML


  • SOAP تعني S imple O bject A ccess P rotocol
  • SOAP هو بروتوكول اتصال تطبيقي
  • SOAP هو تنسيق لإرسال الرسائل واستلامها
  • SOAP هي منصة مستقلة
  • يعتمد SOAP على XML
  • SOAP هو توصية W3C

لماذا SOAP؟

من المهم لتطبيقات الويب أن تكون قادرة على الاتصال عبر الإنترنت.

أفضل طريقة للاتصال بين التطبيقات هي عبر HTTP ، لأن HTTP مدعوم من قبل جميع متصفحات الإنترنت والخوادم. تم إنشاء SOAP لإنجاز ذلك.

يوفر SOAP طريقة للتواصل بين التطبيقات التي تعمل على أنظمة تشغيل مختلفة بتقنيات ولغات برمجة مختلفة.


اللبنات SOAP

رسالة SOAP هي مستند XML عادي يحتوي على العناصر التالية:

  • عنصر مغلف يعرف مستند XML كرسالة SOAP
  • عنصر رأس يحتوي على معلومات الرأس
  • عنصر أساسي يحتوي على معلومات الاتصال والاستجابة
  • عنصر خطأ يحتوي على أخطاء ومعلومات الحالة

تم التصريح عن جميع العناصر أعلاه في مساحة الاسم الافتراضية لمغلف SOAP:

http://www.w3.org/2003/05/soap-envelope/

ومساحة الاسم الافتراضية لأنواع البيانات والترميز SOAP هي:

http://www.w3.org/2003/05/soap-encoding


قواعد النحو

فيما يلي بعض قواعد بناء الجملة المهمة:

  • يجب تشفير رسالة SOAP باستخدام XML
  • يجب أن تستخدم رسالة SOAP مساحة اسم مغلف SOAP
  • يجب ألا تحتوي رسالة SOAP على مرجع DTD
  • يجب ألا تحتوي رسالة SOAP على تعليمات معالجة XML


رسالة الهيكل العظمي SOAP

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
...
</soap:Header>

<soap:Body>
...
  <soap:Fault>
  ...
  </soap:Fault>
</soap:Body>

</soap:Envelope>

عنصر مغلف SOAP

عنصر مغلف SOAP المطلوب هو العنصر الجذر لرسالة SOAP. يعرّف هذا العنصر مستند XML كرسالة SOAP.

مثال

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

xmlns: مساحة اسم الصابون

لاحظ مساحة الاسم xmlns: soap في المثال أعلاه. يجب أن يكون دائمًا بالقيمة: "http://www.w3.org/2003/05/soap-envelope/".

تعرف مساحة الاسم Envelope على أنها SOAP Envelope.

إذا تم استخدام مساحة اسم مختلفة ، يقوم التطبيق بإنشاء خطأ ويتجاهل الرسالة.


السمة encodingStyle

تُستخدم سمة encodingStyle لتحديد أنواع البيانات المستخدمة في المستند. قد تظهر هذه السمة على أي عنصر SOAP ، وتنطبق على محتويات العنصر وجميع العناصر الفرعية.

لا تحتوي رسالة SOAP على تشفير افتراضي.

بناء الجملة

soap:encodingStyle="URI"

مثال

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

عنصر رأس SOAP

يحتوي عنصر رأس SOAP الاختياري على معلومات خاصة بالتطبيق (مثل المصادقة والدفع وما إلى ذلك) حول رسالة SOAP.

إذا كان عنصر الرأس موجودًا ، فيجب أن يكون أول عنصر فرعي لعنصر المغلف.

ملاحظة: يجب أن تكون جميع العناصر الفرعية المباشرة لعنصر الرأس مؤهلة لمساحة الاسم.

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="https://www.w3schools.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

يحتوي المثال أعلاه على رأس يحتوي على عنصر "Trans" وسمة "mustUnderstand" بقيمة 1 وقيمة 234.

يحدد SOAP ثلاث سمات في مساحة الاسم الافتراضية. هذه السمات هي: mustUnderstand والممثل و encodingStyle.

تحدد السمات المحددة في رأس SOAP كيف يجب على المستلم معالجة رسالة SOAP.


يجب فهم السمة

يمكن استخدام سمة SOAP mustUnderstand للإشارة إلى ما إذا كان إدخال الرأس إلزاميًا أم اختياريًا لكي يقوم المستلم بمعالجته.

إذا قمت بإضافة mustUnderstand = "1" إلى عنصر فرعي لعنصر Header ، فهذا يشير إلى أن جهاز الاستقبال الذي يعالج الرأس يجب أن يتعرف على العنصر. إذا لم يتعرف جهاز الاستقبال على العنصر ، فسوف يفشل عند معالجة الرأس.

بناء الجملة

soap:mustUnderstand="0|1"

مثال

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="https://www.w3schools.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

سمة الممثل

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

يتم استخدام سمة ممثل SOAP لمعالجة عنصر الرأس إلى نقطة نهاية محددة.

بناء الجملة

soap:actor="URI"

مثال

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="https://www.w3schools.com/transaction/"
  soap:actor="https://www.w3schools.com/code/">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

السمة encodingStyle

تُستخدم سمة encodingStyle لتحديد أنواع البيانات المستخدمة في المستند. قد تظهر هذه السمة على أي عنصر SOAP ، وستنطبق على محتويات هذا العنصر وجميع العناصر الفرعية.

لا تحتوي رسالة SOAP على تشفير افتراضي.

بناء الجملة

soap:encodingStyle="URI"

عنصر SOAP Body

يحتوي عنصر SOAP Body المطلوب على رسالة SOAP الفعلية المخصصة لنقطة النهاية النهائية للرسالة.

قد تكون العناصر الفرعية المباشرة لعنصر SOAP Body مؤهلة لمساحة الاسم.

مثال

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body>
  <m:GetPrice xmlns:m="https://www.w3schools.com/prices">
    <m:Item>Apples</m:Item>
  </m:GetPrice>
</soap:Body>

</soap:Envelope>

المثال أعلاه يطلب سعر التفاح. لاحظ أن m: GetPrice وعناصر العنصر أعلاه هي عناصر خاصة بالتطبيق. فهي ليست جزءًا من مساحة اسم SOAP.

يمكن أن تبدو استجابة SOAP كما يلي:

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body>
  <m:GetPriceResponse xmlns:m="https://www.w3schools.com/prices">
    <m:Price>1.90</m:Price>
  </m:GetPriceResponse>
</soap:Body>

</soap:Envelope>


عنصر خطأ SOAP

يُستخدم عنصر SOAP Fault الاختياري للإشارة إلى رسائل الخطأ.

يحتفظ عنصر خطأ SOAP بالأخطاء ومعلومات الحالة لرسالة SOAP.

في حالة وجود عنصر خطأ ، يجب أن يظهر كعنصر فرعي لعنصر النص. يمكن أن يظهر عنصر الخطأ مرة واحدة فقط في رسالة SOAP.

يحتوي عنصر خطأ SOAP على العناصر الفرعية التالية:

Sub Element Description
<faultcode> A code for identifying the fault
<faultstring> A human readable explanation of the fault
<faultactor> Information about who caused the fault to happen
<detail>

Holds application specific error information related to the Body element

رموز خطأ SOAP

يجب استخدام قيم رمز الخطأ المحددة أدناه في عنصر رمز الخطأ عند وصف العيوب:

Error Description
VersionMismatch Found an invalid namespace for the SOAP Envelope element
MustUnderstand An immediate child element of the Header element, with the mustUnderstand attribute set to "1", was not understood
Client The message was incorrectly formed or contained incorrect information
Server There was a problem with the server so the message could not proceed

بروتوكول HTTP

يتصل HTTP عبر TCP / IP. يتصل عميل HTTP بخادم HTTP باستخدام TCP. بعد إنشاء اتصال ، يمكن للعميل إرسال رسالة طلب HTTP إلى الخادم:

POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200

يقوم الخادم بعد ذلك بمعالجة الطلب وإرسال استجابة HTTP إلى العميل. تحتوي الاستجابة على رمز الحالة الذي يشير إلى حالة الطلب:

200 OK
Content-Type: text/plain
Content-Length: 200

في المثال أعلاه ، عرض الخادم رمز الحالة 200. هذا هو رمز النجاح القياسي لـ HTTP.

إذا لم يتمكن الخادم من فك ترميز الطلب ، فربما يكون قد أرجع شيئًا كالتالي:

400 Bad Request
Content-Length: 0

تجليد الصابون

تحدد مواصفات SOAP بنية رسائل SOAP ، وليس كيفية تبادلها. يتم سد هذه الفجوة بما يسمى "روابط SOAP". روابط SOAP هي آليات تسمح بتبادل رسائل SOAP بفاعلية باستخدام بروتوكول النقل.

توفر معظم تطبيقات SOAP عمليات ربط لبروتوكولات النقل الشائعة ، مثل HTTP أو SMTP.

HTTP متزامن ويستخدم على نطاق واسع. يحدد طلب SOAP HTTP رأسي HTTP على الأقل: نوع المحتوى وطول المحتوى.

SMTP غير متزامن ويتم استخدامه في الملاذ الأخير أو في حالات معينة.

عادةً ما توفر تطبيقات Java لـ SOAP ارتباطًا محددًا لبروتوكول JMS (Java Messaging System).


نوع المحتوى

يحدد رأس نوع المحتوى لطلب واستجابة SOAP نوع MIME للرسالة وترميز الأحرف (اختياري) المستخدم في نص XML للطلب أو الاستجابة.

بناء الجملة

Content-Type: MIMEType; charset=character-encoding

مثال

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8

طول المحتوى

يحدد رأس طول المحتوى لطلب واستجابة SOAP عدد البايت في نص الطلب أو الاستجابة.

بناء الجملة

Content-Length: bytes

مثال

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

مثال على الصابون

في المثال أدناه ، يتم إرسال طلب GetStockPrice إلى الخادم. يحتوي الطلب على معلمة StockName ومعلمة Price التي سيتم إرجاعها في الاستجابة. يتم تحديد مساحة اسم الوظيفة في "http://www.example.org/stock".

طلب SOAP:

POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

استجابة SOAP:

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPriceResponse>
    <m:Price>34.5</m:Price>
  </m:GetStockPriceResponse>
</soap:Body>

</soap:Envelope>