500 likes | 732 Views
Publication et Traitement avec XSL. 1. XPATH 2. XSLT 3. XSLFO 4. Traitement de documents 5. Conclusion. 1. XPath : l'adressage XML. XPath Expressions de chemins dans un arbre XML Permet de sélectionner des nœuds par navigation. Document XML. ?. XPath. XPath. XML Path Language
E N D
Publication et Traitement avec XSL 1. XPATH 2. XSLT 3. XSLFO 4. Traitement de documents 5. Conclusion
1. XPath : l'adressage XML • XPath • Expressions de chemins dans un arbre XML • Permet de sélectionner des nœuds par navigation Document XML ? XPath
XPath • XML Path Language • recommandation W3C pour expressions de chemins • acceptée le 16 novembre 1999 • version 2 en cours d'élaboration • Expressions de chemins communes à : • XSL • Xpointer (liens) • XQuery (queries) • Xpath permet • de rechercher un élément dans un document • d'adresser toute sous partie d'un document XPath
XPath - Parcours d'arbre • XPath opère sur l'arbre d'un document racine <livre auteur = "Hugo"> <titre>Les chatiments</titre> <chapitre> <section>Buonaparte </section> <section>Neige</section> </chapitre> … </livre> livre @auteur chapitre chapitre "Hugo" titre section section Les chatiments Neige Bonaparte XPath
XPath - Expression de chemins • Une expression de chemins spécifie une traversée de l'arbre du 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 à la racine • /étape1/…/étapeN • relatif • commence à un nœud courant • étape1/…/étapeN XPath
Syntaxe et sémantique • Cheminement élémentaire • direction::sélecteur [predicat] • Directions • parent, ancestor, ancestor-or-self • child, descendant, descendant-or-self • preceding, preceding-sibling, following, following-sibling • self, attribute, namespace • Sélecteur • nom de nœud sélectionné (élément ou @attribut) • Prédicat • [Fonction(nœud) = valeur] XPath
XPath - Exemples • 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() XPath
XPath - Synthèse XPath
2. XSLT : la présentation • Permet de transformer un document • régulier ou irrégulier • de XML à XML, XHTML est un cas particulier • De XML à présentation (HTML, texte, rtf, pdf, etc.) • Un document est un arbre • Le processeur XSL parcourt l'arbre et applique les règles de transformations vérifiées (à condition vraie) aux nœuds sélectionnés • Un document est produit en sortie XSLT
Publications avec XSL XSL Stylesheet • Plusieurs formats de publication pour un contenu • XSL permet la présentation sur des terminaux variés Format ( Postcript) XML Browser (XHTML, DHTML, HTML) Document XSL Processor Format (XML)pour Word, Excel Format (XML) application e.Commerce format (WML) XSLT
Architectures HTML XML Affichage ASP ou JSP S ERVEUR Programme XML HTML Processeur XSL Affichage Fichier XML XML • Affichage • Traitement Processeur XSL Base de données XSLT
Les feuilles de style • 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: XSLT
Exemple de document <?xml version="1.0" ?> <Guide> <Restaurant Categorie="**"> <Nom>Le Romantique</Nom> <Adresse> <Ville>Cabourg</Ville> <Dept>Calvados</Dept> </Adresse> </Restaurant> <Restaurant Categorie="***"> <Nom>Les TroisGros</Nom> <Adresse> <Ville>Roanne</Ville> <Dept>Loire</Dept> </Adresse> </Restaurant> </Guide> XSLT
Exemple de feuille de style XSL <?xml version="1.0" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/xsl"> <xsl:template match="/"> <html><head><B>ESSAI XSL</B></head> <body><xsl:apply-templates/></body></html> </xsl:template> <xsl:template match="Guide"> <H1>BONJOUR LE GROUPE XML</H1> <H2>SUIVEZ LE GUIDE</H2> <xsl:apply-templates /> </xsl:template> <xsl:template match="Restaurant"> <P> <I>Restaurant :</I> <xsl:value-of select="Nom"/></P> </xsl:template> </xsl:stylesheet> XSLT
Les règles de production • 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 • <xsl: template match="/"> • <xsl: template match="auteur" name="R1" priority="1"> XSLT
La génération du résultat • 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 • Parcours de l'arbre: • <xsl:apply-templates>, <xsl:for-each> • Copie du contenu du nœud sélectionné: • <xsl:value-of select= … > XSLT
Résumé des commandes • <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 XSLT
Processeurs XSLT • 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 • CookTop et Tidy (gratuit) XSLT
Quelques éditeurs XSLT
IBM XSL Editor Rendu XML XSLT XSLT
Bilan XSLT • XSLT est un langage très 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) XSLT
Permet les 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 Dynamiques 3. XSL-FO : le formatage XSL-FO
Principes • Peut s'appliquer aux résultats des feuilles XSLT XSL-FO
Organisation du document • 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.) XSL-FO
Objets de formatage • 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 ………... XSL-FO
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 Formatage multi-langages Tables des matières générées Multiple directions d'écritures Numérotation des pages Graphiques et SVG Tables, avec entêtes,lignes et colonnes fusionnables Listes Zones flottantes Tris à l'édition Notes de bas de pages Fonctionnalités XSL-FO
<?xml version="1.0" encoding="iso-8859-1"?> <fo:root xmlns:fo="http://www.w3.org/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 master-reference="my-page"> <fo:flow flow-name="xsl-region-body"> <fo:block>Hello, world!</fo:block> </fo:flow> </fo:page-sequence> </fo:root> Element Root Permet de définir le namespace XSL-FO 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 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 à une zone de la page définie dans le masque. Block C'est le bloc de formatage qui inclut un paragraphe de texte pouvant être produit pas XSLT. XSL-FO: hello World XSL-FO
XSL-FO et XSLT : Exemple • Définition de propriétés pour la racine • <xsl:template match=‘/’> <fo-display-sequence font-style=‘italic’ start-indent=‘4pt’ end-indent=‘4pt’ font-size=‘18pt’ <xsl:apply-templates/> </fo-display-sequence> </xsl:template • La définition d’une propriété locale est prioritaire devant l’héritage XSL-FO
Les processeurs XSL-FO • Apache Group : FOP • Formating Object Processor • Génère du PDF http://www.apache.org • JFOR (Open Source) • Génère du RTF http://www.jfor.org • Antenna House • XSL Formatter http://www.antennahouse.com • RenderX • Génère du PDF http://www.renderx.com • Altova • StyleVision http://www.altova.com/products_xsl.html • XML Mind FO Converter • Génère du RTF http://www.xmlmind.com/foconverter • Autres • Arbortext, Adobe, Scriptura, XMLPDF, APOC, XSL-FO to TeX XSL-FO
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. XSL peut être vu comme le langage de programmation de XML … Questions ? Bilan XSL XSL
4. XML: le traitement par programme XML <ville>Paris</ville> <pays>France</pays> <temp echelle="C">18</temp> Bien formé Valide XML <ville>Paris</ville> <pays>France</pays> <temp echelle="C">18</temp> Manipulationde l'arbre XSLStylesheet <ville>Paris</ville> événements – call back <city>Paris</city> <temp degree="F">65</temp> RTF, Word PDF (X)HTML XML WML XMLSchema(ou DTD) DOM Parser SAX Mal formé/Invalide XSLFO XSLT Mapping
L'interface DOM • Standard W3C fait pour HTML et XML • Structure d'objets pour représenter un document • Résultat d'un "parser" • Arbre d'objets reliés entre eux • Interface objet pour naviguer dans un document • Orientée objet • Peut être utilisée en: • Java, C++ • C#, VB • Python, PHP DOM
Principaux parseurs Document XML Parseur DOM Arbre DOM API DOM Application DOM
Exemple d'arbre DOM <Guide> <Restaurant id="R1">Le meilleur restaurant</Restaurant> <Bar/> </Guide> Racine du document Document NodeList <Guide> Element NodeList <Restaurant> <Bar> Element Element NamedNodeMap Attr Id="R1" NodeList Text Le meilleur restaurant DOM
Navigation via un arbre générique de nœuds Node NodeList (Parent/Child) NamedNodeMap Tout nœud hérite de Node L'arbre DOM Node Document ProcessingInstruction DocumentType Element .... <?xml:stylesheet ...> <!DOCTYPE ...> <Restaurant ....> Child Text Le meilleur restaurant DOM
Document createElement (Nom_Element): créer un élément avec le nom spécifié en paramètre. createComment (commentaire): créer une ligne de commentaires dans le document. createAttribute (Nom_Attribut): créer un attribut avec le nom pris en paramètre. getElementsByTagName (nom_Tag): retourne tous les descendants des éléments correspondants au Nom_Tag. Nœud insertBefore (Nouveau_Noeud, Noeud_Reference): insère un nouveau nœud fils avant le " nœud référence" déjà existant. replaceChild (Nouveau_Noeud, Ancien_Noeud): remplace le nœud "Ancien_Noeud" par le nœud "Nouveau_Noeud". removeChild (Nœud): supprime le nœud entré en paramètre de la liste des nœuds. appendChild (Nouveau_Noeud): Ajoute un nouveau nœud a la fin de la liste des nœuds. hasChildNodes(): Retourne vrai si le nœud possède un enfant Quelques interfaces de base DOM
Interfaces fondamentales DOMImplementation Document Comment DocumentFragment Element Attr(ibute) NamedNodeMap CharacterData Comment Text Interfaces étendues XML ProcessingInstruction DocumentType CDATASection Notation Entity EntityReference Autres interfaces DOM
Exemple d'utilisation Public class ExempleDOM public static main (String argc[]) throws IOException, DOMExcetion {XMLDocument xmlDoc = new XmlDocument(); // creation des nœuds ElementNode nom = (ElementNode) xmlDoc.createElement("nom"); ElementNode prenom = (ElementNode) xmlDoc.createElement("prenom"); ElementNode nomfam = (ElementNode) xmlDoc.createElement("nomfam"); // creation de l'arbre xmlDoc.appendChild(nom); nom.appenChild(prenom); prenom.appendChild(xmlDoc.createTextNode("Jean"); nom.appenChild(nomfam); nomfam.appendChild(xmlDoc.createTextNode("Dupont"); // positionnement d'un attribut nom.setAttribute("ville", "Paris"); // sortie System.exit(0); } } Document: <nom ville ="Paris"> <prenom> Jean </prenom> <nomfa> Dupont </nomfa> </nom> DOM
Une interface objet standard Navigation dans l'arbre XML Traitements spécifiques Performance limitée Place mémoire importante Traitement à la fin de l'analyse DOM 2.0 API indépendante de la structure mémoire DOM Level 3 : XPath Support direct de XPath Définition d'un XPath Evaluator Events Modèle d'événements Associés à un nœud Propagés dans l'arbre Style Accès aux styles Mapping complet Load and Save Stockage de l’arbre Bilan DOM DOM
L'interface SAX • SAX (Simple API for XML) • modèle simplifié d'événements • développé par un groupe indépendant. • Types d'événement : • début et fin de document ; • début et fin d'éléments ; • attributs, texte, … . • Nombreux parseurs publics • XP de James Clark, Aelfred, Saxon • MSXML3 de Microsoft • Xerces de Apache • JAXP de SUN SAX
Principe de fonctionnement Méthodes utilisateur Evénement startDocument Parser Stream XML Document XML Evénement startElement …. Evénement endDocument Content Handler SAX
XMLReader setContentHandler setErrrorHandler parse ContentHandler startDocument endDocument startElement endElement characters ErrorHandler fatalError error warning Les méthodes essentielles SAX
Exemple SAX et DOM personne nom #text: Cover prenom #text: Harry adresse rue #text: Stendhal ville #text: Paris startDocument () startElement (personne) startElement (nom) characters (Cover) endElement (nom) startElement (prenom) characters (Harry) endElement (prenom) startElement (adresse) startElement (rue) characters (Stendhal) endElement (rue) startElement (ville) characters (Paris) endElement (ville) endElement (adresse) endElement (personne) endDocument () <personne> <nom> Cover </nom> <prenom> Harry </prenom> <adresse> <rue> Stendhal </rue> <ville> Paris </ville> </adresse> </personne> SAX
DOM versus SAX • DOM utilise SAX pour la construction de l’arbre d’un document XML • SAX est plus léger que DOM • Au-dessus de DOM, il est possible d ’implémenter un « method caller » ... SAX
Integration : API JAXP • Java API for XML Parsing • JAXP est une d'API standard J2EE permettant d'effectuer des traitements XML qui englobe : • SAX (SAX 2.0) • DOM (DOM Level 2) • la manipulation de transformations XSLT • Objectif • Fournir une couche d’abstraction permettant d’utiliser n’importe quel analyseur SAX/DOM ou processeur XSL • JAXP 1.3 est inclus dans le JDK de Sun • Java WSDP 2.0, Java SE 5.0, disponible sur Java.Net
Le mapping objet (Data Binding- JAXB) • Définition • Mapping entre un document XML et un graphe d’objets métier C++ ou Java Développements manuels Interface générée à l’aide d’outils de Data Binding Objets C++ Objets Java Objets Java Parsing Xerces C++ Parsing XDK Java Binding Java XML XML XML Mapping
Principes • Compilation du schéma en classes Java • Traduction des documents en objets • Possibilité de publier les objets en XML compile Schema Classes instance of conforms unmarshal Objects Documents marshal
Avantages • L’activité de développement "parsing" est réduite • Gain en coût de développement des interfaces • Les applications peuvent se concentrer sur le fonctionnel • Les développeurs n'ont pas à se soucier du mapping XML • Les Systèmes Techniques sont simplifiés • Capitalisation sur l’interface (utilisation, évolution, …) • Gain en terme de fiabilité (fin de l’utilisation de parseurs variés, parfois écrits à la main) • Les performances de l’interface sont optimisées • Les outils de mapping sont intégrés aux serveurs • J2EE = JAXB • .NET = mapper Mapping
Un ensemble d’outils pour traiter du XML: Analyseurs validants Processeurs XSLT/XSLFO Intégrés aux serveurs d’applications J2EE = JAXP .NET = MSXML En évolution permanente Questions ? 5. Conclusion