Langage de structuration des données: XML Adrien Vieilleribière vieille@lri.fr 2010.05.21
Qu’est-ce que XML? eXtended Markup Language Langage universel d’échange de données Méta-langage
Plan I) Introduction II) Langages d’arbres Historique Objectifs Document XML II) Langages d’arbres DTD XML Schéma XML III) Requêtes et manipulation Xpath XSL, XSLT DOM, SAX IV) Applications
Historique 1974 à 1986 Standard Generalized Markup Language Norme ANSI et ISO 8879 1998 eXtensible Markup Language W3C 1990 HyperText Markup Language CERN-W3C 2000 eXtensible HyperText Markup Language W3C
Introduction : Plan Historique XML SGML HTML Pourquoi ? Documents bien formés Syntaxe
Structure de documents SGML Indépendance Conformité Problèmes Trop complexe pour la réalisation des navigateurs Structure de documents Représentation physique Mise en page Visualisation Indépendant
HTML : HyperText Markup Language Jeu fini de balises destiné à décrire des pages WEB dans une optique de présentation Propriétés Langage simple, facile à écrire Mise en œuvre rapide Permet la navigation au travers des pages d’information via les liens Intégration de médias (image figée, images animées, fichier audio)
Applications HTML portables sur tous les Environnements Station Unix Internet données Ordinateur portable Serveur Web Station Linux Quelque soit le type de demandeur de la page web, le serveur web lui renvoie une page web au format HTML
HTML : HyperText Markup Language Structure générale d’un document html <html> <head> section des informations non affichables <title> indique le titre non affichable du document </title> </head> <body> Indique la section des informations affichables </body> </html>
HTML: Exemple
Limites du HTML Pages statiques et n’interagissant pas avec l’utilisateur => DHTML Dynamic HTML portion de code en script s’exécutant dans le navigateur WEB Script client NON portable Ensemble prédéfini de balises avec attributs prédéfinis Description physique et structurelle mêlée
XML: Un standard Consortium W3C (World Wide Web Consortium) Sociétés impliquées dans la technologie WEB + éditeurs de logiciels Sociétés respectant XML : Netscape, IBM, Sun MicroSystem, Oracle, Microsoft, Hewlett Packard, Adobe System, etc… (XML) 1.0 (Fifth Edition) 1996 Première version de XML (Sous ensemble de SGML) 1998 projet XML est devenu un standard (XML) 1.0(First Edition) 2006 XML 1.1 (Second Edition) 2008 XML 1.0 (Fifth Edition)
XML: Objectifs Créer une technologie universelle pour structurer l’information Adapté à la diffusion et à l’échange d’information Langage extensible d’expressions standardisées Indépendant des plates-formes, et des systèmes d’exploitation Séparation du fond et de la forme
XML et HTML XML repose sur l’utilisation et la création des balises Gaston Lagaffe Date de naissance: 30/03/1976 Adresse: Journal Spirou 355 Paris Cedex 75116 France Taille: 180 Poids : 70 Représentation d’un auteur en HTML et XML ?
XML et HTML XML crée librement des balises pour marquer les éléments … <head><title>adresse Gaston</title></head> <body> <h2> Gaston Lagaffe </h2> <table><tr><td> <i> date de naissance</i> </td> <td> 30/03/1976</td> </tr> <tr><td> <i> adresse</i> </td> <td> Journal Spirou <br> bp 355 <br> F-75116 Paris Cedex </td> </tr> <tr><td> <i>taille :</i></td> <td> 180 </td></tr> <tr> <td> 70 kg :</td></tr> </table> </body> </html> … <auteur> <prenom>Gaston</prenom> <nom>Lagaffe</nom> <date_naissance>30/03/1976</date_naissance> <adresse> <compagnie>Journal Spirou</compagnie> <boite_postale>355</ boite_postale > <ville> Paris Cedex </ville> <code_postal>75116</ code_postal > <pays code="ISO-3166"/> </adresse> <taille unite="cm">180</taille> <poids unite="kg">70</ poids > </auteur> XML crée librement des balises pour marquer les éléments
XML : Les données Informations -> structure arborescente auto descriptive Deux éléments Structure des données Données auteur naissance adresse taille poids compagnie Boite-postale ville Code_postal pays
HTML: Description physique et structurelle mélée Balises physiques : représentation fixe quel que soit l’outil de génération de document h1, h2..h6 center b i small … Balise logique : signification sur le nature de leur contenu mais leur représentation dépend de l’outil de génération title, dl, blockquote… XML Balises structurelles et logiques : Représentation dépend de leur feuille de style associée
Document XML : syntaxe (1/3) Arbre d’éléments (balise de fin obligatoire) <unElement> <UnSousElement> </UnSousElement> … </unElement> Element vide <unElementVide/>
Document XML : syntaxe (2/3) Contenu <unElement> une donnée textuelle </unElement> Attributs et valeurs <unElement unAttribut=“uneValeur”></unElement> Sensibilité à la casse <unElement> </UNELEMENT> incorrect!
Document XML : syntaxe (3/3) Section CDATA <![CDATA[ < < ceci est du texte: ]]> Commentaires <!-- ce commentaire finit ici --> Caractères Jeu de caractères international UNICODE Exemple d’encodage UTF-8 ou UTF-16
eXtensible HyperText Markup Language Evolutions eXtensible HyperText Markup Language Le XHTML est un langage identique au langage HTML mais respectant la syntaxe définie par XML. HTML5 Vocabulaire et API associées pour HTML et XHTML http://www.w3.org/TR/html5/
II) Langages d’arbres : plan Validité DTD Syntaxe Entités Schéma XML
Document XML valide Conforme à définissent un type de structure une DTD (Document Type Definition) à un schéma XML à un schéma REALAX NG définissent un type de structure Une DTD XML est associée à une DTD SGML conforme Passerelles existantes entre formalismes (Trang, XSD to RelaxNG, NekoDTD…)
DTD & Schémas : Avantages Validité assurée Intégration facilitée Aide à la rédaction Normalisation
XML valide <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <personne> <prenom>Gaston</prenom> <nom>Lagaffe</nom> </personne>
XML valide incluant une DTD <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE personne [ <!ELEMENT personne (prenom, nom)> <!ELEMENT prenom (#PCDATA)> <!ELEMENT nom (#PCDATA)> ]> <personne> <prenom>Gaston</prenom> <nom>Lagaffe</nom> </personne>
XML valide pour une dtd (privée) distante <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE personne SYSTEM "http://adrien-v.com/teaching/M2-dauphine/dtd/personne.dtd"> <personne> <prenom>Gaston</prenom> <nom>Lagaffe</nom> </personne>
XML valide pour une dtd publique <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE personne PUBLIC "adrien:adrien-v com//persone v1.0//fr" "http://adrien-v.com/teaching/M2-dauphine/dtd/personne.dtd"> <personne> <prenom>Gaston</prenom> <nom>Lagaffe</nom> </personne> Premier argument : Informatif Par convention identifiant:proprietaire//description//langue
DTD : Règles de nommage des identifiants Au moins une lettre : a à z ou A à Z Peut commencer par _ ou : La 1ère lettre peut être suivie par une ou plusieurs lettres, chiffres, tirets, underscores, points, et l'ensemble des caractères Unicode. http://www.w3.org/XML/REC-xml Pas d'espaces ni de tabulations Seuls signes de ponctuation autorisés : tiret et point
DTD : Déclaration d’éléments Contenu vide <!ELEMENT ident EMPTY> Contenu quelconque <!ELEMENT ident ANY> Contenu sous-éléments <!ELEMENT ident ((fils1,fils2)*|fils3?,fils4+)> Contient des éléments Utilisation d’expression régulière Contenu mixte <!ELEMENT ident (#PCDATA|fils1*)>
DTD : Expressions régulières Séquence , Choix | 0 à N * 1 à N + 0 à 1 ?
DTD : Déclaration d’attributs Syntaxe <! ATTLIST Element Attribut Type > Type représente le type de donnée de l'attribut : littéral: il permet d'affecter une chaîne de caractères à un attribut. <!ATTLIST dossier chemin CDATA #IMPLIED> l'énumération: permet de définir une liste de valeurs possibles pour un attribut donné, afin de limiter le choix de l'utilisateur. <! ATTLIST Element Attribut (Valeur1|Valeur2|…) > Pour définir une valeur par défaut il suffit de faire suivre l'énumération par la valeur désirée entre guillemets : <! ATTLIST Elément Attribut (Valeur1 | Valeur2 ) "valeur2" >
DTD : Déclaration d’attributs Syntaxe <! ATTLIST Element Attribut Type > atomique: il permet de définir un identifiant unique pour chaque élément grâce au mot clé ID. <!ATTLIST dossier reference ID #REQUIRED> IDREF, IDREFS : type prédéfini pour lister la ou les références associées à un document <!ATTLIST fichier dossier IDREF #REQUIRED>
DTD : Déclaration d’attributs Chacun de ces types d'attributs peut être suivi d'un mot clé particulier permettant de spécifier le niveau de nécessité de l'attribut : #IMPLIED signifie que l'attribut est optionnel, c'est-à-dire non obligatoire #REQUIRED signifie que l'attribut est obligatoire #FIXED signifie que l'attribut sera affecté d'une valeur par défaut s'il n'est pas défini. Il doit être immédiatement suivi de la valeur entre guillemets Ainsi on pourra avoir une déclaration d'attribut du type <! ATTLIST disque IDdisk ID #REQUIRED type(K7|MiniDisc|Vinyl|CD)"CD">
DTD : Déclaration d’entités Entité générale interne <!ENTITY titre "XML in a nutschell"> (appel d’entité dans le document &titre; ) Entité paramètre (uniquement dans la DTD) : interne <!ENTITY %NomAtt "name ID #REQUIRED"> externe <!ENTITY %NomAtt SYSTEM "nomAtt.txt"> générale externe <!ENTITY %arch PUBLIC "archive.gz" NDATA gzip>
DTD : exemple d’entités paramètre <!-- Compact Disk: DTD --> <!ENTITY %basiccontent "(#PCDATA)"> <!ENTITY bestever "The Beatles"> <!ELEMENT cd title, band, track+)> <!ATTLIST cd type (single | regular) #REQUIRED> <!ELEMENT title %basiccontent;> <!ELEMENT band %basiccontent;> <!ELEMENT track (song, time?)> <!ELEMENT song %basiccontent;> <!ELEMENT time %basiccontent;> <!ATTLIST song author CDATA "Paul"> Entité générale références cd3.dtd
Exemple d’entités (2) cd3.xml <?xml version="1.0"?> <!DOCTYPE cd SYSTEM "cd3.dtd" [ <!ENTITY favourite "For No One"> ] > <cd type="single"> <title>Revolver, top two</title> <band>&bestever;</band> <track> <song>Eleanor Rigby</song> <time>2:45</time> </track> <song author="Paul and John"> &favourite; </song> </cd> Entité locale référence référence cd3.xml
XML NameSpaces Collection d’identificateurs (élément ou attribut) Identifié par un préfixe et une URI Déclaration <element xmlns:prefixe=URI> Exemple <html xmlns=‘http://www.w3.org/TR/REC-html40’ xmlns:order=‘http://www.mycomp.om/order-spec’> Le premier namespace (html) est celui par défaut.
Schémas XML Recommandation du W3C (mai 2001) Types de données prédéfinis ou définis par l’utilisateur Supporte espace de noms, XPath Contraintes sur les éléments et attributs Contrôle sur les occurrences Héritage et extension Restriction sur des patterns
Schéma XML : exemple <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace=http://www.supelec.fr/TNS xmlns=http://www.supelec.fr/TNS elementFormDefault="qualified"> <xsd:element name="APPLI"> <xsd:complexType> <xsd:sequence> <xsd:element ref=“ENTETE" minOccurs="1" maxOccurs="1"/> <xsd:element ref=“LISTE_FORM" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="ENTETE"> <xsd:element ref=“UID" minOccurs="1" maxOccurs="1"/> <xsd:element ref=“TITRE" minOccurs="1" maxOccurs="1"/> <xsd:element name="LISTE_FORM"> <xsd:element ref="FORMULAIRE" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element>
Schéma XML : exemple (suite) <xsd:element name="FORMULAIRE"> <xsd:complexType> <xsd:sequence> <xsd:element ref="NOM_TABLE" minOccurs="1" maxOccurs= "1"/> <xsd:element ref= "MODE" minOccurs= "1" maxOccurs= "1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name= "MODE"> <xsd:attribute ref="valeur" type="typeVmode" use="required" value="NOR"> <xsd:element ref="ATTRIBUT" minOccurs="0" maxOccurrs="unbounded"/> <xsd:simpleType name="typeVmode" base="xsd:string"> <xsd:enumeration value="NOR"/> <xsd:enumeration value="INS"/> <xsd:enumeration value="QBE"/> </xsd:simpleType> <xsd:element name="TITRE" type="xsd:string"/> <xsd:element name="UID" type="xsd:string"/> <xsd:element name="NOM_TABLE" type="xsd:string"/> <xsd:element name="ATRIBUT" type="xsd:string"/> </xsd:schema>
Référencer un schéma : exemple <?xml version="1.0"?> <APPLI xmlns ="http://www.supelec.fr/TNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.supelec.fr/TNS/genappli.xsd"> <ENTETE> <TITRE>Mon titre</TITRE> <UID>toto@titi</UID> </ENTETE> <LISTE_FORM> <FORMULAIRE><NOM_TABLE>ESSAI</NOM_TABLE> <MODE valeur="NOR"><ATTRIBUT>A1</ATTRIBUT> <ATTRIBUT>A2</ATTRIBUT> </MODE> </FORMULAIRE> </LISTE_FORM> ... </APPLI>
Référencer un schéma Adresse.xml Adresse-schema.xsd <?xml version="1.0" Encoding = "ISO-8859-1" ?> <nomComplet>Corto Maltese</nomComplet> Adresse-schema.xsd <?xml version="1.0" Encoding = "ISO-8859-1" ? > <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="nomComplet" xs:type= "string"/> </xs:schema> Adresse.xml avec la référence au schéma <nomComplet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNameSpaceschemaLocation="Adresse-schema.xsd"> Corto Maltese </nomComplet>
Schémas XML : Types simples anyURI base64Binary boolean byte (valeur entre -128 et 127) dateTime (date+heure), duration(en année, mois…) types d’attributs XML .0 (ID, IDREF,…) integer language name (nom XML) string (chaîne UNICODE), normalizeString (+fin de ligne…) token (pas d’espace avant et après) <xs:element name="nomComplet" xs:type="string"/>
Schémas XML : Attributs Pour rajouter des attributs à cet élément : type complexe <xs:element name="nomComplet"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="color" type="xs:string" default="blue" /> <xs:attribute name="langue" type="xs:language"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element
Schémas XML : Goupes d'attributs <xs:element name="nomComplet"> … <xs:extension type="xs:string"> <xs:attributeGroup ref="Nationalité"> </xs:attributeGroup> </xs:extension> </xs:element> <xs:attributeGroup name ="Nationalité"> <xs:attribute name="langue" type="xs:language"/>
Schémas XML : sequence, choice <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="typePersonne"> <xs:sequence> <xs:element name="nom" type="xs:string"/> <xs:element name="prénom" type="xs:string"/> <xs:element name="dateDeNaissance" type="xs:date"/> <xs:choice> <xs:element name="adresse" type="xs:string"/> <xs:element name="adresseElectronique" type="xs:string"/> </xs:choice> <xs:element name="téléphone" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:element name="numeroDeTelephone" type= "xs:string"></xs:element> </xs:schema>
Schémas XML : all <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="typePersonne"> <xs:all> <xs:element name="nom" type="xs:string"/> <xs:element name="prénom" type="xs:string"/> <xs:element name="dateDeNaissance" type="xs:date"/> <xs:element name="adresse" type="xs:string"/> <xs:element name="adresseElectronique" type="xs:string"/> <xs:element name="téléphone" type="xs:string"/> </xs:all> </xs:complexType> </xs:schema> chaque élément enfant peut apparaître 0 ou 1 fois (équivalent de ? dans une DTD) ordre des éléments indifférent
Schémas XML : Indicateurs d'occurrence <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="TITRE"></xs:element> <xs:element name="SUBENTRY"></xs:element> <xs:element name="ENTETE"> <xs:complexType> <xs:sequence> <xs:element ref="TITRE" minOccurs="1" maxOccurs="2"/> <xs:element ref="SUBENTRY" minOccurs="0" maxOccurs="unbounded"> </xs:element> </xs:sequence> </xs:complexType> </xs:schema>
Les Schémas XML permettent Les imports De définir de nouveaux types simples La création de type complexe à partir de type simple La restriction (par facettes, unicité…) La création de type par dérivation, de groupe de substitution …
Schémas XML : Pour approfondir http://www.w3.org/XML/Schema
III) Requêtes et manipulation XPATH XSLT DOM et SAX Et aussi XLink, XPointer, XQuery, XQL
1) Xpath Un langage utilisé par XSLT pour localiser des éléments et/ou attributs dans un document XML http://www.w3.org/TR/xpath
XPath XPath est un langage non-XML d’expression utilisé pour Identifier des parties (chemin de localisation) de documents XML Tester des conditions booléennes Manipuler les chaînes de caractères Effectuer des calculs numériques. Communément utilisé dans les attributs match et select des éléments XSLT : <xsl:template match="/name/first"> … </xsl:template>
Chemin de localisation Les chemins de localisation sont interprétés par rapport à un contexte Ou plus simplement le nœud de l'arbre à partir duquel l'expression est évaluée. L'évaluation de l'expression définit l'ensemble des nœuds qui correspondent à la condition Cela peut être l'ensemble vide s'il n'y a pas de correspondance Un chemin de localisation consiste en une suite de localisation séparée par / ou // Un chemin peut être relatif ou absolu.
Chemins de localisation simples Le nœud racine Le slash / dénote le nœud racine <xsl:template match="/"> <!-- sélectionne le nœud racine --> </xsl:template> L'ensemble des nœuds enfants Le joker * permet de sélectionner l'ensemble des éléments nœuds du contexte courant <xsl:template match="*"> <!-- sélectionne tous les nœuds enfants -->
Sélection d'un élément Le point (.) indique le nœud courant <xsl:template match="."> <!– sélectionne le nœud courant --> </xsl:template> Le double point (..) indique le parent du nœud courant
Autres Axes de selection
Composition de chemins Utiliser / pour séparer des éléments hiérarchiques Utiliser // pour indiquer qu'un ou plusieurs éléments peuvent exister entre les slashs <xsl:template match="/catalogue/*/constructeur"> <!-- sélectionne tous les éléments contructeur --> <!-- ayant catalogue pour grand-père --> </xsl:template> <xsl:template match="profession//informatique"> <!– sélectionne tous les éléments informatique --> <!– ayant un élément ancêtre profession --> </xsl:template
Filtres Utiliser […] comme prédicat pour sélectionner un contexte de nœud particulier. Le prédicat est évalué comme une expression booléenne. Si le résultat est vrai, le nœud est sélectionné. <xsl:template match="auteur/nom[particule]"> <!-- sélectionne tous les éléments nom ayant --> <!-- auteur pour parent, et particule pour fils --> </xsl:template> <xsl:template match="/COLONNE/LIGNE[1]"> <!– sélectionne le premier élément LIGNE ayant --> <!– pour parent COLONNE à partir de la racine -->
Filtre par attributs Utiliser le signe @ suivi d'un nom d'attribut pour sélectionner un nœud particulier <xsl:template match="commande[@discount]"> <!-- sélectionne tous les éléments commande --> <!-- ayant discount pour attribut --> </xsl:template> <xsl:template match="catalogue/item[@id='210']"> <!-- sélectionne tous les éléments item --> <!-- ayant catalogue pour père et l'attribut --> <!-- id avec la valeur 210 -->
<= => > < = ! = Opérateurs logiques Utilisation des opérateurs de comparaison <= => > < = ! = Utilisation des opérateurs and et or et la fonction not(). Attention : remplacer < et > par < et > dans les documents XML ! "//profession[.='musicien']" sélectionne les éléments profession dont le contenu est musicien "//personne[@naissance<1985]" localise les éléments personne ayant un attribut naissance dont la valeur est inférieure à 1985. "//nom[prénom='Richard' and not(particule='M')]" sélectionne les éléments nom ayant un sous-élément prénom de valeur Richard mais pas de sous-élément particule de valeur M.
Prédicats numériques Opérateurs +, -, *, div, mod Fonctions round(), etc.. "round(6+1.1)" retourne 7. "(@naissance –(@naissance mod 100)) div 100)" détermine le siècle dans lequel une personne est née, avec naissance est un attribut numérique contenant la date de naissance
2) XLST : eXtensible Stylesheet Language Transformation
Processeur XSLT Effectue des transformations d’arbres sur un source XML <xsl:template select=‘exercices’> <ul> <xsl:apply-template/> </ul> </xsl:template> …. <sheet style="TD"> <exercices> <exercice title="hello world"> <text> Le but de cet exercice ... </text> … </exercice> </exercices> </sheet> <html> <body> <ul> <li>Le but de …</li> </ul> </body> </html> Processeur XSLT Fichier XML Fichier XML/XHTML
Structure d'une feuille XSLT Prologue <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl=http://www.w3.org/1999/XSLT/Transform> Corps : suite de règles (templates) de transformation Epilogue : </xsl:stylesheet>
Template XSLT Chaque règle (template) possède deux parties: Un motif (XPath) qui identifie le/les noeud(s) XML du document qui est/sont concerné(s) par la règle et sur le(s) quel(s) il faut appliquer une action Une action qui effectue la transformation et/ou spécifie les caractéristiques de la présentation <xs:template match="un motif"> [action] </xsl:template>
Template XSLT : exemple
Pseudo élément racine Le processeur XSLT considère que l'élément de plus haut niveau du document XML a un parent désigné par "/" <?xml version="1.0"?> <top> <a/> <b/> </top>
Templates <xsl:apply-templates/> Cause le traitement successif de chacun des nœuds enfants de l'élément courant par le template approprié L'ordre des enfants est respecté <xsl:value-of select="expression"/> Extrait une chaîne de caractère du document, habituellement dans l'élément courant select="." retourne la valeur textuelle de l'élément courant select="@attrib" retourne la valeur d'un attribut de l'élément courant.
Production de texte On génère un nœud texte dynamiquement dans l'arbre résultant avec l'instruction<xsl:value-of select="expression"/> select : expression XPath de type chaîne qui produit la valeur du nœud texte <person given-name="Paul" family-name="Pierre"/> <xsl:template match="person"> <p> <xsl:value-of select="@given-name"/> <xsl:text> </xsl:text> <xsl:value-of select="@family-name"/> </p> </xsl:template> <p>Paul Pierre</p>
<xsl:apply-templates select="expression"/> Fait traiter certains enfants spécifiques (répondant au critère de sélection). Cas simple : expression=identifiant élément. Permet de faire un "réarrangement" des sous éléments
Autres Commandes XSLT <xsl:for-each>, définir un traitement itératif <xsl:if>, définir un traitement conditionnel <xsl:choose>, définir un choix <xsl:template>, <xsl:call-template>, <xsl:param> Déclarer et appeler des fonctions avec paramètres <xsl:element>, générer un élément <xsl:attribute>, générer un attribut <xsl:sort>, permet de trier
Condition(s) de branchement L’instruction xsl:if permet d'exécuter ou non certaines parties du code <xsl:if test="@nom = 'Paul’"> <xsl:text> Le spécialiste XML</xsl:text> </xsl:if> L'instruction xsl:choose permet d'exécuter différents code selon des conditions <xsl:choose> <xsl:when test="@nom='Paul'"> </xsl:when> <xsl:when test="@nom='Pierre'">L'infographiste</xsl:when> <xsl:otherwise><xsl:text>Un inconnu</xsl:text> </xsl:otherwise> </xsl:choose>
Tri Instruction xsl:sort <xsl:sort select = string-Expression lang = { nmtoken } data-type = { "text" | "number"} order = { "ascending" | "descending" } case-order = { "upper-first" | "lower-first" } />
Variable globale <xsl:variable name="Nom" select="Expression" /> Nom : nom de la variable Expression : valeur calculée de la variable <xsl:variable name="siecle" select="21"> Pour utiliser la variable dans la partie expression d'un template, la précéder d'un $ <xls:value-of select="$siecle*100 +@annee">
Exemple Xml (1/3) <?xml version= "1.1" encoding= "ISO-8859-1"?> <personnes> <personne naissance="1912" mort="1954" > <nom> <prenom>Alan </prenom> <famille>Turing</famille> </nom> <profession>informaticien</profession> <profession>cryptographe</profession> </personne> <personne naissance="1957"> <prenom> Gaston </prenom> <famille> Lagaffe </famille> <profession>archiviste </profession> </personnes>
Exemple Xslt (2/3) <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/" > <html> <head><title>Liste de personne</title></head> <body> <xsl:apply-templates select="personnes"/> </body> </html> </xsl:template> <xsl:template match="personnes"> <table border="1"> <xsl:apply-templates select="personne"/> </table> </xsl:template><xsl:template match="personne"> <tr> <td><xsl:value-of select ="nom"/></td> <td><xsl:value-of select ="@naissance"/></td> <td><xsl:value-of select ="@mort"/></td> </tr> </xsl:stylesheet>
Exemple Résultat (3/3) <html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Liste de personne</title> </head> <body><table border="1"><tr><td> Alan Turing </td><td>1912</td><td>1954</td> </tr> <tr><td> Gaston Lagaffe </td><td>1957</td><td></td> </table> </body> </html>
3) DOM et SAX Modèles de traitement Modèle événementiel (Event-based model) – Standard de facto : SAX (Simple API for XML) (http://www.saxproject.org) Modèle arborescent (Tree-based model) – W3C standard : DOM (Document Object Model) (http://www.w3.org/DOM) Les processeurs SAX et DOM existent pour presque tous les langages de programmation: – Java , C , C++ , Perl , TCL Tk , VB , Prolog, …
SAX : Modèle événementiel Start of Document <cv> … <infos> <email>vieille@lri.fr</email> </infos> </cv> Start of Element Événements Text Element End of Element End of Document
Arbre DOM DOC Document Node A Element Parent B C Child B1 B2 Text 3 Sibling Text 1 Text 2
Comparaison SAX et DOM Inconvénients DOM Avantages SAX construction d ’ un arbre en mémoire • multitude de petits objets (efficacité des new et du GC en Java) • très grand documents tous les éléments sont représentés le traitement du document par le programme se fait après l’analyse Avantages DOM navigation dans un arbre d’éléments Avantages SAX le traitement du document par le programme se fait en cours d’analyse (efficacité) seuls les éléments pertinents sont traités Inconvénients SAX écriture plus complexe des fonctions de callback pour traiter des structures imbriquées
IV) Applications Exemple Parseurs et interfaces de programmation Langages de représentation Langages de programmation Protocoles d'échanges
XSLT XML xml InDesign InDesign Papier ou pdf ebook Xslfo/pdf site web xhtml microsite XSLT xslfo/pdf reader d’ebook XML Epub, mobipocket télé phone Txt/mp3 Tout support de lecture mp3 XML TEI/Docbook Entrée systèmes informatiques Moteur de transformation Source Format cible Support cible © LIGARAN 2010
Parseurs et interfaces de programmation (API) MSXML - Microsoft Core XML Services, le parseur XML Microsoft, 2000-2006, intégré au système d'exploitation Windows, accessible aux langages Microsoft, notamment en JavaScript sur le navigateur Internet Explorer. libxml2 - Le processeur XML libre du système d'exploitation linux, accessible en C , Python, PHP, et en Ruby Xerces - XML Java Parser, le parseur XML par défaut d'une machine virtuelle Java, accessible en Java Expat - Le parseur XML de James Clark, notamment embarqué par les navigateurs mozilla (firefox). VTD-XML
Langages de représentation OpenDocument - tous les documents bureautiques, OpenOffice.org, 2001. Word - le format natif de Microsoft Word est en XML depuis sa version 2003. XSL-FO - eXtensible Stylesheet Language - Formatting Objects, langage extensible de stylage - formatage d'objets, W3C, 2001. SVG - Scalable Vector Graphics, graphiques vectoriels 2D, W3C, 2003. MathML - formules mathématiques, W3C, 1999, 2001, 2003. SMIL - Synchronized Multimedia Integration Language, Intégration multimédia, W3C, 1998, 2005. X3D - 3D multimédia, consortium Web3D.de documents XML côté serveur.
Langages de programmation XQuery - requête et transformation XML, W3C, 2005. MXML, Flex - définition d'interface, Macromedia. Apache XSP - eXtensible Server Pages - génération de documents XML côté serveur. XUL - XML-based User interface Language, définition d'interface, Mozilla, 2000. ANT - scripts de compilation, ASF. Servlet - serveur d'application Java, configuration et logique fonctionnelle, Sun Microsystems. Log4j - log for Java, configuration d'une bibliothèque d'historique, 1996, © 1999-2006, ASF. UIML - User Interface Markup Language, définition d'interface, OASIS, 1997. XAML - définition d'interface, Windows Vista, 2006.
Protocoles d'échanges XForms - formulaires web (W3C) OAI - Open Archive Initiative Protocole Archives ouvertes, 2000, 2002 (OAI) SOAP - RPC par HTTP (W3C) WSDL - Services web (W3C) WebDAV - Lecture/Écriture distante par HTTP (IETF) Jabber/XMPP - Messagerie instantanée et présence, multimédia (IETF)