XML -zelfstudie

XML HOME XML-introductie XML Hoe te gebruiken XML-structuur XML-syntaxis XML-elementen XML-kenmerken XML-naamruimten XML-weergave XML HTTP-verzoek XML-parser XML-DOM XML XPath XML XSLT XML XQuery XML XLink XML-validator XML-DTD XML Schema XML-server XML-voorbeelden XML-quiz XML-certificaat

XML AJAX

Ajax-introductie AJAX XMLHttp Ajax-verzoek Ajax-reactie AJAX XML-bestand AJAX PHP Ajax ASP AJAX-database AJAX-toepassingen Ajax-voorbeelden

XML-DOM

DOM-introductie DOM-knooppunten DOM-toegang DOM Node Info Lijst met DOM-knooppunten DOM doorkruisen DOM-navigatie DOM Waarden ophalen DOM-wijzigingsknooppunten DOM Knooppunten verwijderen DOM Knooppunten vervangen DOM Knooppunten maken DOM Knooppunten toevoegen DOM-kloonknooppunten DOM-voorbeelden

XPath- zelfstudie

XPath-introductie XPath-knooppunten XPath-syntaxis XPath-assen XPath-operators XPath-voorbeelden

XSLT- zelfstudie

XSLT-introductie XSL-talen XSLT-transformatie XSLT <sjabloon> XSLT <waarde-van> XSLT <voor elk> XSLT <sorteren> XSLT <if> XSLT <kiezen> XSLT toepassen XSLT op de client XSLT op de server XSLT Bewerk XML XSLT-voorbeelden

XQuery- zelfstudie

XQuery-introductie XQuery-voorbeeld XQuery FLWOR XQuery HTML XQuery-voorwaarden XQuery-syntaxis XQuery toevoegen XQuery selecteren XQuery-functies

XML -DTD

DTD Introductie DTD-bouwstenen DTD-elementen DTD-kenmerken DTD Elements vs Attr DTD-entiteiten DTD-voorbeelden

XSD- schema

XSD-introductie XSD Hoe kan ik? XSD <schema> XSD-elementen XSD-kenmerken XSD-beperkingen

XSD- complex

XSD-elementen XSD Leeg Alleen XSD-elementen Alleen XSD-tekst XSD gemengd XSD-indicatoren XSD <elke> XSD <anyAttribute> XSD-vervanging XSD-voorbeeld

XSD- gegevens

XSD-string XSD-datum XSD Numeriek XSD Diversen XSD-referentie

Webservices _

XML-services XML-WSDL XML SOAP XML-RDF XML-RSS

Referenties

Typen DOM-knooppunten DOM Node DOM-knooppuntlijst DOM NamedNodeMap DOM-document DOM-element DOM-kenmerk DOM-tekst DOM CDATA DOM-opmerking DOM XMLHttpRequest DOM-parser XSLT-elementen XSLT/XPath-functies

XML -zeep


  • SOAP staat voor S imple Object A ccess Protocol
  • SOAP is een communicatieprotocol voor toepassingen
  • SOAP is een formaat voor het verzenden en ontvangen van berichten
  • SOAP is platformonafhankelijk
  • SOAP is gebaseerd op XML
  • SOAP is een W3C-aanbeveling

Waarom SOAP?

Voor webapplicaties is het belangrijk om via internet te kunnen communiceren.

De beste manier om tussen applicaties te communiceren is via HTTP, omdat HTTP door alle internetbrowsers en servers wordt ondersteund. Hiervoor is SOAP in het leven geroepen.

SOAP biedt een manier om te communiceren tussen applicaties die draaien op verschillende besturingssystemen, met verschillende technologieën en programmeertalen.


SOAP-bouwstenen

Een SOAP-bericht is een gewoon XML-document dat de volgende elementen bevat:

  • Een Envelop-element dat het XML-document identificeert als een SOAP-bericht
  • Een Header-element dat header-informatie bevat
  • Een Body-element dat oproep- en antwoordinformatie bevat
  • Een foutelement dat fouten en statusinformatie bevat

