Cours Web extended Markup Language (XML) Lionel Seinturier Université Pierre & Marie Curie Lionel.Seinturier@lip6.fr extented Markup Language (XML) Constat sur HTML langage très bien adapté à la diffusion d'informations sur le réseau mais peu structuré, pas extensible Nouveaux besoins pour le Web - commerce en ligne - adaptation du contenu au support (téléphones mobiles, assistants personnels,...) - intégration du Web dans les systèmes d'information des entreprises - échange de données : serveurs Web autres applications (SGBD, tableurs,...) -...! 1997 : définition par le W3C de XML 24/7/02 Web 47 Lionel Seinturier Web 48 Lionel Seinturier Principe contenu information "brute" structure organisation du document présentation rendu graphique contenu.sgml contenu.xml structure.dtd contenu présen tation.html structure.dtd + présen tation.dsssl présen tation présen tation.xsl.css SGML 1986 HTML 1989 XML 1997 Structure d'un document XML C'est la définition -del'ensemble des balises autorisées dans le contenu -del'ordre dans lequel elles doivent être utilisées! DTD (Document Type Definition) termes équivalents : type de document, classe de document Notion XML fondamentale Exemple Le document correspondant à une œuvre littéraire comporte - un d'auteur et plusieurs ouvrages - chaque ouvrage a un titre et s'étend éventuellement sur +sieurs tomes numérotés - chaque tome est divisé en chapitre - chaque chapitre a un titre et est divisé en paragraphes - chaque paragraphes comporte du texte Web 49 Lionel Seinturier Web 50 Lionel Seinturier
Document XML Déclaration version XML utilisée DTD utilisée pour ce document Corps du document <!DOCTYPE SYSTEM ".dtd" > <> <>Seinturier</> <>Lionel</> </> Balise <!DOCTYPE... > - : de la balise principale du document - SYSTEM PUBLIC : niveau de diffusion de la DTD (privé public) - ".dtd" : URL de la DTD Règles d'écriture des documents XML Document valide syntaxiquement - respecter la casse des balises <> <INDIVIDU> - toujours clore une balise ouverte <>... </> raccourci pour les balises "vides" <hr></hr> <hr/> - valeur des attributs entre guillemets < id="123"> - ne pas entrelacer des ouvertures et fermetures de balises différentes <>... <>... </>... </> interdit Document conforme àsadtd - toutes les balises utilisées sont définies dans la DTD - elles sont utilisées dans l'odre spécifié dans la DTD <> <> <> : les balises définies dans la DTD.dtd Web 51 Lionel Seinturier Web 52 Lionel Seinturier DTD XML Possibilité d'écrire ses propres DTD ou de réutiliser celles existantes DTD HTML 4.0! XHTML (reformulation en XML de HTML 4.0) Concrètement aucune entre XHTML et HTML 4.0 (mêmes balises) Sauf - utilisation balise <?xml...?> - toutes les balises doivent être en minuscules - le document XHTML doit être valide - le document XHTML doit être conforme Autres DTD existantes - MathML : formules mathématiques - SVG : figures géométriques - CML : description de molécules - AML : format d'échanges de données astroiques! de breuses autres existantes et à venir Définition de DTD XML 1. Définition des balises autorisées <!ELEMENT... > 2. Définition de leurs attributs <!ATTLIST... > 3. Définition de constantes <!ENTITY... > La balise <!ELEMENT... > définit un identificateur de balise untype de balise <!ELEMENT Balise typebalise > Types de base ( = type des données entre <Balise> et </Balise> ) - #PCDATA : du texte brut sans balise - ANY : du texte et/ou des balises - EMPTY : rien! balise "vide" ex. : <HR></HR> ou + simplem. <HR/> Web 53 Lionel Seinturier Web 54 Lionel Seinturier
Définition de DTD XML Tests de conformité / à la DTD Types composés Enchaînement d'autres balises spécifiés à l'aide des opérateurs, séquence ( ) regroupement + répétition 1 ou n fois alternative? optionnelle * répétition 0 ou n fois Erreur en cas de non conformité d'une balise / à son type Exemples <!ELEMENT (, ) > <!ELEMENT (#PCDATA) > <!ELEMENT (#PCDATA) > <!ELEMENT livre (titre,auteur,sommaire?,chapitre+) > <> <>Ochon</> </> <> <>Ochon</> <>Paul</> <>Pierre</> </> <> <>Ochon</> <>Paul</> <age>15</age> </> <> <> Ochon <>Paul</> </> </> Il faut un et un pré Il faut un seul pré La balise <age> n'est pas définie La balise <> ne doit contenir que du texte brut pas de balises Web 55 Lionel Seinturier Web 56 Lionel Seinturier Définition de DTD XML Définition de DTD XML Définition des attributs des balises (définies avec <!ELEMENT... >) La balise <!ATTLIST... > définit un identificateur d'attribut untype d'attribut une valeur par défaut pour l'attribut ou une caractérisation de l'attribut <!ATTLIST Balise Attribut typeattribut valeurpardefaut > ou <!ATTLIST Balise Attribut typeattribut caractérisation > Types possibles pour un attribut ( = type des données entre Attribut=" et " ) - CDATA : du texte - énumération : liste de valeurs légales séparées par - ID : une valeur unique pour cet attribut dans le doc. XML - IDREF : une valeur d' ID existante dans le doc. XML - IDREFS : une liste espacées d' IDREF - NMTOKEN : un mot clé (sans espace) - NMTOKENS : une liste espacées de NMTOKEN Erreur en cas de non conformité d'une valeur / à son type Web 57 Lionel Seinturier Web 58 Lionel Seinturier
Définition de DTD XML Tests de conformité / à une DTD Valeur par défaut : dans le cas d'une énumération Caractérisation d'un attribut - #REQUIRED : attribut obligatoire - #IMPLIED : attribut facultatif - #FIXED valeur : attribut à valeur fixe (ne pouvant être changée) Erreur en cas d'absence d'un attr. #REQUIRED ou de chgt de val. d'un attr. #FIXED Exemples <!ATTLIST nosecuritesociale ID #REQUIRED > <!ATTLIST situation (mineur majeur) "mineur" > <!ATTLIST DeJeuneFille CDATA #IMPLIED > Web 59 Lionel Seinturier <!ELEMENT graphe (noeud arc)* > <!ELEMENT noeud EMPTY > <!ATTLIST noeud numero ID #REQUIRED > <!ELEMENT arc EMPTY > <!ATTLIST arc source IDREF #REQUIRED > <!ATTLIST arc destin IDREF #REQUIRED > <graphe> <noeud> <noeud/> </graphe> <graphe> <noeud numero="12" /> <noeud numero="12" /> </graphe> <graphe> <noeud numero="12" /> <noeud numero="13" /> <arc source="12" destin="14" /> </graphe> L'attr. numero est obligatoire L'attr. numero n'est pas unique L'attr. destin="14" ne fait pas référence à une valeur d' ID existante Web 60 Lionel Seinturier Définition de DTD XML Définition de DTD XML Définition d'entités = définition de constantes Définition d'entités Entités paramètres : utilisables dans une DTD <!ENTITY % constante "valeur" > <!ENTITY % data "(#PCDATA)" > <!ELEMENT %data; >! substitution de %data; par (#PCDATA) Entités : utilisables dans un doc. XML! utilisation : %constante; <!ENTITY constante "valeur" >! utilisation : &constante; <!ENTITY cv "curriculum vitae" > Voici mon &cv;! substitution de &cv; par curriculum vitae Web 61 Lionel Seinturier Entités externes - définies dans un fichier distant - utilisables dans un doc. XML hors d'une DTD <!ENTITY constante SYSTEM "url" >! utilisation : &constante; <!ENTITY liste SYSTEM "http://monserveur.com/liste.xml" > Voici ma &liste;! substitution de &liste; par le contenu du fichier Complément sur les types d'attributs - ENTITY : une entité ou une entité externe - ENTITIES : une liste espacées d' ENTITY Web 62 Lionel Seinturier
Document XML XML Schema Encodage caractères spéciaux < < > > & & Commentaires <!--... --> <!-- Ceci est un commentaire et sera ignoré --> <!-- moins moins inférieur --> --> non <!-- moins moins inférieur --> --> oui Sections de données brutes à ne pas interpréter <![CDATA[... ]]> <![CDATA[ Ici <> n'est pas une balise: c'est du texte ]]> <![CDATA[ crochet crochet supérieur ]]> ]]> non <![CDATA[ crochet crochet supérieur ]]> ]]> oui Web 63 Lionel Seinturier DTD XML pour la définition de DTD Les DTD XML sont définies comme des docs XML λ Avantages - 1seulet même langage pour les docs et la déf. de leurs DTD (plus de balises <!ELEMENT >, <!ATTLIST >, <!ENTITY >,...) - les types de données de base utilisables dans les DTD (#PCDATA, ANY, EMPTY) ont été enrichis (entier, réel, chaîne, date, liste,...) - les types de données de base et ceux construits par l'utilisateur sont dérivables! on peut réutiliser un type déjà définis pour l'enrichir -les groupes d'attributs permettent de factoriser les défs d'attributs et de faciliter leur réutilisation - les schémas XML peuvent être annotés pour faciliter leur documentation Web 64 Lionel Seinturier XML Schema XML Schema <!ELEMENT promotion ()+ > <!ELEMENT (, ) > <!ELEMENT (#PCDATA) > <!ELEMENT (#PCDATA) > <!ATTLIST nosecuritesociale ID #REQUIRED > <element name="promotion" type="promotiontype" /> <complextype name="promotiontype"> <element name="" type="individutype" minoccurs="1" maxoccurs="unbounded" /> <attribute name="nosecuritesociale" type="id" use="required" /> </complextype> <complextype name="individutype"> <sequence> <element name="" type="string"> <element name="" type="string"> </sequence> </complextype> promotion.dtd XML schema équivalent Balises <element name="..." type="..." minoccurs="..." maxoccurs="..." /> Définition de balise :, type, # min et max d'occurrences de la balise Types de données de base : string, byte, integer, boolean, time, date,... <attribute name="..." type="..." use="..." /> Définition d'attribut :, type, utilisation (required, optional, fixed) <complextype name="..."> Définition de type de données utilisateur <sequence> Séquence de balises Web 65 Lionel Seinturier Web 66 Lionel Seinturier
XML NameSpaces (Espaces de mage) XML NameSpaces Utilisation des balises provenant de +sieurs DTD dans un doc. XML Déclaration -attribut réservé xmlns fournissant un et l'url de sa DTD associée - peut être ajouté à n'importe quelle balise (en général, la 1ère du document) - peut être utilisé +sieurs fois <balise xmlns:despace="url associée"... > <html xmlns:m="http://www.w3.org/1998/math/mathml" xmlns:s="http://www.w3.org/2000/svg" > - l'espace de s reste valide jusqu'à la balise fermante (ici </html>) - les balises des DTD doivent être préxifées par DEspace: <s:svg width="2cm" height="0.6cm"> Possibilité de définir un espace par défaut (ie sans ) Exemple Utilisation conjointe de 3 DTD XHTML, SVG (figures géométriques) et MathML (formules mathématiques) <html xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://www.w3.org/2000/svg" xmlns:m="http://www.w3.org/1998/math/mathml"> <head> <title>exemple d'utilisation des espaces de s</title> </head> <body> <h1>les espaces de s</h1> Web 67 Lionel Seinturier Web 68 Lionel Seinturier XML NameSpaces XML NameSpaces <p>un rectangle en SVG</p> <s:svg width="120" height="35"> <s:rect width="120" height="35" rx="12" fill="blue" stroke="#4c00e5" /> </s:svg> <p>une formule de math en MathML</p> <m:math> <m:mroot>x+y</m:mroot> </m:math> </body> </html> Visualisation avec Amaya www.w3.org/amaya Alternativement, l'attribut xmlns peut être utilisée chaque fois que l'on en a besoin <html xmlns="http://www.w3.org/1999/xhtml"> <body> <h1>les espaces de s</h1> <svg xmlns="http://www.w3.org/2000/svg" width="120" height="35"> <rect width="120" height="35" rx="12" fill="blue" stroke="#4c00e5" /> </svg> <math xmlns="http://www.w3.org/1998/math/mathml"> <mroot>x+y</mroot> </math> </body> </html>! répétition de xmlns="..." à chaque utilisation de la DTD Web 69 Lionel Seinturier Web 70 Lionel Seinturier
Affichage d'un document XML <!ELEMENT promotion ()+ > <!ELEMENT (, ) > <!ELEMENT (#PCDATA) > <!ELEMENT (#PCDATA) > <!ATTLIST nosecuritesociale ID #REQUIRED > promotion.dtd Affichage d'un document XML 1ère solution : Internet Explorer 5 <!DOCTYPE promotion SYSTEM "promotion.dtd" > <promotion> < nosecuritesociale="271"> <></> <></> </> < nosecuritesociale="171"> <>Ochon</> <>Paul</> </> </promotion> promotion.xml! normal : aucune présentation n'est définie Web 71 Lionel Seinturier Web 72 Lionel Seinturier Affichage d'un document XML extensible Stylesheet Language (XSL) 2ème solution : Internet Explorer 5 + feuille de style CSS { display: block; } { font-family: Arial; font-size: 14pt; font-weight: bold; color: red; } { font-style: italic; color: blue; } <?xml-stylesheet href="promotion.css" type="text/css"?>... Solution provisoire! limitée par les capacités de CSS promotion.css promotion.xml Langage de définition du rendu graphique d'un document XML Composé de 2 parties - XSLT (Transformation) : langage de transformation d'un document XML -XSL FO (Formatting Objects) : directives de mises en forme ( CSS ) XSLT et XSL FO sont des DTD XML! une feuille de style XSL est un document XML qui commence par la balise <xsl:stylesheet>! qui peuvent être utilisées conjointement ou chacun de façon autoe 3 nouvelles solutions pour afficher un document XML -XSLT! transformation XML en XHTML - XSL FO! interprétation directe XML + XSL FO - XSLT + XSL FO! transf. XML + interprét. XSL FO Web 73 Lionel Seinturier Web 74 Lionel Seinturier
Principe XSLT <promotion> <> <></> <></> </> <> <>Ochon</> <>Paul</> </> </promotion> Représentation d'un document à transformer sous la forme d'un arbre Racine Nœud Feuille : "fictive" : une balise incluse : un contenu Notions d'ancêtres Notions de descendants / promotion Ochon promotion.xml Paul Principe XSLT Règles de pattern matching sur un document XML règle = balise + actions <xsl:template match="une balise à détecter"> action à entreprendre lorsque la balise est rencontrée Algorithme pour toutes les règles pour les toutes les balises identiques à celle de la règle appliquer les actions de la règle sur le sous-arbre de la balise Rq : + généralement la balise est une expression XPath (voir + loin) Web 75 Lionel Seinturier Web 76 Lionel Seinturier Actions Les actions peuvent contenir - des balises à générer - des commandes XSLT Principales commandes XSLT <xsl:value-of select="expression de chemin" /> sélectionne le noeud correspondant à l'expression de chemin XPath dans le sous-arbre de la balise <xsl:apply-templates /> réexamine les règles avec le sous-arbre de la balise Exemple XSLT promotion.xml <?xml-stylesheet href="promotion.xsl" type="text/xsl"?>... promotion.xsl <xsl:stylesheet xmlns:xsl="http://www.w3.org/tr/wd-xsl"> <xsl:template match="/"> <h1>le 1er est <xsl:value-of select="promotion//" /> </h1> </xsl:stylesheet> Web 77 Lionel Seinturier Web 78 Lionel Seinturier
Exemple XSLT A partir de la racine - la (1ère) règle est applicable - pour la suite le sous-arbre de / est examiné - <h1>le 1er est est généré - le noeud correspondant à promotion// est généré (il s'agit de ) - </h1> est généré promotion Ochon Paul / sous-arbre Exemple XSLT promotion.xsl <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/tr/wd-xsl"> <xsl:template match="/"> <html><body> <xsl:apply-templates/> </body></html> <xsl:template match="promotion"> <table border="1"> <xsl:apply-templates/> </table> <xsl:template match=""> <tr> <xsl:apply-template/> </tr> <xsl:template match=""> <td> <xsl:value-of select="."/> </td> <xsl:template match=""> <td> <xsl:value-of select="."/> </td> Web 79 Lionel Seinturier Web 80 Lionel Seinturier Exemple XSLT <xsl:template match="/"> <html><body> <xsl:apply-templates/> </body></html> Exemple XSLT (suite) <xsl:template match="promotion"> <table border="1"> <xsl:apply-templates/> </table> Directive <xsl:apply-templates/> Permet l'examen du (des) sous-arbre(s) sélectionné(s) par <xsl:template match=""> La 1ère règle est applicable - <html><body> est généré - le sous-arbre est examiné promotion Ochon Paul / sous-arbre La 2è règle est applicable 2 sous-arbres sont à examiner suite à cette règle - <table border="1"> est généré - on commence par le 1er sous-arbre / promotion Ochon Paul Web 81 Lionel Seinturier Web 82 Lionel Seinturier
Exemple XSLT (suite) <xsl:template match=""> <tr> <xsl:apply-template/> </tr> La 3è règle est applicable 2 sous-arbres sont à examiner suite à cette règle - <tr> est généré - on commence par le 1er (celui de ) <xsl:template match=""> <td> <xsl:value-of select="."/> </td> <xsl:template match=""> <td> <xsl:value-of select="."/> </td> La règle du est applicable - <td> est généré - est généré - </td> est généré! récursion Exemple XSLT (suite) Le 2è sous-arbre du 1er est examiné - la règle du pré s'applique - <td></td> est généré Le 2è est examiné - <tr><td>ochon</td><td>paul</td></tr> est généré - </table> est généré - </body></html> est généré Résultat final Web 83 Lionel Seinturier Web 84 Lionel Seinturier Exemple XSLT (fin) Autres commandes XSLT Arbre transformé / promotion Ochon Paul <td> <tr> <td> <html> <body> <table> <td> Ochon <tr> <td> Paul <xsl:for-each select="pattern"> sélectionne l'ensemble des parties du doc. qui correspondent au pattern <xsl:process> à l'intérieur d'un <xsl:for-each> fournit l'élément suivant dans l'ensemble des parties du doc.! permet d'itérer sur l'ensemble <xsl:if test="pattern">... </xsl:if> test si un pattern est présent ou non <xsl:counter name="string"> définit un compteur <xsl:counter-increment name="string"> incrémente un compteur <xsl:counter-reset name="string"> remet à zéro un compteur Web 85 Lionel Seinturier Web 86 Lionel Seinturier
XPath XPath Expressions de chemin en XML (ie dans les arbres equiv. aux docs XML) promotion// = 1 élément <> fils d'1 élément <> lui-même fils d'1 élément <promotion> promotion// = 1 élément <> ayant pour aïeul 1élément<promotion> Attention : promotion// promotion/ promotion// = 1 élément <> ou 1élément<> ayant pour aïeul 1 élément <promotion> promotion/[]/ = 1 élément <> fils d'1 élément <> ayant un élément fils <> et fils d'1 élément <promotion> [@noss] = 1 élément <> ayant un attribut noss [@noss='271'] = 1 élément <> ayant un attribut noss valant 271 [first-of-type()] [last-of-type()] = 1er/dernier élément <> Combinaisons possibles avec les opérateurs and, or et not promotion/* */ = 1 élément fils de l'élément <promotion> = 1 élément père de l'élément <promotion> Web 87 Lionel Seinturier Web 88 Lionel Seinturier XPath XPath descendant(promotion) = 1 élément descendant de l'élément <promotion> ancestor() = 1 élément aïeul de l'élément <> child(...) = 1 élément enfant ancestor psibling(...) = 1 ainé fsibling(...) = 1 cadet preceding(...) = 1 prédécésseur following(...) = 1 suivant psibling preceding(...) = 1 prédécésseur following(...) = 1 successeur Parcours de l'arbre - de haut en bas et - de gauche à droite! numérotation des noeuds 3 1 2 11 4 9 root() = la racine Valuations possibles ex. : child(2,promotion) Enchaînements possibles ex. : child(2,...).child(1,...) descendant child fsibling Prédécesseurs de 4 : [1..3] Successeurs de 4 : [5..10] 5 7 6 8 10 Web 89 Lionel Seinturier Web 90 Lionel Seinturier
Moteurs XSLT Ressources XML Essentiellement transformation XML vers un langage de balisage (ex. : XHTML) Mais aussi vers PDF, LaTeX, RTF, PostScript,... navigateur navigateur moteur XSLT requête XHTML requête XML + XSLT moteur XSLT serveur serveur Web 91 Lionel Seinturier W3C www.w3.org XML Apache xml.apache.org traduction XML HTML (parser XML, moteur XSLT, support XSL FO) XML software site www.xmlsoftware.com Navigateurs Internet Explorer XML + CSS + XSLT www.microsoft.com/ie/ Mozilla XML + CSS + XSLT www.mozilla.org Netscape 6 XML + CSS home.netscape.com/netscape Opera 5 XML + CSS www.opera.com Visualiseurs de DTD XML Viewer DTD explorer... www.alphaworks.ibm.com/tech/xmlviewer www.mathweb.org/~paul/dtdexplorer/ Web 92 Lionel Seinturier