XML -Tutorial

XML-HOME XML-Einführung XML-Wie zu verwenden XML-Baum XML-Syntax XML-Elemente XML-Attribute XML-Namespaces XML-Anzeige XML-HttpRequest XML-Parser XML-DOM XML-XPath XML-XSLT XML-XQuery XML-XLink XML-Validator XML-DTD XML-Schema XML-Server XML-Beispiele XML-Quiz XML-Zertifikat

XML-AJAX

AJAX-Einführung AJAX-XMLHttp AJAX-Anfrage AJAX-Antwort AJAX-XML-Datei AJAX-PHP AJAX ASP AJAX-Datenbank AJAX-Anwendungen AJAX-Beispiele

XML-DOM

DOM-Einführung DOM-Knoten DOM-Zugriff DOM-Knoten-Info DOM-Knotenliste DOM-Traversierung DOM-Navigation DOM Get-Werte DOM-Änderungsknoten DOM-Knoten entfernen DOM-Ersetzungsknoten DOM-Knoten erstellen DOM-Knoten hinzufügen DOM-Klonknoten DOM-Beispiele

XPath -Tutorial

XPath-Einführung XPath-Knoten XPath-Syntax XPath-Achsen XPath-Operatoren XPath-Beispiele

XSLT -Tutorial

XSLT-Einführung XSL-Sprachen XSLT-Transformation XSLT <Vorlage> XSLT <Wert von> XSLT <für-jeden> XSLT <sortieren> XSLT <wenn> XSLT <auswählen> XSLT anwenden XSLT auf dem Client XSLT auf dem Server XSLT XML bearbeiten XSLT-Beispiele

XQuery- Tutorial

XQuery-Einführung XQuery-Beispiel XQuery FLWOR XQuery-HTML XQuery-Bedingungen XQuery-Syntax XQuery hinzufügen XQuery-Auswahl XQuery-Funktionen

XML -DTD

DTD-Einführung DTD-Bausteine DTD-Elemente DTD-Attribute DTD-Elemente vs. Attr DTD-Entitäten DTD-Beispiele

XSD- Schema

XSD-Einführung XSD-Anleitung XSD <Schema> XSD-Elemente XSD-Attribute XSD-Einschränkungen

XSD- Komplex

XSD-Elemente XSD leer Nur XSD-Elemente Nur XSD-Text XSD gemischt XSD-Indikatoren XSD <beliebig> XSD <beliebiges Attribut> XSD-Ersetzung XSD-Beispiel

XSD -Daten

XSD-String XSD-Datum XSD Numerisch XSD Sonstiges XSD-Referenz

Webdienste _

XML-Dienste XML-WSDL XML-SOAP XML-RDF XML-RSS

Verweise

DOM-Knotentypen DOM-Knoten DOM-Knotenliste DOM NamedNodeMap DOM-Dokument DOM-Element DOM-Attribut DOM-Text DOM-CDATA DOM-Kommentar DOM-XMLHttpRequest DOM-Parser XSLT-Elemente XSLT/XPath-Funktionen

XML -Soap


  • SOAP steht für Simple Object Access Protocol _ _
  • SOAP ist ein Anwendungskommunikationsprotokoll
  • SOAP ist ein Format zum Senden und Empfangen von Nachrichten
  • SOAP ist plattformunabhängig
  • SOAP basiert auf XML
  • SOAP ist eine W3C-Empfehlung

Warum Seife?

Es ist wichtig, dass Webanwendungen über das Internet kommunizieren können.

Die Kommunikation zwischen Anwendungen erfolgt am besten über HTTP, da HTTP von allen Internetbrowsern und -servern unterstützt wird. SOAP wurde geschaffen, um dies zu erreichen.

SOAP bietet eine Möglichkeit zur Kommunikation zwischen Anwendungen, die auf unterschiedlichen Betriebssystemen mit unterschiedlichen Technologien und Programmiersprachen ausgeführt werden.


SOAP-Bausteine

Eine SOAP-Nachricht ist ein gewöhnliches XML-Dokument, das die folgenden Elemente enthält:

  • Ein Envelope-Element, das das XML-Dokument als SOAP-Nachricht identifiziert
  • Ein Header-Element, das Header-Informationen enthält
  • Ein Body-Element, das Anruf- und Antwortinformationen enthält
  • Ein Fault-Element, das Fehler und Statusinformationen enthält

