54
XML eXtensible Markup Language

Comprendre XML : les notions fondamentales

Embed Size (px)

Citation preview

Page 1: Comprendre XML : les notions fondamentales

XML eXtensible Markup Language

Page 2: Comprendre XML : les notions fondamentales

XML Introduction

Page 3: Comprendre XML : les notions fondamentales

Introduction• XML est une notation• Méta-langage• une manière d'écrire les informations• Langage descriptif: décrit des propriétés plutôt que des traitements• utilise des balises pour délimiter les informations• Données Hiérarchiques• Compréhensible par un humain et par un ordinateur• Un fichier XML est un fichier texte.• Utilisé pour Echanger les données • Supporte tous les alphabets du monde (UTF8)

Page 4: Comprendre XML : les notions fondamentales

Méta langage

Page 5: Comprendre XML : les notions fondamentales

Utilisation

• XHTML, HTML5• OpenOffice, Microsoft Office Open XML (docx, xlsx, pptx = dossier

zip avec xml + img)• Format graphique : SVG • Les Flux de news : RSS • Les WebServices : XML-RPC et SOAP• JAVA (persistance, hibernate ..), .Net (xaml, dataset …), C++ …• MAthML (échange formule), SMIL(présentation multimédia),   UBL

Rosetta.Net (Universal Business Language : commandes, factures, devis ..) …

• Et bien d’autres …

Page 6: Comprendre XML : les notions fondamentales
Page 7: Comprendre XML : les notions fondamentales

Exemple<BIBLIOTHEQUE>    <ROMAN>        <TITRE>Imajica</TITRE>        <AUTEUR>Clive Barker</AUTEUR>        <PRIX>6</PRIX>    </ROMAN>

    <ROMAN>        <TITRE>Dune</TITRE>        <AUTEUR>Frank Herbert</AUTEUR>        <PRIX>7</PRIX>    </ROMAN>

    <MAGAZINE>        <TITRE>Science et Vie</TITRE>        <DATEPARUTION>2005-02-01</DATEPARUTION>    </MAGAZINE>

    <ROMAN>        <TITRE>Christine</TITRE>        <AUTEUR>Stephen King</AUTEUR>        <PRIX>5</PRIX>    </ROMAN></BIBLIOTHEQUE>

Page 8: Comprendre XML : les notions fondamentales

Exemplede: Julia Royerà: Jean Valjean

Sylvie Picardcc: Luc Royer

Jonas DuprasSujet: InvitationSVP, nous aviser si vous ne pouvez pas y

assister.

<?xml version="1.0" encoding=« utf9" ?><MEMO>

<AUTEUR>Julia Royer</AUTEUR><DESTINATAIRES>

<NOM>Jean Valjean</NOM><NOM>Sylvie Picard</NOM>

</DESTINATAIRES><SUJET>Invitation</SUJET><CC>

<NOM>Luc Royer</NOM><NOM>Jonas Dupras</NOM>

</CC><CORPS><PAR>SVP, nous aviser si vous ne pouvez

pas y assister.</PAR></CORPS>

</MEMO>

Page 9: Comprendre XML : les notions fondamentales

Arbre

Page 10: Comprendre XML : les notions fondamentales

Structure XML• Ensemble de règles qui définissent la grammaire d'un

dialecte XML :– DTD : Définition du type de document !doctype (.dtd) – Schémas XML (.xsd)

• Permet de vérifier la validité d'un document ;• Permet d'exercer des contraintes sur les contenus;• Permet une prévisibilité des contenus pour un type de document

donné.

Valider

Page 11: Comprendre XML : les notions fondamentales

Style XML• Permet de préciser le rendu, la disposition, le formatage

du contenu;– CSS - Cascading Style Sheets– XSL - eXtensible Style Sheets :

• XSL Formating Objects (XSL-FO)• XSL Transformations (XSLT)

Formater / Transformer

Page 12: Comprendre XML : les notions fondamentales

Requêtes sur XML• Parcourir les fichiers xml• Xpath : XML Path Language (chemins fichiers)

• Xquery : langage de requête (SQL)

• Xpointer : un fragment de document XML en ligne (URL)

Trouver / Extraire

Page 13: Comprendre XML : les notions fondamentales

Parsing• SAX : Simple API for XML, parseur

événementiel (java, c++, perl, php …)

• DOM : Document Object Model, parseur orientés hiérarchie (JavaScript, java, c++ …)

Traiter / programmer

Page 14: Comprendre XML : les notions fondamentales
Page 15: Comprendre XML : les notions fondamentales

XML Structure du document XML

