XML : rappels - Université de Cergy

publicité
XML : rappels
Dan VODISLAV
Université de Cergy-Pontoise
Master Informatique M2
Plan
• XML: principes, syntaxe
• Schémas XML: DTD et XML Schema
• XPath
Page 2
XML: eXtensible Markup Language
• Langage de description de documents structurés
– Utilisation de balises pour définir une structure (balisage structurel)
• Standard W3C pour l’échange et la publication de données sur le web
Ex:
Bibliographie
• G. Gardarin, XML : des bases de données aux services web, Dunod, 2003
• S. Abiteboul, N. Polyzotis, The Data Ring, CIDR, 2007
<bibliographie>
<ouvrage année="2003">
<auteur>G. Gardarin</auteur>
<titre>XML : Des Bases de Données aux Services Web</titre>
<éditeur>Dunod</éditeur>
</ouvrage>
<ouvrage année="2007">
<auteur>S. Abiteboul</auteur>
<auteur>N. Polyzotis</auteur>
<titre>The Data Ring</titre>
<conférence>CIDR</conférence>
</ouvrage>
</bibliographie>
Page 3
Syntaxe XML
• Un document XML contient:
– Un prologue: présence facultative, mais fortement conseillée
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE document SYSTEM "document.dtd">
– Un arbre d’éléments: obligatoire
<document>
<salutation>Bonjour!</salutation>
</document>
– Des commentaires et des instructions de traitement: facultatifs
<!–- Ceci est un commentaire -->
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
Page 4
Arbre d’éléments
• Un document est formé d’une hiérarchie (arbre) d’éléments
– L’arbre a un élément racine unique
– Le contenu d’un élément est délimité par des balises
– Tout élément fils est inclus dans son parent : <a><b></a></b> n’est pas correct
• Un élément est de la forme: <nom
attr='valeur'> contenu </nom>
– <nom> : balise d'ouverture
– </nom> : balise de fermeture, obligatoire (sauf pour les éléments vides <nom/>)
• nom formé de lettres, chiffres, ‘_’, ‘-’, ‘.’, ‘:’ (signification spéciale)
• commence par une lettre ou par ‘_’ et ne commence pas par les caractères « xml »
– contenu : contenu d'un élément
• vide, texte, autres éléments, imbrication de texte et d ’autres éléments
• instructions de traitement, commentaires
– attr='valeur' : ensemble éventuellement vide d'attributs
• la valeur doit être délimitée par des apostrophes ou des guillemets
<rapport langue='fr' dern-modif='08/07/99'>
Page 5
Les DTD
• DTD = grammaire pour la structure des documents
– Facultative, interne ou externe au document
– Contient des déclarations pour les éléments, attributs, entités, notations utilisés
• Avantages de l’utilisation de DTD
– Partage d’une même structure entre plusieurs documents, structures « standard »
pour une communauté
– Vérification stricte et automatisable de la correction des documents
Document
DTD
<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>
<!DOCTYPE document SYSTEM "accueil.dtd">
<document type='exemple'>
<salutation> Bonjour! </salutation>
</document>
<!–- fichier accueil.dtd. Exemple de DTD simple -->
<!–- Définition de
<!ELEMENT document
<!–- Définition de
<!ATTLIST document
l'élément racine -->
(salutation)>
l’attribut type pour l’élément document -->
type CDATA #IMPLIED>
<!–- Un élément salutation ne contient que du texte -->
<!ELEMENT salutation (#PCDATA)>
Page 6
Déclaration d’éléments
<!ELEMENT nom modèle>
• Modèles de contenu
– Sous-éléments : plusieurs façons de les combiner
• séquence : <!ELEMENT chapitre (titre,intro,section)>
• alternative :
<!ELEMENT chapitre
(titre,intro,(section|sections))>
• indicateurs d'occurrence: * (0-n), + (1-n), ? (0-1)
<!ELEMENT chapitre (titre,intro?,section+)>
<!ELEMENT section (titre-section,texte-section)>
<!ELEMENT texte-section (p|f)*>
– Données : texte
<!ELEMENT p (#PCDATA)>
Page 7
Modèles de contenu pour les éléments (suite)
• Mixte : mélange de texte et de balises (comme dans HTML)
<!ELEMENT p (#PCDATA|em|exposant|indice|renvoi)*>
• Libre : contenu bien formé, mais sans restrictions
<!ELEMENT p ANY>
• Vide : pas de contenu, seuls les attributs sont importants
<!ELEMENT p EMPTY>
– Exemple
<!ELEMENT p (#PCDATA|bibref)* >
<!ELEMENT bibref EMPTY>
<!ATTLIST bibref ref IDREF #REQUIRED>
– utilisation:
<p> consulter <bibref ref='REF-19980210'/> </p>
Page 8
Déclaration d’attributs
<!ATTLIST nom-élém nom-attr type-attr décl-défaut
nom-attr type-attr décl-défaut …
>
– Pour un élément donné on décrit la liste de ses attributs
– Chaque attribut: un nom, un type et une valeur par défaut
– Remarque: l’ordre des attributs n’est pas important
Ex. <!ELEMENT ex (#PCDATA)>
<!ATTLIST ex cible ID #REQUIRED
propriétaire CDATA #IMPLIED
nb (1 | 2 | 3) '1' >
• Valeur par défaut d'un attribut
– La valeur en question donnée explicitement
– #REQUIRED : attribut obligatoire, valeur à être précisée dans le document
– #IMPLIED : attribut facultatif, valeur à être précisée dans le document
– #FIXED (suivi de la valeur) : valeur de l’attribut fixée pour tout élément instance
Page 9
Attributs de type ID et IDREF
• Permettent de créer des renvois à l'intérieur d'un document
– ID: identifie l’élément référencé, IDREF: crée le renvoi
– Transforment la structure d’arbre du document en graphe
• Exemple
DTD
<!ELEMENT personne (nom, …)>
<!ATTLIST personne num ID #REQUIRED>
<!ELEMENT livre (titre, auteur+, …)>
<!ELEMENT auteur EMPTY>
<!ATTLIST auteur ref IDREF #REQUIRED>
Document
<personne num=‘p1’><nom>Gardarin</nom></personne>
<personne num=‘p2’><nom>Valduriez</nom></personne>
<livre>
<titre>Bases de données</titre>
<auteur ref=‘p1’/>
<auteur ref=‘p2’/>
</livre>
Page 10
Documents bien formés et documents valides
• Document XML bien formé : document correct sans DTD
– le prologue ne contient pas de déclaration de type de document (DTD)
– contient un arbre d'éléments correct
<?xml version="1.0" standalone="yes" ?>
<document>
<salutation>Bonjour!</salutation>
</document>
• Document XML valide : document correct avec DTD
– son prologue contient une déclaration de type de document (DTD)
– son arbre d'éléments respecte la structure définie par la déclaration de type
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
<!DOCTYPE document [
<!ELEMENT document (salutation)>
<!ELEMENT salutation (#PCDATA)>
]>
<document>
<salutation>Bonjour!</salutation>
</document>
Page 11
Formes sérialisée et arborescente
• Forme sérialisée d’un document/élément
– Chaîne de caractères (texte) incluant balises et contenu textuel
Exemple
<lettre type='court'><salutation>Bonjour!</salutation><fin>Au
revoir</fin></lettre>
ou avec un peu de mise en forme
<lettre type='court'>
<salutation>Bonjour!</salutation>
<fin>Au revoir</fin>
</lettre>
• Forme arborescente
– Utilisée par les applications, modèle DOM (W3C)
lettre
type
court
salutation
fin
Bonjour!
Au revoir
Page 12
DTD et XML Schema
• Limitations des DTD
– Peu de types de contenu et d’attributs (essentiellement du texte) vérif. limitée
– Les DTD ne sont pas en format XML!
• Standard pour les schémas XML plus avancés XML Schema
–
–
–
–
Format XML
Une large palette de types: entiers, réels, dates, booléens, etc.
Contraintes d’intégrité: notions de clé, unicité
…
• Exemple: type complexe CinemaType
– Nom (string)
– Adresse (AdresseType, complexe)
– Séances (SeanceType, complexe)
DTD
<!ELEMENT Cinema (Nom, Adresse, Seance*)>
<!ELEMENT Nom (#PCDATA)>
<!ELEMENT Adresse (Ville, Rue, Numero)>
...
Page 13
Exemple (suite)
XML Schema
<xsd:element name=’Cinema’ type=’CinemaType’/>
<xsd:complexType
<xsd:sequence>
<xsd:element
<xsd:element
<xsd:element
name=’CinemaType’>
name=’Nom’ type=’xsd:string’/>
name=’Adresse’ type=’AdresseType’/>
name=’Seance’ type=’SeanceType’
minOccurs=’0’ maxOccurs=’unbounded’/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name=’AdresseType’>
<xsd:sequence>
<xsd:element name=’ville’ type=’xsd:string’/>
<xsd:element name=’rue’ type=’xsd:string’/>
<xsd:element name=’numero’ type=’xsd:decimal’/>
</xsd:sequence>
</xsd:complexType>
Page 14
XPath
• Langage de sélection d’un ensemble de nœuds dans un document XML
– Utilise des expressions de chemin pour désigner des nœuds dans l’arbre
– Les expressions XPath sont utilisées dans d’autres langages: XSLT, XQuery, …
• Une expression de chemin XPath
– S’évalue en fonction d’un nœud contexte
– Désigne un ou plusieurs chemins dans l’arbre du document à partir du nœud
contexte
– A pour résultat un ensemble de nœuds de l’arbre (qui se situent au bout des
chemins)
• Types de nœuds
– Document, Element, Attribute, Text, Comment, ProcessingInstruction
• XPath offre aussi des expressions littérales (texte, numérique, booléen)
• Ex: 1 + 2
Page 15
Syntaxe XPath
• Expression de chemin: suite d’étapes
[/]étape1/étape2/…/étapen
• Idée: chaque étape successive détermine un ensemble de nœuds
– Une étape utilise chacun des nœuds désignés par l’étape précédente
comme nœud contexte pour la suite de l’évaluation
• Étape = axe::filtre[prédicat1]…[prédicatn]
Exemple: child::B[position()=1] (abréviation: B[1])
– Axe: optionnel (par défaut child)
• Spécifie un ensemble des nœuds par rapport au nœud contexte + un ordre
– Filtre: obligatoire, décrit le sous-ensemble de nœuds de l’axe retenu
– Prédicats: optionnels, décrivent les conditions à satisfaire par les nœuds
• Combinés par l’opérateur "ET" logique
Page 16
Axes XPath
• Douze axes
–
–
–
–
–
–
–
–
–
–
–
–
child (axe par défaut): enfants directs du nœud contexte
parent (..): nœud parent
attribute (@): nœuds attribut du nœud contexte
descendant (//): nœuds descendants du nœud contexte
descendant-or-self: descendants, y compris le nœud contexte
ancestor: nœuds ancêtres du nœud contexte
ancestor-or-self: ancêtres, y compris le nœud contexte
following: nœuds suivants dans l’ordre du document
following-sibling: frères suivants dans l’ordre du document
preceding: nœuds précédents dans l’ordre du document
preceding-sibling: frères précédents dans l’ordre du document
self (.): le nœud contexte lui-même
• Attributs: seul l’axe attribute désigne des nœuds attribut !
Page 17
Filtres et prédicats
• Filtres: deux façons de filtrer les nœuds d’un axe:
– Par leur nom
• Pour les nœuds qui ont un nom (Element, Attribute, ProcessingInstruction)
– Par leur type
• text(), comment(), processing-instruction()
• * : nœuds de type élément ou attribut
• node() : tous les types de nœud
• Prédicat: tests connectés par les opérateurs logiques "ET" et "OU"
– Négation: par la fonction not()
• Test = expression booléenne élémentaire: comparaison, fonction booléenne
– Expression de chemin convertie en booléen
• Ensemble de nœuds: false si l’ensemble est vide, sinon true
• Numérique: false si 0 ou NaN (« not a number »), sinon true
• Chaînes de caractères: false si chaîne vide, sinon true
Page 18
Fonctions XPath
• Pour nœuds
– count(expr): nombre de nœuds dans l’ensemble produit par l’expression
– name(): nom du nœud contexte
• Pour chaînes de caractères
– concat(ch1, ch2, …): concaténation
– contains(ch1, ch2): vérifie si ch1 contient ch2
– substring(ch, pos, l): extrait la sous-chaîne de ch de longueur l, commençant à la
position pos (les positions démarrent à 1)
– string-length(ch): longueur de la chaîne
• Pour booléens
– true(), false(): les valeurs vrai/faux
– not(expr): négation de l’expression logique
• Pour numériques
– sum(expr): somme des valeurs des nœuds produits par l’expression
– avg(expr): moyenne des valeurs des nœuds produits par l’expression
Page 19
Exemples
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
D
D/text()
descendant::node()
..
following::node()
preceding-sibling::node()
//@att1
/A//D
/comment()
../*
/A/B//text()[1]
/A//text()[1]
//B[@att1="a2"]/D
/A/B[last()]
//B[count(D)>1]
/A/C[not(D)]
/A[B[D="Texte1"]/@att1]/C/@att2
Page 20
Téléchargement