Tutoriel XML

ACCUEIL XML Introduction XML XML Comment utiliser Arbre XML Syntaxe XML Éléments XML Attributs XML Espaces de noms XML Affichage XML Requête HTTP XML Analyseur XML DOM XML XPath XML XML XSLT XQuery XML XMLXLink Validateur XML DTD XML Schéma XML Serveur XML Exemples XML XML Quiz Certificat XML

XMLAJAX

Présentation d'AJAX AJAX XMLHttp Requête AJAX Réponse AJAX Fichier XML AJAX PHP AJAX ASP AJAX Base de données AJAX Applications AJAX Exemples AJAX

DOM XML

Présentation du DOM Nœuds DOM Accès au DOM Informations sur le nœud DOM Liste des nœuds DOM Traversée du DOM Navigation DOM DOM Obtenir des valeurs Nœuds de changement DOM DOM Supprimer les nœuds DOM Remplacer les nœuds DOM Créer des nœuds DOM Ajouter des nœuds Nœuds de clonage DOM Exemples DOM

Tutoriel XPath

Présentation de XPath Nœuds XPath Syntaxe XPath Axes XPath Opérateurs XPath Exemples XPath

Tutoriel XSLT

Présentation de XSLT Langages XSL Transformation XSLT XSLT <modèle> XSLT <valeur-de> XSLT <pour-chaque> XSLT <sort> XSLT <si> XSLT <choisir> Appliquer XSLT XSLT sur le client XSLT sur le serveur XSLT Éditer XML Exemples XSLT

Tutoriel XQuery

Présentation de XQuery Exemple XQuery XQuery FLWOR XQuery HTML Termes XQuery Syntaxe XQuery Ajouter XQuery Sélection XQuery Fonctions XQuery

DTD XML

Présentation de la DTD Blocs de construction DTD Éléments DTD Attributs DTD Éléments DTD vs Attr Entités DTD Exemples de DTD

Schéma XSD

Présentation XSD Comment XSD XSD <schéma> Éléments XSD Attributs XSD Restrictions XSD

Complexe XSD

Éléments XSD XSD vide Éléments XSD uniquement Texte XSD uniquement XSD Mixte Indicateurs XSD XSD <tout> XSD <anyAttribute> Remplacement XSD Exemple XSD

Données XSD

Chaîne XSD Date XSD Numérique XSD Divers XSD Référence XSD

Services Web

Services XML XMLWSDL SAVON XML XML RDF XML RSS

Les références

Types de nœuds DOM Nœud DOM Liste de nœuds DOM DOM NamedNodeMap Documents DOM Élément DOM Attribut DOM Texte DOM DOM CDATA DOM Comment DOM XMLHttpRequest Analyseur DOM Éléments XSLT Fonctions XSLT/XPath

Savon XML


  • SOAP signifie Simple O bject A ccess Protocol _
  • SOAP est un protocole de communication d'application
  • SOAP est un format d'envoi et de réception de messages
  • SOAP est indépendant de la plate-forme
  • SOAP est basé sur XML
  • SOAP est une recommandation du W3C

Pourquoi SAVON ?

Il est important que les applications Web puissent communiquer sur Internet.

Le meilleur moyen de communiquer entre les applications est via HTTP, car HTTP est pris en charge par tous les navigateurs et serveurs Internet. SOAP a été créé pour accomplir cela.

SOAP fournit un moyen de communiquer entre les applications exécutées sur différents systèmes d'exploitation, avec différentes technologies et langages de programmation.


Blocs de construction SOAP

Un message SOAP est un document XML ordinaire contenant les éléments suivants :

  • Un élément Enveloppe qui identifie le document XML en tant que message SOAP
  • Un élément Header qui contient des informations d'en-tête
  • Un élément Body qui contient les informations d'appel et de réponse
  • Un élément Fault contenant des erreurs et des informations d'état

Tous les éléments ci-dessus sont déclarés dans l'espace de noms par défaut pour l'enveloppe SOAP :

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

et l'espace de noms par défaut pour l'encodage SOAP et les types de données est :

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


Règles de syntaxe

Voici quelques règles de syntaxe importantes :

  • Un message SOAP DOIT être encodé en XML
  • Un message SOAP DOIT utiliser l'espace de noms SOAP Envelope
  • Un message SOAP ne doit PAS contenir de référence DTD
  • Un message SOAP ne doit PAS contenir d'instructions de traitement XML


Message SOAP squelette

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

L'élément d'enveloppe SOAP

L'élément d'enveloppe SOAP requis est l'élément racine d'un message SOAP. Cet élément définit le document XML comme un message SOAP.

Exemple

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

L'espace de noms xmlns:soap

Notez l'espace de noms xmlns:soap dans l'exemple ci-dessus. Il doit toujours avoir la valeur : "http://www.w3.org/2003/05/soap-envelope/".

L'espace de noms définit l'enveloppe comme une enveloppe SOAP.

Si un espace de noms différent est utilisé, l'application génère une erreur et ignore le message.


L'attribut encodingStyle

L'attribut encodingStyle est utilisé pour définir les types de données utilisés dans le document. Cet attribut peut apparaître sur n'importe quel élément SOAP et s'applique au contenu de l'élément et à tous les éléments enfants.

Un message SOAP n'a pas d'encodage par défaut.

Syntaxe

soap:encodingStyle="URI"

Exemple

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

L'élément d'en-tête SOAP

