XML 63
Samir Bennani sbennani@emi.ac.ma 64
<?xml version="1.0" encoding="code" standalone="yes/no"?> version="1.0" version utilisée actuellement encoding indique le code utilisé : "UTF-8" par défaut standalone : le document dépend ou non d'un autre (indication) Instructions de traitement Une référence vers une application pour traitement : nom-application + paramètres Traitement de style : <?xml-stylesheet type="text/xsl" href="annuaire.xsl"?> Autre traitement : <?mon_applicat SELECT * from table?> 65
L'ASCII 7 ou 8 bits et dérivés sont insuffisants pour : expression de documents multilingue échange de documents standardisés reconnus par tous UCS (Universal Character Set) sur 4 octets (4 109 codes) ou sur 3 ramené à UTF-16 ou UTF-8 (par défaut) Génération UTF-8 et 16 sur Windows NT et 2000 ISO-8859-1 : caractères latino-européens ISO-8859-6 : ASCII + Arabe Windows-1252 : variante européenne pour l'ascii sur MS Windows l'unicode sur 16 bits : 63 356 caractères possibles permettant de coder les alphabets les plus utilisés de la planète un peu lourd quand il est exclusivement utilisé en local codes ASCII anglais sur 7 bits et les autres caractères sur 16 bits En attendant une adoption complète 66
Les balises XML sont propres aux auteurs des documents et applications Les documents peuvent être composés de parties issues de plusieurs auteurs parties de documents destinées à plusieurs applications et donc comportent des noms d'éléments ou d'attributs pouvant être identiques Nécessité de différencier entre les éléments et attributs Les Espaces de Nom 67
Différenciation des identificateurs (éléments et attributs) Identifier les espaces de nom de manière unique par un URI, en général : nom d'url ex : <personne xmlns:pers="http://www.emi.ac.ma/pers"> espace par défaut : <personne xmlns="http://www.emi.ac.ma/pers"> simplifie la lecture pour les éléments les plus utilisés valables pour tous les descendants de l'élément ne sont pas toujours du même espace de noms URL (Locator) : le plus utilisé ou URN (urn:nom-espace:chaine-specifique), plus adapté mais encore peu utilisé préfixe de Chaque identificateur : nom du domaine de nommage pers:nom indique l'élément nom dans l'espace pers Eléments et attributs : Identification espaces par URI : Unified Resource Identifier 68
Insère dans le document du texte qui ne sera pas interprété si le texte contient de nombreux caractères <, >, ", ',.. Pour montrer des exemple XML <!CDATA[ <racine> Tout le texte compris dans CDATA ne sera pas interprété même s'il contient des caractères réservés comme <, >, ", ', ]]> La suite "]]>" est interdite dans CDATA 69
Pour traiter le contenu des documents XML (XSL, ) Navigation dans un document Pour se positionner dans un document XML À partir du document A partir d un autre document (Liens entre documents) Navigation / Positionnement En absolu ou en relatif Définition d un modèle d arbre XML XPath 70
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href=«tperiod.xsl"?> <PERIODIC_TABLE> <ATOM PHASE="GAS"> <NAME>Hydrogen</NAME> <SYMBOL>H</SYMBOL> <ATOMIC_NUMBER>1</ATOMIC_NUMBER> <ATOMIC_WEIGHT>1.00794</ATOMIC_WEIGHT> <BOILING_POINT UNITS="Kelvin">20.28</BOILING_POINT> <MELTING_POINT UNITS="Kelvin">13.81</MELTING_POINT> <DENSITY UNITS="grams/cubic centimeter"><!-- At 300K --> 0.0899 </DENSITY> </ATOM> <ATOM PHASE="GAS"> <NAME>Helium</NAME> <SYMBOL>He</SYMBOL> <ATOMIC_NUMBER>2</ATOMIC_NUMBER> <ATOMIC_WEIGHT>4.0026</ATOMIC_WEIGHT> <BOILING_POINT UNITS="Kelvin">4.216</BOILING_POINT> <MELTING_POINT UNITS="Kelvin">0.95</MELTING_POINT> <DENSITY UNITS="grams/cubic centimeter"><!-- At 300K --> 0.1785 </DENSITY> </ATOM> </PERIODIC_TABLE> 71
Racine Periodic-Table?xml-stylesheet type=".. ATOM PHASE="GAS" NAME Hydrogen ATOM SYMBOL... H... ATOM BOILING_POINT UNITS="Kelvin" 20.28 72
Document XML = arbre composé de nœuds utilisés par Xpath : La racine les éléments les attributs des éléments le texte dans les éléments les espaces de nom les instructions de traitement les commentaires Nœuds non utilisés par Xpath, mais DTD Référence à une entité Déclaration du type de document Entité Notation Déclaration d attribut 73
1. XPATH 2. XSLT 3. XSLFO 4. XLink, XForms, RSS, 74
75
XPath Expressions de chemins dans un arbre XML Permet de sélectionner des nœuds par navigation? 76
recommandation W3C pour expressions de chemins acceptée le 16 novembre 1999 (v 2 en cours d'élaboration) XSL Xpointer (liens) XQuery (queries) rechercher un élément dans un document adresser toute sous partie d'un document Utilisable dans une URI Possibilité de faire des tests (Pattern) Supporte XML Namespaces Expressions de chemins communes à : Xpath permet de Syntaxe non XML 77
Opérateurs de positionnement, chemins Indicateur de relation ou «Axe» Filtres : sélection des nœuds vérifiant filtre Prédicat : Relation entre nœud (père, fis, attribut, ) expression booléenne de positionnement Fonctions de nœuds, booléennes, numériques, de position, de chaînes 78
auteur XPath opère sur l'arbre d'un <livre = "Hugo"> <titre>les châtiments</titre> <chapitre> <section>buonaparte /section> <section>neige</section> </chapitre> Auteur = "Hugo" </livre> titre Les châtiments document racine livre chapitre section Bonaparte chapitre section Neige 79
Une expression de chemins : parcours de l'arbre document: depuis un nœud de départ vers un ensemble de nœuds cibles les cibles constituent la valeur du cheminement Un chemin peut être : absolu commence à partir de la racine /étape1/ /étapen relatif commence à partir d un nœud courant étape1/ /étapen 80
" " indiquer l'alternative < select="e1 E2"> sélectionne éléments de type E1 et E2 "/" exprime le chemin < select="section/paragraphe"> < select="/"> sélectionne la racine "//" chemin avec recherche dans tous les descendants < select="section//paragraphe"> + sous-paragraphes "." sélectionne le nœud courant ".." sélectionne le père du nœud courant "@" sélectionne les éléments avec attribut connu < select="@gsm"> éléments avec l attribut ATT1 81
Autres opérateurs * : tout élément @* : tout attribut [ ] : position Autres expressions de sélection XPath sélection éléments de nom donné avec un attribut donné section[@titre] tous éléments section ayant un attribut titre sélection éléments ayant des fils donnés section[paragraphe] toutes les sections ayant des fils paragraphe sélection des éléments dont l'attribut a une valeur connue section[@titre="introduction"] 82
Sections d'un chapitre /child::livre/child::chapitre/child::section /livre/chapitre/section Texte du chapitre 1 section 2 /descendant::chapitre[position() = 1] /child::section[position() = 2]/child::text() //chapitre[1]/section[2]/text() 83
Self : contient le nœud courant lui même (".") Child : nœuds fils directs ("") Descendant : tous les nœuds descendants directs et indirects Descendant-or-self : tous les nœuds descendants et soi (".//") Parent : l élément père ("..") Ancestor : tous les ascendants directs et indirects Ancestor-or-self : tous les ascendants et soi même Following-sibling : frères suivants (à droite) Preceeding-sibling : frères précédents (à gauche) Attribut : les attributs d un élément ("@") Les espaces de noms rattachés au nœud courant 84
Suivent un indicateur de relation Descendant::section : tous les descendants de type section Exemples Attribut::unit : l attribut «unit» de l élément courant Child::title : l élément fils = «title» Child::dc:title : l élément fils = «title» dans l espace «dc» Avec une fonction Descendant::comment() Child::text() 85
Opérateur booléens dans les expressions not (expression) "AND", "OR" exemples : section[not(@titre)] les sections sans titre section/paragraphe[cond1 and cond2 ] True() et False() Lang(ch) vrai si ch correspond à xml:lang Expressions arithmétiques ou de chaînes + - div mod NaN!= < > <= >= Valeurs : "xxx", NaN 86
87
comment() tous nœuds commentaires fils du courant pi() ou processing-instruction() les éléments de traitement pi("xml-stylesheet") toutes les feuilles de style text() sélectionne les nœuds textes node() sélectionne tous les nœuds, qque soit leur type Last() nombre de nœuds dans le contexte courant Position() position du nœud courant Count () compte le nombre de nœuds de l argument Id(" ch1 ch2 ch3 ") les éléments id ayant une des valeurs Name() nom de l élément en argument 88
String (objet) convertit en chaîne de caractères Concat(ch1, ch2, ) concatène les chaînes en arguments Starts-with(ch1, ch2) vrai si ch1 débute par ch2 Contains(ch1, ch2) vrai si ch1 contient ch2 Substring-before(ch1, ch2) retourne la partie de ch1 avant ch2 ou vide Substring-before("1999-08-03:22.40", ":") retourne "1999-08-03" Substring-after(ch1, ch2) retourne la partie de ch1 après ch2 ou vide Substring(ch1, nb1, nb2) retourne la chaîne commençant à nb1 et terminant à nb2 String-length Translate (ch1, ch2, ch3) retourne ch1 avec les ch2 remplacés par ch3 89
Number() transforme l'argument en nombre Number ("+0.35") > 0 est vrai Number (true)=1, 0 pour faux Sum() effectue le somme des arguments Floor() retourne la partie entière de l'argument Ceiling() retourne la partie entière + 1 Round() arrondi de l'argument 90
<?xml version="1.0" encoding="iso-8859-1"?> <?xml-stylesheet href="film.xsl" type="text/xsl"?> <FILM> <TITRE>Vertigo</TITRE> <AUTEUR>Alfred Hitchcock</AUTEUR> <ANNEE>1958</ANNEE> <GENRE>Drame</GENRE> <PAYS>Etats Unis</PAYS> <RESUME> Scottie Ferguson, ancien inspecteur de police, est sujet au vertige depuis qu'il a vu mourir son collègue. Elster, son ami, le charge de surveiller sa femme, Madeleine, ayant des tendances suicidaires. Amoureux de la jeune femme 91
<?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform "> <xsl:output method="html"/> <!-- Résumé du film --> <xsl:template match="film"> <h3>résumé</h3> <html> <xsl:value-of select="resum <head> </p> <!-- Titre du film --> </body> <title>film: <xsl:value-of select="titre"/> </title> </html> </head> </xsl:template> <body bgcolor="white"> </xsl:stylesheet> <p> <!-- Insérer une image GIF avec le titre comme nom -> <img SRC="{TITRE}.gif" align="left" height="220"/> <h1> <i><xsl:value-of select="titre"/></i> </h1> <!-- Genre, pays, et année du film --> <xsl:value-of select="genre"/>, <i> <xsl:value-of select="pays"/></i>, <xsl:value-of select="annee"/> </p> 92 <p>
93
Pour transformer un document XML vers XML, XML vers une présentation (HTML, texte, rtf, pdf, etc.) Un document est un arbre XSL processeur qui parcourt l'arbre applique les règles de transformations vérifiées (à condition vraie) aux nœuds sélectionnés produit un document en sortie 94
Plusieurs formats de publication pour un contenu Format ( Postcript) XML Browser Document (XHTML, DHTML, HTML) XSL Processor Format (XML) pour Word, Excel XSL Stylesheet format (WML) Format (XML) application e.commerce XSL permet la présentation sur des terminaux variés 95
HTML XML Programme XML Fichier XML Base de données S E R V E U R Affichage ASP ou JSP Processeur XSL HTML Affichage XML Processeur XSL Affichage Traitement 96
Une feuille de style XSL est un document XML de racine <xsl:stylesheet> contient une liste de règles de transformation <xsl:template> Chaque règle (<xsl:template>) précise: Une condition spécifiant le sous-arbre du document d entrée auquel elle s applique (match=) Une production spécifiant le résultat de l application de la règle (contenu) Il s'agit de règles de production classiques If <condtition> then <production> Codées en XML avec espace de nom xsl: 97
<?xml version="1.0"?> <Guide> <Restaurant Categorie="****"> <Nom>Le Bahia</Nom> <Adresse> <Ville>Fès</Ville> <Dept>Fès-Boulemane</Dept> </Adresse> </Restaurant> <Restaurant Categorie="***"> <Nom>Salè-Sucré</Nom> <Adresse> <Ville>Rabat</Ville> <Dept>Rabat-Salé</Dept> 98
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/xsl"> <xsl:template match="/"> <html> <head><b>restau- XSL</B></head> <body><xsl:apply-templates/></body> </html> </xsl:template> <xsl:template match="guide"> <H1>BONJOUR EXEMPLE XML</H1> <H2>VOICI LE GUIDE</H2> <xsl:apply-templates /> </xsl:template> <xsl:template match="restaurant"> <P> <I>Restaurant :</I> <xsl:value-of select="nom"/></p> </xsl:template> 99
Définition des règles par <xsl:template > Attributs match: condition de sélection des nœuds sur lesquels la règle s'applique (XPath) name: nom de la règle, pour invocation explicite (en conjonction avec <call-template>) mode: permet d'appliquer à un même élément des règles différentes en fonction du contexte priority: priorité, utilisé en cas de conflit entre deux règles ayant la même condition Exemples 100
Le contenu de l'élément <xsl:template> est la production de la règle: Les éléments du namespace xsl sont des instructions qui copient des données du document source dans le résultat Les autres éléments sont inclus tels quels dans le résultat Instructions pour: Parcourir l'arbre du document source Copier le contenu du document source dans le résultat 101
<xsl:template>, définir une règle et son contexte <xsl:apply-templates />, appliquer les transformations aux enfants du nœud courant <xsl:value-of select />, extrait la valeur d'un élément sélectionné à partir du nœud courant <xsl:for-each>, définir un traitement itératif <xsl:pi>, générer une processing instruction <xsl:element>, générer un élément <xsl:attribute>, générer un attribut <xsl:if>, définir un traitement conditionnel 102
Processeurs XSLT conformes à la spécification: Apache Group (www.apache.org): Xalan Oracle XDK (www.oracle.com): XML Parser/ XSL Proc. MSXML.NET James Clark (www.jclark.com): XT Saxon libxml, libxslt (Unix C) Browser Microsoft MSXML et IE 5 ou plus Netscape supporte XSLT depuis la V6 Firefox Mozilla Editeur et debugger Style Vision de Altova Oxygen de Synchro Stylus Studio de Data Direct 103
XSLT un langage puissant de transformation d'un arbre XML en un autre XSLT permet en particulier de publier des données XML sur le Web par transformation en un document HTML standard XSLT est très utilisé : Pour publier des contenus XML Pour transformer des formats (EAI, B2B) 104
105
Permet des mises en pages sophistiquées Objets de mise en forme applicables aux résultats avec XSLT Distinction Formatage des pages Formatage des objets à l'intérieur des pages Statiques 106
Peut s'appliquer aux résultats des feuilles XSLT 107
Un document FO est formé d'un élément fo:root qui comprend deux parties distinctes une description des modèles de pages fo:layout-master-set une description du contenu fo:page-sequence Le contenu comporte : Des flux contenant les données mêmes du document Des éléments statiques dont le contenu se répète sur les pages (en-têtes courants, no de page, etc.) 108
Les objets de formatage sont multiples : <fo:block> utilisé pour les blocs de textes, paragraphes, titres <fo:display-rule> ligne de séparation <fo:external-graphic> zone rectangulaire contenant un graphisme (SVG) Ils possèdent de nombreuses propriétés Pour un block on peut définir la marge gauche et droite l espace avant et après le paragraphe la couleur du texte... 109
Pages portrait ou paysage Pages recto-verso Page de tailles variées Marges multiples Colonnes multiples Entête et pieds de page Caractères unicode Multiple directions d'écritures Numérotation des pages Graphiques et SVG Tables, avec entêtes, lignes et colonnes fusionnables Listes Zones flottantes 110
<?xml version="1.0" encoding="iso-8859-1"?> <fo:root xmlns:fo="http://www.w3.or g/1999/xsl/format"> <fo:layout-master-set> <fo:simple-page-master master-name="my-page"> <fo:region-body margin="2 cm"/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence masterreference="my-page"> <fo:flow flow-name="xslregion-body"> Element Root Layout master set Permet de déclarer une ou plusieurs page masters (masque) et page sequence masters pour définir la structure des pages (ici une de 2 cm de marges) Page sequence Permet de définir le namespace XSL-FO Les pages sont groupées en séquences et structurées selon la référence au masque. Flow C'est le container du texte utilisateur dans le document. Le nom du flot lit le texte à 111
Définition de propriétés pour la racine <xsl:template match= / > <fo-display-sequence font-style= italic startindent= 4pt end-indent= 4pt font-size= 18pt <xsl:apply-templates/> </fo-display-sequence> </xsl:template 112
Apache Group : FOP Formating Object Processor Génère du PDF http://www.apache.org JFOR (Open Source) Antenna House Génère du PDF http://www.renderx.com Altova XSL Formatter http://www.antennahouse.com RenderX Génère du RTF http://www.jfor.org StyleVision http://www.altova.com/products_xsl.html XML Mind FO Converter 113
XML = format pour la production de publications échangeables sur le web : production d une source unique en XML ; XSLT = génération automatique de présentations multiples ; XSL-FO = génération de présentations soignées avec pages maîtres et blocs formatés. 114
XLink = liens externes entre documents XPointer = pointeurs internes à un document XForms = saisie de formulaires avec XML RSS = format pour la syndication de contenus 115
116
Les Liens HTML ont des lacunes pas de saut vers une partie de document sans ancrage nommé + difficile si fichier cible non accessible en écriture pas d'historique (lien source, ), liens unidirectionnel XLL, extensible Linking Language : 2 parties X-Links : liens vers un URI de document X-Pointers : pour spécifier vers quelle partie du document ou l on va non encore implanté par les navigateurs 117
Tout élément XML peut devenir lien en ajoutant les attributs xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type type du lien xlink:href adresse URI de la ressource cible <FOOTNOTE xlink:type="simple" xlink:href="footnote4.xml"> <IMAGE xlink:type="simple" xlink:href="logo.gif"> Possibilité d'utilisation comme la balise A dans HTML <xlink:type="simple" xlink:href="footnote4.xml"> <FOOTNOTE> copyright </FOOTNOTE> </xlink:simple> Plusieurs types de liens simple (id HTML), extended : multi-directionnel (plusieurs sources, 118
Positionnement vers des endroits d'un autre document pas de besoin d'ancrage souvent utilisé avec ID syntaxe complète ou abrégé (avec ID) ex : accès à l'élément dans seminet ayant comme id "semxml" http://emi.ac.ma/emi_p_o/seminet.xml#xpointer (id(semxml")) en abrégé : http://emi.ac.ma/emi_p_o/seminet.xml#semxml 119
Avec Id Sans Id xlink:href='http://foo.bar.com#xpointer(id("d231"))' Xlink:href="xpointer(/child::chapitre[position()=3]/ child::section[position()=2]/ descendant::figure[position()=1]/child::legend)" Syntaxe de la séquence des enfants http://emi.ac.ma/emi_p_o/seminet.xml#/3/2/1 120