Page 16: Comprendre XML : les notions fondamentales

Structure du document XML• Débute par un prologue (facultatif et non répétable)• Contient un et un seul élément racine; (obligatoire et non répétable)• Peut, par la suite, contenir des commentaires, des instructions de

traitement ou des espaces (facultatifs et répétables)

Page 17: Comprendre XML : les notions fondamentales

Le prologue• Une déclaration XML• Des instructions de traitement (<?nom-du-traitement arg1 arg2 argn ?>)• Une déclaration de type de document.

<?xml version="1.0" encoding="iso-8859-1" standalone="no"?><?xml-stylesheet type="text/css" href="maFeuille.css"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Page 18: Comprendre XML : les notions fondamentales

Les éléments• L'élément racine est obligatoire et ne peut être répété dans un

document XML. Il forme le contenu proprement dit du document. L'élément racine peut être vide.

• Un élément (element) se compose d'une balise d'ouverture, d'un contenu et d'une balise de fermeture : <para>Bonjour le monde!</para>

• Lorsque le contenu de l'élément est vide, on peut utiliser la forme abrégée suivante : <para />

Page 19: Comprendre XML : les notions fondamentales

Les attributsUn attribut (attribute) se compose d'un nom d'attribut, d'un indicateur de valeur, et d'une valeur précédée et suivie par des délimiteurs de littéral " ou ‘ : nom-attribut="valeur-attribut"

<personne nom="John" prenom="Smith"/>Ou<personne>

<nom>John</nom><prenom>Smith</prenom>

</personne>

– Les attributs sont toujours situés à l'intérieur de la balise d'ouverture d'un élément.– Les attributs n'ont pas d'ordre;– Chaque attribut doit être précédé d'un espace;

Page 20: Comprendre XML : les notions fondamentales

Sections littérales (section CDATA)

• Les sections littérales constituent un mécanisme qui permet d'insérer dans un document XML une chaîne de caractères qui doit être traitée par le processeur comme étant une chaîne littérale.

• Tout caractère servant de délimiteur sera alors traité comme simple caractère.

<![CDATA[ Voici le <contenu> de la section littérale ]]>

Page 21: Comprendre XML : les notions fondamentales

Commentaires<!-- Voici le contenu du commentaire -->

Page 22: Comprendre XML : les notions fondamentales

XML Les Chemins XPath

Page 23: Comprendre XML : les notions fondamentales

XPath• Permet d’indiquer un ou plusieurs éléments dans un

document xml à l’aide de chemins• Le chemin s’évalue en fonction d’un nœud contexte• A pour résultat :

– un ensemble de nœuds (nodeset)– Une valeur numérique, booléenne ou alphanumérique

• Existe sous une forme abrégé et non abrégé, la forme non abrégé couvre plus de possibilités

Page 24: Comprendre XML : les notions fondamentales

XPath• Une suite d’étape :

– [/]étape /étapex/.../étapen• Chemin absolue (nœud context est la racine) :

– /A/B/@att1 • Chemin relatif (à un nœud contexte)

– A/B/@att1• Une étape comprend trois composants :

– axe::filtre[prédicat1][prédicat2] …– l’axe: relation entre le nœud contexte et ceux sélectionnés – le filtre: type des nœuds qui seront retenus– le(s) prédicat(s): propriétés que doivent satisfaire les nœuds

retenus• On peut faire une union de chemins: //A | B/@att1

Page 25: Comprendre XML : les notions fondamentales

Xpath : fonctionnement• à partir du nœud contexte, on évalue l’étape1; on obtient

un ensemble de nœuds;• on prend alors, un par un, les nœuds de cet ensemble,

et on les considère chacun à leur tour comme nœud contexte pour l’évaluation de l’étape 2;

• à chaque étape, on prend successivement comme nœud contexte chacun des nœuds faisant partie du résultat de l’étape précédente.

Page 26: Comprendre XML : les notions fondamentales

Xpath : les axesAxe résultat

ancestor tout les ancêtres (parent, grandparent ..) du nœud contexte

ancestor-or-self Tout les ancêtres du nœud contexte et le nœud contexte lui-même

attribute Tout les attribut du nœud contexte

child Tout les fils du nœud courant. (axe par défaut, peut être omis)

descendant Tout les descendants (fils, petit fils ..)

descendant-or-self Les descendants et le nœud contexte

following Tout ce qui se trouve dans le document apres la balise de fermeture du nœud courant

following-sibling Les nœuds frères qui suivent le nœud contexte

namespace Tout les nœuds espace de nom du nœud contexte

