Transcript Formation

Publication et Traitement
avec XSL
1.
2.
3.
4.
5.
XPATH
XSLT
XSLFO
Traitement de documents
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
III.‹#›
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
III.‹#›
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> @auteur
<section>Neige</section>
</chapitre>
"Hugo"
…
</livre>
livre
titre
chapitre
section
chapitre
section
Les chatiments
Bonaparte
XPath
III.‹#›
Neige
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
III.‹#›
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
III.‹#›
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
III.‹#›
XPath - Synthèse
Pattern
Exemple
Signification
Nom
Sélectionne les éléments de nom donné
section
Nom[0]
section[0] Sélectionne le premier élément ayant le nom donné
Nom[end()] section[end()] Sélectionne le dernier élément ayant un nom donné
|
Droite|Gauche Indique une alternative (un nœud OU bien l'autre (ou les deux))
/
Sélectionne le nœud racine d'une arborescence
/
/arbre/Nom /livre/chapitre Sélectionne les nœuds descendants par la balise de nom donné de l'arbre
*
Motif "joker" désignant n'importe quel élément
*
//
//personne Indique tous les descendants d'un nœud
.
Caractérise le nœud courant
.
Désigne le nœud parent. Permet de remonter d'un niveau dans
..
..
l'arborescence
Indique un attribut caractéristique (@nom désigne la valeur de l'attribut).
@
@nom
La notation @* désigne tous les attributs d'un élément
text()
Désigne le contenu d'un élément (le texte contenu entre ses balises)
text()
Sélectionne l'élément dont l'identifiant (la valeur de l'attribut ID) est celui
ID()
ID('a2546')
spécifié en paramètre
Comment() Comment() Désigne tous les nœuds commentaires
Node()
Désigne tous les noeuds
Node()
XPath
III.‹#›
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
III.‹#›
Publications avec XSL
• 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 (XML)
application
e.Commerce
• XSL permet la présentation sur des terminaux variés
format
(WML)
XSLT
III.‹#›
Architectures
HTML
XML
Programme
XML
Fichier
XML
S
E
R
V
E
U
R
Affichage
ASP
ou
JSP
Processeur
XSL
HTML
Affichage
XML
Processeur
XSL
•Affichage
Base de données
•Traitement
XSLT
III.‹#›
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
III.‹#›
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
III.‹#›
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
III.‹#›
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
III.‹#›
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
III.‹#›
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
III.‹#›
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
•
•
•
•
XSLT
Style Vision de Altova
Oxygen de Synchro
Stylus Studio de Data Direct
CookTop et Tidy (gratuit)
III.‹#›
Quelques éditeurs
- IBM XSL Editor version: 1.0
preview release 2
platforms: Java
license: Free
developer: Alphaworks,
revised: 21
IBM
jan 2000
Editeur multi-frame et outils de mise au point – Alphawork d'IBM
- Stylus S tudio version: 4.6
platforms: Windows
NT/2000
license: Commercial; 30 day evaluation available.
developer: Excelon Corporation
revised: 06 mar 2003
Editeur de Excelon (Progress); creation XSL et mise au point
- XMLTransform version: 1.1.0
platforms: Java
license: Commercial;
free evaluation version available
Software Inc.
revised: 22 feb 2002
developer: TIBCO
Editeur de Tibco pour les transformations XSL à XSL
XSLT
III.‹#›
IBM XSL Editor
XML
XSLT
Rendu
XSLT
III.‹#›
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
III.‹#›
3. XSL-FO : le formatage
• 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
XSL-FO
III.‹#›
Principes
• Peut s'appliquer aux résultats des feuilles XSLT
XSL-FO
III.‹#›
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
III.‹#›
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
III.‹#›
Fonctionnalités
•
•
•
•
•
•
•
•
•
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
III.‹#›
XSL-FO: hello World
<?xml version="1.0" encoding="iso-88591"?>
<fo:root
xmlns:fo="http://www.w3.org/1999/X
SL/Format">
<fo:layout-master-set>
<fo:simple-page-master mastername="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="xsl-regionbody">
<fo:block>Hello, world!</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
XSL-FO
•
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
•
•
Les pages sont groupées en séquences
et structurées selon la référence au
masque.
Flow
•
•
Permet de définir le namespace XSL-FO
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
•
III.‹#›
C'est le bloc de formatage qui inclut un
paragraphe de texte pouvant être
produit pas XSLT.
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
III.‹#›
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
III.‹#›
Bilan XSL
• XML = format pour la
production de publications
échangeables sur le web :
• Questions ?
• 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 …
XSL
III.‹#›
4. XML: le traitement par programme
<ville>Paris</ville>
<pays>France</pays>
<temp
echelle="C">18</temp>
Parser
XML
<ville>Paris</ville>
Bien formé <pays>France</pays>
<temp
Valide
echelle="C">18</temp>
Mal formé/Invalide
XSL
Stylesheet
Manipulation
de l'arbre
SAX
XML
DOM
XML
Schema
(ou DTD)
XSLFO
XSLT
<city>Paris</city>
<temp
degree="F">65</t
emp>
WML
Mapping
XML
(X)HTML
PDF
III.‹#›
RTF, Word
<ville>Paris</ville>
événements – call back
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
III.‹#›
Principaux parseurs
Document
XML
Xerces
Apache (Java, C++)
MSXML
Microsoft
SDK Oracle
Oracle
JAXP J2EE (Sun JDK)
API générique J2EE
Parseur
DOM
Arbre DOM
API DOM
Application
DOM
III.‹#›
Exemple d'arbre DOM
Document
Racine du document
NodeList
<Guide>
Element
NodeList
<Restaurant>
<Bar>
Element
Element
<Guide>
NamedNodeMap
<Restaurant id="R1">Le meilleur
restaurant</Restaurant>
<Bar/>
</Guide>
Attr
NodeList
Id="R1"
Text
Le meilleur restaurant
DOM
III.‹#›
L'arbre DOM
• Navigation via un arbre
générique de nœuds
Node
• Node
• NodeList (Parent/Child)
• NamedNodeMap
Document
ProcessingInstruction
DocumentType
<?xml:stylesheet ...>
<!DOCTYPE ...>
• Tout nœud hérite de
Node
DOM
Element
<Restaurant ....>
Child
Text
Le meilleur restaurant
III.‹#›
....
Quelques interfaces de base
•
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.
DOM
Nœud
•
•
•
•
III.‹#›
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
Autres interfaces
• Interfaces fondamentales
•
•
•
•
•
•
•
•
DOM
• Interfaces étendues XML
DOMImplementation
Document
Comment
DocumentFragment
Element
Attr(ibute)
NamedNodeMap
CharacterData
• Comment
• Text
•
•
•
•
•
•
III.‹#›
ProcessingInstruction
DocumentType
CDATASection
Notation
Entity
EntityReference
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);
Document:
nomfam.appendChild(xmlDoc.createTextNode("Dupont");
<nom ville ="Paris">
// positionnement d'un attribut
nom.setAttribute("ville", "Paris");
<prenom> Jean </prenom>
// sortie
<nomfa> Dupont </nomfa>
System.exit(0); } }
</nom>
DOM
III.‹#›
Bilan DOM
• Une interface objet
standard
• 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
• 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
III.‹#›
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
•
•
•
•
SAX
XP de James Clark, Aelfred, Saxon
MSXML3 de Microsoft
Xerces de Apache
JAXP de SUN
III.‹#›
Principe de fonctionnement
Méthodes
utilisateur
Evénement
startDocument
Document
XML
Stream
XML
Parser
Evénement
startElement
….
Evénement
endDocument
Content Handler
SAX
III.‹#›
Les méthodes essentielles
• XMLReader
• ErrorHandler
• setContentHandler
• setErrrorHandler
• parse
• fatalError
• error
• warning
• ContentHandler
•
•
•
•
•
SAX
startDocument
endDocument
startElement
endElement
characters
III.‹#›
Exemple SAX et DOM
<personne>
<nom>
Cover
</nom>
<prenom>
Harry
</prenom>
<adresse>
<rue>
Stendhal
</rue>
<ville>
Paris
</ville>
</adresse>
</personne>
SAX
startDocument ()
startElement (personne)
startElement (nom)
personne
characters (Cover)
nom
endElement (nom)
#text: Cover
startElement (prenom)
prenom
characters (Harry)
#text: Harry
endElement (prenom)
adresse
startElement (adresse)
rue
startElement (rue)
#text: Stendhal
characters (Stendhal)
ville
endElement (rue)
#text: Paris
startElement (ville)
characters (Paris)
endElement (ville)
endElement (adresse)
endElement (personne)
endDocument ()
III.‹#›
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
III.‹#›
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
III.‹#›
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
Objets C++
Parsing Xerces C++
XML
Mapping
Interface générée à l’aide
d’outils de Data Binding
Objets Java
Parsing XDK Java
XML
III.‹#›
Objets Java
Binding Java
XML
Principes
• Compilation du schéma en classes Java
• Traduction des documents en objets
compile
Schema
Classes
instance of
conforms
unmarshal
Objects
Documents
marshal
• Possibilité de publier les objets en XML
III.‹#›
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
III.‹#›
5. Conclusion
• Un ensemble d’outils pour
traiter du XML:
• Questions ?
• Analyseurs validants
• Processeurs XSLT/XSLFO
• Intégrés aux serveurs
d’applications
• J2EE = JAXP
• .NET = MSXML
• En évolution permanente
III.‹#›