Alle obigen Elemente werden im Standardnamensraum für den SOAP-Umschlag deklariert:

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

und der Standard-Namespace für SOAP-Codierung und Datentypen ist:

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


Syntaxregeln

Hier sind einige wichtige Syntaxregeln:

  • Eine SOAP-Nachricht MUSS mit XML codiert werden
  • Eine SOAP-Nachricht MUSS den SOAP Envelope-Namespace verwenden
  • Eine SOAP-Nachricht darf KEINE DTD-Referenz enthalten
  • Eine SOAP-Nachricht darf KEINE XML-Verarbeitungsanweisungen enthalten


Skelettierte SOAP-Nachricht

<?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>

Das SOAP-Envelope-Element

Das erforderliche SOAP Envelope-Element ist das Stammelement einer SOAP-Nachricht. Dieses Element definiert das XML-Dokument als SOAP-Nachricht.

Beispiel

<?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>

Der xmlns:soap-Namespace

Beachten Sie den Namespace xmlns:soap im obigen Beispiel. Es sollte immer den Wert "http://www.w3.org/2003/05/soap-envelope/" haben.

Der Namespace definiert den Umschlag als SOAP-Umschlag.

Wenn ein anderer Namespace verwendet wird, generiert die Anwendung einen Fehler und verwirft die Nachricht.


Das encodingStyle-Attribut

Das encodingStyle-Attribut wird verwendet, um die im Dokument verwendeten Datentypen zu definieren. Dieses Attribut kann auf jedem SOAP-Element erscheinen und gilt für den Inhalt des Elements und alle untergeordneten Elemente.

Eine SOAP-Nachricht hat keine Standardcodierung.

Syntax

soap:encodingStyle="URI"

Beispiel

<?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>

Das SOAP-Header-Element

Das optionale SOAP-Header-Element enthält anwendungsspezifische Informationen (wie Authentifizierung, Zahlung usw.) über die SOAP-Nachricht.

Wenn das Header-Element vorhanden ist, muss es das erste untergeordnete Element des Envelope-Elements sein.

Hinweis: Alle unmittelbar untergeordneten Elemente des Header-Elements müssen Namespace-qualifiziert sein.

<?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>

Das obige Beispiel enthält eine Kopfzeile mit einem „Trans“-Element, einem „mustUnderstand“-Attribut mit einem Wert von 1 und einem Wert von 234.

SOAP definiert drei Attribute im Standardnamensraum. Diese Attribute sind: mustUnderstand, Actor und encodingStyle.

Die im SOAP-Header definierten Attribute definieren, wie ein Empfänger die SOAP-Nachricht verarbeiten soll.


Das mustUnderstand-Attribut

Das SOAP-Attribut mustUnderstand kann verwendet werden, um anzugeben, ob ein Header-Eintrag für die Verarbeitung durch den Empfänger obligatorisch oder optional ist.

Wenn Sie einem untergeordneten Element des Header-Elements mustUnderstand="1" hinzufügen, bedeutet dies, dass der Empfänger, der den Header verarbeitet, das Element erkennen muss. Wenn der Empfänger das Element nicht erkennt, schlägt er bei der Verarbeitung des Headers fehl.

Syntax

soap:mustUnderstand="0|1"

Beispiel

<?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>

Das Akteursattribut

Eine SOAP-Nachricht kann von einem Sender zu einem Empfänger reisen, indem sie verschiedene Endpunkte entlang des Nachrichtenpfads passiert. Allerdings sind möglicherweise nicht alle Teile einer SOAP-Nachricht für den endgültigen Endpunkt bestimmt, sondern für einen oder mehrere Endpunkte auf dem Nachrichtenpfad.

Das SOAP-Actor-Attribut wird verwendet, um das Header-Element an einen bestimmten Endpunkt zu adressieren.

Syntax

soap:actor="URI"

Beispiel

<?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>

Das encodingStyle-Attribut

Das encodingStyle-Attribut wird verwendet, um die im Dokument verwendeten Datentypen zu definieren. Dieses Attribut kann auf jedem SOAP-Element erscheinen und gilt für den Inhalt dieses Elements und alle untergeordneten Elemente.