parent Le nœud parent du nœud courant

preceding Les nœuds qui précédent le nœud courant sauf les parents, ancêtres, attributs et namespace

preceding-sibling Les nœuds frères avant le nœud courant

Self Le nœud contexte lui même

Page 27: Comprendre XML : les notions fondamentales

Xpath : les axes

Page 28: Comprendre XML : les notions fondamentales

Xpath : les axes

Page 29: Comprendre XML : les notions fondamentales

Xpath : filtrer par type de noeud

• text() : nœud de type texte• comment() : nœud de type commentaire• processing-instruction() : nœud de type

instruction de traitement• node() : tout type de nœud

Page 30: Comprendre XML : les notions fondamentales

Xpath : les operateurs

+ - * div mod= != < > <= >=

or and

Page 31: Comprendre XML : les notions fondamentales

Xpath : Fonctions• string-length( ... ) : longueur d’une chaîne • starts-with( chaîne1, chaîne2 ) : tester si chaîne1 commence par chaîne2 • substring( chaîne1, position1, longueur) : extraction d’une sous-chaîne • normalize-space( chaîne ) : normalisation des occurrences de blancs à 1

blanc ;suppression des blancs d’en-tête et de fin • translate( chaîne, caractères source, caractères destination ) : convertit dans la

chaîne tous les caractères source par leur correspondance (en fonction de la position) dans le dernier argument

• number( chaîne ) : conversion en nombre • string( expression ) : conversion en chaîne • concat( chaîne1, chaîne2 ) : concaténation • contains( chaîne1, chaîne2 ) : tester si chaîne1 contient chaîne2 • floor( nombre décimal ) : arrondi inférieur (10.9 devient 10, par exemple) • ceil( nombre décimal ) : arrondi supérieur (10.1 devient 11, par exemple) • round( nombre décimal ) : arrondi au plus juste (10.4 devient 10 et 10.6 devient 11,

par exemple)

Page 32: Comprendre XML : les notions fondamentales

Xpath : Fonctions• count( NodeSet? ) : nombre de noeuds (avg , min , max, sum )• position() : position courante commençant par 1• last( NodeSet? ) : dernière position • name( NodeSet? ) : nom du noeud (tag s’il s’agit d’un élément) avec préfixe éventuel • local-name( NodeSet? ) : nom du noeud sans préfixe • namespace-uri( NodeSet? ) : espace de noms • generate-id( NodeSet? ) : génération d’un identifiant unique• not() : la négation booléenne• …

Page 33: Comprendre XML : les notions fondamentales

Xpath : prédicatExpression Description

/bookstore/book[1] Selectionne le premier element enfant book

/bookstore/book[last()] Selectionne le dernier element enfant book

/bookstore/book[last()-1] L’avant dernier element enfant book

/bookstore/book[position()<3] Les deux premiers elements enfant book

//title[@lang] Selectionne tout les titres qui ont un attribut lang

//title[@lang='eng'] Selectionne tout les titre qui ont un attribut lang qui vaut eng

/bookstore/book[price>35.00] Tout les éléments book enfant de l’element racine bookstore qui ont un élément price avec une valeur supérieur à 35

/bookstore/book[price>35.00]/title Selects all the title elements of the book elements of the bookstore element that have a price element with a value greater than 35.00

Page 34: Comprendre XML : les notions fondamentales

Xpath : abréviationsExpression Descriptionnodename Sélectionne tout les nœud nommés "nodename"/ Sélectionne depuis le nœud racine

//Sélectionne depuis le nœud contexte tout les nœuds correspondant au critères quelque soit leur niveau dans le document

. Sélectionne le nœud courant

.. Sélectionne le nœud parent@ Sélectionne l’attribut* N’importe quel élément@* N’importe quel attributnode() N’importe quel noeud

Page 35: Comprendre XML : les notions fondamentales

Exemple• child::B[child::C]

– B[C]• /descendant::B[attribute::att1and attribute::att2]

– //B[@att1 and @att2]• child::B[position()=last() - 1]

– B[last()-1]• Following-sibling::B[position()=1]

– Following-sibling::B[1]

Page 36: Comprendre XML : les notions fondamentales

XML Les Styles CSS / XSLT

Page 37: Comprendre XML : les notions fondamentales

Lier un fichier XML avec CSSAprès la déclaration xml dans le prologue du fichier xml :

<?xml-stylesheet href= " style.css" type="text/css"?>

Page 38: Comprendre XML : les notions fondamentales

Exemple CSS<contact>

