XML - Georges Gardarin

publicité
III. Publication et Traitement
avec XSL
•
•
•
•
•
XPATH
XSLT
XSL-FO
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
‹#›
XPath
• XML Path Language
• recommandation W3C pour expressions de chemins
• acceptée le 16 novembre 1999
• version 2 acceptée depuis janvier 2007
• 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
titre
"Hugo"
section
section
Les chatiments
Bonaparte
XPath
‹#›
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
‹#›
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
‹#›
EXEMPLES
• Sections d'un chapitre
racine
• /child::livre/child::chapitre/
child::section
• /livre/chapitre/section
livre
• Texte du chapitre 1 section 2
@auteur
• /descendant::chapitre[position()
= 1]
/child::section[position() = 1]
/child::text()
• //chapitre[0]/section[1]/text()
"Hugo"
titre
chapitre
chapitre
section
section
Les
chatiments
• Remonter à l’auteur du livre
• parent::section/ancestor::livre/
child::@auteur
• ancestor::livre/@auteur
Bonaparte
‹#›
Neige
XPath - Synthèse
Signification
ple
Exem
Pattern
entsdenomdonné
Sélectionnelesélém
Nom
section
ent ayant lenomdonné
ier élém
[0]
Nom
section[0] Sélectionneleprem
ent ayant unnomdonné
[end()] section[end()] Sélectionneledernier élém
Nom
|
aucheIndiqueunealternative(unnœudOUbienl'autre(oulesdeux))
Droite|G
Sélectionnelenœudracined'unearborescence
/
/
/arbre/Nom/livre/chapitreSélectionnelesnœudsdescendantspar labalisedenomdonnédel'arbre
ent
portequel élém
otif "joker"désignant n'im
M
*
*
//
//personne Indiquetouslesdescendantsd'unnœud
Caractériselenœudcourant
.
.
onter d'unniveaudans
et derem
Désignelenœudparent. Perm
..
..
l'arborescence
nomdésignelavaleur del'attribut).
Indiqueunattribut caractéristique(@
@
nom
@
ent
*désignetouslesattributsd'unélém
Lanotation@
ent (letextecontenuentresesbalises)
Désignelecontenud'unélém
text()
text()
ent dont l'identifiant (lavaleur del'attribut ID) est celui
Sélectionnel'élém
ID()
ID('a2546')
ètre
spécifiéenparam
entaires
m
ent() Com
m
Com
ent() Désignetouslesnœudscom
m
Désignetouslesnoeuds
Node()
Node()
XPath
‹#›
XPath 2.0
•
•
•
•
•
•
•
•
•
Types des schémas et séquences supportés
Elimination des « Result Tree Fragments »
Support des groupes de noeuds
Introduction de fonctions d'agrégats
Support des boucles For et des conditions
Support des expressions régulières
Documents multiples en entrée et sortie
Nouvelles fonctions et opérateurs
Intégration de fonctions utilisateurs possible
‹#›
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
• 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
format
(WML)
• XSL permet la présentation sur des terminaux variés
XSLT
‹#›
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
‹#›
Transformation par Jscipt côté client
<html> <body>
<script type="text/javascript">
// Load XML
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("exemple.xml")
// Load XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("exemple.xsl")
// Transform
document.write(xml.transformNode(xsl))
</script>
</body> </html>
‹#›
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 de l'arbre
d'entrée en arbre de sortie <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:applytemplates/></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>)
• 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:
• 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 instruction de traitement
•
<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/ XSLT Proc.
MSXML et System.xml (www.microsft.com/xml): packages .NET
James Clark (www.jclark.com): XT
Saxon XML (saxon.sourceforge.net): XSLT Proc.
libXML, libXSLT (Unix C)
• Browsers
•
•
•
•
XSLT
Microsoft IE 5 ou plus
Netscape depuis la V6
Mozilla Firefox depuis la V1
Opera depuis la V7
‹#›
Quelques éditeurs
•
•
•
•
•
XSLT
StylusStudio : www.stylusstudio.com
• Edit, Map, Debug XSLT Stylesheets
• Visual, Easy-to-Use Tools for XSLT!
EditiX : www.editix.com
• XSLT Debugger
• XML XSD XSL SVG XSL-FO
MoreMotion : www.moremotion.com
• Fast XSLT Stylesheet Development
• With High-End Wysiwyg Editor
Oxygen XSLT Editor : www.oxygenxml.com
• Edit and debug your XSL stylesheets
• Transform XML using XSLT and FOP
Altova Style Vision : www.altova.com
• Visual stylesheet design from databases
‹#›
Editeur XSLT (Sonic)
‹#›
Mapper XSLT à XSLT (Sonic)
‹#›
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
XHTML standard
• XSLT est très utilisé :
• Pour publier des contenus XML
• Pour transformer des formats (EAI, B2B)
XSLT
‹#›
3. XSL-FO : le formatage
• Nommé officiellement XSL
• Standard depuis octobre
2001
• Permet les mises en pages
sophistiquées sur écran,
papier, ...
• Génération de PDF ou RTF
• Applique des objets de mise
en forme aux données XML
• Utilisé notamment pour la
PAO
XSL-FO
‹#›
Complémentaire à XSLT
• 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
‹#›
Structure de la feuille fo:root
<?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="A4">
<!-- Template de page ici -->
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4">
<!-- Contenu de la page ici -->
</fo:page-sequence>
</fo:root>
XSL-FO
‹#›
Définition des masques
de pages (1 à N)
Définition des contenus
de chaque page
Modèle de page
• Page découpée en régions
• Les régions ont des marges
• Fixées par des attributs
dans le masque de page
• Les flux de données sont
envoyés les régions
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
‹#›
XSL-FO: hello World
<?xml version="1.0" encoding="iso-88591"?>
<fo:root
xmlns:fo="http://www.w3.org/1999/XSL/F
ormat">
<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 master-reference="mypage">
<fo:flow flow-name="xsl-region-body">
<fo:block>Hello, world!</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
XSL-FO
•
Element Root
•
•
Layout master set
•
•
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
•
‹#›
Les pages sont groupées en séquences et
structurées selon la référence au masque.
Flow
•
•
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
C'est le bloc de formatage qui inclut un
paragraphe de texte pouvant être produit
pas XSLT.
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
‹#›
Les processeurs XSL-FO
• FOP (Apache Group) Open Source
• Formating Object Processor
• Génère du PDF
http://www.apache.org
• JFOR (Sourceforge) Open Source
• Génère du RTF
http://sourceforge.net/projects/jfor
• XSL Formatter
• Antenna House
http://www.antennahouse.com
• RenderX
• Génère du PDF
http://www.renderx.com
• StyleVision
• Altova
http://www.altova.com/products_xsl.html
• Scriptura
• InventiveDesigners
http://www.inventivedesigners.com/scriptura
• Autres
• Arbortext, Adobe, Xinc, XMLPDF, APOC, XSL-FO to TeX
XSL-FO
‹#›
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
‹#›
4. XML: le traitement par programme
XML
DOM
XML
Schema
(ou DTD)
<ville>Paris</ville>
<pays>France</pays>
<temp
echelle="C">18</temp>
Manipulation
de l'arbre
Format interne
Bien formé
Valide
Mal formé/Invalide
Structures de données
XSL
Stylesheet
SAX
Parser
XML
XSLFO
XSLT
<city>Paris</city>
<temp
degree="F">65</te
mp>
WML
Parser
XML
(X)HTML
PDF
‹#›
RTF, Word
<ville>Paris</ville>
événements – call back
L'interface DOM
• Standard du 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
Parser
‹#›
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
Parser
‹#›
Exemple d'arbre DOM
Document
Racine du document
NodeList
<Guide>
Element
NodeList
<Restaurant>
<Bar>
Element
Element
<Guide>
<Restaurant id="R1">Le meilleur
restaurant</Restaurant>
<Bar/>
</Guide>
NamedNodeMap
Attr
NodeList
Id="R1"
Text
Le meilleur restaurant
Parser
‹#›
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.
Parser
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
Autres interfaces
• Interfaces fondamentales
•
•
•
•
•
•
•
•
Parser
• Interfaces étendues XML
DOMImplementation
Document
Comment
DocumentFragment
Element
Attr(ibute)
NamedNodeMap
CharacterData
• Comment
• Text
•
•
•
•
•
•
‹#›
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>
Parser
‹#›
Bilan DOM
• Une interface objet standard
• DOM Level 3 :
• Navigation dans l'arbre XML
• Traitements spécifiques
• 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
• Performance limitée
• Place mémoire importante
• Traitement à la fin de l'analyse
• DOM 2.0
• API indépendante de la
structure mémoire
Parser
‹#›
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
•
•
•
•
Parser
XP de James Clark, Aelfred, Saxon
MSXML3 de Microsoft
Xerces de Apache
JAXP de SUN
‹#›
Principe de fonctionnement
Méthodes
utilisateur
Evénement
startDocument
Document
XML
Stream
XML
Parser
Evénement
startElement
….
Evénement
endDocument
Content Handler
Parser
‹#›
Les méthodes essentielles
• XMLReader
• ErrorHandler
• setContentHandler
• setErrrorHandler
• parse
• fatalError
• error
• warning
• ContentHandler
•
•
•
•
•
Parser
startDocument
endDocument
startElement
endElement
characters
‹#›
Exemple SAX et DOM
<personne>
<nom>
Cover
</nom>
<prenom>
Harry
</prenom>
<adresse>
<rue>
Stendhal
</rue>
<ville>
Paris
</ville>
</adresse>
</personne>
Parser
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
#text: Cover
prenom
#text: Harry
adresse
rue
#text: Stendhal
ville
#text: Paris
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 » ...
Parser
‹#›
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
Parser
‹#›
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
‹#›
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
Mapping
‹#›
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
‹#›
5. Conclusion
• Un ensemble d’outils pour
traiter du XML:
• Questions ?
• Processeurs XSLT/XSLFO
• Analyseurs validants
• Intégrés aux serveurs
d’applications
• J2EE = JAXP
• .NET = MSXML
• En évolution permanente
‹#›
Téléchargement