schémas xml, xpath, et...
Post on 21-Jun-2020
6 Views
Preview:
TRANSCRIPT
Scheacutemas XML XPath et autres
lundi 3 octobre 2011
2
Plan de ce cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
3
ltxml version=10 standalone=nogt ltxml-stylesheet type=textcss href=stylecssgtltDOCTYPE root SYSTEM definitiondtd [ ltELEMENT root (title entry)gt ltENTITY court tititatotugt ltENTITY file SYSTEM filexmlgt]gt
lt-- XML Content --gt ltrootgt lttitle id=a15gtmodegravelelttitlegt ltentrygt122 amplt 124ltentrygt ltentrygtil mrsquoa dit ampcourtltentrygt
ltrootgt
Prologue
Element dudocument
deacuteclaration
Info Traitement
entiteacutes
DTD
En Reacutesumeacute
lundi 3 octobre 2011
4
Information de traitementlttarget processing_instruction_datagt
permet de transmettre des informations agrave une application particuliegravere qui peut lire le document (plutocirct que drsquoutiliser les commentaires)minus par exemple pour indiquer au butineur comment afficher le
document ltxml-stylesheet type=textcss href=events4cssgt
minus Ou pour inclure du code ad-hoc hellip ltphp mysql_connect(wwwdborg hellip namepwd) $result = hellip gt
Une information de traitement dont la cible commence par le mot clef xml- est reacuteserveacutee agrave une utilisation par une extension de XML
lundi 3 octobre 2011
5
Attributs ou eacuteleacutements On doit souvent se poser la question de repreacutesenter
une information par un eacuteleacutement ou par un attribut On peut utiliser un eacuteleacutement siminus la donneacutee est structureacuteeminus la donneacutee contient plusieurs lignesminus la donneacutee change freacutequemment
On peut utiliser un attribut siminus la donneacutee est simple petite et change rarementminus il y a un faible nombre de valeurs possible
lundi 3 octobre 2011
6
Vocabulaires XML successeur de HTML (XHTML) formules matheacutematiques (MathML) preacutesentation multimeacutedia avec animations (SMIL) description du contenus des ressources (RDF) modeacutelisation des structures chimiques (CML) commerce eacutelectronique (ebXML cXML ) service vocaux (voiceXML) appareils avec eacutecrans reacuteduits eg WAP phones (WML) images 2D vectorielles (SVG) (voir xmlcoverpagesorgxmlApplicationshtml)
lundi 3 octobre 2011
7
Plan de ce cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Codage des caractegraveres
lundi 3 octobre 2011
9
UCS un jeu de caractegraveres universel
La norme ISO 10646 en accord avec lrsquoUnicode deacutefinit un jeu de caractegraveres universel lrsquoUCS (laquo Universal Character Set raquo) qui permet de repreacutesenter les caractegraveres de toutes les langues actuelles mais aussi anciennes
Chaque caractegravere UCS est identifieacute par un code qui est un nombre repreacutesenteacute sur 4 octets (232 - 1 positions)
Les 65 536 premiegraveres positions de lUCS (c-agrave-d les deux octets de poids faible) forment le BMP (laquo Basic Multilingual Plane raquo) et codent les jeux de caractegraveres les plus courants (latin grec arabe etc) Drsquoougrave deux codages bull UCS-4 totaliteacute de lrsquoUCS
bull UCS-2 BMP
lundi 3 octobre 2011
10
Codages de transformation
Plusieurs codages de transformation ont eacuteteacute deacutefinis bull UTF-8 permet de coder les caractegraveres de lrsquoUCS en longueur variable
en codant sur un octet les caractegraveres ASCII qui sont les plus freacutequentsbull UTF-16 permet drsquoinclure des caractegraveres de lrsquoUCS-4 dans une chaicircne
codeacutee en UCS-2
lundi 3 octobre 2011
11
Deacuteclaration du codage
Toutes les applications XML doivent accepter les codages UTF-8 et UTF-16
Drsquoautres codages peuvent ecirctre accepteacutes tels que le codage ISO-8859-1 (laquo ISO-Latin raquo)
Le codage des caractegraveres drsquoune entiteacute doit ecirctre deacuteclareacute dans la deacuteclaration XML de cette entiteacute comme valeur de lrsquoattribut laquo encoding raquo Srsquoil ne lrsquoest pas lrsquoapplication consideacuterera ecirctre en preacutesence drsquoun codage UTF-8
lundi 3 octobre 2011
12
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Espace de nomsbull Lrsquoimportation drsquoeacuteleacutements ou drsquoattributs contenus dans des entiteacutes
externes peut entraicircner des conflits de noms Ces conflits peuvent ecirctre eacuteviteacutes en deacutefinissant des espaces de nomsbull Un espace de noms est identifieacute de faccedilon unique par une URI
(Uniform Resource Identifier)bull Pour obtenir des noms uniques il suffit de qualifier chaque nom par
lrsquoURI de lrsquoespace de noms dont il provient Le nom obtenu est appeleacute nom eacutetendubull Pour simplifier lrsquoeacutecriture des noms eacutetendus on associe un preacutefixe (un
nom XML) agrave chaque espace de nomsbull ltxml version=10 encoding=ISO-8859-1 gt
ltfactfacture xmlnsfact=httpwwwdomainecomfacturegt ltfactmontantgt10$ltfactmontantgt ltfactnomgtJeanltfactnomgt ltfactfacturegt
lundi 3 octobre 2011
Deacuteclaration drsquoun espace de noms
Pour deacuteclarer un espace de noms (et son preacutefixe associeacute) dans le contexte drsquoun eacuteleacutement il suffit drsquoinseacuterer la deacuteclaration suivante dans la balise ouvrante xmlnspreacutefixe=URI de lespace de noms On peut deacuteclarer un espace de noms par deacutefaut par lrsquoattribut xmlns=URI de lespace de noms
ou annuler toute deacuteclaration par deacutefaut xmlns= La deacuteclaration drsquoun espace de noms est visible dans lrsquoeacuteleacutement la contenant et dans tous ses descendants agrave moins qursquoun nouvel espace de mecircme preacutefixe ou bien un nouvel espace par deacutefaut ne soit deacuteclareacute
lundi 3 octobre 2011
Noms qualifieacutes
Tout nom drsquoeacuteleacutement ou tout nom drsquoattribut qui nrsquoest pas une deacuteclaration drsquoespace de noms est un nom qualifieacute ayant lrsquoune des deux formes suivantespreacutefixenom-local
nom-local Un nom qualifieacute preacutefixeacute appartient agrave lrsquoespace de noms associeacute agrave
ce preacutefixe dans lrsquoeacuteleacutement englobant le plus imbriqueacute Un nom qualifieacute non preacutefixeacute
appartient agrave lrsquoespace de noms par deacutefaut deacuteclareacute dans le plus imbriqueacute des eacuteleacutements contenant ce nom srsquoil en existe un
nrsquoappartient pas agrave un espace de noms srsquoil nrsquoexiste pas de deacuteclaration drsquoespace de noms par deacutefaut dans les eacuteleacutements le contenant
lundi 3 octobre 2011
Exemple drsquoespace de noms
Supposons que lrsquoURI defbiblioxml contienne une DTD pour la description de reacutefeacuterences bibliographiques on pourrait rajouter des reacutefeacuterences dans un commentaire de la maniegravere suivante
lta xmlnsb=httpwwww3orgbiblioxmlgt ltagtltcomment xmlnsbiblio=defbiblioxmlgt ltbibliotitregtWhy P = NPltbibliotitregt ltauteurgtJeanltauteurgt
ltcommentgt
lundi 3 octobre 2011
17
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
18
XML Scheacutema
Un scheacutema dun document deacutefinitminus les eacuteleacutements possibles dans le documentminus les attributs associeacutes agrave ces eacuteleacutementsminus la structure du document minus les types de donneacutees
Le scheacutema est speacutecifieacute en XMLminus pas de nouveau langageminus balisage de deacuteclarationminus espaces de nom speacutecifiques xsd ou xs
Preacutesente de nombreux avantagesminus structures de donneacutees avec types de donneacutees minus extensibiliteacute par heacuteritage et ouvertureminus analysable agrave partir dun parseur XML standard
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
2
Plan de ce cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
3
ltxml version=10 standalone=nogt ltxml-stylesheet type=textcss href=stylecssgtltDOCTYPE root SYSTEM definitiondtd [ ltELEMENT root (title entry)gt ltENTITY court tititatotugt ltENTITY file SYSTEM filexmlgt]gt
lt-- XML Content --gt ltrootgt lttitle id=a15gtmodegravelelttitlegt ltentrygt122 amplt 124ltentrygt ltentrygtil mrsquoa dit ampcourtltentrygt
ltrootgt
Prologue
Element dudocument
deacuteclaration
Info Traitement
entiteacutes
DTD
En Reacutesumeacute
lundi 3 octobre 2011
4
Information de traitementlttarget processing_instruction_datagt
permet de transmettre des informations agrave une application particuliegravere qui peut lire le document (plutocirct que drsquoutiliser les commentaires)minus par exemple pour indiquer au butineur comment afficher le
document ltxml-stylesheet type=textcss href=events4cssgt
minus Ou pour inclure du code ad-hoc hellip ltphp mysql_connect(wwwdborg hellip namepwd) $result = hellip gt
Une information de traitement dont la cible commence par le mot clef xml- est reacuteserveacutee agrave une utilisation par une extension de XML
lundi 3 octobre 2011
5
Attributs ou eacuteleacutements On doit souvent se poser la question de repreacutesenter
une information par un eacuteleacutement ou par un attribut On peut utiliser un eacuteleacutement siminus la donneacutee est structureacuteeminus la donneacutee contient plusieurs lignesminus la donneacutee change freacutequemment
On peut utiliser un attribut siminus la donneacutee est simple petite et change rarementminus il y a un faible nombre de valeurs possible
lundi 3 octobre 2011
6
Vocabulaires XML successeur de HTML (XHTML) formules matheacutematiques (MathML) preacutesentation multimeacutedia avec animations (SMIL) description du contenus des ressources (RDF) modeacutelisation des structures chimiques (CML) commerce eacutelectronique (ebXML cXML ) service vocaux (voiceXML) appareils avec eacutecrans reacuteduits eg WAP phones (WML) images 2D vectorielles (SVG) (voir xmlcoverpagesorgxmlApplicationshtml)
lundi 3 octobre 2011
7
Plan de ce cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Codage des caractegraveres
lundi 3 octobre 2011
9
UCS un jeu de caractegraveres universel
La norme ISO 10646 en accord avec lrsquoUnicode deacutefinit un jeu de caractegraveres universel lrsquoUCS (laquo Universal Character Set raquo) qui permet de repreacutesenter les caractegraveres de toutes les langues actuelles mais aussi anciennes
Chaque caractegravere UCS est identifieacute par un code qui est un nombre repreacutesenteacute sur 4 octets (232 - 1 positions)
Les 65 536 premiegraveres positions de lUCS (c-agrave-d les deux octets de poids faible) forment le BMP (laquo Basic Multilingual Plane raquo) et codent les jeux de caractegraveres les plus courants (latin grec arabe etc) Drsquoougrave deux codages bull UCS-4 totaliteacute de lrsquoUCS
bull UCS-2 BMP
lundi 3 octobre 2011
10
Codages de transformation
Plusieurs codages de transformation ont eacuteteacute deacutefinis bull UTF-8 permet de coder les caractegraveres de lrsquoUCS en longueur variable
en codant sur un octet les caractegraveres ASCII qui sont les plus freacutequentsbull UTF-16 permet drsquoinclure des caractegraveres de lrsquoUCS-4 dans une chaicircne
codeacutee en UCS-2
lundi 3 octobre 2011
11
Deacuteclaration du codage
Toutes les applications XML doivent accepter les codages UTF-8 et UTF-16
Drsquoautres codages peuvent ecirctre accepteacutes tels que le codage ISO-8859-1 (laquo ISO-Latin raquo)
Le codage des caractegraveres drsquoune entiteacute doit ecirctre deacuteclareacute dans la deacuteclaration XML de cette entiteacute comme valeur de lrsquoattribut laquo encoding raquo Srsquoil ne lrsquoest pas lrsquoapplication consideacuterera ecirctre en preacutesence drsquoun codage UTF-8
lundi 3 octobre 2011
12
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Espace de nomsbull Lrsquoimportation drsquoeacuteleacutements ou drsquoattributs contenus dans des entiteacutes
externes peut entraicircner des conflits de noms Ces conflits peuvent ecirctre eacuteviteacutes en deacutefinissant des espaces de nomsbull Un espace de noms est identifieacute de faccedilon unique par une URI
(Uniform Resource Identifier)bull Pour obtenir des noms uniques il suffit de qualifier chaque nom par
lrsquoURI de lrsquoespace de noms dont il provient Le nom obtenu est appeleacute nom eacutetendubull Pour simplifier lrsquoeacutecriture des noms eacutetendus on associe un preacutefixe (un
nom XML) agrave chaque espace de nomsbull ltxml version=10 encoding=ISO-8859-1 gt
ltfactfacture xmlnsfact=httpwwwdomainecomfacturegt ltfactmontantgt10$ltfactmontantgt ltfactnomgtJeanltfactnomgt ltfactfacturegt
lundi 3 octobre 2011
Deacuteclaration drsquoun espace de noms
Pour deacuteclarer un espace de noms (et son preacutefixe associeacute) dans le contexte drsquoun eacuteleacutement il suffit drsquoinseacuterer la deacuteclaration suivante dans la balise ouvrante xmlnspreacutefixe=URI de lespace de noms On peut deacuteclarer un espace de noms par deacutefaut par lrsquoattribut xmlns=URI de lespace de noms
ou annuler toute deacuteclaration par deacutefaut xmlns= La deacuteclaration drsquoun espace de noms est visible dans lrsquoeacuteleacutement la contenant et dans tous ses descendants agrave moins qursquoun nouvel espace de mecircme preacutefixe ou bien un nouvel espace par deacutefaut ne soit deacuteclareacute
lundi 3 octobre 2011
Noms qualifieacutes
Tout nom drsquoeacuteleacutement ou tout nom drsquoattribut qui nrsquoest pas une deacuteclaration drsquoespace de noms est un nom qualifieacute ayant lrsquoune des deux formes suivantespreacutefixenom-local
nom-local Un nom qualifieacute preacutefixeacute appartient agrave lrsquoespace de noms associeacute agrave
ce preacutefixe dans lrsquoeacuteleacutement englobant le plus imbriqueacute Un nom qualifieacute non preacutefixeacute
appartient agrave lrsquoespace de noms par deacutefaut deacuteclareacute dans le plus imbriqueacute des eacuteleacutements contenant ce nom srsquoil en existe un
nrsquoappartient pas agrave un espace de noms srsquoil nrsquoexiste pas de deacuteclaration drsquoespace de noms par deacutefaut dans les eacuteleacutements le contenant
lundi 3 octobre 2011
Exemple drsquoespace de noms
Supposons que lrsquoURI defbiblioxml contienne une DTD pour la description de reacutefeacuterences bibliographiques on pourrait rajouter des reacutefeacuterences dans un commentaire de la maniegravere suivante
lta xmlnsb=httpwwww3orgbiblioxmlgt ltagtltcomment xmlnsbiblio=defbiblioxmlgt ltbibliotitregtWhy P = NPltbibliotitregt ltauteurgtJeanltauteurgt
ltcommentgt
lundi 3 octobre 2011
17
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
18
XML Scheacutema
Un scheacutema dun document deacutefinitminus les eacuteleacutements possibles dans le documentminus les attributs associeacutes agrave ces eacuteleacutementsminus la structure du document minus les types de donneacutees
Le scheacutema est speacutecifieacute en XMLminus pas de nouveau langageminus balisage de deacuteclarationminus espaces de nom speacutecifiques xsd ou xs
Preacutesente de nombreux avantagesminus structures de donneacutees avec types de donneacutees minus extensibiliteacute par heacuteritage et ouvertureminus analysable agrave partir dun parseur XML standard
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
3
ltxml version=10 standalone=nogt ltxml-stylesheet type=textcss href=stylecssgtltDOCTYPE root SYSTEM definitiondtd [ ltELEMENT root (title entry)gt ltENTITY court tititatotugt ltENTITY file SYSTEM filexmlgt]gt
lt-- XML Content --gt ltrootgt lttitle id=a15gtmodegravelelttitlegt ltentrygt122 amplt 124ltentrygt ltentrygtil mrsquoa dit ampcourtltentrygt
ltrootgt
Prologue
Element dudocument
deacuteclaration
Info Traitement
entiteacutes
DTD
En Reacutesumeacute
lundi 3 octobre 2011
4
Information de traitementlttarget processing_instruction_datagt
permet de transmettre des informations agrave une application particuliegravere qui peut lire le document (plutocirct que drsquoutiliser les commentaires)minus par exemple pour indiquer au butineur comment afficher le
document ltxml-stylesheet type=textcss href=events4cssgt
minus Ou pour inclure du code ad-hoc hellip ltphp mysql_connect(wwwdborg hellip namepwd) $result = hellip gt
Une information de traitement dont la cible commence par le mot clef xml- est reacuteserveacutee agrave une utilisation par une extension de XML
lundi 3 octobre 2011
5
Attributs ou eacuteleacutements On doit souvent se poser la question de repreacutesenter
une information par un eacuteleacutement ou par un attribut On peut utiliser un eacuteleacutement siminus la donneacutee est structureacuteeminus la donneacutee contient plusieurs lignesminus la donneacutee change freacutequemment
On peut utiliser un attribut siminus la donneacutee est simple petite et change rarementminus il y a un faible nombre de valeurs possible
lundi 3 octobre 2011
6
Vocabulaires XML successeur de HTML (XHTML) formules matheacutematiques (MathML) preacutesentation multimeacutedia avec animations (SMIL) description du contenus des ressources (RDF) modeacutelisation des structures chimiques (CML) commerce eacutelectronique (ebXML cXML ) service vocaux (voiceXML) appareils avec eacutecrans reacuteduits eg WAP phones (WML) images 2D vectorielles (SVG) (voir xmlcoverpagesorgxmlApplicationshtml)
lundi 3 octobre 2011
7
Plan de ce cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Codage des caractegraveres
lundi 3 octobre 2011
9
UCS un jeu de caractegraveres universel
La norme ISO 10646 en accord avec lrsquoUnicode deacutefinit un jeu de caractegraveres universel lrsquoUCS (laquo Universal Character Set raquo) qui permet de repreacutesenter les caractegraveres de toutes les langues actuelles mais aussi anciennes
Chaque caractegravere UCS est identifieacute par un code qui est un nombre repreacutesenteacute sur 4 octets (232 - 1 positions)
Les 65 536 premiegraveres positions de lUCS (c-agrave-d les deux octets de poids faible) forment le BMP (laquo Basic Multilingual Plane raquo) et codent les jeux de caractegraveres les plus courants (latin grec arabe etc) Drsquoougrave deux codages bull UCS-4 totaliteacute de lrsquoUCS
bull UCS-2 BMP
lundi 3 octobre 2011
10
Codages de transformation
Plusieurs codages de transformation ont eacuteteacute deacutefinis bull UTF-8 permet de coder les caractegraveres de lrsquoUCS en longueur variable
en codant sur un octet les caractegraveres ASCII qui sont les plus freacutequentsbull UTF-16 permet drsquoinclure des caractegraveres de lrsquoUCS-4 dans une chaicircne
codeacutee en UCS-2
lundi 3 octobre 2011
11
Deacuteclaration du codage
Toutes les applications XML doivent accepter les codages UTF-8 et UTF-16
Drsquoautres codages peuvent ecirctre accepteacutes tels que le codage ISO-8859-1 (laquo ISO-Latin raquo)
Le codage des caractegraveres drsquoune entiteacute doit ecirctre deacuteclareacute dans la deacuteclaration XML de cette entiteacute comme valeur de lrsquoattribut laquo encoding raquo Srsquoil ne lrsquoest pas lrsquoapplication consideacuterera ecirctre en preacutesence drsquoun codage UTF-8
lundi 3 octobre 2011
12
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Espace de nomsbull Lrsquoimportation drsquoeacuteleacutements ou drsquoattributs contenus dans des entiteacutes
externes peut entraicircner des conflits de noms Ces conflits peuvent ecirctre eacuteviteacutes en deacutefinissant des espaces de nomsbull Un espace de noms est identifieacute de faccedilon unique par une URI
(Uniform Resource Identifier)bull Pour obtenir des noms uniques il suffit de qualifier chaque nom par
lrsquoURI de lrsquoespace de noms dont il provient Le nom obtenu est appeleacute nom eacutetendubull Pour simplifier lrsquoeacutecriture des noms eacutetendus on associe un preacutefixe (un
nom XML) agrave chaque espace de nomsbull ltxml version=10 encoding=ISO-8859-1 gt
ltfactfacture xmlnsfact=httpwwwdomainecomfacturegt ltfactmontantgt10$ltfactmontantgt ltfactnomgtJeanltfactnomgt ltfactfacturegt
lundi 3 octobre 2011
Deacuteclaration drsquoun espace de noms
Pour deacuteclarer un espace de noms (et son preacutefixe associeacute) dans le contexte drsquoun eacuteleacutement il suffit drsquoinseacuterer la deacuteclaration suivante dans la balise ouvrante xmlnspreacutefixe=URI de lespace de noms On peut deacuteclarer un espace de noms par deacutefaut par lrsquoattribut xmlns=URI de lespace de noms
ou annuler toute deacuteclaration par deacutefaut xmlns= La deacuteclaration drsquoun espace de noms est visible dans lrsquoeacuteleacutement la contenant et dans tous ses descendants agrave moins qursquoun nouvel espace de mecircme preacutefixe ou bien un nouvel espace par deacutefaut ne soit deacuteclareacute
lundi 3 octobre 2011
Noms qualifieacutes
Tout nom drsquoeacuteleacutement ou tout nom drsquoattribut qui nrsquoest pas une deacuteclaration drsquoespace de noms est un nom qualifieacute ayant lrsquoune des deux formes suivantespreacutefixenom-local
nom-local Un nom qualifieacute preacutefixeacute appartient agrave lrsquoespace de noms associeacute agrave
ce preacutefixe dans lrsquoeacuteleacutement englobant le plus imbriqueacute Un nom qualifieacute non preacutefixeacute
appartient agrave lrsquoespace de noms par deacutefaut deacuteclareacute dans le plus imbriqueacute des eacuteleacutements contenant ce nom srsquoil en existe un
nrsquoappartient pas agrave un espace de noms srsquoil nrsquoexiste pas de deacuteclaration drsquoespace de noms par deacutefaut dans les eacuteleacutements le contenant
lundi 3 octobre 2011
Exemple drsquoespace de noms
Supposons que lrsquoURI defbiblioxml contienne une DTD pour la description de reacutefeacuterences bibliographiques on pourrait rajouter des reacutefeacuterences dans un commentaire de la maniegravere suivante
lta xmlnsb=httpwwww3orgbiblioxmlgt ltagtltcomment xmlnsbiblio=defbiblioxmlgt ltbibliotitregtWhy P = NPltbibliotitregt ltauteurgtJeanltauteurgt
ltcommentgt
lundi 3 octobre 2011
17
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
18
XML Scheacutema
Un scheacutema dun document deacutefinitminus les eacuteleacutements possibles dans le documentminus les attributs associeacutes agrave ces eacuteleacutementsminus la structure du document minus les types de donneacutees
Le scheacutema est speacutecifieacute en XMLminus pas de nouveau langageminus balisage de deacuteclarationminus espaces de nom speacutecifiques xsd ou xs
Preacutesente de nombreux avantagesminus structures de donneacutees avec types de donneacutees minus extensibiliteacute par heacuteritage et ouvertureminus analysable agrave partir dun parseur XML standard
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
4
Information de traitementlttarget processing_instruction_datagt
permet de transmettre des informations agrave une application particuliegravere qui peut lire le document (plutocirct que drsquoutiliser les commentaires)minus par exemple pour indiquer au butineur comment afficher le
document ltxml-stylesheet type=textcss href=events4cssgt
minus Ou pour inclure du code ad-hoc hellip ltphp mysql_connect(wwwdborg hellip namepwd) $result = hellip gt
Une information de traitement dont la cible commence par le mot clef xml- est reacuteserveacutee agrave une utilisation par une extension de XML
lundi 3 octobre 2011
5
Attributs ou eacuteleacutements On doit souvent se poser la question de repreacutesenter
une information par un eacuteleacutement ou par un attribut On peut utiliser un eacuteleacutement siminus la donneacutee est structureacuteeminus la donneacutee contient plusieurs lignesminus la donneacutee change freacutequemment
On peut utiliser un attribut siminus la donneacutee est simple petite et change rarementminus il y a un faible nombre de valeurs possible
lundi 3 octobre 2011
6
Vocabulaires XML successeur de HTML (XHTML) formules matheacutematiques (MathML) preacutesentation multimeacutedia avec animations (SMIL) description du contenus des ressources (RDF) modeacutelisation des structures chimiques (CML) commerce eacutelectronique (ebXML cXML ) service vocaux (voiceXML) appareils avec eacutecrans reacuteduits eg WAP phones (WML) images 2D vectorielles (SVG) (voir xmlcoverpagesorgxmlApplicationshtml)
lundi 3 octobre 2011
7
Plan de ce cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Codage des caractegraveres
lundi 3 octobre 2011
9
UCS un jeu de caractegraveres universel
La norme ISO 10646 en accord avec lrsquoUnicode deacutefinit un jeu de caractegraveres universel lrsquoUCS (laquo Universal Character Set raquo) qui permet de repreacutesenter les caractegraveres de toutes les langues actuelles mais aussi anciennes
Chaque caractegravere UCS est identifieacute par un code qui est un nombre repreacutesenteacute sur 4 octets (232 - 1 positions)
Les 65 536 premiegraveres positions de lUCS (c-agrave-d les deux octets de poids faible) forment le BMP (laquo Basic Multilingual Plane raquo) et codent les jeux de caractegraveres les plus courants (latin grec arabe etc) Drsquoougrave deux codages bull UCS-4 totaliteacute de lrsquoUCS
bull UCS-2 BMP
lundi 3 octobre 2011
10
Codages de transformation
Plusieurs codages de transformation ont eacuteteacute deacutefinis bull UTF-8 permet de coder les caractegraveres de lrsquoUCS en longueur variable
en codant sur un octet les caractegraveres ASCII qui sont les plus freacutequentsbull UTF-16 permet drsquoinclure des caractegraveres de lrsquoUCS-4 dans une chaicircne
codeacutee en UCS-2
lundi 3 octobre 2011
11
Deacuteclaration du codage
Toutes les applications XML doivent accepter les codages UTF-8 et UTF-16
Drsquoautres codages peuvent ecirctre accepteacutes tels que le codage ISO-8859-1 (laquo ISO-Latin raquo)
Le codage des caractegraveres drsquoune entiteacute doit ecirctre deacuteclareacute dans la deacuteclaration XML de cette entiteacute comme valeur de lrsquoattribut laquo encoding raquo Srsquoil ne lrsquoest pas lrsquoapplication consideacuterera ecirctre en preacutesence drsquoun codage UTF-8
lundi 3 octobre 2011
12
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Espace de nomsbull Lrsquoimportation drsquoeacuteleacutements ou drsquoattributs contenus dans des entiteacutes
externes peut entraicircner des conflits de noms Ces conflits peuvent ecirctre eacuteviteacutes en deacutefinissant des espaces de nomsbull Un espace de noms est identifieacute de faccedilon unique par une URI
(Uniform Resource Identifier)bull Pour obtenir des noms uniques il suffit de qualifier chaque nom par
lrsquoURI de lrsquoespace de noms dont il provient Le nom obtenu est appeleacute nom eacutetendubull Pour simplifier lrsquoeacutecriture des noms eacutetendus on associe un preacutefixe (un
nom XML) agrave chaque espace de nomsbull ltxml version=10 encoding=ISO-8859-1 gt
ltfactfacture xmlnsfact=httpwwwdomainecomfacturegt ltfactmontantgt10$ltfactmontantgt ltfactnomgtJeanltfactnomgt ltfactfacturegt
lundi 3 octobre 2011
Deacuteclaration drsquoun espace de noms
Pour deacuteclarer un espace de noms (et son preacutefixe associeacute) dans le contexte drsquoun eacuteleacutement il suffit drsquoinseacuterer la deacuteclaration suivante dans la balise ouvrante xmlnspreacutefixe=URI de lespace de noms On peut deacuteclarer un espace de noms par deacutefaut par lrsquoattribut xmlns=URI de lespace de noms
ou annuler toute deacuteclaration par deacutefaut xmlns= La deacuteclaration drsquoun espace de noms est visible dans lrsquoeacuteleacutement la contenant et dans tous ses descendants agrave moins qursquoun nouvel espace de mecircme preacutefixe ou bien un nouvel espace par deacutefaut ne soit deacuteclareacute
lundi 3 octobre 2011
Noms qualifieacutes
Tout nom drsquoeacuteleacutement ou tout nom drsquoattribut qui nrsquoest pas une deacuteclaration drsquoespace de noms est un nom qualifieacute ayant lrsquoune des deux formes suivantespreacutefixenom-local
nom-local Un nom qualifieacute preacutefixeacute appartient agrave lrsquoespace de noms associeacute agrave
ce preacutefixe dans lrsquoeacuteleacutement englobant le plus imbriqueacute Un nom qualifieacute non preacutefixeacute
appartient agrave lrsquoespace de noms par deacutefaut deacuteclareacute dans le plus imbriqueacute des eacuteleacutements contenant ce nom srsquoil en existe un
nrsquoappartient pas agrave un espace de noms srsquoil nrsquoexiste pas de deacuteclaration drsquoespace de noms par deacutefaut dans les eacuteleacutements le contenant
lundi 3 octobre 2011
Exemple drsquoespace de noms
Supposons que lrsquoURI defbiblioxml contienne une DTD pour la description de reacutefeacuterences bibliographiques on pourrait rajouter des reacutefeacuterences dans un commentaire de la maniegravere suivante
lta xmlnsb=httpwwww3orgbiblioxmlgt ltagtltcomment xmlnsbiblio=defbiblioxmlgt ltbibliotitregtWhy P = NPltbibliotitregt ltauteurgtJeanltauteurgt
ltcommentgt
lundi 3 octobre 2011
17
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
18
XML Scheacutema
Un scheacutema dun document deacutefinitminus les eacuteleacutements possibles dans le documentminus les attributs associeacutes agrave ces eacuteleacutementsminus la structure du document minus les types de donneacutees
Le scheacutema est speacutecifieacute en XMLminus pas de nouveau langageminus balisage de deacuteclarationminus espaces de nom speacutecifiques xsd ou xs
Preacutesente de nombreux avantagesminus structures de donneacutees avec types de donneacutees minus extensibiliteacute par heacuteritage et ouvertureminus analysable agrave partir dun parseur XML standard
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
5
Attributs ou eacuteleacutements On doit souvent se poser la question de repreacutesenter
une information par un eacuteleacutement ou par un attribut On peut utiliser un eacuteleacutement siminus la donneacutee est structureacuteeminus la donneacutee contient plusieurs lignesminus la donneacutee change freacutequemment
On peut utiliser un attribut siminus la donneacutee est simple petite et change rarementminus il y a un faible nombre de valeurs possible
lundi 3 octobre 2011
6
Vocabulaires XML successeur de HTML (XHTML) formules matheacutematiques (MathML) preacutesentation multimeacutedia avec animations (SMIL) description du contenus des ressources (RDF) modeacutelisation des structures chimiques (CML) commerce eacutelectronique (ebXML cXML ) service vocaux (voiceXML) appareils avec eacutecrans reacuteduits eg WAP phones (WML) images 2D vectorielles (SVG) (voir xmlcoverpagesorgxmlApplicationshtml)
lundi 3 octobre 2011
7
Plan de ce cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Codage des caractegraveres
lundi 3 octobre 2011
9
UCS un jeu de caractegraveres universel
La norme ISO 10646 en accord avec lrsquoUnicode deacutefinit un jeu de caractegraveres universel lrsquoUCS (laquo Universal Character Set raquo) qui permet de repreacutesenter les caractegraveres de toutes les langues actuelles mais aussi anciennes
Chaque caractegravere UCS est identifieacute par un code qui est un nombre repreacutesenteacute sur 4 octets (232 - 1 positions)
Les 65 536 premiegraveres positions de lUCS (c-agrave-d les deux octets de poids faible) forment le BMP (laquo Basic Multilingual Plane raquo) et codent les jeux de caractegraveres les plus courants (latin grec arabe etc) Drsquoougrave deux codages bull UCS-4 totaliteacute de lrsquoUCS
bull UCS-2 BMP
lundi 3 octobre 2011
10
Codages de transformation
Plusieurs codages de transformation ont eacuteteacute deacutefinis bull UTF-8 permet de coder les caractegraveres de lrsquoUCS en longueur variable
en codant sur un octet les caractegraveres ASCII qui sont les plus freacutequentsbull UTF-16 permet drsquoinclure des caractegraveres de lrsquoUCS-4 dans une chaicircne
codeacutee en UCS-2
lundi 3 octobre 2011
11
Deacuteclaration du codage
Toutes les applications XML doivent accepter les codages UTF-8 et UTF-16
Drsquoautres codages peuvent ecirctre accepteacutes tels que le codage ISO-8859-1 (laquo ISO-Latin raquo)
Le codage des caractegraveres drsquoune entiteacute doit ecirctre deacuteclareacute dans la deacuteclaration XML de cette entiteacute comme valeur de lrsquoattribut laquo encoding raquo Srsquoil ne lrsquoest pas lrsquoapplication consideacuterera ecirctre en preacutesence drsquoun codage UTF-8
lundi 3 octobre 2011
12
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Espace de nomsbull Lrsquoimportation drsquoeacuteleacutements ou drsquoattributs contenus dans des entiteacutes
externes peut entraicircner des conflits de noms Ces conflits peuvent ecirctre eacuteviteacutes en deacutefinissant des espaces de nomsbull Un espace de noms est identifieacute de faccedilon unique par une URI
(Uniform Resource Identifier)bull Pour obtenir des noms uniques il suffit de qualifier chaque nom par
lrsquoURI de lrsquoespace de noms dont il provient Le nom obtenu est appeleacute nom eacutetendubull Pour simplifier lrsquoeacutecriture des noms eacutetendus on associe un preacutefixe (un
nom XML) agrave chaque espace de nomsbull ltxml version=10 encoding=ISO-8859-1 gt
ltfactfacture xmlnsfact=httpwwwdomainecomfacturegt ltfactmontantgt10$ltfactmontantgt ltfactnomgtJeanltfactnomgt ltfactfacturegt
lundi 3 octobre 2011
Deacuteclaration drsquoun espace de noms
Pour deacuteclarer un espace de noms (et son preacutefixe associeacute) dans le contexte drsquoun eacuteleacutement il suffit drsquoinseacuterer la deacuteclaration suivante dans la balise ouvrante xmlnspreacutefixe=URI de lespace de noms On peut deacuteclarer un espace de noms par deacutefaut par lrsquoattribut xmlns=URI de lespace de noms
ou annuler toute deacuteclaration par deacutefaut xmlns= La deacuteclaration drsquoun espace de noms est visible dans lrsquoeacuteleacutement la contenant et dans tous ses descendants agrave moins qursquoun nouvel espace de mecircme preacutefixe ou bien un nouvel espace par deacutefaut ne soit deacuteclareacute
lundi 3 octobre 2011
Noms qualifieacutes
Tout nom drsquoeacuteleacutement ou tout nom drsquoattribut qui nrsquoest pas une deacuteclaration drsquoespace de noms est un nom qualifieacute ayant lrsquoune des deux formes suivantespreacutefixenom-local
nom-local Un nom qualifieacute preacutefixeacute appartient agrave lrsquoespace de noms associeacute agrave
ce preacutefixe dans lrsquoeacuteleacutement englobant le plus imbriqueacute Un nom qualifieacute non preacutefixeacute
appartient agrave lrsquoespace de noms par deacutefaut deacuteclareacute dans le plus imbriqueacute des eacuteleacutements contenant ce nom srsquoil en existe un
nrsquoappartient pas agrave un espace de noms srsquoil nrsquoexiste pas de deacuteclaration drsquoespace de noms par deacutefaut dans les eacuteleacutements le contenant
lundi 3 octobre 2011
Exemple drsquoespace de noms
Supposons que lrsquoURI defbiblioxml contienne une DTD pour la description de reacutefeacuterences bibliographiques on pourrait rajouter des reacutefeacuterences dans un commentaire de la maniegravere suivante
lta xmlnsb=httpwwww3orgbiblioxmlgt ltagtltcomment xmlnsbiblio=defbiblioxmlgt ltbibliotitregtWhy P = NPltbibliotitregt ltauteurgtJeanltauteurgt
ltcommentgt
lundi 3 octobre 2011
17
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
18
XML Scheacutema
Un scheacutema dun document deacutefinitminus les eacuteleacutements possibles dans le documentminus les attributs associeacutes agrave ces eacuteleacutementsminus la structure du document minus les types de donneacutees
Le scheacutema est speacutecifieacute en XMLminus pas de nouveau langageminus balisage de deacuteclarationminus espaces de nom speacutecifiques xsd ou xs
Preacutesente de nombreux avantagesminus structures de donneacutees avec types de donneacutees minus extensibiliteacute par heacuteritage et ouvertureminus analysable agrave partir dun parseur XML standard
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
6
Vocabulaires XML successeur de HTML (XHTML) formules matheacutematiques (MathML) preacutesentation multimeacutedia avec animations (SMIL) description du contenus des ressources (RDF) modeacutelisation des structures chimiques (CML) commerce eacutelectronique (ebXML cXML ) service vocaux (voiceXML) appareils avec eacutecrans reacuteduits eg WAP phones (WML) images 2D vectorielles (SVG) (voir xmlcoverpagesorgxmlApplicationshtml)
lundi 3 octobre 2011
7
Plan de ce cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Codage des caractegraveres
lundi 3 octobre 2011
9
UCS un jeu de caractegraveres universel
La norme ISO 10646 en accord avec lrsquoUnicode deacutefinit un jeu de caractegraveres universel lrsquoUCS (laquo Universal Character Set raquo) qui permet de repreacutesenter les caractegraveres de toutes les langues actuelles mais aussi anciennes
Chaque caractegravere UCS est identifieacute par un code qui est un nombre repreacutesenteacute sur 4 octets (232 - 1 positions)
Les 65 536 premiegraveres positions de lUCS (c-agrave-d les deux octets de poids faible) forment le BMP (laquo Basic Multilingual Plane raquo) et codent les jeux de caractegraveres les plus courants (latin grec arabe etc) Drsquoougrave deux codages bull UCS-4 totaliteacute de lrsquoUCS
bull UCS-2 BMP
lundi 3 octobre 2011
10
Codages de transformation
Plusieurs codages de transformation ont eacuteteacute deacutefinis bull UTF-8 permet de coder les caractegraveres de lrsquoUCS en longueur variable
en codant sur un octet les caractegraveres ASCII qui sont les plus freacutequentsbull UTF-16 permet drsquoinclure des caractegraveres de lrsquoUCS-4 dans une chaicircne
codeacutee en UCS-2
lundi 3 octobre 2011
11
Deacuteclaration du codage
Toutes les applications XML doivent accepter les codages UTF-8 et UTF-16
Drsquoautres codages peuvent ecirctre accepteacutes tels que le codage ISO-8859-1 (laquo ISO-Latin raquo)
Le codage des caractegraveres drsquoune entiteacute doit ecirctre deacuteclareacute dans la deacuteclaration XML de cette entiteacute comme valeur de lrsquoattribut laquo encoding raquo Srsquoil ne lrsquoest pas lrsquoapplication consideacuterera ecirctre en preacutesence drsquoun codage UTF-8
lundi 3 octobre 2011
12
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Espace de nomsbull Lrsquoimportation drsquoeacuteleacutements ou drsquoattributs contenus dans des entiteacutes
externes peut entraicircner des conflits de noms Ces conflits peuvent ecirctre eacuteviteacutes en deacutefinissant des espaces de nomsbull Un espace de noms est identifieacute de faccedilon unique par une URI
(Uniform Resource Identifier)bull Pour obtenir des noms uniques il suffit de qualifier chaque nom par
lrsquoURI de lrsquoespace de noms dont il provient Le nom obtenu est appeleacute nom eacutetendubull Pour simplifier lrsquoeacutecriture des noms eacutetendus on associe un preacutefixe (un
nom XML) agrave chaque espace de nomsbull ltxml version=10 encoding=ISO-8859-1 gt
ltfactfacture xmlnsfact=httpwwwdomainecomfacturegt ltfactmontantgt10$ltfactmontantgt ltfactnomgtJeanltfactnomgt ltfactfacturegt
lundi 3 octobre 2011
Deacuteclaration drsquoun espace de noms
Pour deacuteclarer un espace de noms (et son preacutefixe associeacute) dans le contexte drsquoun eacuteleacutement il suffit drsquoinseacuterer la deacuteclaration suivante dans la balise ouvrante xmlnspreacutefixe=URI de lespace de noms On peut deacuteclarer un espace de noms par deacutefaut par lrsquoattribut xmlns=URI de lespace de noms
ou annuler toute deacuteclaration par deacutefaut xmlns= La deacuteclaration drsquoun espace de noms est visible dans lrsquoeacuteleacutement la contenant et dans tous ses descendants agrave moins qursquoun nouvel espace de mecircme preacutefixe ou bien un nouvel espace par deacutefaut ne soit deacuteclareacute
lundi 3 octobre 2011
Noms qualifieacutes
Tout nom drsquoeacuteleacutement ou tout nom drsquoattribut qui nrsquoest pas une deacuteclaration drsquoespace de noms est un nom qualifieacute ayant lrsquoune des deux formes suivantespreacutefixenom-local
nom-local Un nom qualifieacute preacutefixeacute appartient agrave lrsquoespace de noms associeacute agrave
ce preacutefixe dans lrsquoeacuteleacutement englobant le plus imbriqueacute Un nom qualifieacute non preacutefixeacute
appartient agrave lrsquoespace de noms par deacutefaut deacuteclareacute dans le plus imbriqueacute des eacuteleacutements contenant ce nom srsquoil en existe un
nrsquoappartient pas agrave un espace de noms srsquoil nrsquoexiste pas de deacuteclaration drsquoespace de noms par deacutefaut dans les eacuteleacutements le contenant
lundi 3 octobre 2011
Exemple drsquoespace de noms
Supposons que lrsquoURI defbiblioxml contienne une DTD pour la description de reacutefeacuterences bibliographiques on pourrait rajouter des reacutefeacuterences dans un commentaire de la maniegravere suivante
lta xmlnsb=httpwwww3orgbiblioxmlgt ltagtltcomment xmlnsbiblio=defbiblioxmlgt ltbibliotitregtWhy P = NPltbibliotitregt ltauteurgtJeanltauteurgt
ltcommentgt
lundi 3 octobre 2011
17
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
18
XML Scheacutema
Un scheacutema dun document deacutefinitminus les eacuteleacutements possibles dans le documentminus les attributs associeacutes agrave ces eacuteleacutementsminus la structure du document minus les types de donneacutees
Le scheacutema est speacutecifieacute en XMLminus pas de nouveau langageminus balisage de deacuteclarationminus espaces de nom speacutecifiques xsd ou xs
Preacutesente de nombreux avantagesminus structures de donneacutees avec types de donneacutees minus extensibiliteacute par heacuteritage et ouvertureminus analysable agrave partir dun parseur XML standard
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
7
Plan de ce cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Codage des caractegraveres
lundi 3 octobre 2011
9
UCS un jeu de caractegraveres universel
La norme ISO 10646 en accord avec lrsquoUnicode deacutefinit un jeu de caractegraveres universel lrsquoUCS (laquo Universal Character Set raquo) qui permet de repreacutesenter les caractegraveres de toutes les langues actuelles mais aussi anciennes
Chaque caractegravere UCS est identifieacute par un code qui est un nombre repreacutesenteacute sur 4 octets (232 - 1 positions)
Les 65 536 premiegraveres positions de lUCS (c-agrave-d les deux octets de poids faible) forment le BMP (laquo Basic Multilingual Plane raquo) et codent les jeux de caractegraveres les plus courants (latin grec arabe etc) Drsquoougrave deux codages bull UCS-4 totaliteacute de lrsquoUCS
bull UCS-2 BMP
lundi 3 octobre 2011
10
Codages de transformation
Plusieurs codages de transformation ont eacuteteacute deacutefinis bull UTF-8 permet de coder les caractegraveres de lrsquoUCS en longueur variable
en codant sur un octet les caractegraveres ASCII qui sont les plus freacutequentsbull UTF-16 permet drsquoinclure des caractegraveres de lrsquoUCS-4 dans une chaicircne
codeacutee en UCS-2
lundi 3 octobre 2011
11
Deacuteclaration du codage
Toutes les applications XML doivent accepter les codages UTF-8 et UTF-16
Drsquoautres codages peuvent ecirctre accepteacutes tels que le codage ISO-8859-1 (laquo ISO-Latin raquo)
Le codage des caractegraveres drsquoune entiteacute doit ecirctre deacuteclareacute dans la deacuteclaration XML de cette entiteacute comme valeur de lrsquoattribut laquo encoding raquo Srsquoil ne lrsquoest pas lrsquoapplication consideacuterera ecirctre en preacutesence drsquoun codage UTF-8
lundi 3 octobre 2011
12
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Espace de nomsbull Lrsquoimportation drsquoeacuteleacutements ou drsquoattributs contenus dans des entiteacutes
externes peut entraicircner des conflits de noms Ces conflits peuvent ecirctre eacuteviteacutes en deacutefinissant des espaces de nomsbull Un espace de noms est identifieacute de faccedilon unique par une URI
(Uniform Resource Identifier)bull Pour obtenir des noms uniques il suffit de qualifier chaque nom par
lrsquoURI de lrsquoespace de noms dont il provient Le nom obtenu est appeleacute nom eacutetendubull Pour simplifier lrsquoeacutecriture des noms eacutetendus on associe un preacutefixe (un
nom XML) agrave chaque espace de nomsbull ltxml version=10 encoding=ISO-8859-1 gt
ltfactfacture xmlnsfact=httpwwwdomainecomfacturegt ltfactmontantgt10$ltfactmontantgt ltfactnomgtJeanltfactnomgt ltfactfacturegt
lundi 3 octobre 2011
Deacuteclaration drsquoun espace de noms
Pour deacuteclarer un espace de noms (et son preacutefixe associeacute) dans le contexte drsquoun eacuteleacutement il suffit drsquoinseacuterer la deacuteclaration suivante dans la balise ouvrante xmlnspreacutefixe=URI de lespace de noms On peut deacuteclarer un espace de noms par deacutefaut par lrsquoattribut xmlns=URI de lespace de noms
ou annuler toute deacuteclaration par deacutefaut xmlns= La deacuteclaration drsquoun espace de noms est visible dans lrsquoeacuteleacutement la contenant et dans tous ses descendants agrave moins qursquoun nouvel espace de mecircme preacutefixe ou bien un nouvel espace par deacutefaut ne soit deacuteclareacute
lundi 3 octobre 2011
Noms qualifieacutes
Tout nom drsquoeacuteleacutement ou tout nom drsquoattribut qui nrsquoest pas une deacuteclaration drsquoespace de noms est un nom qualifieacute ayant lrsquoune des deux formes suivantespreacutefixenom-local
nom-local Un nom qualifieacute preacutefixeacute appartient agrave lrsquoespace de noms associeacute agrave
ce preacutefixe dans lrsquoeacuteleacutement englobant le plus imbriqueacute Un nom qualifieacute non preacutefixeacute
appartient agrave lrsquoespace de noms par deacutefaut deacuteclareacute dans le plus imbriqueacute des eacuteleacutements contenant ce nom srsquoil en existe un
nrsquoappartient pas agrave un espace de noms srsquoil nrsquoexiste pas de deacuteclaration drsquoespace de noms par deacutefaut dans les eacuteleacutements le contenant
lundi 3 octobre 2011
Exemple drsquoespace de noms
Supposons que lrsquoURI defbiblioxml contienne une DTD pour la description de reacutefeacuterences bibliographiques on pourrait rajouter des reacutefeacuterences dans un commentaire de la maniegravere suivante
lta xmlnsb=httpwwww3orgbiblioxmlgt ltagtltcomment xmlnsbiblio=defbiblioxmlgt ltbibliotitregtWhy P = NPltbibliotitregt ltauteurgtJeanltauteurgt
ltcommentgt
lundi 3 octobre 2011
17
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
18
XML Scheacutema
Un scheacutema dun document deacutefinitminus les eacuteleacutements possibles dans le documentminus les attributs associeacutes agrave ces eacuteleacutementsminus la structure du document minus les types de donneacutees
Le scheacutema est speacutecifieacute en XMLminus pas de nouveau langageminus balisage de deacuteclarationminus espaces de nom speacutecifiques xsd ou xs
Preacutesente de nombreux avantagesminus structures de donneacutees avec types de donneacutees minus extensibiliteacute par heacuteritage et ouvertureminus analysable agrave partir dun parseur XML standard
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
Codage des caractegraveres
lundi 3 octobre 2011
9
UCS un jeu de caractegraveres universel
La norme ISO 10646 en accord avec lrsquoUnicode deacutefinit un jeu de caractegraveres universel lrsquoUCS (laquo Universal Character Set raquo) qui permet de repreacutesenter les caractegraveres de toutes les langues actuelles mais aussi anciennes
Chaque caractegravere UCS est identifieacute par un code qui est un nombre repreacutesenteacute sur 4 octets (232 - 1 positions)
Les 65 536 premiegraveres positions de lUCS (c-agrave-d les deux octets de poids faible) forment le BMP (laquo Basic Multilingual Plane raquo) et codent les jeux de caractegraveres les plus courants (latin grec arabe etc) Drsquoougrave deux codages bull UCS-4 totaliteacute de lrsquoUCS
bull UCS-2 BMP
lundi 3 octobre 2011
10
Codages de transformation
Plusieurs codages de transformation ont eacuteteacute deacutefinis bull UTF-8 permet de coder les caractegraveres de lrsquoUCS en longueur variable
en codant sur un octet les caractegraveres ASCII qui sont les plus freacutequentsbull UTF-16 permet drsquoinclure des caractegraveres de lrsquoUCS-4 dans une chaicircne
codeacutee en UCS-2
lundi 3 octobre 2011
11
Deacuteclaration du codage
Toutes les applications XML doivent accepter les codages UTF-8 et UTF-16
Drsquoautres codages peuvent ecirctre accepteacutes tels que le codage ISO-8859-1 (laquo ISO-Latin raquo)
Le codage des caractegraveres drsquoune entiteacute doit ecirctre deacuteclareacute dans la deacuteclaration XML de cette entiteacute comme valeur de lrsquoattribut laquo encoding raquo Srsquoil ne lrsquoest pas lrsquoapplication consideacuterera ecirctre en preacutesence drsquoun codage UTF-8
lundi 3 octobre 2011
12
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Espace de nomsbull Lrsquoimportation drsquoeacuteleacutements ou drsquoattributs contenus dans des entiteacutes
externes peut entraicircner des conflits de noms Ces conflits peuvent ecirctre eacuteviteacutes en deacutefinissant des espaces de nomsbull Un espace de noms est identifieacute de faccedilon unique par une URI
(Uniform Resource Identifier)bull Pour obtenir des noms uniques il suffit de qualifier chaque nom par
lrsquoURI de lrsquoespace de noms dont il provient Le nom obtenu est appeleacute nom eacutetendubull Pour simplifier lrsquoeacutecriture des noms eacutetendus on associe un preacutefixe (un
nom XML) agrave chaque espace de nomsbull ltxml version=10 encoding=ISO-8859-1 gt
ltfactfacture xmlnsfact=httpwwwdomainecomfacturegt ltfactmontantgt10$ltfactmontantgt ltfactnomgtJeanltfactnomgt ltfactfacturegt
lundi 3 octobre 2011
Deacuteclaration drsquoun espace de noms
Pour deacuteclarer un espace de noms (et son preacutefixe associeacute) dans le contexte drsquoun eacuteleacutement il suffit drsquoinseacuterer la deacuteclaration suivante dans la balise ouvrante xmlnspreacutefixe=URI de lespace de noms On peut deacuteclarer un espace de noms par deacutefaut par lrsquoattribut xmlns=URI de lespace de noms
ou annuler toute deacuteclaration par deacutefaut xmlns= La deacuteclaration drsquoun espace de noms est visible dans lrsquoeacuteleacutement la contenant et dans tous ses descendants agrave moins qursquoun nouvel espace de mecircme preacutefixe ou bien un nouvel espace par deacutefaut ne soit deacuteclareacute
lundi 3 octobre 2011
Noms qualifieacutes
Tout nom drsquoeacuteleacutement ou tout nom drsquoattribut qui nrsquoest pas une deacuteclaration drsquoespace de noms est un nom qualifieacute ayant lrsquoune des deux formes suivantespreacutefixenom-local
nom-local Un nom qualifieacute preacutefixeacute appartient agrave lrsquoespace de noms associeacute agrave
ce preacutefixe dans lrsquoeacuteleacutement englobant le plus imbriqueacute Un nom qualifieacute non preacutefixeacute
appartient agrave lrsquoespace de noms par deacutefaut deacuteclareacute dans le plus imbriqueacute des eacuteleacutements contenant ce nom srsquoil en existe un
nrsquoappartient pas agrave un espace de noms srsquoil nrsquoexiste pas de deacuteclaration drsquoespace de noms par deacutefaut dans les eacuteleacutements le contenant
lundi 3 octobre 2011
Exemple drsquoespace de noms
Supposons que lrsquoURI defbiblioxml contienne une DTD pour la description de reacutefeacuterences bibliographiques on pourrait rajouter des reacutefeacuterences dans un commentaire de la maniegravere suivante
lta xmlnsb=httpwwww3orgbiblioxmlgt ltagtltcomment xmlnsbiblio=defbiblioxmlgt ltbibliotitregtWhy P = NPltbibliotitregt ltauteurgtJeanltauteurgt
ltcommentgt
lundi 3 octobre 2011
17
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
18
XML Scheacutema
Un scheacutema dun document deacutefinitminus les eacuteleacutements possibles dans le documentminus les attributs associeacutes agrave ces eacuteleacutementsminus la structure du document minus les types de donneacutees
Le scheacutema est speacutecifieacute en XMLminus pas de nouveau langageminus balisage de deacuteclarationminus espaces de nom speacutecifiques xsd ou xs
Preacutesente de nombreux avantagesminus structures de donneacutees avec types de donneacutees minus extensibiliteacute par heacuteritage et ouvertureminus analysable agrave partir dun parseur XML standard
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
9
UCS un jeu de caractegraveres universel
La norme ISO 10646 en accord avec lrsquoUnicode deacutefinit un jeu de caractegraveres universel lrsquoUCS (laquo Universal Character Set raquo) qui permet de repreacutesenter les caractegraveres de toutes les langues actuelles mais aussi anciennes
Chaque caractegravere UCS est identifieacute par un code qui est un nombre repreacutesenteacute sur 4 octets (232 - 1 positions)
Les 65 536 premiegraveres positions de lUCS (c-agrave-d les deux octets de poids faible) forment le BMP (laquo Basic Multilingual Plane raquo) et codent les jeux de caractegraveres les plus courants (latin grec arabe etc) Drsquoougrave deux codages bull UCS-4 totaliteacute de lrsquoUCS
bull UCS-2 BMP
lundi 3 octobre 2011
10
Codages de transformation
Plusieurs codages de transformation ont eacuteteacute deacutefinis bull UTF-8 permet de coder les caractegraveres de lrsquoUCS en longueur variable
en codant sur un octet les caractegraveres ASCII qui sont les plus freacutequentsbull UTF-16 permet drsquoinclure des caractegraveres de lrsquoUCS-4 dans une chaicircne
codeacutee en UCS-2
lundi 3 octobre 2011
11
Deacuteclaration du codage
Toutes les applications XML doivent accepter les codages UTF-8 et UTF-16
Drsquoautres codages peuvent ecirctre accepteacutes tels que le codage ISO-8859-1 (laquo ISO-Latin raquo)
Le codage des caractegraveres drsquoune entiteacute doit ecirctre deacuteclareacute dans la deacuteclaration XML de cette entiteacute comme valeur de lrsquoattribut laquo encoding raquo Srsquoil ne lrsquoest pas lrsquoapplication consideacuterera ecirctre en preacutesence drsquoun codage UTF-8
lundi 3 octobre 2011
12
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Espace de nomsbull Lrsquoimportation drsquoeacuteleacutements ou drsquoattributs contenus dans des entiteacutes
externes peut entraicircner des conflits de noms Ces conflits peuvent ecirctre eacuteviteacutes en deacutefinissant des espaces de nomsbull Un espace de noms est identifieacute de faccedilon unique par une URI
(Uniform Resource Identifier)bull Pour obtenir des noms uniques il suffit de qualifier chaque nom par
lrsquoURI de lrsquoespace de noms dont il provient Le nom obtenu est appeleacute nom eacutetendubull Pour simplifier lrsquoeacutecriture des noms eacutetendus on associe un preacutefixe (un
nom XML) agrave chaque espace de nomsbull ltxml version=10 encoding=ISO-8859-1 gt
ltfactfacture xmlnsfact=httpwwwdomainecomfacturegt ltfactmontantgt10$ltfactmontantgt ltfactnomgtJeanltfactnomgt ltfactfacturegt
lundi 3 octobre 2011
Deacuteclaration drsquoun espace de noms
Pour deacuteclarer un espace de noms (et son preacutefixe associeacute) dans le contexte drsquoun eacuteleacutement il suffit drsquoinseacuterer la deacuteclaration suivante dans la balise ouvrante xmlnspreacutefixe=URI de lespace de noms On peut deacuteclarer un espace de noms par deacutefaut par lrsquoattribut xmlns=URI de lespace de noms
ou annuler toute deacuteclaration par deacutefaut xmlns= La deacuteclaration drsquoun espace de noms est visible dans lrsquoeacuteleacutement la contenant et dans tous ses descendants agrave moins qursquoun nouvel espace de mecircme preacutefixe ou bien un nouvel espace par deacutefaut ne soit deacuteclareacute
lundi 3 octobre 2011
Noms qualifieacutes
Tout nom drsquoeacuteleacutement ou tout nom drsquoattribut qui nrsquoest pas une deacuteclaration drsquoespace de noms est un nom qualifieacute ayant lrsquoune des deux formes suivantespreacutefixenom-local
nom-local Un nom qualifieacute preacutefixeacute appartient agrave lrsquoespace de noms associeacute agrave
ce preacutefixe dans lrsquoeacuteleacutement englobant le plus imbriqueacute Un nom qualifieacute non preacutefixeacute
appartient agrave lrsquoespace de noms par deacutefaut deacuteclareacute dans le plus imbriqueacute des eacuteleacutements contenant ce nom srsquoil en existe un
nrsquoappartient pas agrave un espace de noms srsquoil nrsquoexiste pas de deacuteclaration drsquoespace de noms par deacutefaut dans les eacuteleacutements le contenant
lundi 3 octobre 2011
Exemple drsquoespace de noms
Supposons que lrsquoURI defbiblioxml contienne une DTD pour la description de reacutefeacuterences bibliographiques on pourrait rajouter des reacutefeacuterences dans un commentaire de la maniegravere suivante
lta xmlnsb=httpwwww3orgbiblioxmlgt ltagtltcomment xmlnsbiblio=defbiblioxmlgt ltbibliotitregtWhy P = NPltbibliotitregt ltauteurgtJeanltauteurgt
ltcommentgt
lundi 3 octobre 2011
17
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
18
XML Scheacutema
Un scheacutema dun document deacutefinitminus les eacuteleacutements possibles dans le documentminus les attributs associeacutes agrave ces eacuteleacutementsminus la structure du document minus les types de donneacutees
Le scheacutema est speacutecifieacute en XMLminus pas de nouveau langageminus balisage de deacuteclarationminus espaces de nom speacutecifiques xsd ou xs
Preacutesente de nombreux avantagesminus structures de donneacutees avec types de donneacutees minus extensibiliteacute par heacuteritage et ouvertureminus analysable agrave partir dun parseur XML standard
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
10
Codages de transformation
Plusieurs codages de transformation ont eacuteteacute deacutefinis bull UTF-8 permet de coder les caractegraveres de lrsquoUCS en longueur variable
en codant sur un octet les caractegraveres ASCII qui sont les plus freacutequentsbull UTF-16 permet drsquoinclure des caractegraveres de lrsquoUCS-4 dans une chaicircne
codeacutee en UCS-2
lundi 3 octobre 2011
11
Deacuteclaration du codage
Toutes les applications XML doivent accepter les codages UTF-8 et UTF-16
Drsquoautres codages peuvent ecirctre accepteacutes tels que le codage ISO-8859-1 (laquo ISO-Latin raquo)
Le codage des caractegraveres drsquoune entiteacute doit ecirctre deacuteclareacute dans la deacuteclaration XML de cette entiteacute comme valeur de lrsquoattribut laquo encoding raquo Srsquoil ne lrsquoest pas lrsquoapplication consideacuterera ecirctre en preacutesence drsquoun codage UTF-8
lundi 3 octobre 2011
12
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Espace de nomsbull Lrsquoimportation drsquoeacuteleacutements ou drsquoattributs contenus dans des entiteacutes
externes peut entraicircner des conflits de noms Ces conflits peuvent ecirctre eacuteviteacutes en deacutefinissant des espaces de nomsbull Un espace de noms est identifieacute de faccedilon unique par une URI
(Uniform Resource Identifier)bull Pour obtenir des noms uniques il suffit de qualifier chaque nom par
lrsquoURI de lrsquoespace de noms dont il provient Le nom obtenu est appeleacute nom eacutetendubull Pour simplifier lrsquoeacutecriture des noms eacutetendus on associe un preacutefixe (un
nom XML) agrave chaque espace de nomsbull ltxml version=10 encoding=ISO-8859-1 gt
ltfactfacture xmlnsfact=httpwwwdomainecomfacturegt ltfactmontantgt10$ltfactmontantgt ltfactnomgtJeanltfactnomgt ltfactfacturegt
lundi 3 octobre 2011
Deacuteclaration drsquoun espace de noms
Pour deacuteclarer un espace de noms (et son preacutefixe associeacute) dans le contexte drsquoun eacuteleacutement il suffit drsquoinseacuterer la deacuteclaration suivante dans la balise ouvrante xmlnspreacutefixe=URI de lespace de noms On peut deacuteclarer un espace de noms par deacutefaut par lrsquoattribut xmlns=URI de lespace de noms
ou annuler toute deacuteclaration par deacutefaut xmlns= La deacuteclaration drsquoun espace de noms est visible dans lrsquoeacuteleacutement la contenant et dans tous ses descendants agrave moins qursquoun nouvel espace de mecircme preacutefixe ou bien un nouvel espace par deacutefaut ne soit deacuteclareacute
lundi 3 octobre 2011
Noms qualifieacutes
Tout nom drsquoeacuteleacutement ou tout nom drsquoattribut qui nrsquoest pas une deacuteclaration drsquoespace de noms est un nom qualifieacute ayant lrsquoune des deux formes suivantespreacutefixenom-local
nom-local Un nom qualifieacute preacutefixeacute appartient agrave lrsquoespace de noms associeacute agrave
ce preacutefixe dans lrsquoeacuteleacutement englobant le plus imbriqueacute Un nom qualifieacute non preacutefixeacute
appartient agrave lrsquoespace de noms par deacutefaut deacuteclareacute dans le plus imbriqueacute des eacuteleacutements contenant ce nom srsquoil en existe un
nrsquoappartient pas agrave un espace de noms srsquoil nrsquoexiste pas de deacuteclaration drsquoespace de noms par deacutefaut dans les eacuteleacutements le contenant
lundi 3 octobre 2011
Exemple drsquoespace de noms
Supposons que lrsquoURI defbiblioxml contienne une DTD pour la description de reacutefeacuterences bibliographiques on pourrait rajouter des reacutefeacuterences dans un commentaire de la maniegravere suivante
lta xmlnsb=httpwwww3orgbiblioxmlgt ltagtltcomment xmlnsbiblio=defbiblioxmlgt ltbibliotitregtWhy P = NPltbibliotitregt ltauteurgtJeanltauteurgt
ltcommentgt
lundi 3 octobre 2011
17
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
18
XML Scheacutema
Un scheacutema dun document deacutefinitminus les eacuteleacutements possibles dans le documentminus les attributs associeacutes agrave ces eacuteleacutementsminus la structure du document minus les types de donneacutees
Le scheacutema est speacutecifieacute en XMLminus pas de nouveau langageminus balisage de deacuteclarationminus espaces de nom speacutecifiques xsd ou xs
Preacutesente de nombreux avantagesminus structures de donneacutees avec types de donneacutees minus extensibiliteacute par heacuteritage et ouvertureminus analysable agrave partir dun parseur XML standard
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
11
Deacuteclaration du codage
Toutes les applications XML doivent accepter les codages UTF-8 et UTF-16
Drsquoautres codages peuvent ecirctre accepteacutes tels que le codage ISO-8859-1 (laquo ISO-Latin raquo)
Le codage des caractegraveres drsquoune entiteacute doit ecirctre deacuteclareacute dans la deacuteclaration XML de cette entiteacute comme valeur de lrsquoattribut laquo encoding raquo Srsquoil ne lrsquoest pas lrsquoapplication consideacuterera ecirctre en preacutesence drsquoun codage UTF-8
lundi 3 octobre 2011
12
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Espace de nomsbull Lrsquoimportation drsquoeacuteleacutements ou drsquoattributs contenus dans des entiteacutes
externes peut entraicircner des conflits de noms Ces conflits peuvent ecirctre eacuteviteacutes en deacutefinissant des espaces de nomsbull Un espace de noms est identifieacute de faccedilon unique par une URI
(Uniform Resource Identifier)bull Pour obtenir des noms uniques il suffit de qualifier chaque nom par
lrsquoURI de lrsquoespace de noms dont il provient Le nom obtenu est appeleacute nom eacutetendubull Pour simplifier lrsquoeacutecriture des noms eacutetendus on associe un preacutefixe (un
nom XML) agrave chaque espace de nomsbull ltxml version=10 encoding=ISO-8859-1 gt
ltfactfacture xmlnsfact=httpwwwdomainecomfacturegt ltfactmontantgt10$ltfactmontantgt ltfactnomgtJeanltfactnomgt ltfactfacturegt
lundi 3 octobre 2011
Deacuteclaration drsquoun espace de noms
Pour deacuteclarer un espace de noms (et son preacutefixe associeacute) dans le contexte drsquoun eacuteleacutement il suffit drsquoinseacuterer la deacuteclaration suivante dans la balise ouvrante xmlnspreacutefixe=URI de lespace de noms On peut deacuteclarer un espace de noms par deacutefaut par lrsquoattribut xmlns=URI de lespace de noms
ou annuler toute deacuteclaration par deacutefaut xmlns= La deacuteclaration drsquoun espace de noms est visible dans lrsquoeacuteleacutement la contenant et dans tous ses descendants agrave moins qursquoun nouvel espace de mecircme preacutefixe ou bien un nouvel espace par deacutefaut ne soit deacuteclareacute
lundi 3 octobre 2011
Noms qualifieacutes
Tout nom drsquoeacuteleacutement ou tout nom drsquoattribut qui nrsquoest pas une deacuteclaration drsquoespace de noms est un nom qualifieacute ayant lrsquoune des deux formes suivantespreacutefixenom-local
nom-local Un nom qualifieacute preacutefixeacute appartient agrave lrsquoespace de noms associeacute agrave
ce preacutefixe dans lrsquoeacuteleacutement englobant le plus imbriqueacute Un nom qualifieacute non preacutefixeacute
appartient agrave lrsquoespace de noms par deacutefaut deacuteclareacute dans le plus imbriqueacute des eacuteleacutements contenant ce nom srsquoil en existe un
nrsquoappartient pas agrave un espace de noms srsquoil nrsquoexiste pas de deacuteclaration drsquoespace de noms par deacutefaut dans les eacuteleacutements le contenant
lundi 3 octobre 2011
Exemple drsquoespace de noms
Supposons que lrsquoURI defbiblioxml contienne une DTD pour la description de reacutefeacuterences bibliographiques on pourrait rajouter des reacutefeacuterences dans un commentaire de la maniegravere suivante
lta xmlnsb=httpwwww3orgbiblioxmlgt ltagtltcomment xmlnsbiblio=defbiblioxmlgt ltbibliotitregtWhy P = NPltbibliotitregt ltauteurgtJeanltauteurgt
ltcommentgt
lundi 3 octobre 2011
17
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
18
XML Scheacutema
Un scheacutema dun document deacutefinitminus les eacuteleacutements possibles dans le documentminus les attributs associeacutes agrave ces eacuteleacutementsminus la structure du document minus les types de donneacutees
Le scheacutema est speacutecifieacute en XMLminus pas de nouveau langageminus balisage de deacuteclarationminus espaces de nom speacutecifiques xsd ou xs
Preacutesente de nombreux avantagesminus structures de donneacutees avec types de donneacutees minus extensibiliteacute par heacuteritage et ouvertureminus analysable agrave partir dun parseur XML standard
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
12
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Espace de nomsbull Lrsquoimportation drsquoeacuteleacutements ou drsquoattributs contenus dans des entiteacutes
externes peut entraicircner des conflits de noms Ces conflits peuvent ecirctre eacuteviteacutes en deacutefinissant des espaces de nomsbull Un espace de noms est identifieacute de faccedilon unique par une URI
(Uniform Resource Identifier)bull Pour obtenir des noms uniques il suffit de qualifier chaque nom par
lrsquoURI de lrsquoespace de noms dont il provient Le nom obtenu est appeleacute nom eacutetendubull Pour simplifier lrsquoeacutecriture des noms eacutetendus on associe un preacutefixe (un
nom XML) agrave chaque espace de nomsbull ltxml version=10 encoding=ISO-8859-1 gt
ltfactfacture xmlnsfact=httpwwwdomainecomfacturegt ltfactmontantgt10$ltfactmontantgt ltfactnomgtJeanltfactnomgt ltfactfacturegt
lundi 3 octobre 2011
Deacuteclaration drsquoun espace de noms
Pour deacuteclarer un espace de noms (et son preacutefixe associeacute) dans le contexte drsquoun eacuteleacutement il suffit drsquoinseacuterer la deacuteclaration suivante dans la balise ouvrante xmlnspreacutefixe=URI de lespace de noms On peut deacuteclarer un espace de noms par deacutefaut par lrsquoattribut xmlns=URI de lespace de noms
ou annuler toute deacuteclaration par deacutefaut xmlns= La deacuteclaration drsquoun espace de noms est visible dans lrsquoeacuteleacutement la contenant et dans tous ses descendants agrave moins qursquoun nouvel espace de mecircme preacutefixe ou bien un nouvel espace par deacutefaut ne soit deacuteclareacute
lundi 3 octobre 2011
Noms qualifieacutes
Tout nom drsquoeacuteleacutement ou tout nom drsquoattribut qui nrsquoest pas une deacuteclaration drsquoespace de noms est un nom qualifieacute ayant lrsquoune des deux formes suivantespreacutefixenom-local
nom-local Un nom qualifieacute preacutefixeacute appartient agrave lrsquoespace de noms associeacute agrave
ce preacutefixe dans lrsquoeacuteleacutement englobant le plus imbriqueacute Un nom qualifieacute non preacutefixeacute
appartient agrave lrsquoespace de noms par deacutefaut deacuteclareacute dans le plus imbriqueacute des eacuteleacutements contenant ce nom srsquoil en existe un
nrsquoappartient pas agrave un espace de noms srsquoil nrsquoexiste pas de deacuteclaration drsquoespace de noms par deacutefaut dans les eacuteleacutements le contenant
lundi 3 octobre 2011
Exemple drsquoespace de noms
Supposons que lrsquoURI defbiblioxml contienne une DTD pour la description de reacutefeacuterences bibliographiques on pourrait rajouter des reacutefeacuterences dans un commentaire de la maniegravere suivante
lta xmlnsb=httpwwww3orgbiblioxmlgt ltagtltcomment xmlnsbiblio=defbiblioxmlgt ltbibliotitregtWhy P = NPltbibliotitregt ltauteurgtJeanltauteurgt
ltcommentgt
lundi 3 octobre 2011
17
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
18
XML Scheacutema
Un scheacutema dun document deacutefinitminus les eacuteleacutements possibles dans le documentminus les attributs associeacutes agrave ces eacuteleacutementsminus la structure du document minus les types de donneacutees
Le scheacutema est speacutecifieacute en XMLminus pas de nouveau langageminus balisage de deacuteclarationminus espaces de nom speacutecifiques xsd ou xs
Preacutesente de nombreux avantagesminus structures de donneacutees avec types de donneacutees minus extensibiliteacute par heacuteritage et ouvertureminus analysable agrave partir dun parseur XML standard
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
Espace de nomsbull Lrsquoimportation drsquoeacuteleacutements ou drsquoattributs contenus dans des entiteacutes
externes peut entraicircner des conflits de noms Ces conflits peuvent ecirctre eacuteviteacutes en deacutefinissant des espaces de nomsbull Un espace de noms est identifieacute de faccedilon unique par une URI
(Uniform Resource Identifier)bull Pour obtenir des noms uniques il suffit de qualifier chaque nom par
lrsquoURI de lrsquoespace de noms dont il provient Le nom obtenu est appeleacute nom eacutetendubull Pour simplifier lrsquoeacutecriture des noms eacutetendus on associe un preacutefixe (un
nom XML) agrave chaque espace de nomsbull ltxml version=10 encoding=ISO-8859-1 gt
ltfactfacture xmlnsfact=httpwwwdomainecomfacturegt ltfactmontantgt10$ltfactmontantgt ltfactnomgtJeanltfactnomgt ltfactfacturegt
lundi 3 octobre 2011
Deacuteclaration drsquoun espace de noms
Pour deacuteclarer un espace de noms (et son preacutefixe associeacute) dans le contexte drsquoun eacuteleacutement il suffit drsquoinseacuterer la deacuteclaration suivante dans la balise ouvrante xmlnspreacutefixe=URI de lespace de noms On peut deacuteclarer un espace de noms par deacutefaut par lrsquoattribut xmlns=URI de lespace de noms
ou annuler toute deacuteclaration par deacutefaut xmlns= La deacuteclaration drsquoun espace de noms est visible dans lrsquoeacuteleacutement la contenant et dans tous ses descendants agrave moins qursquoun nouvel espace de mecircme preacutefixe ou bien un nouvel espace par deacutefaut ne soit deacuteclareacute
lundi 3 octobre 2011
Noms qualifieacutes
Tout nom drsquoeacuteleacutement ou tout nom drsquoattribut qui nrsquoest pas une deacuteclaration drsquoespace de noms est un nom qualifieacute ayant lrsquoune des deux formes suivantespreacutefixenom-local
nom-local Un nom qualifieacute preacutefixeacute appartient agrave lrsquoespace de noms associeacute agrave
ce preacutefixe dans lrsquoeacuteleacutement englobant le plus imbriqueacute Un nom qualifieacute non preacutefixeacute
appartient agrave lrsquoespace de noms par deacutefaut deacuteclareacute dans le plus imbriqueacute des eacuteleacutements contenant ce nom srsquoil en existe un
nrsquoappartient pas agrave un espace de noms srsquoil nrsquoexiste pas de deacuteclaration drsquoespace de noms par deacutefaut dans les eacuteleacutements le contenant
lundi 3 octobre 2011
Exemple drsquoespace de noms
Supposons que lrsquoURI defbiblioxml contienne une DTD pour la description de reacutefeacuterences bibliographiques on pourrait rajouter des reacutefeacuterences dans un commentaire de la maniegravere suivante
lta xmlnsb=httpwwww3orgbiblioxmlgt ltagtltcomment xmlnsbiblio=defbiblioxmlgt ltbibliotitregtWhy P = NPltbibliotitregt ltauteurgtJeanltauteurgt
ltcommentgt
lundi 3 octobre 2011
17
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
18
XML Scheacutema
Un scheacutema dun document deacutefinitminus les eacuteleacutements possibles dans le documentminus les attributs associeacutes agrave ces eacuteleacutementsminus la structure du document minus les types de donneacutees
Le scheacutema est speacutecifieacute en XMLminus pas de nouveau langageminus balisage de deacuteclarationminus espaces de nom speacutecifiques xsd ou xs
Preacutesente de nombreux avantagesminus structures de donneacutees avec types de donneacutees minus extensibiliteacute par heacuteritage et ouvertureminus analysable agrave partir dun parseur XML standard
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
Deacuteclaration drsquoun espace de noms
Pour deacuteclarer un espace de noms (et son preacutefixe associeacute) dans le contexte drsquoun eacuteleacutement il suffit drsquoinseacuterer la deacuteclaration suivante dans la balise ouvrante xmlnspreacutefixe=URI de lespace de noms On peut deacuteclarer un espace de noms par deacutefaut par lrsquoattribut xmlns=URI de lespace de noms
ou annuler toute deacuteclaration par deacutefaut xmlns= La deacuteclaration drsquoun espace de noms est visible dans lrsquoeacuteleacutement la contenant et dans tous ses descendants agrave moins qursquoun nouvel espace de mecircme preacutefixe ou bien un nouvel espace par deacutefaut ne soit deacuteclareacute
lundi 3 octobre 2011
Noms qualifieacutes
Tout nom drsquoeacuteleacutement ou tout nom drsquoattribut qui nrsquoest pas une deacuteclaration drsquoespace de noms est un nom qualifieacute ayant lrsquoune des deux formes suivantespreacutefixenom-local
nom-local Un nom qualifieacute preacutefixeacute appartient agrave lrsquoespace de noms associeacute agrave
ce preacutefixe dans lrsquoeacuteleacutement englobant le plus imbriqueacute Un nom qualifieacute non preacutefixeacute
appartient agrave lrsquoespace de noms par deacutefaut deacuteclareacute dans le plus imbriqueacute des eacuteleacutements contenant ce nom srsquoil en existe un
nrsquoappartient pas agrave un espace de noms srsquoil nrsquoexiste pas de deacuteclaration drsquoespace de noms par deacutefaut dans les eacuteleacutements le contenant
lundi 3 octobre 2011
Exemple drsquoespace de noms
Supposons que lrsquoURI defbiblioxml contienne une DTD pour la description de reacutefeacuterences bibliographiques on pourrait rajouter des reacutefeacuterences dans un commentaire de la maniegravere suivante
lta xmlnsb=httpwwww3orgbiblioxmlgt ltagtltcomment xmlnsbiblio=defbiblioxmlgt ltbibliotitregtWhy P = NPltbibliotitregt ltauteurgtJeanltauteurgt
ltcommentgt
lundi 3 octobre 2011
17
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
18
XML Scheacutema
Un scheacutema dun document deacutefinitminus les eacuteleacutements possibles dans le documentminus les attributs associeacutes agrave ces eacuteleacutementsminus la structure du document minus les types de donneacutees
Le scheacutema est speacutecifieacute en XMLminus pas de nouveau langageminus balisage de deacuteclarationminus espaces de nom speacutecifiques xsd ou xs
Preacutesente de nombreux avantagesminus structures de donneacutees avec types de donneacutees minus extensibiliteacute par heacuteritage et ouvertureminus analysable agrave partir dun parseur XML standard
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
Noms qualifieacutes
Tout nom drsquoeacuteleacutement ou tout nom drsquoattribut qui nrsquoest pas une deacuteclaration drsquoespace de noms est un nom qualifieacute ayant lrsquoune des deux formes suivantespreacutefixenom-local
nom-local Un nom qualifieacute preacutefixeacute appartient agrave lrsquoespace de noms associeacute agrave
ce preacutefixe dans lrsquoeacuteleacutement englobant le plus imbriqueacute Un nom qualifieacute non preacutefixeacute
appartient agrave lrsquoespace de noms par deacutefaut deacuteclareacute dans le plus imbriqueacute des eacuteleacutements contenant ce nom srsquoil en existe un
nrsquoappartient pas agrave un espace de noms srsquoil nrsquoexiste pas de deacuteclaration drsquoespace de noms par deacutefaut dans les eacuteleacutements le contenant
lundi 3 octobre 2011
Exemple drsquoespace de noms
Supposons que lrsquoURI defbiblioxml contienne une DTD pour la description de reacutefeacuterences bibliographiques on pourrait rajouter des reacutefeacuterences dans un commentaire de la maniegravere suivante
lta xmlnsb=httpwwww3orgbiblioxmlgt ltagtltcomment xmlnsbiblio=defbiblioxmlgt ltbibliotitregtWhy P = NPltbibliotitregt ltauteurgtJeanltauteurgt
ltcommentgt
lundi 3 octobre 2011
17
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
18
XML Scheacutema
Un scheacutema dun document deacutefinitminus les eacuteleacutements possibles dans le documentminus les attributs associeacutes agrave ces eacuteleacutementsminus la structure du document minus les types de donneacutees
Le scheacutema est speacutecifieacute en XMLminus pas de nouveau langageminus balisage de deacuteclarationminus espaces de nom speacutecifiques xsd ou xs
Preacutesente de nombreux avantagesminus structures de donneacutees avec types de donneacutees minus extensibiliteacute par heacuteritage et ouvertureminus analysable agrave partir dun parseur XML standard
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
Exemple drsquoespace de noms
Supposons que lrsquoURI defbiblioxml contienne une DTD pour la description de reacutefeacuterences bibliographiques on pourrait rajouter des reacutefeacuterences dans un commentaire de la maniegravere suivante
lta xmlnsb=httpwwww3orgbiblioxmlgt ltagtltcomment xmlnsbiblio=defbiblioxmlgt ltbibliotitregtWhy P = NPltbibliotitregt ltauteurgtJeanltauteurgt
ltcommentgt
lundi 3 octobre 2011
17
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
18
XML Scheacutema
Un scheacutema dun document deacutefinitminus les eacuteleacutements possibles dans le documentminus les attributs associeacutes agrave ces eacuteleacutementsminus la structure du document minus les types de donneacutees
Le scheacutema est speacutecifieacute en XMLminus pas de nouveau langageminus balisage de deacuteclarationminus espaces de nom speacutecifiques xsd ou xs
Preacutesente de nombreux avantagesminus structures de donneacutees avec types de donneacutees minus extensibiliteacute par heacuteritage et ouvertureminus analysable agrave partir dun parseur XML standard
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
17
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
18
XML Scheacutema
Un scheacutema dun document deacutefinitminus les eacuteleacutements possibles dans le documentminus les attributs associeacutes agrave ces eacuteleacutementsminus la structure du document minus les types de donneacutees
Le scheacutema est speacutecifieacute en XMLminus pas de nouveau langageminus balisage de deacuteclarationminus espaces de nom speacutecifiques xsd ou xs
Preacutesente de nombreux avantagesminus structures de donneacutees avec types de donneacutees minus extensibiliteacute par heacuteritage et ouvertureminus analysable agrave partir dun parseur XML standard
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
18
XML Scheacutema
Un scheacutema dun document deacutefinitminus les eacuteleacutements possibles dans le documentminus les attributs associeacutes agrave ces eacuteleacutementsminus la structure du document minus les types de donneacutees
Le scheacutema est speacutecifieacute en XMLminus pas de nouveau langageminus balisage de deacuteclarationminus espaces de nom speacutecifiques xsd ou xs
Preacutesente de nombreux avantagesminus structures de donneacutees avec types de donneacutees minus extensibiliteacute par heacuteritage et ouvertureminus analysable agrave partir dun parseur XML standard
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
19
Objectifs des scheacutemas
Reprendre les acquis des DTDminus Plus riche et complet que les DTD
Permettre de typer les donneacuteesminus Eleacutements simples et complexesminus Attributs simples
Permettre de deacutefinir des contraintesminus Existence obligatoire optionnelminus Domaines cardinaliteacutes reacutefeacuterencesminus Patterns
Sinteacutegrer agrave la galaxie XMLminus Espace de nomsminus Infoset (structure darbre logique)
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
20
Le modegravele des scheacutemas
Deacuteclaration des eacuteleacutements et attributs minus Nomminus Typage similaire agrave lorienteacute objet
Speacutecification de types simplesminus Grande varieacuteteacute de types
Geacuteneacuteration de types complexesminus Seacutequence (Sequence)minus Choix (Choice)minus Tas (All)
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
21
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
22
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
23
Les types simples (1)
string minus Confirm this is electric
normalizedString minus Confirm this is electric
token minus Confirm this is electric
byte minus -1 126
unsignedByte minus 0 126
base64Binary minus GpM7
hexBinary minus 0FB7
integer minus -126789 -1 0 1 126789
positiveInteger minus 1 126789
negativeInteger minus -126789 -1
nonNegativeInteger minus 0 1 126789
nonPositiveInteger minus -126789 -1 0
int minus -1 126789675
unsignedInt minus 0 1267896754
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
24
Les types simples (2)
long minus -1 12678967543233
unsignedLong minus 0 12678967543233
short minus -1 12678
unsignedShort minus 0 12678
decimal minus -123 0 1234 100000
float minus -INF -1E4 -0 0 1278E-2 12 INF
NaN double
minus -INF -1E4 -0 0 1278E-2 12 INF NaN
boolean minus true false 1 0
time minus 132000000 132000000-0500
dateTime minus 1999-05-31T132000000-0500
duration minus P1Y2M3DT10H30M123S
date minus 1999-05-31
gMonth minus --05--
gYear minus 1999
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
25
Les types simples (3)
gYearMonth minus 1999-02
gDay minus ---31
gMonthDay minus --05-31
Name minus shipTo
QName minus poUSAddress
NCName minus USAddress
anyURI minus httpwwwexamplecomminus httpwwwexamplecomdochtmlID5
language minus en-GB en-US fr
ID minus A212
IDREFminus A212
IDREFS minus A212 B213
ENTITY ENTITIES NOTATION NMTOKEN NMTOKENS
minus USminus Breacutesil Canada Mexique
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
26
Commandes de base xsd
element association dun type agrave une baliseminus attributs name type ref minOccurs maxOccurs
attribute association dun type agrave un attributminus attributs name type
complexType une composition de typesminus deacutefinit une agreacutegation deacuteleacutements typeacutesminus neacutecessaire pour deacutecrire des attributs
bull simpleType les multiples types de baseminus entier reacuteel string time date ID IDREF hellip minus extensibles par des contraintes
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
27
Les types complexes
Deacutefinition dobjets complexesminus ltxsdsequencegt collection ordonneacutee deacuteleacutements typeacutesminus ltxsdchoicegt choix entre eacuteleacutements typeacutesminus ltxsdallgt tous les eacuteleacutements peuvent ecirctre preacutesents dans nrsquoimporte quel ordre
Les attributs se placent en dernier Exempleltxsdelement name= adresse type= AdresseFRgtltxsdcomplexType name=AdresseFRgt ltxsdsequencegt ltxsdelement name=nom type=xsdstringgt ltxsdelement name=rue type=xsdstringgt ltxsdelement name=ville type=xsdstringgt ltxsdelement name=CP type=xsddecimalgt ltxsdsequencegt ltxsdattribute name=pays type=xsdNMTOKEN fixed=FRgt ltxsdcomplexTypegt
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
28
Heacuteritage de types
Deacutefinition de sous-types par heacuteritageminus Par extension ajout dinformationsminus Par restriction ajout de contraintes
Exemple ltcomplexType name=AdressePaysgt ltcomplexContentgt ltextension base=Adressegt ltsequencegt ltelement name=pays type=stringgt ltsequencegt ltextensiongt ltcomplexContentgtltcomplexTypegt
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
Porteacutee des Nomsltxsdelement name=ldquopersonrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquogt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=ldquofirstnamerdquo type=ldquoxsdstringrdquogt ltxsdelement name=ldquolastnamerdquo type=ldquoxsdstringrdquogt ltxsdsequencegt ltxsdcomplexTypegt ltxsdelementgt ltxsdcomplexTypegt ltxsdelementgt
ltxsdelement name=ldquoproductrdquogt ltxsdcomplexTypegt ltxsdelement name=ldquonomrdquo type=ldquoxsdstringrdquogt ltxsdcomplexTypegt ltxsdelementgt
bull Lrsquoeacuteleacutement nom nrsquoa pas la mecircme signification dans person et dans product =gt Ceci est impossible dans une DTD
29lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
30
Les patterns
Contraintes sur type simple preacutedeacutefini Utilisation dexpression reacuteguliegraveres
minus Similaires agrave celles de Perl Exemple (3 chiffres puis deux majuscules)
ltxsdsimpleType name=NumItemgt ltxsdrestriction base=xsdstringgt ltxsdpattern value=d3-[A-Z]2gt ltxsdrestrictiongt ltxsdsimpleTypegt
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
31
Reacuteutilisation de deacuteclarations
Possibiliteacute de reacutefeacuterencer un eacuteleacutement plus globalminus ltelement ref=Nom gt (ci-dessus)minus La reacutefeacuterence porte sur lrsquoattribut laquo name raquo (ie le nom de lrsquoeacuteleacutement)minus Importe leacuteleacutement et son type
Possibiliteacute dinclure les types associeacutes agrave un espace de nomsminus ltimport nameSpace = http
schemaLocation = http gt
Possibiliteacute deacutetendre un scheacutemaminus ltredefine schemaLocation=http gt
Extensions ltredefinegt
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
Contraintes sur les attributs
Comme pour les DTDs on peut rendre un attribut
bull obligatoire use=rdquorequiredrdquobull ou optionnel use=rdquooptionalrdquo
On peut aussi lui donner une valeur par deacutefaut default = ldquototordquo
32lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
33
XML Schema exempleltxsdschema xmlnsxsd=httpwwww3org2001XMLSchemagt
ltxsdelement name=commande type=CommandeTypegt ltxsdelement name=commentaire type=xsdstringgt ltxsdcomplexType name=CommandeTypegt ltxsdsequencegt ltxsdelement name=livrer type=Adressegt ltxsdelement name=facturer type=Adressegt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=produits type=ProduitTypegt ltxsdsequencegt ltxsdattribute name=date_com type=xsddategt ltxsdcomplexTypegt
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
34
ltxsdcomplexType name=ProduitTypegt ltxsdsequencegt ltxsdelement name=produit minOccurs=0 maxOccurs=unboundedgt ltxsdcomplexTypegt ltxsdsequencegt ltxsdelement name=nom_prod type=xsdstringgt ltxsdelement name=quantitegt ltxsdsimpleTypegt ltxsdrestriction base=xsdpositiveIntegergt ltxsdmaxExclusive value=100gt ltxsdrestrictiongt ltxsdsimpleTypegt ltxsdelementgt ltxsdelement name=prix type=xsddecimalgt ltxsdelement ref=commentaire minOccurs=0gt ltxsdelement name=date_livraison type=xsddate minOccurs=0gt ltxsdsequencegt ltxsdattribute name=num_prod type=xsdpositiveInteger use=requiredgt ltxsdcomplexTypegt ltxsdelementgt ltxsdsequencegt ltxsdcomplexTypegt ltxsdschemagt
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
Reacutefeacuterence agrave un Scheacutema XML
Pour faire reacutefeacuterence agrave un Scheacutema XML dans un document XML il y a deux cas bull Si le Scheacutema nrsquoest pas lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsinoNamespaceSchemaLocation=mon_schemaxsdgt
bull Si le Scheacutema est lieacute agrave un espace de nom ltbalise_racine
xmlnsxsi=httpwwww3org2001XMLSchema-instance xsiSchemaLocation= httpmon-espace-de-nomcom mon_schemaxsdgt
35lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
36
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
37
Comment concevoir DTDSchema
A la mainminus syntaxe complexe devient illisible
Interface graphique IDEminus partir dun fichier dexemplesminus geacuteneacuterer un premier scheacutema via loutil minus modifier le scheacutema graphiquement
A partir de UMLminus deacutecrire donneacutees avec UMLminus geacuteneacuterer un modegravele logique hieacuterarchique
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
38
Diagramme XML Spy
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
39
Diagramme de type (XML Spy)
Seacutequence Choix Tas
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
40
Rappels UML
Modeacutelisation de donneacutees et traitements
Concepts pour les donneacuteesminus paquetage (package)minus classe minus attributminus associationminus agreacutegationminus geacuteneacuteralisation
Contraintesminus associations 0 ou 1 (+)minus attributs avec nul possible ()minus geacuteneacuteralisation exclusive
Diagramme de classes
ou exclusif
Classe1 Classe3
Classe4
Attribut1
SClas-1 SClas-2
Attribut21
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
41
Conception UML de scheacutemas
Possible agrave partir dune modeacutelisation UMLminus Deacutefinir des paquetages de classes et associationsminus Orienter les associations arbreminus Preacuteciser les types de donneacuteesminus Possibiliteacute dheacuteriter de steacutereacuteotypes XML
Voir Modeling XML Applications with UML minus David Carlson A Wesley
Inteacutegrer aux produitsminus Rose Objecteering Designer HyperModel
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
42
De UML agrave XML les choix
Choix des messages (documents)minus agreacutegation deacuteleacutementsminus classes fortement lieacuteesminus N instances
Choix des identifiants et liensminus reacutefeacuterences pour associations
Attributs versus eacuteleacutementsminus les attributs jouent un rocircle descriptif (meacuteta)
Choix des cardinaliteacutesminus obligatoire ou optionnel ()minus 0 () ou 1 (+)
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
43
Produits HyperModel
minus De XML agrave UML minus et vice-versaminus Repreacutesentation XMI du modegravele
UML minus XMI = jargon XML de lOMG
pour modegravele objet minus Traduction en toute sorte de
modegravele logiqueminus Ajoutable agrave Eclipseminus httpxmlmodelingcom
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
44
HyperModel et Eclipse
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
45
Les outils de deacuteveloppement
IDE = Integrated Developement Environment Des eacutediteurs
minus De texte XML parfois avec structure seacutepareacuteeminus De scheacutema XML avec interface graphiqueminus De regravegles XSL avec moteur de transformationminus De requecirctes XQuery avec moteur sur documentminus De description WSDL avec wrapper Web Service
Des interfaces XMLminus Aux fichiersminus Aux bases de donneacuteesminus Aux applications
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
46
Quelques outils de travail
DTD ScheacutemaXSL XPath
XMLMind EditorXML Mind
DTD ScheacutemaXSL XPath
XMLMateInsight Soft
ScheacutemaXML JunctionData Junction
DTD Scheacutema XSL XQuery
OxygenSyncRO Ltd
DTD Scheacutema XSL XQuery
XMLSpyAltova
DTD XSL XQueryScheacutema
Turbo XMLTibco
SupportOutilEditeur
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
47
Plan du cours
Rappelsapprofondissement du cours preacuteceacutedent Codage des caractegraveres Espace de noms Scheacutemas XML Les Outils de Deacuteveloppement XPath
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
Le langage XPathune technologie XML pour le
parcours de lrsquoarbre drsquoun document
httpwwww3orgTRxpath
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
XPath ladressage XML
XPathbull Expressions de chemins dans un arbre XMLbull Permet de seacutelectionner des nœuds par navigation
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
50
XML Path Language (XPath)
XPath 10 est une recommandation du W3C (16111999)
Deacuteveloppeacute pour indiquer des ensembles drsquoeacuteleacutements agrave transformer ou agrave interroger dans XSLT et XQuery
Crsquoest un langage deacuteclaratif permettant de speacutecifier des laquo chemins raquo dans un arbrebull XPath opegravere sur lrsquoarbre drsquoun documentbull Une expression permet de seacutelectionner agrave partir drsquoun nœud
donneacute lrsquoensemble des nœuds accessibles en suivant tous les chemins conformes agrave un modegravele appeleacute chemin de localisation
La syntaxe est proche de celle utiliseacutee pour les chemins drsquoaccegraves dans les systegraveme de fichiers du type UNIX
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
XPath - Expression de chemins
Une expression de chemins speacutecifie une traverseacutee de larbre du document bull depuis un nœud de deacutepartbull vers un ensemble de nœuds ciblesbull les cibles constituent la valeur du cheminement
Un chemin peut ecirctre
bull absolubull commence agrave la racinebull eacutetape1hellipeacutetapeN
bull relatifbull commence agrave un nœud courantbull eacutetape1hellipeacutetapeN
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
52
Exemple expose[daylt7]salletext()
expose
monthFebruary
year2004
day5
document
gdt
speaker Nicolas Baudru
time 12h45
titleNetcharts et HMSC
salle 102
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
53
Expressions XPath - suite
La valeur drsquoune seacutequence de pas de localisation est lrsquoensemble des nœuds laquo agrave lrsquoextreacutemiteacute des chemins raquo deacutenoteacute par cette seacutequence
Une expression XPath permet de reacutecupeacuterer des ensemble de nœuds (node-set) mais eacutegalement (par des fonctions de conversions) des
bull chaicircnes de caractegraveres
bull nombres flottant (conforme agrave la norme IEEE 754)
bull valeurs booleacuteennes
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
54
Contexte drsquoune expression
Le contexte drsquoune expression comprendbull le nœud contexte
bull deux entiers la position contexte et la taille contexte
bull un environnement (ensemble de liaisons variablevaleur)
bull une bibliothegraveque de fonctions preacutedeacutefinies
bull les deacuteclarations drsquoespaces de noms visibles dans lrsquoexpression
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
Syntaxe et seacutemantique
Cheminement eacuteleacutementairebull axeseacutelecteur [predicat]
Directions bull parent ancestor ancestor-or-selfbull child descendant descendant-or-selfbull preceding preceding-sibling following following-siblingbull self attribute namespace
Seacutelecteurbull nom de nœud seacutelectionneacute (eacuteleacutement ou attribut)
Preacutedicatbull [Fonction(nœud) = valeur]
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
56
Expressions simplifieacutee
Il existe trois laquo opeacuterateurs simples raquo permettant de deacutefinir des pas de localisations
eacutetape vide
reacutecupegravere tout les descendants du noeud contexte fils eacuteleacutement element-name[predicates]
enfants laquo eacuteleacutement raquo du noeud contexte de nom element-name et veacuterifiant les conditions predicates
fils attribut attribute-name[predicates]
nœud attribut du noeud contexte de nom attribute-name et veacuterifiant les conditions predicates (optionnelles)
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
57
Exemples
speaker tout les descendants du noeud document qui sont des nœuds eacuteleacutements nommeacute speaker
gdtmonth lrsquoattribut month des eacuteleacutements nommeacutes gdt qui sont les fils du nœud document
gdtexpose[comment] les eacuteleacutements expose qui sont fils de gdt et qui ont un eacuteleacutement comment comme fils
gdt[exposecomment] les eacuteleacutements gdt qui contiennent un fils expose qui contiennent un eacuteleacutement comment
gdtexpose[comment][time] les eacuteleacutements expose qui contiennent un fils comment ET un fils time
gdtexpose[position()=2] le deuxiegraveme eacuteleacutement expose fils de gdt agrave partir de la racine
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
58
Preacutedicats
Les preacutedicats permettent de filtrer les nœuds obtenus agrave partir drsquoune expression
Les preacutedicats sont formeacutes agrave partir de
bull expressions booleacuteennes and or not = bull expressions numeacuteriques + - bull expressions de node-setbull fonctions de node-set position() last() hellip
Agrave partir du node-set S obtenu agrave partir drsquoune expression XPath on eacutevalue le preacutedicat en prenant chacun des nœuds x de S comme contexte la taille de S comme taille du contexte et la laquo position raquo de x dans S comme la position du nœud
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
59
Pas de localisation
Un pas de localisation est caracteacuteriseacute par bull un axebull un test de nœudbull une suite eacuteventuellement vide de preacutedicats
axenode_test [pred_1] hellip [pred_n]
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
60
Axes (ou direction)
Un axe speacutecifie quels sont les nœuds agrave consideacuterer (quelle direction suivre) relativement au nœud contextebull self seacutelectionne le nœud contexte lui-mecircme (comme
avec )
bull child seacutelectionne les enfants du nœud contexte (comme avec elmt_name)
bull descendant seacutelectionne les descendants du nœud contexte (comme avec )
bull parent seacutelectionne le pegravere du nœud contexte (comme avec ) Le pegravere du nœud document correspond au node-set vide
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
61
Axes laquo cousins raquo
preceding-sibling seacutelectionne les fregraveres preacuteceacutedents du nœud contexte
following-sibling seacutelectionne les fregraveres suivants du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement lrsquoaxe est vide)
attribute seacutelectionne tout les nœuds attributs du nœud contexte (si le nœud contexte nrsquoest pas de type eacuteleacutement cet axe est vide)
namespace seacutelectionne tout les nœuds espaces de noms fils du nœud contexte (si le nœud contexte nrsquoest pas un eacuteleacutement cet axe est vide)
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
62
Axes
1
2 1 1 1 2
1 2 3
parent
context (self)
preceding-sibling
following-sibling
child
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
63
Axes - autres
ancestor seacutelectionne les ancecirctres du nœud contexte ancestor-or-self descendant-or-self preceding seacutelectionne les nœuds qui sont avant le nœud
contexte dans lrsquoordre du document mais pas ses descendants (et bien sur pas les nœuds attributs et espace de noms)bull ce sont les eacuteleacutement dont le end-tag apparaicirct avant le start-tag
du nœud contexte following seacutelectionne les nœuds qui sont apregraves le nœud
contexte dans lrsquoordre du document hellipbull ce sont les eacuteleacutement dont le start-tag apparaicirct apregraves le end-tag
du nœud contexte
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
64
Axes
2
14
3 2 1 1
1
3
1 4 5
2 3 6
ancestor
context (self)
preceding
following
descendant
2
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
65
Axes
Un axe a un sens et un typebull Un axe dont les nœuds sont self ou des nœuds qui suivent
self dans lrsquoordre du document est un axe avantbull Un axe dont les nœuds sont self ou des nœuds qui preacutecegravedent
self est un axe arriegraverebull Un axe a un type de nœud principal bull le type de nœud principal de lrsquoaxe attribute est
laquo attribut raquo bull le type de nœud principal de lrsquoaxe namespace est
laquo espace de noms raquo bull le type de nœud principal des autres axes est laquo element raquo
les axes ancestor ancestor-or-self preceding et preceding-sibling sont des axes arriegraveres les autres axes sont des axes avants
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
66
Test de nœud (node_test)
Les axes autres que attribute et namespace capturent des nœuds eacuteleacutements textes commentaires hellip dont le type principal est element Un test de nœud permet de restreindre le node-set obtenus agrave partir drsquoune expression de type element
Un test de nœud permet de restreindre selon le nom du noeudbullelement_name seacutelectionne les nœuds de lrsquoaxe ayant le
mecircme type que le type principal de lrsquoaxe et dont le nom eacutetendu est eacutegal au nom eacutetendu de n bull seacutelectionne les nœuds de lrsquoaxe ayant le mecircme type que le
type principal de lrsquoaxe
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
67
Test de nœud - suite
Le test peut aussi se faire sur le type du nœud node() seacutelectionne tous les nœuds (cas par deacutefaut)
text() seacutelectionne les nœuds textes
comment() seacutelectionne les nœuds commentaires
processing-instruction(target) seacutelectionne les nœuds de lrsquoaxe repreacutesentant une instruction de traitement (proc inst) de nom target
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
68
Exemples
childelement()[position()=2] second fils eacuteleacutement du noeud contexte
descendantnode() tout les nœuds descendants crsquoest-agrave-dire les nœuds eacuteleacutements textes commentaires et proc inst
following-sibling[position()=last()] le dernier des cousins de type eacuteleacutement
childexpose[position()=2]childcommentaire[position()=1] le premier commentaire du second expose
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
69
Preacutedicat et filtrage
Un preacutedicat est destineacute agrave filtrer un ensemble de nœuds Il est composeacute drsquoune expression booleacuteenne appeleacutee expression du preacutedicat
Le filtrage par un preacutedicat est reacutealiseacute relativement agrave un axe dit axe de filtragebull Si le preacutedicat appartient agrave un pas de localisation lrsquoaxe de
filtrage est celui de ce pasbull Si le preacutedicat appartient agrave une expression de filtrage lrsquoaxe de
filtrage est lrsquoaxe child (axe par deacutefaut)
A chaque nœud de lrsquoensemble de nœuds est associeacutee une position de proximiteacute qui est eacutegale agrave la position de ce nœud dans la seacutequence obtenue en triant les nœuds collecteacutes dans le sens de lrsquoaxe de filtrage
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
70
Valeur drsquoun pas de localisation
La valeur drsquoun pas de localisation axetest p1 hellip pn
agrave partir drsquoun nœud contexte n est lrsquoensemble de nœuds En+2 construit de la faccedilon suivante bull E1 = ensemble des nœuds seacutelectionneacutes par lrsquoaxe axe agrave partir
de n
bull E2 = sous-ensemble des nœuds de E1 qui veacuterifient le test de nœud test
bull Pour i de 1 agrave n Ei+2 = filtrage de Ei+1 par le preacutedicat pi
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
71
Valeur drsquoun chemin de localisation
Un chemin de localisation relatif p1hellippn a pour valeur lrsquoensemble de nœuds E2 construit de la faccedilon suivante
bull E1 = nœud contexte
bull Pour i de 1 agrave n
bullE2 =
bullPour chaque nœud n de E1
bullnœud contexte = nbullE2 = E2 cup valeur(pi)
bullE1 = E2
Rappel la valeur drsquoun chemin de localisation absolu c est valeur(c) dans un contexte ougrave le nœud contexte est le nœud racine
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
72
Fonctions de conversion
truefalsextruefalsetruefalseboolean(x)
number(string(x))
10xnombre le plus proche de x si x repreacutesente un nombre NaN
sinon
number(x)
valeur textuelle du nœud de x qui est le 1er dans lrsquoordre du
document
truefalserepreacutesentation de x sous le format
IEEE 754
xstring(x)
non videvidevraifauxnon nulnulnon vide
vide
ensemble de nœuds booleacuteennombrechaicircne
type de x
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
73
Fonctions XPath
ceiling( ) number ceiling(number x) concat( ) string concat(string s1 string s2 hellip) contains( ) boolean contains(string s1 string s2) count( ) number count(node-set set) normalize-space( ) string normalize-space(string s) starts-with( ) boolean starts-with(string s1 string s2) hellip sum( ) number sum(node-set nodes)
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
74
Fonctions de comparaison
Lrsquoexpression v1 op v2 (ougrave op est un des opeacuterateurs = = lt lt= gt ou gt=) est vraie dans les cas suivants et fausse dans les autres bull v1 et v2 sont des ensembles de nœuds et il existe un nœud
n1 de v1 et un nœud n2 de v2 tel que valeur-textuelle(n1) op valeur-textuelle(n2) est vraie
bull v1 est un ensemble de nœuds etbullv2 est un booleacuteen et boolean(v1) op v2 est vraie
bullv2 est une chaicircne ou un nombre et il existe un nœud n de
v1 tel que valeur-textuelle(n) op v2 est vraie
(idem en eacutechangeant v1 et v2)
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
75
Fonctions de comparaison - suite
bull aucun des opeacuterandes nrsquoest un ensemble de nœuds etbullop est = ou = et
bull lrsquoun des opeacuterandes est un booleacuteen et boolean(v1) op boolean(v2) est vraie bull lrsquoun des opeacuterandes est un nombre et number(v1) op
number(v2) est vraie bull lrsquoun des opeacuterandes est une chaicircne et string(v1) op string
(v2) est vraie bullop est lt lt= gt ou gt= et number(v1) op number(v2)
est vraie
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
76
Conversion automatique
Si la valeur v drsquoun preacutedicat nrsquoest pas un booleacuteen elle est convertie en booleacuteen de la faccedilon suivante bull si v est un nombre eacutegal agrave la position contexte v est convertie
en true sinon v est convertie en false bull si v nrsquoest pas un nombre elle est convertie en boolean(v)
Si la valeur v de lrsquoargument drsquoune fonction preacutedeacutefinie nrsquoa pas le type attendu (c-agrave-d celui de lrsquoargument formel correspondant) v est automatiquement convertie si cela est possible en utilisant les fonctions de conversion string number et boolean
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
77
Fonctions sur les ensembles de nœuds
Position et taille contexte les expressions position() et last() ont pour valeurs respectives la position contexte et la taille contexte
Union lrsquoexpression e1 | e2 a pour valeur lrsquounion des ensembles de nœuds valeur(e1) et valeur(e2)
Filtrage lrsquoexpression e[p] produit lrsquoensemble de nœuds obtenu par filtrage de lrsquoensemble valeur(e) par le preacutedicat p Lrsquoaxe de filtrage est lrsquoaxe child
Accegraves par identifiant lrsquoexpression id(idrefs) ougrave idrefs est une suite de noms drsquoidentificateurs seacutepareacutes par des espaces
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
78
Abreacuteviations
Syntaxe normale
childattributedescendant-or-selfnode()selfnode()parentnode()[position()=i]
Syntaxe abreacutegeacutee
(crsquoest lrsquoaxe par deacutefaut)[i]
Si le chemin deacutebute par alors le contexte initial est lrsquoeacuteleacutement racine
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
79
Exemples avec des abreacuteviations
element()[2] second eacuteleacutement fils tout les eacuteleacutements descendant du nœud document text() tout les nœuds textes descendant du nœud
document expose[2]comment[1] premier eacuteleacutement comment du
second exposeacute day tout les nœuds attributs nommeacutes day dans un
descendant du nœud contexte expose[comment]title le titre des exposeacutes qui
contiennent un eacuteleacutement comment
lundi 3 octobre 2011
top related