<nom>Logan Lee</nom><tel type="mobile">03 28 41 26 20</tel><tel type="bureau">04 01 49 94 42</tel><tel type="domicile">04 29 79 52 15</tel><email>[email protected]</email><adresse>546 Rutrum Street</adresse><ville>Gentbrugge</ville>

</contact><contact>

<nom>Alisa Brady</nom><tel type="mobile">08 56 96 88 56</tel><tel type="bureau">02 20 31 78 32</tel><tel type="domicile">01 76 46 92 49</tel><email>[email protected]</email><adresse>P.O. Box 557, 1452 Orci Ave</adresse><ville>Gap</ville>

</contact>

Page 39: Comprendre XML : les notions fondamentales

Exemple CSScontact{

display:block;width:50%;border: 4px inset #06F;

}nom{

font-weight:bold;color:#006;display:block;text-align:center;

} tel{

display:block;margin-left:20px;

}tel:before{

content:attr(type) " : ";}

Page 40: Comprendre XML : les notions fondamentales

XSLT• Fichier XML

– <?xml version="1.0" encoding="utf-8"?>– un namespace "http://www.w3.org/1999/XSL/Transform"– Un élément racine xsl:stylesheet

• Appliqué à un fichier XML (comme CSS)– <?xml-stylesheet href= " style.xsl" type="text/xsl"?>

• Ensemble de règles / modèles de transformation : les templates– xsl:template

• Les transformations XSL seront appliqué au fichier xml par un processeur (java : Saxon et Xalan, php5 : XSLTProcessor .NetFramework : XslCompiledTransform, les navigateurs ..)– Pour googleChrome la transformation requiert un serveur web

• Transforme un document XML (arbre source) en un autre document (arbre résultat, output )

• Le résultat est un fichier html, svg, fichier texte, pdf, un autre fichier xml …

Page 41: Comprendre XML : les notions fondamentales

XSLT<?xml version="1.0" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">...</xsl:stylesheet>

Page 42: Comprendre XML : les notions fondamentales

XSLT fonctionnement• Un processeur XSLT traite un document XML en parcourant

les éléments de l’arbre XML correspondant, et en appliquant à certains d’entre eux une règle de transformation choisie parmi l’ensemble des règles constituant le programme XSLT

• Un fichier XSLT contient un ensemble de règles (modèles) :– <xsl:template match="...">

• Une règle se compose de : – un motif (pattern) en xpath indique si l’élément courant est à

traiter ou non– Un modèle de transformation (template) : qui dit par quoi

remplacer l’élément courant (sil correspond au motif)

Page 43: Comprendre XML : les notions fondamentales

XSLT : modèle<xsl:template match="...pattern...">

<!-- modèle de transformation -->...<!-- fin du modèle de transformation -->

</xsl:template>

• Le modèle le plus spécifique est le premier à être appliqué– on peut préciser la priorité avec l’attribut priority

• Un modèle contient du texte et/ou des instructions xsl

Page 44: Comprendre XML : les notions fondamentales

XSLT : les instructions• on peut mettre des instructions xslt dans le modèle

<xsl:instruction> ... </xsl:instruction>• Le résultat d’une instruction est un texte

– En exception les deux expression <xsl:apply-templates> et <xsl:for-each> qui produisent une liste de nœuds sources à traiter

• Instructions de premier niveau :– <xsl:output method=‘ …type...‘ encoding=‘…' />– <xsl:template match="...">

Page 45: Comprendre XML : les notions fondamentales

XSLT : les instructions• Exemple d’instructions :

– <xsl:value-of select="... chemin de localisation ..." /> est remplacée par la valeur (textuelle) de la sélection

– <xsl:copy-of select="..."/> est instanciée sous la forme d’une copie conforme des éléments sélectionnés. (xsl:copy : Copie le noeud courant )

– <xsl:if test=" ... expression XPath ... "> Si la valeur de l’attribut test est égale à true, le modèle de transformation associé est instancié ; sinon, il ne l’est pas

Page 46: Comprendre XML : les notions fondamentales

XSLT : les instructions• Exemple d’instructions :

– <xsl:apply-templates/> est remplacée par le fragment de document qui résulte du traitement de la liste des enfants du noeud courant

– <xsl:for-each select="... chemin de localisation ..."> est remplacée par le fragment de document qui résulte du traitement de la liste des noeuds sélectionnés par son attribut select="…"

– <xsl:sort select=“…" data-type=“…"/> est une instruction de tri qui ne s’emploie que comme complément à xsl:apply-templates ou xsl:for-each : elle sert à trier le node-set sélectionné par l’une de ces deux instructions.

Page 47: Comprendre XML : les notions fondamentales