L'élément optionnel SOAP Header contient des informations spécifiques à l'application (telles que l'authentification, le paiement, etc.) sur le message SOAP.

Si l'élément Header est présent, il doit être le premier élément enfant de l'élément Envelope.

Remarque : Tous les éléments enfants immédiats de l'élément Header doivent être qualifiés par un espace de noms.

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

L'exemple ci-dessus contient un en-tête avec un élément "Trans", un attribut "mustUnderstand" avec une valeur de 1 et une valeur de 234.

SOAP définit trois attributs dans l'espace de noms par défaut. Ces attributs sont : mustUnderstand, actor et encodingStyle.

Les attributs définis dans l'en-tête SOAP définissent comment un destinataire doit traiter le message SOAP.


L'attribut mustUnderstand

L'attribut SOAP mustUnderstand peut être utilisé pour indiquer si une entrée d'en-tête est obligatoire ou facultative à traiter par le destinataire.

Si vous ajoutez mustUnderstand="1" à un élément enfant de l'élément Header, cela indique que le récepteur qui traite l'en-tête doit reconnaître l'élément. Si le récepteur ne reconnaît pas l'élément, il échouera lors du traitement de l'en-tête.

Syntaxe

soap:mustUnderstand="0|1"

Exemple

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

L'attribut acteur

Un message SOAP peut voyager d'un expéditeur à un destinataire en passant par différents points de terminaison le long du chemin du message. Cependant, toutes les parties d'un message SOAP peuvent ne pas être destinées au point de terminaison ultime, à la place, il peut être destiné à un ou plusieurs des points de terminaison sur le chemin du message.

L'attribut d'acteur SOAP est utilisé pour adresser l'élément d'en-tête à un point de terminaison spécifique.

Syntaxe

soap:actor="URI"

Exemple

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

L'attribut encodingStyle

L'attribut encodingStyle est utilisé pour définir les types de données utilisés dans le document. Cet attribut peut apparaître sur n'importe quel élément SOAP, et il s'appliquera au contenu de cet élément et à tous les éléments enfants.

Un message SOAP n'a pas d'encodage par défaut.

Syntaxe

soap:encodingStyle="URI"

L'élément corps du savon

L'élément de corps SOAP requis contient le message SOAP réel destiné au point de terminaison ultime du message.

Les éléments enfants immédiats de l'élément Corps SOAP peuvent être qualifiés d'espace de noms.

Exemple

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

L'exemple ci-dessus demande le prix des pommes. Notez que les éléments m:GetPrice et Item ci-dessus sont des éléments spécifiques à l'application. Ils ne font pas partie de l'espace de noms SOAP.

Une réponse SOAP pourrait ressembler à ceci :

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


L'élément d'erreur SOAP

L'élément optionnel SOAP Fault est utilisé pour indiquer les messages d'erreur.

L'élément SOAP Fault contient les erreurs et les informations d'état d'un message SOAP.

Si un élément Fault est présent, il doit apparaître comme un élément enfant de l'élément Body. Un élément Fault ne peut apparaître qu'une seule fois dans un message SOAP.

L'élément SOAP Fault a les sous-éléments suivants :

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

Codes d'erreur SOAP

Les valeurs de code d'erreur définies ci-dessous doivent être utilisées dans l'élément de code d'erreur lors de la description des défauts :

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

Le protocole HTTP

HTTP communique via TCP/IP. Un client HTTP se connecte à un serveur HTTP via TCP. Après avoir établi une connexion, le client peut envoyer un message de requête HTTP au serveur :

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

Le serveur traite ensuite la demande et renvoie une réponse HTTP au client. La réponse contient un code d'état qui indique l'état de la demande :

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

Dans l'exemple ci-dessus, le serveur a renvoyé un code d'état de 200. Il s'agit du code de réussite standard pour HTTP.

Si le serveur n'a pas pu décoder la requête, il aurait pu renvoyer quelque chose comme ceci :

400 Bad Request
Content-Length: 0

Liaison SAVON

La spécification SOAP définit la structure des messages SOAP, et non la manière dont ils sont échangés. Cette lacune est comblée par ce qu'on appelle les "liaisons SOAP". Les liaisons SOAP sont des mécanismes qui permettent d'échanger efficacement des messages SOAP à l'aide d'un protocole de transport.

La plupart des implémentations SOAP fournissent des liaisons pour les protocoles de transport courants, tels que HTTP ou SMTP.

HTTP est synchrone et largement utilisé. Une requête HTTP SOAP spécifie au moins deux en-têtes HTTP : Content-Type et Content-Length.

SMTP est asynchrone et est utilisé en dernier recours ou dans des cas particuliers.

Les implémentations Java de SOAP fournissent généralement une liaison spécifique pour le protocole JMS (Java Messaging System).


Type de contenu

L'en-tête Content-Type d'une demande et d'une réponse SOAP définit le type MIME du message et le codage de caractères (facultatif) utilisé pour le corps XML de la demande ou de la réponse.

Syntaxe

Content-Type: MIMEType; charset=character-encoding

Exemple

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

Contenu-Longueur

L'en-tête Content-Length d'une demande et d'une réponse SOAP spécifie le nombre d'octets dans le corps de la demande ou de la réponse.

Syntaxe

Content-Length: bytes

Exemple

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

Un exemple SOAP

Dans l'exemple ci-dessous, une requête GetStockPrice est envoyée à un serveur. La demande a un paramètre StockName et un paramètre Price qui seront renvoyés dans la réponse. L'espace de noms de la fonction est défini dans "http://www.example.org/stock".

Une requête 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>

La réponse 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>