79
Schémas XML, XPath, et autres... lundi 3 octobre 2011

Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 2: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 3: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 4: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 5: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 6: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 7: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 8: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 9: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 10: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 11: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 12: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 13: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 14: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 15: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 16: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 17: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 18: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 19: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 20: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 21: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 22: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 23: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 24: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 25: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 26: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 27: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 28: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 29: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 30: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 31: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 32: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 33: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 34: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 35: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 36: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 37: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 38: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 39: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 40: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 41: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 42: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 43: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 44: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 45: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 46: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 47: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 48: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 49: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 50: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 51: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 52: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 53: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 54: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 55: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 56: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 57: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 58: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 59: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 60: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 61: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 62: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 63: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 64: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 65: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 66: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 67: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 68: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 69: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 70: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 71: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 72: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 73: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 74: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 75: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 76: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 77: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 78: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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

Page 79: Schémas XML, XPath, et autrespageperso.lif.univ-mrs.fr/~pierre-alain.reynier/XML/files/cours2.pdf · présentation multimédia avec animations (SMIL) ... Chaque caractère UCS est

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