XSLT : les instructions<xsl:choose>

<!-- autant de xsl:when que l'on veut, mais au moins 1 en tout --><xsl:when test=" ... expression XPath ... ">

<!-- modèle de transformation --><!-- fin du modèle de transformation -->

</xsl:when><xsl:when test=" ... expression XPath ... ">

<!-- modèle de transformation --><!-- fin du modèle de transformation -->

</xsl:when> ...

<!-- l'élément xsl:otherwise est facultatif --><xsl:otherwise>

<!-- modèle de transformation --> <!-- fin du modèle de transformation -->

</xsl:otherwise></xsl:choose>

Page 48: Comprendre XML : les notions fondamentales

XSLT : les instructions• <xsl:text> : insérer un texte non balisé (espaces blancs)

– Si les espaces proviennent du fichier xml utiliser la fonction XPath normalize-space() ou l’instruction xslt <xsl:strip-space>

• <xsl:element name="xxx"> : produit dans le document résultat un élément XML de la forme <xxx> ... </xxx>, dont le nom est fourni par l’attribut name, et dont le contenu est le résultat de l’instanciation du modèle de transformation associé

• <xsl:attribute> : permet de créer un nouvel attribut, dont le nom est fourni par l’attribut name, et la valeur par le modèle de transformation associé. Il est mis dans un xsl:element ou dans un élément literal

• <xsl:attribute-set> : permet de définir un ensemble d’attributs qui pourront être attachés en une seule fois à un élément en utilisant l’instruction <xs:element name="..." use-attribute-sets="...">, ou bien en utilisant un élément source littéral avec un attribut <xsl:use-attribute-sets="..."

Page 49: Comprendre XML : les notions fondamentales

Apply-templates• L'élément <xsl:apply-templates> sélectionne d'abord une collection de

nœuds à l'aide de l'expression spécifiée dans l'attribut select. Si cet attribut n'est pas spécifié, tous les enfants du nœud actuel sont sélectionnés. 

• Pour chacun des nœuds sélectionnés, <xsl:apply-templates> demande au processeur XSLT de trouver un <xsl:template> approprié à appliquer. Pour vérifier si les modèles sont applicables, le processeur compare le nœud à l'expression XPath spécifiée dans l'attribut match du modèle. 

• Si plusieurs modèles sont applicables, celui qui possède la plus haute priorité est choisi. Si plusieurs modèles ont la même priorité, celui qui apparaît en dernier dans la feuille de style est sélectionné.

• Si aucun modèle n’est trouvé le processeur appliquera un modèle par défaut

Page 50: Comprendre XML : les notions fondamentales

Les modèles par défaut<xsl:template match="text()|@*“>

<xsl:value-of select="."/></xsl:template>

<xsl:template match="text()|@*"> <xsl:value-of select="."/>

</xsl:template>

<xsl:template match="processing-instruction() | comment()"/>

Page 51: Comprendre XML : les notions fondamentales

Identity transform

<xsl:template match="/ | @* | node()"><xsl:copy>

<xsl:apply-templates select="@* | node()" /></xsl:copy>

</xsl:template>

Page 52: Comprendre XML : les notions fondamentales

Les modes• traiter un même élément du document XML source plusieurs fois de

plusieurs façons différentes dans une même transformation 

<xsl:template match="/"><h2>Table des Matières</h2><xsl:apply-templates select="titre" mode="tdm"/> <h2>Contenu</h2> <xsl:apply-templates select="titre" mode="contenu"/>

</xsl:template>

<xsl:template match="titre" mode="tdm"> ... </xsl:template><xsl:template match="titre" mode="contenu"> ... </xsl:template>

Page 53: Comprendre XML : les notions fondamentales

Transformation sous PHP<?php

$doc = new DOMDocument();$doc->load( "carnet.xml" );$xsl = new XSLTProcessor();$xslt = new DOMDocument();$xslt->load( "carnet.xslt" );$xsl->importStyleSheet( $xslt );echo $xsl->transformToXML($doc);

?>

NB: dans le fichier php.ini activer l’extension XSLT en enlevant le point-virgule avant la ligne : extension=php_xsl.dll

Page 54: Comprendre XML : les notions fondamentales

Transformation sous JAVAimport javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.stream.StreamResult;import javax.xml.transform.stream.StreamSource;

TransformerFactory factory = TransformerFactory.newInstance();Transformer t = factory.newTransformer(

new StreamSource("carnet.xslt" ) );t.transform(new StreamSource("carnet.xml" ),

new StreamResult("c:/carnet.html" ) );