Alle bovenstaande elementen worden gedeclareerd in de standaard naamruimte voor de SOAP-envelop:

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

en de standaardnaamruimte voor SOAP-codering en gegevenstypen is:

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


Syntaxisregels

Hier zijn enkele belangrijke syntaxisregels:

  • EEN SOAP-bericht MOET worden gecodeerd met XML
  • Een SOAP-bericht MOET de SOAP Envelope-naamruimte gebruiken
  • Een SOAP-bericht mag GEEN DTD-referentie bevatten
  • Een SOAP-bericht mag GEEN XML-verwerkingsinstructies bevatten


skelet SOAP-bericht

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

Het SOAP-envelopelement

Het vereiste SOAP Envelope-element is het root-element van een SOAP-bericht. Dit element definieert het XML-document als een SOAP-bericht.

Voorbeeld

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

De xmlns:soap-naamruimte

Let op de xmln:soap naamruimte in het bovenstaande voorbeeld. Het moet altijd de waarde hebben van: "http://www.w3.org/2003/05/soap-envelope/".

De naamruimte definieert de envelop als een SOAP-envelop.

Als een andere naamruimte wordt gebruikt, genereert de toepassing een fout en negeert het bericht.


Het encodingStyle Attribuut

Het kenmerk encodingStyle wordt gebruikt om de gegevenstypen te definiëren die in het document worden gebruikt. Dit attribuut kan op elk SOAP-element voorkomen en is van toepassing op de inhoud van het element en alle onderliggende elementen.

Een SOAP-bericht heeft geen standaardcodering.

Syntaxis

soap:encodingStyle="URI"

Voorbeeld

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

Het SOAP-headerelement

Het optionele SOAP Header-element bevat toepassingsspecifieke informatie (zoals authenticatie, betaling, enz.) over het SOAP-bericht.

Als het Header-element aanwezig is, moet dit het eerste onderliggende element van het Envelope-element zijn.

Opmerking: Alle directe onderliggende elementen van het Header-element moeten gekwalificeerd zijn voor de naamruimte.

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

Het bovenstaande voorbeeld bevat een header met een "Trans"-element, een "mustUnderstand"-attribuut met een waarde van 1, en een waarde van 234.

SOAP definieert drie attributen in de standaardnaamruimte. Deze kenmerken zijn: mustUnderstand, actor en encodingStyle.

De kenmerken die zijn gedefinieerd in de SOAP-header bepalen hoe een ontvanger het SOAP-bericht moet verwerken.


Het mustUnderken-attribuut

Het SOAP mustUnderstand attribuut kan worden gebruikt om aan te geven of een header-invoer verplicht of optioneel is voor de ontvanger om te verwerken.

Als u mustUnderstand="1" toevoegt aan een onderliggend element van het Header-element, geeft dit aan dat de ontvanger die de Header verwerkt, het element moet herkennen. Als de ontvanger het element niet herkent, zal het mislukken bij het verwerken van de header.

Syntaxis

soap:mustUnderstand="0|1"

Voorbeeld

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

De acteur Attribuut

Een SOAP-bericht kan van een zender naar een ontvanger reizen door verschillende eindpunten langs het berichtpad te passeren. Het is echter mogelijk dat niet alle delen van een SOAP-bericht bedoeld zijn voor het uiteindelijke eindpunt, in plaats daarvan kan het bedoeld zijn voor een of meer van de eindpunten op het berichtpad.

Het SOAP-acteurkenmerk wordt gebruikt om het Header-element aan een specifiek eindpunt te adresseren.

Syntaxis

soap:actor="URI"

Voorbeeld

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

Het encodingStyle Attribuut

Het kenmerk encodingStyle wordt gebruikt om de gegevenstypen te definiëren die in het document worden gebruikt. Dit attribuut kan op elk SOAP-element voorkomen en is van toepassing op de inhoud van dat element en alle onderliggende elementen.