Eine SOAP-Nachricht hat keine Standardcodierung.

Syntax

soap:encodingStyle="URI"

Das SOAP-Körperelement

Das erforderliche SOAP-Body-Element enthält die eigentliche SOAP-Nachricht, die für den endgültigen Endpunkt der Nachricht bestimmt ist.

Unmittelbar untergeordnete Elemente des SOAP-Body-Elements können Namespace-qualifiziert sein.

Beispiel

<?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>

Das obige Beispiel fragt nach dem Preis von Äpfeln. Beachten Sie, dass die obigen m:GetPrice- und Item-Elemente anwendungsspezifische Elemente sind. Sie sind kein Teil des SOAP-Namespace.

Eine SOAP-Antwort könnte etwa so aussehen:

<?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>


Das SOAP-Fehlerelement

Das optionale SOAP-Fault-Element wird verwendet, um Fehlermeldungen anzuzeigen.

Das SOAP-Fault-Element enthält Fehler- und Statusinformationen für eine SOAP-Nachricht.

Wenn ein Fault-Element vorhanden ist, muss es als untergeordnetes Element des Body-Elements erscheinen. Ein Fault-Element kann in einer SOAP-Nachricht nur einmal vorkommen.

Das SOAP-Fehlerelement hat die folgenden Unterelemente:

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-Fehlercodes

Die nachfolgend definierten Fehlercodewerte müssen bei der Beschreibung von Fehlern im Fehlercodeelement verwendet werden:

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

Das HTTP-Protokoll

HTTP kommuniziert über TCP/IP. Ein HTTP-Client stellt über TCP eine Verbindung zu einem HTTP-Server her. Nach dem Verbindungsaufbau kann der Client eine HTTP-Request-Nachricht an den Server senden:

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

Der Server verarbeitet dann die Anfrage und sendet eine HTTP-Antwort zurück an den Client. Die Antwort enthält einen Statuscode, der den Status der Anfrage angibt:

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

Im obigen Beispiel hat der Server den Statuscode 200 zurückgegeben. Dies ist der Standarderfolgscode für HTTP.

Wenn der Server die Anfrage nicht entschlüsseln konnte, könnte er so etwas zurückgegeben haben:

400 Bad Request
Content-Length: 0

SOAP-Bindung

Die SOAP-Spezifikation definiert die Struktur der SOAP-Nachrichten, nicht wie sie ausgetauscht werden. Diese Lücke wird durch sogenannte „SOAP Bindings“ gefüllt. SOAP-Bindungen sind Mechanismen, die den effektiven Austausch von SOAP-Nachrichten über ein Transportprotokoll ermöglichen.

Die meisten SOAP-Implementierungen bieten Bindungen für gängige Transportprotokolle wie HTTP oder SMTP.

HTTP ist synchron und weit verbreitet. Eine SOAP-HTTP-Anfrage gibt mindestens zwei HTTP-Header an: Content-Type und Content-Length.

SMTP ist asynchron und wird als letzter Ausweg oder in besonderen Fällen verwendet.

Java-Implementierungen von SOAP bieten normalerweise eine spezifische Bindung für das JMS-Protokoll (Java Messaging System).


Inhaltstyp

Der Content-Type-Header für eine SOAP-Anforderung und -Antwort definiert den MIME-Typ für die Nachricht und die Zeichencodierung (optional), die für den XML-Hauptteil der Anforderung oder Antwort verwendet wird.

Syntax

Content-Type: MIMEType; charset=character-encoding

Beispiel

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

Inhaltslänge

Der Content-Length-Header für eine SOAP-Anforderung und -Antwort gibt die Anzahl der Bytes im Hauptteil der Anforderung oder Antwort an.

Syntax

Content-Length: bytes

Beispiel

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

Ein SOAP-Beispiel

Im folgenden Beispiel wird eine GetStockPrice-Anforderung an einen Server gesendet. Die Anfrage hat einen StockName-Parameter und einen Price-Parameter, der in der Antwort zurückgegeben wird. Der Namespace für die Funktion ist in "http://www.example.org/stock" definiert.

Eine SOAP-Anfrage:

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>

Die SOAP-Antwort:

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>