Standards et fonctionnement des web services
Standards et fonctionnement des web services
services
Chapitre 3:Les technologies des web
services
Dr.Ghada Besbes
Standards des SOA
• Les standards sont un élément clé d’une SOA, ils assurent
l’interopérabilité
2
Standards des SOA
• SOAP (Simple Object Access Protocol)
• Un protocole standard de communication.
• C'est l'épine dorsale du système d'interopérabilité. SOAP est un
protocole décrit en XML.
• Il se présente comme une enveloppe pouvant être signée et pouvant
contenir des données ou des pièces jointes.
• WSDL (Web Services Description Language)
• Un langage de description standard.
• C'est l'interface présentée aux utilisateurs.
• Décrit les interfaces des services
• Il indique comment utiliser le service Web et comment interagir avec
lui.
• WSDL est basé sur XML et permet de décrire de façon précise les
détails concernant le service Web tels que les protocoles, les ports
utilisés, les opérations pouvant être effectuées, les formats des
messages d'entrée et de sortie et les exceptions pouvant être 3
envoyées.
Standards des SOA
• UDDI (Universal Description, Discovery and Integration)
• Un standard pour la publication et la découverte des
informations sur les services Web
• Il fournit l'infrastructure de base pour la publication et la
découverte des services Web.
• UDDI permet aux fournisseurs de présenter leurs services Web
aux clients.
• Afin d’être découvert, un service doit être publié
4
Fonctionnement d’un web
service
5
Fonctionnement d’un web
service
Le scenario complet
1. Définition, description du service
• On doit décrire d’un point de vue informatique ce que fait le service,
la solution qu’il propose, ...
• La définition est faite en WSDL au sein du fournisseur de services
(i.e. le serveur d’applications)
2. Publication du service
• Une fois le service défini et décrit en termes de mise en œuvre, il
peut être déclaré dans un annuaire, on parle alors de publication du
service afin de le rendre accessible aux clients.
• La publication sera effectuée au sein d’un annuaire dédié UDDI.
3. Recherche du service
• Le client se connecte à un annuaire (UDDI) pour effectuer une
recherche de service. 6
Fonctionnement d’un web
service
4. Enregistrement au service web
• Une fois le service trouvé par le client, ce dernier doit
s’enregistrer auprès du fournisseur associé au service. Cet
enregistrement indique au fournisseur l’intention du client
d’utiliser le service suivant les conditions décrites dans la
publication.
5. Mise en œuvre du service
• Le client peut invoquer le service suivant les conditions
inscrites au sein de l’annuaire lors de la publication du service
web (étape 2)
7
SOA
• Le paradigme SOA : Chercher, Publier et Consommer
8
SOA
• L’approche à services est un paradigme informatique qui
propose de construire des applications à partir de services.
Ces services sont fournis par des organisations tierces et
peuvent évoluer dynamiquement .
• Cette approche repose sur trois acteurs (Fournisseur de
service, Annuaire de service et Consommateur de service) et
trois interactions (Chercher, Publier et Consommer).
9
SOA
Interactions
• La publication : Un fournisseur de service s’enregistre auprès
du registre de service pour publier sa description de service.
Un fournisseur peut avoir plusieurs types de services.
• Recherche/découverte : Le consommateur de service
interroge le registre afin de trouver les services qu’il requiert.
• Consommation/invocation et liaison : Une fois le service est
découvert, son invocation consiste à établir une liaison entre
le consommateur et le fournisseur pour permettre son
utilisation.
10
1
XML
11
Introduction
• XML est l'abréviation de Extensible Markup Language.
• XML n'est pas un langage de programmation.
• En très gros, XML sert à stocker des données.
• XML est un langage descriptif des données
• simplement une méthode pour représenter les données.
• Celles-ci sont écrites entre des balises ou sous forme d'attributs,
et l'ensemble est écrit sous forme d'un arbre.
12
Historique
• Le développement de XML à commencé en 1996 par le XML
Working Group formé sous la conduite du world wide web
Consortium (W3C).
• Il était présidé par Jon Bosak de Sun Microsystems avec la
participation active du XML Spécial interest GROUP également
organisé par le W3C.
• La première recommandation date de février 1998.
13
Exemple
14
Objectifs
• XML sera utilisable sans difficultés sur internet
• XML soutiendra une grande variété d'applications
• Il sera facile d'écrire des programmes traitant les documents XML
• Les documents XML devraient être lisibles par l'homme et
raisonnablement clairs
• La conception de XML devrait être préparée rapidement
• La conception de XML sera formelle et concise
• Il sera facile de créer des documents XML
• XML n’est pas un langage sémantiquement figé comme peut l’être
HTML mais au contraire un langage ouvert: L’auteur d’un document
XML peut créer ses propres balises.
• Contrairement à l’usage avec HTML, on emploiera le
terme « élément » à la place des termes « balises » et « tag ». Cette
distinction met en évidence la nature plus structurée de XML par 15
rapport à HTML.
XML la syntaxe
• Un document XML est découpé en éléments structurés
hiérarchiquement.
• Un document a un élément racine appelé élément du
document.
• Un élément est composé :
• D’un nom qui spécifie son type,
• D’attributs,
• D’un contenu formé d’éléments ou de textes.
• Un texte est une chaîne de caractères.
• Un attribut a un nom et une valeur qui est une chaîne de
caractères.
• Syntaxiquement, les éléments d’un document XML sont
marqués dans le document lui-même par des paires de balises 16
ouvrantes et fermantes.
XML la syntaxe
• Tous les éléments XML doivent avoir une balise fermante:
Avec XML, il est illégal d’omettre la balise fermante.
• Avec HTML, certains éléments n’ont pas de balise fermante. Le
code suivant est correct en HTML :
<p>This is a paragraph.
<br>
• En XML tous les éléments (à l’exception du prologue) doivent
avoir des balises fermantes, comme ceci :
<p>This is a paragraph.</p>
<br />
• A la différence du HTML, les balises XML sont sensibles à la
casse.
• Tous les éléments XML doivent être correctement imbriqués. 17
XML la syntaxe
• La syntaxe pour écrire des commentaires en XML est similaire
à celle de l’HTML :
< !- - This is a comment - - >
• Tous les documents XML doivent avoir une balise racine, qui
est également le premier élément du document XML. Dans
tous les documents XML, une seule paire de balise permet de
définir l’élément racine, tous les autres éléments doivent être
imbriqués dans cet élément.
• Tous les éléments peuvent avoir des sous éléments (enfants).
• Les espaces sont définies par les caractères " " , " \t" et "\n"
dans un document XML
18
XML la syntaxe
• Un document est composé
• d’un prologue (facultatif)
• d’un arbre d’éléments (obligatoire : décrit le contenu)
• de commentaires et instructions de traitement (facultatif)
19
XML la syntaxe
• Prologue
Déclaration XML (indications au processeur)
22
XML la syntaxe
• Attributs
• Un document est formé d’une hiérarchie d’éléments dénotant
la structure sémantique du contenu.
• Tout élément fils est complètement inclus dans son père.
• L’élément racine est unique et contient tous les autres
éléments.
• Un élément peut contenir d’autres éléments, des données,
des références à des entités, des sections littérales. Il peut
aussi être vide.
• Le nom de l’élément peut éventuellement être suivi
d’attributs, qui décrivent des propriétés de l’élément. Chaque
attribut a une valeur unique. 23
XML la syntaxe
• Attributs
24
XML la syntaxe
• Attributs
• Un attribut est un couple (clé,valeur) associé à la définition
d’un élément. Il est localisé dans la balise ouvrante de
l’élément. Un élément peut donc avoir de 0 à n attributs
uniques. L’attribut est complémentaire de l’élément de par
son rôle au sens où il ajoute une information à l’élément ou
bien encore le complète dans sa définition.
• On sépare les attributs par au moins un espace (blanc simple,
tabulation, retour à la ligne). Les valeurs d’attributs peuvent
figurer sur plusieurs lignes. On utilise soit les guillemets, soit
les apostrophes pour encapsuler les valeurs.
25
XML la syntaxe
26
XML la syntaxe
Attribut ou pas?
• La construction:
<replique>
<personnage attitude='assis souriant' geste='un dollar entre les mains'>Jordan
Belfort</personnage>
<texte ton='long' > Je m’appelle Jordan Belfort. L’année de mes 26 ans, à la tête de
ma propre firme de courtage, je me suis fait 49 millions de dollars, ce qui m’énerva
vraiment car ça faisait à peine un million par semaine.</texte>
</replique>
• pourrait être remplacée par :
<replique>
<personnage>Jordan Belfort</personnage>
<attitude>assis souriant</attitude>
<geste>un dollar entre les mains</geste>
<ton>long</ton>
<texte> Je m’appelle Jordan Belfort. L’année de mes 26 ans, à la tête de ma propre
firme de courtage, je me suis fait 49 millions de dollars, ce qui m’énerva vraiment 27
car ça faisait à peine un million par semaine.</ texte>
</replique>
XML la syntaxe
Attribut ou pas?
• Il faut plutôt utiliser un élément
• lorsque l’ordre est important (l’ordre des attributs est au hasard)
• lorsqu’on veut réutiliser un élément plusieurs fois (avec le même
parent)
• lorsqu’on veut (dans le futur) avoir des descendants / une
structure interne
• pour représenter un type de données (objet) plutôt que son
usage, autrement dit: une "chose" est un élément et ses
propriétés sont des "attributs"
• Il faut plutôt utiliser un attribut
• pour indiquer l’usage/type/etc. d’un élément <adresse
usage="prof"> ... </adresse>
• lorsqu'on veut imposer des valeurs par défaut dans la DTD 28
XML la syntaxe
• Ces règles de syntaxe sont à respecter impérativement:
• Le nom d’un élément ne peut commencer par un chiffre. Pas
d’espaces, pas d’apostrophe, pas de / . Premier caractère
alphabétique ou _
• Si le nom d’un élément est composé d’un seul caractère il doit
être dans la plage [a-z,A-Z] (c’est-à-dire une lettre minuscule ou
majuscule sans accent) ou _ ou :.
• Avec au moins 2 caractères, le nom d’un élément peut contenir
_, - et . plus les caractères alphanumériques
• Tous les éléments ouverts doivent être fermés.
29
XML la syntaxe
• Voici quelques conventions souvent employées dans les
documents XML :
• Employer des minuscules pour les attributs et les éléments.
• Éviter les accents dans les noms d’attributs et d’éléments pour
des raisons de compatibilité avec les outils du marché qui
proviennent souvent d’un univers anglo-saxon.
• Préférer les guillemets délimitant les valeurs d’attribut.
• Séparer les noms composés de plusieurs mots par les caractères -
, _, . ou une majuscule.
• Essayer d’être homogène dans votre document en gardant la
même convention.
30
XML la syntaxe
Un document XML est bien formé si :
• Un document XML est construit selon la structure logique :
déclaration, élément racine, arbre d’élément et d’attributs,
commentaires.
• Le document XML doit respecter les contraintes de formes,
c'est-à-dire la hiérarchie des éléments XML. Une balise
ouverte avant une deuxième se doit d’être fermée avant et
d’éviter les chevauchements d’éléments.
• Le document n’utilise pas DTD et que sa structure est
conforme à XML.
31
Exercice 1
• Considérez le document XML suivant :
34
Espaces de noms XML
Définition:
• Un espace de noms permet de garantir l’unicité des noms des éléments
et des attributs.
• On attache une information unique à un nom de balise.
• Les namespaces, ou domaine de noms XML, correspondent à une
collection de noms uniques identifiée par un URI (Uniform Resource
Identifier).
• Un URI représente toutes les syntaxes identifiant une ressource
internet. La ressource Internet la plus utilisée est URL (Uniform
Resource Locator).
Déclaration:
• xmlns:reseau=http://www.fsr.ac.ma/reseau
Objectifs:
• distinguer les éléments et les attributs de différentes applications XML
qui ont le même nom
• grouper les éléments et les attributs d'une même application XML pour 35
que les logiciels puissent les reconnaître
Espaces de noms XML
• Notez que l’adresse n’est utilisée que pour identifier le namespace,
elle n’est plus utilisée par le parser pour d’autres opérations. Le
seul but est de donner un nom unique au namespace.
• Toutefois, il n’est pas rare que l’URL mentionné pointe vers une
véritable page web contenant des informations sur le namespace.
• Le nom d’un namespace apparaît sous la forme d’un préfixe (par
exemple reseau) de namespaces et d’un nom local qui sont séparés
par le caractère « : ».
• Le préfixe qui pointe sur un URI (par exemple
reseau=http://www.fsr.ac.ma/reseau), sélectionne le namespace.
Cette technique garantit ainsi l’unicité des identificateurs dans le
document XML;
36
Espaces de noms XML
Exemple 1
37
Espaces de noms XML: Exemple 1
38
Espaces de noms XML: Exemple 1
39
Espaces de noms XML: Exemple 1
40
Espaces de noms XML
Exemple 2
• Soit un document qui donne • Un document qui donne les
la position géographique adresses réseau d’un parc
d’un parc d’ordinateurs: d’ordinateurs:
<machines> <reseau>
<machine> <equipement>
<nom>unix1</nom> <adresse>
<adresse> <IP>212.140.115.10</IP>
<batiment>12</batiment> <nom>unix1.fsr.ac.ma</nom
<bureau>R-09</bureau> >
</adresse> </adresse>
</machine> </equipement>
…. ….
41
</machines> </reseau>
Remarque: la même balise adresse n’a pas le même sens dans les deux cas.
Espaces de noms XML
Exemple 2
• Si on fusionne les 2 documents, la signification de la balise adresse
devient ambigüe:
<machines>
<machine>
<nom>unix1</nom>
<adresse>
<batiment>12</batiment>
<bureau>R-09</bureau>
</adresse>
<adresse>
<IP>212.140.115.10</IP>
<nom>unix1.fsr.ac.ma</nom>
</adresse>
</machine>
…. 42
</machines>
Espaces de noms XML
Exemple 2
• La solution est d’associer un espace de noms et un préfixe qui qualifie
les noms des éléments et des attributs de cet espace.
<?xml version="1.0" encoding="ISO-8859-1"?>
<machines>
<machine>
<nom>unix1</nom>
<adresse>
<batiment>12</batiment>
<bureau>R-09</bureau>
</adresse>
<reseau:adresse xmlns:reseau="http://www.fsr.ac.ma/reseau" >
<reseau:IP>212.140.115.10</reseau:IP>
<reseau:nom>unix1.fsr.ac.ma</reseau:nom>
</reseau:adresse>
</machine> 43
….
</machines>
Espaces de noms XML
Exemple 2
• Plusieurs espaces de noms peuvent être utilisés.
<?xml version="1.0" encoding="ISO-8859-1"?>
<local:machines
xmlns:reseau="http://www.fsr.ac.ma/reseau"
xmlns:local="http://www.fsr.ac.ma/localisation">
<local:machine>
<local:nom>unix1</local:nom>
<local:adresse>
<local:batiment>12</local:batiment>
<local:bureau>R-09</local:bureau>
</local:adresse>
<reseau:adresse>
<reseau:IP>212.140.115.10</reseau:IP>
<reseau:nom>unix1.fsr.ac.ma</reseau:nom>
</reseau:adresse>
</local:machine>
…. 44
</local:machines>
Exercice 3
On se propose de rédiger un document XML qui décrit un magasin de livres et d’albums
(musique). La structure interne du magasin (en termes d’éléments) suit ce schéma (le
symbole * indique qu’on peut avoir de 1 à n éléments):
45
• N.B : L’élément piste a un attribut « num_piste » qui indique le numéro de la piste dans
l’album. L’élément prix (album et livre) est un élément vide contenant l’attribut « dinars »
qui indique le prix.
2
DTD
46
Validation d'un document XML
par une DTD
• Un document XML est valide si :
S’il s’agit d’un document XML bien formé, qui se conforme
également aux règles d’un Document Type Definition(DTD)
48
Types de DTD
• La déclaration d'une DTD doit apparaître après la déclaration
XML, mais avant l’élément racine.
<!xml version="1.0" ....>
<!DOCTYPE élément_racine ....>
• La déclaration de la DTD peut contenir :
• la DTD elle-même à l'intérieur du fichier XML (DTD interne)
• une adresse URL qui indique le fichier contenant la DTD (DTD
externe).
49
DTD interne
• Dans ce cas, la spécification de la DTD arrive dans l'entête du
document XML : on trouve d'abord le mot-clef DOCTYPE suivi
de l'élément racine du document et enfin la DTD elle-même
entre crochets :
53
DTD externe
• Les DTD publiques sont disponibles pour tout le monde, étant
accessibles grâce à un URN (Uniform Ressource Name)
<!DOCTYPE ElementRacine PUBLIC "NomDeLaDTD" "URLDeLaDTD">
56
Définir les éléments et leurs
contenus
Sous-éléments
Ici, on va lister les sous-éléments pouvant apparaître dans le contenu,
par exemple:
<!ELEMENT identité (prénom,nom)>
indique que l'élément identité doit contenir, dans l'ordre, un élément
prénom, un élément nom, et rien d'autre.
• Il est possible de moduler le nombre d'apparitions d'un sous-
élément en utilisant des quantifieurs après les noms d'éléments. Les
quantifieurs utilisables dans les DTD sont :
• ? : 0 ou 1 fois ;
• * : 0, 1 ou plus ;
• + : 1 ou plus.
• L'exemple suivant indique que l'élément identité doit contenir,
toujours en respectant l'ordre, un ou plusieurs éléments prénom, un
élément surnom facultatif et exactement un élément nom : 57
58
Définir les éléments et leurs
contenus
Combinaisons
• Il est possible de combiner les syntaxes vues précédemment:
<!ELEMENT diplôme ( (intitulé,année) | (année,compétences,stage?)+ )>
59
Définir les éléments et leurs
contenus
• Contenu mixte
• Certains éléments ont un contenu mixte, c'est à dire qu'ils
sont composés d'une alternance, dans un ordre quelconque,
de fragments textuels et d'éléments.
• La déclaration d'un élément à contenu mixte se fait toujours
selon la syntaxe suivante, le mot clé #PCDATA étant
nécessairement en première position :
60
Définir les éléments et leurs
contenus
• Contenu mixte
Par exemple :
<!ELEMENT paragraphe (#PCDATA | note | renvoi)*>
61
Définir les éléments et leurs
contenus
• Contenu vide
• Un élément peut également n'avoir aucun contenu, comme
c'est le cas par exemple de la balise br(retour à la ligne en
HTML).
• Cela se précise dans la DTD de la manière suivante :
<!ELEMENT br EMPTY>
62
Définir les éléments et leurs
contenus
• Contenu quelconque
• On termine avec la possibilité d'autoriser n'importe quel contenu à
apparaître dans un élément.
• Exemple de document :
<adresse><rue></rue><ville>Paris</ville></adresse>
64
Définir les éléments et leurs
contenus
• Définir les attributs
• La description des attributs se fait par une déclaration d'une liste
d'attributs (ATTLIST)
• La syntaxe est la suivante:
<!ATTLIST Elément Attribut Type Valeur-par-défaut>
• avec :
<!ATTLIST Elément Attribut Type #FIXED Valeur>
67
Définir les éléments et leurs
contenus
• Définir les attributs
• Exemple 2:
• On peut, dans une même déclaration ATTLIST, définir
plusieurs attributs associés au même élément:
<!ATTLIST IMG WIDTH CDATA "100">
<!ATTLIST IMG HEIGHT CDATA "100">
• peuvent se résumer en une seule déclaration:
<!ATTLIST IMG WIDTH CDATA "100"
HEIGHT CDATA "100">
68
Définir les éléments et leurs
contenus
• Définir les attributs
• Exemple 3:
<!ATTLIST identité prénom CDATA #REQUIRED
nom CDATA #REQUIRED
surnom CDATA #IMPLIED>
69
Définir les éléments et leurs
contenus
• Définir les attributs: Enumération
• Nous pouvons limiter la liste de valeurs possibles pour un
attribut.
• On le définit comme un type énuméré.
• Exemple de déclaration d'une liste de choix d'attributs:
<!ELEMENT img EMPTY>
<!ATTLIST img format (GIF|JPEG|PNG) "GIF">
• Nous déclarons un attribut format d'un élément img.
• Cet attribut peut prendre une valeur parmi GIF, JPEG et PNG.
• La valeur par défaut est GIF.
• Remarque: ne pas mettre des guillemets dans la liste des 70
valeurs possibles.
Définir les éléments et leurs
contenus
• Définir les attributs: Enumération
• Exemple 1:
72
Limitations des DTD
Les reproches suivants sont systématiquement faits aux DTD :
• Le nombre d'apparitions d'un élément ne peut pas être contraint
précisément, puisque l'on ne dispose que des quantifieurs ?, * et +,
on aimerait pouvoir dire qu'un élément doit apparaître plus de 2
fois mais toujours moins de 5 ;
• On ne dispose pas de types pour les contenus des attributs et des
éléments (nom, date, code postal, numéro de téléphone, url,
adresse mail, etc.) ;
• On ne peut pas contraindre la forme de ces contenus (entre 5 et 20
caractères, contenant un signe @, etc. ) ;
• Le langage utilisé pour définir une DTD n'est pas un langage XML !
Pour pallier ces manques, d'autres propositions ont été faites,
permettant elles aussi de spécifier un langage XML, citons les XML 73
Schema.
Exercice
• On veut encoder un arbre généalogique dans un format XML.
La racine est gene, elle a pour fils des éléments personne. On
autorise une généalogie vide.
• L'élément personne a un attribut facultatif id et un attribut
obligatoire genre pouvant prendre au choix les valeurs h et f. Il
a un fils nom, obligatoire, contenant uniquement du texte et
un fils parents, facultatif, vide. L'élément parents possède un
attribut ref, obligatoire.
• Écrire la DTD correspondant à cette description, et insérer-là
en tant que DTD interne d'un document XML décrivant la
généalogie suivante: Bob a deux parents, Marie et Henry.
Henry a deux parents, Jean et Françoise.
75
Exercice
• On souhaite écrire un livre en utilisant le formalisme XML .
• Le livre est structuré en sections (au moins 2), en chapitres (au
moins 2) et en paragraphes (au moins 2).
• Le livre doit contenir la liste des auteurs (avec nom et
prénom).
• Les auteurs possèdent les attributs nom et prenom .
• Le livre, les sections et les chapitres possèdent l'attribut titre.
• Tous les éléments doivent posséder un titre, sauf le
paragraphe qui contient du texte.
XML Schema
77
SCHEMAS XML
• XML Schéma est une recommandation du W3C de mai 2001
qui consiste à définir une méthodologie de description de
document XML autrement que par une DTD.
• L’approche cherche à résoudre plusieurs problèmes des DTD
dont l’épine dorsale est le fait qu’une DTD n’est pas un
document XML.
• Un XML Schéma est donc un document dont l’objectif est
similaire à une DTD mais sous forme d’un document XML.
78
SCHEMAS XML
Définition d’un xml schéma
• Un XML Schéma est un document XML qui utilise un ensemble de
balises définies au sein de la recommandation du W3C.
• L’exemple suivant illustre la mise en place d’un schema:
• Signifie:
• targetNamespace: Indique que les éléments définis par ce schéma
proviennent du namespace «http://www.example.com/name». 80
• xmlns Indique que le namespace par défaut est
«http://www.example.com/name» pour les éléments sans préfixe
SCHEMAS XML
• Les fichiers schémas XML portent par convention
l’extension « .xsd » et sont constitués de définitions
d’éléments XML.
• Chaque définition est associée à un type soit simple soit
complexe :
• Les types simples caractérisent les éléments XML qui ne
peuvent contenir que du texte (texte qui peut cependant
représenter plusieurs types de données comme des
nombres, des booléens, etc.)
• Les types complexes correspondent, quant à eux, à tous les
autres éléments XML (plus généralement des éléments qui
contiennent des sous-éléments). 81
SCHEMAS XML: Les types
simples
• Les types simples sont utilisés pour la définition des éléments
• Exemple
<element name="age" type="integer" / >
82
SCHEMAS XML: Les types
simples
• Ils existent plusieurs catégories de types simples:
• string: les chaines de caractères;
• decimal: les nombres décimaux ;
• integer: les nombres entiers
• boolean: les valeurs booléennes;
• date: les dates;
• time: les heures.
83
SCHEMAS XML: Les types
simples
Soit le document XML suivant:
<nom>Dupont</nom>
<age>25</age>
89
SCHEMAS XML:Les types
complexes
Exemple:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
91
SCHEMAS XML:Les types
complexes
• Exemple: L'élément "employee" peut avoir un type qui fait
référence au nom du type complexe à utiliser
<xsd:complexType name="personinfo">
<xsd:sequence>
<xsd:element name="firstname" type="xsd:string"/>
<xsd:element name="lastname" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
92
SCHEMAS XML:Les types
complexes
• Si on utilise cette méthode, plusieurs éléments peuvent se référer
au même type complexe, comme ceci:
<xsd:complexType name="personinfo">
<xsd:sequence>
<xsd:element name="firstname" type="xsd:string"/>
<xsd:element name="lastname" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
93
SCHEMAS XML: Les types
complexes
• La syntaxe pour définir un attribut est:
94
SCHEMAS XML:Les types
complexes
La syntaxe pour définir un attribut est:
• default signifie la valeur par défaut d’un attribut:
<xsd:element name="person">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="full_name" type="xsd:string"/>
<xsd:element name="child_name" type="xsd:string" maxOccurs="10"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
99
Diviser un SCHEMA XML
Exemple: décomposer l'identité d'un client:
Initialement:
103
4
SOAP
104
SOAP
• SOAP (Simple Object Access Protocol) est une
recommandation du W3C (http://www.w3.org/TR/SOAP/)
• Mettre en œuvre une application qui communique via
SOAP/HTTP avec d'autres applications correspond à une partie
de l'implantation de services Web.
• un message SOAP est un document XML appelé « enveloppe».
• La déclaration d'une enveloppe SOAP comporte la définition
d'un espace de noms dont l’URI précise la version supportée
de SOAP
105
SOAP
• SOAP est un protocole de transmission de messages
• Il définit un ensemble de règles pour structurer des messages
principalement pour exécuter des dialogues requêtes-réponse
de type RPC (Remote Procedure Call)
• Il n’est pas lié à un protocole particulier mais HTTP est
populaire
• Il n’est pas non plus lié à un système d’exploitation ni à un
langage de programmation, donc, les clients et serveurs de
ces dialogues peuvent tourner sur n’importe quelle
plateforme et être écrits dans n’importe quel langage du
moment qu’ils puissent formuler et comprendre des
messages SOAP 106
SOAP
• Principe de RPC:
• Un client a une description (ou une interface) de procédures
disponibles chez un serveur distant
• Le client invoque une procédure à distance
• Le serveur exécute localement cette procédure
• Le serveur renvoie au client le résultat de la procédure.
107
SOAP
Exemple
108
SOAP
Exemple
109
SOAP
Exemple
110
SOAP
Modèle de messages
• Message SOAP: transmission d’informations d’un émetteur
vers un récepteur
• Symétrie totale: si on utilise SOAP pour implémenter un
mécanisme question/réponse, les messages ont le même
format global
• Notion de routage: un message peut passer d’un émetteur à
son récepteur final en passant par des récepteurs
intermédiaires qui peuvent modifier le message
• Notion d’erreur: le format prévoit des messages spéciaux
correspondant à la description d’une erreur
112
SOAP
• L'enveloppe est constituée de
deux parties :
• l'en-tête optionnel (header)
• le corps du message (body)
• L’enveloppe peut aussi contenir
l’élément fault (erreur) qui est un
élément facultatif défini dans le
corps SOAP et qui est utilisé pour
reporter les erreurs.
113
SOAP
• Un message SOAP valide est un document XML bien formé
• Le prologue XML peut être présent, mais, doit contenir
seulement une déclaration XML
<?xml version="1.0" encoding="UTF-8"?>
spécifiant la version de XML et l’encodage des caractères du
message XML
114
SOAP
• On peut résumer cette structure par le code suivant :
<?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>
117
SOAP
• L'en-tête de message
• 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="http://www.w3schools.com/transaction/">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope> 118
SOAP
• L'en-tête de message
• Par défaut, l'application réceptrice d'un message SOAP peut ignorer
un élément de l'en-tête dans le cas par exemple où elle ne
comprend pas cet élément.
• L'application émettrice peut cependant forcer l'application
réceptrice à prendre en compte un élément en fixant l'attribut
mustUnderstand à vrai lors de la définition d'un élément de l'en-
tête.
• Si l'application réceptrice ne peut pas prendre en compte cet
élément obligatoire, alors celle-ci retournera un message d'erreur.
<soap:Header>
<sec:identity xmlns:sec="http://www.exemple.fr/security"
soap:mustUnderstand="true" >
<sec:principal>Dupont</sec:principal> 119
</sec:identity>
</soap:Header>
SOAP
Le corps du message
• Le corps d'un message SOAP est un ensemble d'éléments
XML. Il n'existe quasiment aucune restriction sur ce contenu
excepté sur le format des données qui doivent
impérativement respecter le modèle d'encodage précisé avec
la déclaration de l'enveloppe.
• L’une des caractéristiques les plus intéressantes du protocole
SOAP est sa capacité à gérer des paramètres de tout niveau de
complexité.
• Cette capacité est directement déduite du modèle des
schémas XML et consiste à traiter des types primitifs (entier,
chaîne de caractères etc..), des tableaux et structures et toute 120
combinaison de ceux-ci.
SOAP
Le corps du message
• Exemple 1:
<soap:Envelope xmlns:soap="http://www.w3c.org/2001/12/soap-envelope">
<soap:Body>
<personne>
<nom>Dupont</nom>
<prenom>Francois</prenom>
</personne>
</soap:Body>
</soap:Envelope>
121
SOAP
• Le corps du message
• Exemple 2: message 1
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body>
<m:GetPrice xmlns:m="http://www.w3schools.com/prices">
<m:Item>Apples</m:Item>
</m:GetPrice>
</soap:Body>
</soap:Envelope>
122
SOAP
• Le corps du message
• Exemple 2: message 2
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body>
<m:GetPriceResponse xmlns:m="http://www.w3schools.com/prices">
<m:Price>1.90</m:Price>
</m:GetPriceResponse>
</soap:Body>
</soap:Envelope>
123
SOAP
L'élément fault
• Afin de récupérer le plus grand nombre d'erreurs, l'approche SOAP
se base essentiellement sur le bon usage de la balise <soap:fault>
qui est contenue dans le corps SOAP.
• Cette balise est utilisée pour communiquer un problème qui a eu
lieu dans la tentative de réalisation de la demande adressée au
service Web.
• L'élément d'erreur est facultatif et figure uniquement dans les
messages de réponse, il ne peut y apparaître qu'une seule fois
• L'élément Fault permet de définir un message d'erreur qui pourrait
survenir lors du traitement d'un message SOAP. De ce fait, cet
élément est retourné à l'émetteur par le récepteur du message au
format SOAP. 124
SOAP
L'élément fault
• Cet élément comporte deux sous-éléments obligatoires :
• faultcode: cet élément précise la nature de l'erreur en indiquant un code
d'erreur; on distingue les codes d'erreur suivants :
• DataEncodingUnknown : le modèle d'encodage utilisé n'est pas
supporté,
• DTDNotSupported : le contenu du message SOAP est associé avec
DTD, ce qui n’est pas supporté,
• mustUnderstand : un élément obligatoire n'est pas reconnu,
• Receiver : le message n'a pu être traité du coté récepteur pour une
raison quelconque non liée au format du message,
• Sender : le message reçu est invalide et a donc été mal formé par
l'émetteur
• Server : indique qu'une erreur s'est produite sur le serveur, mais pas
avec le message lui-même.
• faultstring : cet élément précise un message de description pour
l'erreur. C’est la version lisible par l'homme de la balise faultcode. C'est 125
la traduction en langage naturel du code d'erreur
SOAP
L'élément fault
• Deux sous-élements optionnels de l'élément Fault offrent la
possibilité de compléter le message d'erreur :
• faultactor : indique le service qui a généré l'erreur. Cela est
important lorsqu'une chaîne de services a été utilisée pour
traiter la demande.;
• detail: un ensemble d'informations additionnelles de
nature quelconque
126
SOAP
L'élément fault
• Exemple
<soap:Body>
<soap:Fault>
<!-- Identifiant de l'erreur ? défini par SOAP-->
<faultcode>soap:Server</faultcode>
130
SOAP
Exemple message input
131
SOAP
Exemple message output
132
5
WSDL
133
Protocole WSDL
• Le langage WSDL permet de décrire des services Web à l'aide
du langage XML.
138
Protocole WSDL
Organisation d'un document WSDL
Le document WSDL peut être divisé en deux parties. Une partie pour
les descriptions abstraites, tandis que la deuxième contient les
descriptions concrètes.
1. Descriptions concrètes:
• La description concrète est composée des éléments qui sont
orientés vers le client pour le service physique.
• Les trois éléments concrets XML présents dans un WSDL sont :
• <wsdl:service>
• <wsdl:port>
• <wsdl:binding>
139
Protocole WSDL
Organisation d'un document WSDL
2. Descriptions abstraites:
• La description abstraite est composée des éléments qui sont
orientés vers la description des capacités du service Web.
• Ses éléments abstraits définissent les messages SOAP de façon
totalement indépendante de la plate-forme et de la langue.
• Cela facilite la définition d'un ensemble de services pouvant être
implémentés par différents sites Web.
• Les quatre éléments abstraits XML qui peuvent être définis dans un
WSDL sont :
• <wsdl:types>
• <wsdl:message>
• <wsdl:operation>
• <wsdl:portType> 140
Protocole WSDL
Types de données échangées (en entrée et en sortie)
<wsdl:definitions name="customerExemple"
targetNamespace="http://www.stevepotts.com/customer.wsdl"
xmlns:soap="http://www.schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://www.schemas.xmlsoap.org/wsdl/"
xmlns: tns=http://www.stevepotts.com/customer.xsd
xmlns:="http://www.stevepotts.com/customer.wsdl" >
…….
</wsdl:definitions>
142
Protocole WSDL: L'élément
types
• Contient les définitions de types utilisant un système de
typage (comme XSD).
• WSDL n'est pas liée exclusivement à un système de typage,
mais il utilise le XML schéma de la spécification W3C
• Décrit tous les types de données utilisés entre le client et le
serveur.
• Ces types sont l'équivalent en structures C++ ou Java à des
classes qui ne contiennent que des données et pas de
méthodes.
• Inutile si on se contente de types de base
• L’attribut targetNamespace qui définit un certain nombre
d'espaces de noms namespace auquel tous les noms déclarés
dans un élément du document WSDL appartiennent, ce qui 143
permet d'éviter les conflits de nommage.
Protocole WSDL: L'élément
types
• Exemple 1: Customer
<wsdl:types>
<xsd:schema targetNamespace ="http://www.stevepotts.com/customer.xsd"
xmlns: xsd = "http://www.w3.org/2001/XMLSchema">
<xsd:element name ="customer">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="customer ID" type="xsd:string“
></xsd:element>
<xsd:element name="lastname" type="xsd:string" ></xsd:element>
<xsd:element name="firstname" type="xsd:string" ></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element> 144
</xsd:schema>
</wsdl:types>
Protocole WSDL: L'élément
types
• Exemple 2: PersonType.wsdl
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="urn:PhoneBook"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd=http://www.w3.org/2001/XMLSchema
xmlns:tns="urn:PhoneBook >
<wsdl:types>
<xsd:schema targetNamespace="urn:PhoneBook">
<xsd:complexType name="Person">
<xsd:sequence>
<xsd:element name="first" type="xsd:string"/>
<xsd:element name="last" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType> 145
</xsd:schema>
</wsdl:types>
</wsdl:definitions>
Protocole WSDL: L'élément
message
• L'élément <message> comprend la section Messages.
• Chaque message possède un nom (attribut name) et est constitué
de parties
• Si on envisage les opérations comme des fonctions, alors un
élément <message> définit les paramètres pour cette fonction.
• Permet de définir les types de données utilisées lors de l’invocation
(et de la réponse) d’une opération
• Chaque élément enfant <part> de l'élément <message> correspond
à un paramètre et possède un attribut de nom et de type, tout
comme un paramètre de fonction a un nom et un type.
• Les paramètres d'entrée sont définis dans un élément <message>
unique et séparé des paramètres de sortie, qui se trouvent dans leur
propre élément <message> 146
Protocole WSDL: L'élément
message
• Exemple 1 (customer): représente les messages correspondant à
l'ajout d'un nouveau client à un service Web.
<wsdl:message name="addCustomer">
<wsdl:part name="customerInfo" element="tns:customer">
</wsdl:part>
</wsdl:message>
<wsdl:message name="confirmationResponse">
<wsdl:part name="response" element="xsd:integer">
</wsdl:part>
</wsdl:message>
• Le message addCustomer va ajouter un nouveau client (customer)
au service Web par l'envoi d'une instance de l'élément client que
nous avons défini dans l'élément <type> dans le targetnamespace
tns.
• Le nom d'un élément <message> de sortie se termine par Response. 147
Dans cet exemple, le message de réponse est
confirmationResponse, il renvoie au client un nombre entier lui
indiquant le succès de l'opération.
Protocole WSDL: L'élément
message
• Exemple 2 (Person):
<wsdl:message name="getPhoneNumberRequest">
<wsdl:part name="in0" type="tns:Person"/>
</wsdl:message> 148
</wsdl:definitions>
Protocole WSDL: L'élément
operation
• C’est une action particulière supportée par le service web
décrit
• L'élément <operation> est analogue à un appel de méthode
en Java
• Seulement trois messages sont autorisés dans une opération:
1. Input Message : définit les données que le service Web
s'attend à recevoir.
2. Output Message : définit les données que le service Web
prévoit d'envoyer en réponse.
3. Fault Message : définit les messages d'erreurs qui peuvent
être retournés par le service Web.
149
Protocole WSDL: L'élément
operation
• Plusieurs types d'opération peuvent être déclarés dans un
document WSDL :
1. Request/Response : le client envoie la demande, et le
service répond.
• Dans ce cas, une telle opération va successivement recevoir
un input (la requête en provenance de l’application cliente),
émettre un output (la réponse) et éventuellement renvoyer
une erreur.
<wsdl:operation name="opération">
<wsdl:input name="nom_optionnel"message="nom_message"/ >
<wsdl:output name="nom_optionnel"message="nom_message"/ >
<wsdl:fault name="nom_optionnel"message="nom_message"/ > 150
</wsdl:operation>
Protocole WSDL: L'élément
operation
• Plusieurs types d'opération peuvent être déclarés dans un
document WSDL :
2. Solicit/Response : le client reçoit un message du service et
répond au service
• Ce type implique que c’est le service cible qui requiert une
réponse ;il envoie un message et attend un message
• Pour ce type d’opération, le modèle d’utilisation est l’inverse
du précèdent, à savoir que l’on va tout d’abord émettre un
message puis recevoir une réponse.
<wsdl:operation name="nom opération">
<wsdl:output name="nom_optionnel"message="nom_message"/ >
<wsdl:input name="nom_optionnel"message="nom_message"/ > 151
<wsdl:fault name="nom_optionnel"message="nom_message"/ >
</wsdl:operation>
Protocole WSDL: L'élément
operation
• Plusieurs types d'opération peuvent être déclarés dans un
document WSDL :
3. One-way : un client envoie un message au service Web,
mais ne s'attend à aucune réponse
• Ce type d’opération signifie qu’aucune réponse n’est
retournée par le service cible. Cela signifie, du point de vue du
service Web, que l’opération qu’il offre n’aura ni output, ni
fault.
• Ainsi, la syntaxe générale de description d’une opération one-
way-opération sera :
<wsdl:operation name="opération_name">
<wsdl:input name="nom_optionnel" message="nom_message"/> 152
</wsdl:operation>
Protocole WSDL: L'élément
operation
• Plusieurs types d'opération peuvent être déclarés dans un
document WSDL :
4. Notification : un service Web envoie un message au client,
mais n'attend pas de réponse.
• Dans ce cas, le service envoie un message (généralement pour
notifier un événement).
• Ce type d’opération requiert uniquement l’émission d’un
message. La syntaxe suivante est alors obtenue :
154
Protocole WSDL: L'élément
portType
• Exemple 1 (cutomer):
160
Protocole WSDL: L'élément
binding
• soap:body : cet élément fournit des détails sur la façon dont
les messages d'entrée et de sortie doivent apparaître à
l'intérieur du corps de l’enveloppe SOAP ainsi que le
namespace de l'URL d'un service particulier.
Autrement, il précise le format des messages échangés par
une opération sous forme de contraintes sur le body du
format SOAP.
• L’attribut use précise l’interprétation des messages:
• si use=encoded (classique) : l’attribut encodingStyle précise la
représentation XML et chaque partie de message est typée par
un attribut type.
• si use=literal (style document) : parties de messages brutes.
161
Protocole WSDL: L'élément
binding
• Exemple 1 (customer):
<wsdl:binding name="newCustomerBinding" type="newCustomerPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http">
</soap:binding>
<wsdl:operation name="createNewCustomer">
<soap:operation
soapAction="http://wwww.stevepotts.com/createNewCustomer">
</soap:operation>
<wsdl:input>
<soap:body use="encoded"
namespace="http://wwww.stevepotts.com/Customer"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding">
</soap:body>
</wsdl:input>
<wsdl:output>
<soap:body use="encoded"
namespace="http://wwww.stevepotts.com/createNewCustomer"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding"> 162
</soap:body>
</wsdl:output>
</wsdl:operation>
Protocole WSDL: L'élément
binding
• Exemple 1 (customer):
• La première ligne de l'élément binding contient les attributs name et type.
• L'attribut name indique le nom identifiant la liaison binding, ici le nom de la
liaison est newCustomerBinding.
• L'attribut type permet d'établir la liaison avec un portType à travers le nom
du portType.
• Dans notre cas, cette liaison fait référence au portType
newCustomerPortType défini précédemment dans la section portType.
163
Protocole WSDL: L’élément
port
• Un port spécifie une adresse URL qui correspond à
l’implémentation du service par un fournisseur
• Définit un point d’accès (càd une URL par exemple) pour un
binding
• Un port définit un point d'accès individuel, en spécifiant une
adresse unique pour une liaison binding
• L'élément port contient deux attributs : l'attribut name et
l'attribut binding.
• L'attribut name donne un nom unique parmi tous les ports définis
dans le document WSDL.
• L’attribut binding donnant le nom du binding associé
• Un élément soap:address précise l’URI du port grâce à son 164
attribut location
Protocole WSDL: L'élément
port
• Exemple 1 (customer):
166
Protocole WSDL: L'élément
service
• Exemple 1 (customer):
<wsdl:service name="newCustomerService">
<documentation>Ajouter un nouveau client</documentation>
<wsdl:port binding="newCustomerBinding“ name="newCustomerPort">
<soap:address
location="http://www.stevepotts.com:1776/soap/servlet/rpcrouter">
</wsdl:port>
</wsdl:service>
• L'attribut name<wsdl:service name=[..]> donne un nom unique
parmi tous les services définis dans un document WSDL.
• Dans cet exemple, cet attribut a pour valeur newCustomerService.
• L'élément service contient le port newCustomerPort qui est associé
avec la liaison binding newCustomerBinding.
167
• NewCustomerService utilise donc le protocole SOAP, et est
accessible via l'adresse définie dans l'élément port.
Protocole WSDL: L'élément
service
• Exemple 2 (Person):
<?xml version="1.0"?>
<definitions name="cotation"
targetNamespace="http://exemple.com/cotation.wsdl"
xmlns:tns="http://exemple.com/cotation.wsdl"
xmlns:xsd1="http://exemple.com/cotation.xsd"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
169
Exemple Complet
L’élément Types
<types>
<schema targetNamespace="http://example.com/cotation.xsd"
xmlns="http://www.w3.org/2000/10/XMLSchema">
<element name="demandeCotationAction">
<complexType>
<sequence>
<element name="action" type="string"/>
</sequence>
</complexType>
</element>
<element name="cotationAction">
<complexType>
<sequence>
<element name="cotation" type="float"/>
</sequence>
</complexType>
</element>
</schema> 170
</types>
Exemple Complet
Interprétation de l’élément Types
• Dans cet exemple, on commence par spécifier les types utilisés grâce à
un schéma W3C.
• Ce schéma définit les éléments demandeCotationAction et
cotationAction dans l’espace de nom http://example.com/cotation.xsd
(qu’on a nommé xsd1 dans la partie définitions)
• En effet, toutes les références à ces éléments (demandeCotationAction
et cotationAction) devront être qualifiées (pour lever toute ambiguïté
dans le cas de déclarations multiples) d’où la déclaration d’un préfixe
xsd1
• Les types string et float (sans préfixe) se réfèrent au namespace par
défaut est «http://www.w3.org/2000/10/XMLSchema» qui représente
la recommandation W3C du XML Schéma
• Ils existent deux types dans cette partie:
1. demandeCotationAction qui contient un élément fils action de type
chaine de caractères
2. cotationAction qui contient un élément fils cotation de type réel 171
Exemple Complet
L’élément message
<message name="demandeCotation">
<part name="body" element="xsd1:demandeCotationAction"/>
</message>
<message name="resultatCotation">
<part name="body" element="xsd1:CotationAction"/>
</message>
Interprétation de l’élément message
• Nous avons deux messages, demandeCotation et resultatCotation,
reliés aux éléments précédents.
• Chaque élément <part> correspond à un paramètre et possède un
attribut de nom et de type
• Le message demandeCotation possède un paramètre qui s’appelle body
de type demandeCotationAction (définit dans la partie types)
• Le message resultatCotation possède un paramètre qui s’appelle body
de type CotationAction (définit dans la partie types) 172
Exemple Complet
L’élément portType
<portType name="actionPortType">
<operation name="cotation">
<input message="tns:demandeCotation"/>
<output message="tns:resultatCotation"/>
</operation>
</portType>
Interprétation de l’élément portType
• Opération de type Request/Response. Le message requête suit le
modèle demandeCotation défini dans la partie message et le
message réponse suit le modèle resultatCotation défini dans la
partie message.
• Comme nous avons un attribut targetNamespace à la racine, les
définitions globales passent dans l’espace de nom associé et le type
de port actionPortType doit donc faire des références aux messages
précédents par un préfixe tns. 173
Exemple Complet
L’élément binding
<binding name="cotationBinding" type="tns:actionPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="cotation">
<soap:operation
soapAction="http://exemple.com/demandeCotation"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding> 174
Exemple Complet
Interprétation de l’élément binding
• Le même raisonnement pour la liaison (binding), qui avec
l’attribut type fait référence au type de port actionPortType
(tns).
• L’attribut transport indique par quel moyen les données
circulent (HTTP) alors que l’attribut style indique comment les
messages sont exploités: sous la forme de document.
• Pour l’opération cotation du portType actionPortType, on
indique sa liaison avec le protocole SOAP
175
Exemple Complet
L’élément service
<service name="actionService">
<documentation>Cotation d’une action</documentation>
<port name="actionPort" binding="tns:cotationBinding">
<soap:address location="http://exemple.com/action"/>
</port>
</service>
</definitions>
Interprétation de l’élément service
• Il reste enfin à définir le service avec une adresse d’accès via SOAP
http:// exemple.com/action en se référant à la liaison définie dans la
partie binding (cotationBinding) 176
6
UDDI
177
UDDI
• UDDI (Universal Description, Discovery and Integration,
http://uddi.xml.org/ ) est une sorte de registre XML pour publier et
utiliser des services web sur Internet. L’idée est que, puisque
beaucoup de services sont utiles sur Internet, comme un service de
vérification des numéros de carte de crédit, des sociétés pourraient
proposer leur service à d’autres sociétés clientes.
• L'annuaire des services UDDI est un standard pour la publication et
la découverte des informations sur les services Web.
• La spécification UDDI est une initiative lancée par ARIBA, Microsoft
et IBM.
• Cette spécification n'est pas gérée par le W3C mais par le groupe
OASIS.
• La spécification UDDI vise à créer une plate-forme indépendante, un
espace de travail (framework) ouvert pour la description, la
découverte et l'intégration des services des entreprises. 178
UDDI
• L'annuaire UDDI se concentre sur le processus de découverte
de l'architecture orientée services (SOA), et utilise des
technologies standards telles que XML, SOAP et WSDL qui
permettent de simplifier la collaboration entre partenaires
dans le cadre des échanges commerciaux.
• L'accès au référentiel s'effectue de différentes manières.
• Les pages blanches comprennent la liste des entreprises qui ont
publié des services ainsi que des informations associées à ces
dernières (coordonnées, description de l'entreprise,
identifiants...).
• Les pages jaunes il s’agit d’une répartition des services en
catégories.
• Les pages vertes fournissent des informations techniques précises 179
sur les services fournis.
UDDI
• Les entreprises publient les descriptions de leurs services Web
en UDDI, sous la forme de fichiers WSDL.
• Ainsi, les clients peuvent plus facilement rechercher les
services Web dont ils ont besoin en interrogeant le registre
UDDI.
• Les clients UDDI interrogent les serveurs (les sites opérateurs)
UDDI en envoyant des requêtes formatées en SOAP
• Lorsqu'un client trouve une description de service Web qui lui
convient, il télécharge son fichier WSDL depuis le registre
UDDI
• Ensuite, à partir des informations inscrites dans le fichier
WSDL, notamment la référence vers le service Web, le client
peut invoquer le service Web et lui demande d'exécuter
180
certaines de ses fonctionnalités.
UDDI
181