Een SOAP-bericht heeft geen standaardcodering.

Syntaxis

soap:encodingStyle="URI"

Het SOAP-lichaamselement

Het vereiste SOAP Body-element bevat het eigenlijke SOAP-bericht dat bedoeld is voor het uiteindelijke eindpunt van het bericht.

Onmiddellijke onderliggende elementen van het SOAP Body-element kunnen gekwalificeerd zijn voor de naamruimte.

Voorbeeld

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

Bovenstaand voorbeeld vraagt ​​om de prijs van appels. Merk op dat de m:GetPrice en de Item-elementen hierboven toepassingsspecifieke elementen zijn. Ze maken geen deel uit van de SOAP-naamruimte.

Een SOAP-reactie kan er ongeveer zo uitzien:

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


Het SOAP-foutelement

Het optionele SOAP Fault-element wordt gebruikt om foutmeldingen aan te geven.

Het SOAP Fault-element bevat fouten en statusinformatie voor een SOAP-bericht.

Als er een Fault-element aanwezig is, moet dit worden weergegeven als een onderliggend element van het Body-element. Een Fault-element kan maar één keer voorkomen in een SOAP-bericht.

Het SOAP Fault-element heeft de volgende subelementen:

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

De hieronder gedefinieerde foutcodewaarden moeten worden gebruikt in het foutcode-element bij het beschrijven van fouten:

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

Het HTTP-protocol

HTTP communiceert via TCP/IP. Een HTTP-client maakt verbinding met een HTTP-server via TCP. Na het tot stand brengen van een verbinding kan de client een HTTP-verzoekbericht naar de server sturen:

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

De server verwerkt vervolgens het verzoek en stuurt een HTTP-antwoord terug naar de client. Het antwoord bevat een statuscode die de status van het verzoek aangeeft:

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

In het bovenstaande voorbeeld heeft de server een statuscode van 200 geretourneerd. Dit is de standaard succescode voor HTTP.

Als de server het verzoek niet kon decoderen, had het zoiets als dit kunnen retourneren:

400 Bad Request
Content-Length: 0

SOAP-binding

De SOAP-specificatie definieert de structuur van de SOAP-berichten, niet hoe ze worden uitgewisseld. Deze leemte wordt opgevuld door zogenaamde "SOAP-bindingen". SOAP-bindingen zijn mechanismen waarmee SOAP-berichten effectief kunnen worden uitgewisseld met behulp van een transportprotocol.

De meeste SOAP-implementaties bieden bindingen voor algemene transportprotocollen, zoals HTTP of SMTP.

HTTP is synchroon en wordt veel gebruikt. Een SOAP HTTP-verzoek specificeert ten minste twee HTTP-headers: Content-Type en Content-Length.

SMTP is asynchroon en wordt in laatste instantie of in bepaalde gevallen gebruikt.

Java-implementaties van SOAP bieden meestal een specifieke binding voor het JMS-protocol (Java Messaging System).


Inhoudstype

De Content-Type-header voor een SOAP-verzoek en -antwoord definieert het MIME-type voor het bericht en de tekencodering (optioneel) die wordt gebruikt voor de XML-hoofdtekst van het verzoek of antwoord.

Syntaxis

Content-Type: MIMEType; charset=character-encoding

Voorbeeld

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

Inhoud lengte

De Content-Length-header voor een SOAP-verzoek en -antwoord specificeert het aantal bytes in de hoofdtekst van het verzoek of antwoord.

Syntaxis

Content-Length: bytes

Voorbeeld

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

Een SOAP-voorbeeld

In het onderstaande voorbeeld wordt een GetStockPrice-verzoek naar een server gestuurd. De aanvraag heeft een StockName-parameter en een Prijs-parameter die in het antwoord wordt geretourneerd. De naamruimte voor de functie is gedefinieerd in "http://www.example.org/stock".

Een SOAP-verzoek:

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>

De SOAP-reactie:

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>