Académique Documents
Professionnel Documents
Culture Documents
2ème GI
Ecole Hassania des Travaux Publics
1
Généralités et historique
2
Le concept de document électronique
Structure logique
– Correspond au contenu du document
(l’information)
Titre, chapitres, sections, figures, notes de bas de page…
Structure physique
– Correspond à la forme et à la présentation du
document
Police, style, taille, couleur des caractères, alignement,
espacement…
4
Structure logique: exemple
<Article>
<Titre> XML: eXtensible Markup Language </Titre>
<Auteur>Wikipédia</Auteur>
<Section titre = "Introduction">
<Paragraphe>XML (Extensible Markup Language, « langage de balisage
extensible ») est un langage informatique de balisage générique. Le W3C
recommande XML pour exprimer des langages de balisages spécifiques
(exemples : XHTML, SVG, XSLT).
</Paragraphe>
<Paragraphe> Son objectif initial est de faciliter l'échange automatisé de
contenus entre systèmes d'informations hétérogènes, notamment, sur
Internet. XML est un sous-ensemble de SGML dont il retient plusieurs
principes dont : la structure d'un document XML est définissable et validable
par un schéma, un document XML est entièrement transformable dans un
autre document XML.
</Paragraphe>
5 </Section>
</Article>
Structure physique: exemple
<Article>
<Titre police="Times" taille="24" position="centré" format="gras"/>
<Auteur police="Times" taille="20" position="centré" format="italique"/>
<Section numero="1" police="Times" taille="18" position="centré"
format=" gras "/>
<Paragraphe police="Times" taille="18" position="justifié"/>
</Article>
6
W3C
W3C: World Wide Web Consortium
Fondé en 1994 par Tim Berners-Lee avec l’aide du
MIT/LCS, DARPA, et la INRIA-commission Européenne
Consortium international dispatché sur plusieurs sites et
géré par:
– MIT/LCS aux US
– INRIA puis ERCIM en Europe
– Keio University au Japon / université Beihang en Chine
452 membres: e.g. IBM, Microsoft, Oracle…
Objectifs: accroître le potentiel et l’utilisation du Web
– Leitmotiv: Un seul web partout et pour tous
– Production de standards et de normes
7 – Définition de techniques, langages, architectures pour l’échange
de l’information sur le Web
Chronologie des langages pour le
traitement des documents
8
SGML
Un méta-langage de balisage de documents
– Lisible par l’être humain
– Traitable par une machine
– Permet de définir des langages de balisage
Implique la notion de validité d’un document
Séparation du fond et de la forme
– Structure logique identifiée par des balises insérées dans le document
– Mise en page définie en dehors dans des feuilles de style
– Possibilité de multiplier les présentations selon le support de présentation
Support des traitements sur le contenu sans prise en compte de la
forme
Format de stockage et d’échange normalisé
Faiblesse principale:
– Lourdeur et complexité de mise en œuvre
9
HTML
10
Introduction aux bases
d’XML
11
eXtensible Markup Language
Qu’est-ce que c’est?
Séparation de la structure et de la
présentation
Plus simple que SGML
Idéal pour l’échange de données
Compréhensible par l’homme et les
machines
Utilisable entre machines hétérogènes
14
XML vs HTML
Comme c’est le cas pour HTML,
– les données sont identifiées grâce à des tags (identifiants
entre "crochets angulaires" <…>)
– Collectivement, les tags sont désignés par le terme
balisage (Markup)
Contrairement à HTML,
– les tags identifient des données au lieu de spécifier
comment les présenter.
– e.g. les tags HTML spécifient quelque chose comme:
afficher cette donnée en gras:
<b> quelque chose en gras </b>
– Les tags XML agissent comme un champs dans un
programme. Ils associent un label qui identifie une donnée:
Élément de données
Attribut
16
Les balises
17
Les éléments de données
20
Les commentaires
21
Le prolog
Un fichier XML
– Un prolog
– Un corps
25
Les atouts d’XML (1)
26
Les atouts d’XML (2)
27
Les atouts d’XML (3)
28
Utilisations du langage
XML
29
Traitement classique des données
30
Programmation dirigée par les
documents
31
Construisons un
document XML
32
Un simple fichier XML
33
La déclaration
Coder le déclaration qui identifie le fichier comme un fichier
XML:
– <?xml version='1.0' encoding='utf-8'?>
– Cette ligne identifie le document comme un document XML
conforme à la version 1.0
– Elle spécifie qu’elle utilise le schéma 8-bit Unicode pour
l’encodage
– Le document n’est pas spécifié comme étant standalone, le parser
peut prendre en compte des références à des documents externes
Ajouter un commentaire:
– Par défaut, les commentaires sont ignorés par les parseurs
– <?xml version='1.0' encoding='ISO-8859-1'?>
<!-- Ceci est un document définissant une présentation -->
34
L’élément racine
Après la déclaration, chaque document XML définit exactement
un seul élément appelé élément racine (root element)
Tous les autres éléments sont contenus dans l’élément racine
– <?xml version='1.0' encoding='ISO-8859-1'?>
<!-- Ceci est un document definissant une presentation -->
<presentation>
</presentation>
– Les noms des tags sont sensibles à la case (case sensitive), le tag
de fin doit exactement correspondre au tag de début.
35
Introduction des attributs
Une présentation possède certaines propriétés. Il est
plutôt naturel de les définir comme des attributs plutôt
que comme des sous éléments
– <?xml version='1.0' encoding='ISO-8859-1'?>
<!-- Ceci est un document definissant une presentation -->
<presentation
titre= "Ma presentation"
date= "aujourd hui"
auteur= "votre serviteur"
>
</presentation>
– Pour les noms des attributs, il est possible d’utiliser toute combinaison
de chiffres et de lettres en plus de -, _, :, et du point
– Les attributs sont toujours entre guillemets, et ne sont jamais séparés
par des virgules (comme HTML)
36
Ajout d’un élément imbriqué
Les données XML sont structurés de manière hiérarchique. Un élément
donné peut être contenu dans un autre élément
Définissons maintenant l’élément slide contenu dans l’élément racine
presentation.
– <?xml version='1.0' encoding='ISO-8859-1'?>
<!-- Ceci est un document définissant une présentation -->
<presentation
titre= "Ma presentation"
date= "aujourd’hui"
auteur= "votre serviteur"
>
<!-- Le premier slide du titre -->
<slide type="all">
<titre> XML, les bases </titre>
</slide>
</presentation>
37
Ajouter du texte du style HTML
XML, permet de définir des tags et de leur associer les noms de manière
libre
Il est donc possible d’utiliser des tags HTML dans un fichier XML
– <?xml version='1.0' encoding='ISO-8859-1'?>
<!-- Ceci est un document définissant une présentation -->
<presentation
titre= "Ma presentation"
date= "aujourd’hui"
auteur= "votre serviteur"
>
<!-- Le premier slide du titre -->
<slide type="all">
<titre> XML, les bases </titre>
</slide>
<!-- Le plan de la présentation -->
<slide type="all">
<titre> Plan du cours </titre><br/>
<item> <em> Introduction aux bases </em> </item><br/>
38 <item> <em> Construisons un document XML </em> </item><br/> </slide>
</presentation>
Les caractères spéciaux
Dans XML, une entité est une structure XML ou tout
simplement du texte qui possède un nom.
Référencer une entité a pour effet de bord de
l’insérer dans le document à la place de la référence
– Un nom d’entité est référencé de la façon suivante:
&nomEntité;
Il existe des entités prédéfinies pour les caractères
spéciaux.
Il est aussi possible de définir de nouvelles entités
(voir la partie DTD)
39
Les entités prédéfinies
41
Exemple d’utilisation des valeurs
unicode
43
Exemple de section texte
– <?xml version=‘1.0 encoding=‘utf-8’?>
<!-- Ceci est un document définissant une présentation -->
<presentation
titre= "Ma presentation"
date= "aujourd’hui"
auteur= "votre serviteur"
>
<!-- Le premier slide du titre -->
<slide type="all">
<titre> XML, les bases </titre>
</slide>
<!-- Le plan de la présentation -->
<slide type="all">
<titre> <Plan du cours> </titre>
<item> <em> A- Introduction aux bases </em> </item>
<item> <em> B- " Construisons un document XML " </em> </item>
<item><![CDATA[Un petit croquis: coin gauche ----- < Milieu> -----
coin droit
]]>
</item>
</slide> </presentation>
44
Exercice
45
Énoncé
Structurer les informations contenues dans le texte suivant:
Une bouteille d’eau Cristaline de 150cl contient par litre 71mg d’ions positifs clacium, et
5,5mg d’ions positifs magnésium. On y trouve également des ions négatifs comme des
chlorures à 20 mg par litre et des nitrates avec 1mg par litre. Elle est recueillie à St-Cyr la
source, dans le département du loiret. Son code barre est 3270800 et son PH est de 7,45.
Comme la bouteille est sale, quelques matériaux comme du Fer s’y trouvent en
suspension.
Une seconde bouteille d’eau Cristaline a été recueillie à la source d’Aurèle dans les Alpes
Maritimes. La concentration en ions de calcium est de 98 mg/l, et en ions magnésium de 4
mg/l. Il y a 3,6 mg/l d’ions de chlorure et 2mg/l de nitrates, pour un PH de 7,4. Le code
barre de cette bouteille de 50 cl est 3266006.
Une bouteille de même contenance est de marque Volvic, a été puisée à Volvic bien connu
pour ses sources donnant un PH neutre de 7. Elle comprend 11,5 mg/l d’ions calcium,
8.0mg/l d’ions magnésium, 13,5mg/l d’ions chlorure et 6,3mg/l d’ions nitrates. Elle contient
également des particules de silice. Son code barre est 33045798. En fait, Volvic est dans le
46 Puy-de-Dôme
Une solution
<?xml version="1.0" encoding="ISO-8859-1" ?>
<eau>
<bouteille>
<marque>Cristaline</marque>
<composition>
<ion type="positif">calcium 71mg/l</ion>
<ion type="positif">magnésium 5,5mg/l</ion>
<ion type="negatif">chlorure 20mg/l</ion>
<ion type="negatif">nitrate 1mg/l</ion>
<autre type="metal">fer</autre>
</composition>
<source>
<ville>St-Cyr la Source</ville>
<departement>Loiret</departement>
</source>
<code_barre> 3270800 </code_barre>
<contenance unit="cl">150</contenance>
<ph>7,45</ph>
</bouteille> ….
47
Modélisation des
documents:
Les DTDs
48
Une DTD,
Ça sert à quoi?
49
Le concept de validité d’un document
XML
50
Exemples,
Qu’est-ce que vous en pensez?
51 </Evaluateurs>
</Exercice>
Déclaration d’éléments simples dans
une DTD
52
Déclaration d’éléments composés
55
Exemple
56
Exemple de DTD
<!ELEMENT DOCUMENT(PERSONNE*)>
57
DTD interne
Spécifiée en utilisant la déclaration:
<!DOCTYPE nomDeLaDTD [ déclarations ]>
Exemple:
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE PERSONNES [
<!ELEMENT DOCUMENT(PERSONNE*)>
<!ELEMENT PERSONNE (#PCDATA)>
<!ATTLIST PERSONNE PNUM ID #REQUIRED>
<!ATTLIST PERSONNE MERE IDREF #IMPLIED>
<!ATTLIST PERSONNE PERE IDREF #IMPLIED> ]>
<PERSONNES>
<PERSONNE PNUM = "P1">Fatima</PERSONNE>
<PERSONNE PNUM = "P2">Ali</PERSONNE>
<PERSONNE PNUM = "P3" MERE="P1" PERE="P2">Adam</PERSONNE>
<PERSONNE PNUM = "P4" MERE="P1" PERE="P2">Rime</PERSONNE>
</PERSONNES>
58
DTD externe (arrêt)
Exemple de document
<?xml version="1.0" standalone="no"?>
59 <!DOCTYPE modeles SYSTEM "modeles.dtd">
Encore un petit exercice
On se propose de définir un format XML de stockage
d’un catalogue de films sur DVD.
Le catalogue comprend un ensemble de fiches de
films
Chaque fiche comprend:
– Un numéro unique
– Le titre du film
– Sa date de sortie
– Un ou plusieurs réalisateurs
– Les acteurs principaux
– Le genre du film (comédie, horreur, action, aventure) (en
option)
– Un commentaire optionnel qui présente brièvement
60 l’histoire du film
– Un lien éventuel vers le site du film
Insuffisances des DTD
62
Schéma XML
63
Objectifs
64
Les éléments du schéma
65
Les types considérés par les
schémas XML
66
Les types simples
string date
– La vie est belle! – 1999-05-31
byte ID
– 1, 126 – "A212"
integer IDREF
– -126789, -1, 0, 1, 126789 – "A212"
positiveInteger IDREFS
– 1, 126789 – "A212" "B213"
negativeInteger anyURI
– -126789, -1 – http://www.example.com/e1.html#5
int language
– 1, 126789675
– en-GB, en-US, fr-FR
unsignedInt dateTime
– 0, 1267896754
– 1999-05-31T13:20:00.000
boolean
…
– true, false, 1, 0
69
Les types complexes
Définition d'objets complexes
– <sequence> : collection ordonnée d'éléments typés
– <all> : collection non ordonnée d'éléments typés
– <choice>: choix entre éléments typés
Exemple
<xs:element name="Film">
<xs:complexType>
<xs:sequence>
<xs:element name="titre" type="xs:string"/>
<xs:element name="réalisateur" type="xs:string"/>
<xs:element name="DateSortie" type="xs:date"/>
<xs:element name="nombreEntrées" type="xs:int"/>
</xs:sequence>
</xs:complexType>
70 </xs:element>
Le nombre d’occurences
74
Schéma Vs DTD
77
Bridging the gap,
XML et l’orienté-objet
79
L’API JAXP
JAXP
– https://docs.oracle.com/javase/8/docs/technotes/guides/xml/jaxp/index.html
– Couche d’abstraction de SAX, DOM et XSLT indépendante de l’implémentation
– XML et JAVA = un couple parfait
SAX (Simple API for XML)
– Développement communautaire
DOM (Document Object Model)
– Recommandation W3C, http://www.w3.org/DOM/
Transform, basé sur XPATH et XSLT
– Recommandations W3C, http://www.w3.org/TR/xpath/ et
http://www.w3.org/TR/xslt
80
L’API JAXP
81
Les différents Packages
82
Le parseur SAX
83
L’API SAX
Modèle simplifié d'événements
Types d'événement :
– début et fin de document ;
– début et fin d'éléments ;
– attributs, texte, …
Parcours séquentiel des éléments du document
Mécanisme généralement utilisé par les servlets et les
programmes qui échangent des documents XML sur un réseau
– Plus rapide
– Moins gourmant en mémoire (traitement en flux, pas de représentation
interne des données comme pour DOM)
84
Fonctionnement de l’API basée
événements
start document
start element: bouteille
start element: marque
<?xml version="1.0"?>
characters: Cristaline
<bouteille> ……
<marque>Cristaline</marque> end element: marque
<source> St-Cyr la Source </source> start element: source
</bouteille> characters: St-Cyr la source
……
end element: source
end element: bouteille
end document
85
La manufacture de parseurs SAX
86
Le parseur SAX
87
L’interface ContentHandler
88
Méthodes de traitement
89
Méthodes de traitement: début et fin
de documents
90
Méthodes de traitement: début et fin
d’éléments
91
Méthodes de traitement: parcours de
la liste des attributs.
92
Méthodes de traitement: les zones
de texte
93
Méthode de traitement des
instructions
public void processingInstruction (String target,
String data)
– Reçoit la notification d’une instruction de traitement (<?cible
Traitement?>
– target: la chaîne correspondant à la cible
– Traitement : la chaîne correspondant aux traitements
– Exécutée à chaque rencontre d’une instruction de
traitement
– La ligne de déclaration xml est ignorée
– Lève l’exception SAXException
94
Faisons le ensemble
95
Le squelette du parseur
96
Les déclaration des ‘import’
}
catch (Exception e) {
}
98 }
L’interface ContentHandler
10
Traitement des événements de
parsing : début des éléments
10
Traitement des caractères (arrêt)
10
Afficher le contenu d’une balise à la
fin
10
Afficher le contenu partiel de la
balise mère
Exemple:
<bouteille>
Cette bouteille possède les éléments suivants
<marque>Cristaline</marque>…
Il est nécessaire de vider le contenu du
buffer au début aussi
public void startElement(...)
throws SAXException
{
System.out.println(text);
text="";
String eName = sName; // element name
10 ...
}
Traitement des instructions
10
Quelques remarques
10
Traitements spécifiques
L’API DOM
11
DOM: Document Object Model
11
Utilisation de DOM
API DOM
Application
11
Transformation d’un document
XML en un objet DOM
11
Structure de l’objet DOM
Document
Cristaline St-Cyr..
11
Déclaration d’un DOM
La classe org.w3c.dom.Document
correspond à un objet DOM
Un objet Document peut être
– Obtenu comme résultat du parsing d’un fichier
xml
– Construit en utilisant l’API dom
11
La manufacture de parseurs DOM
JAXP offre une manufacture pour la création de
parseurs DOM
– DocumentBuilderFactory dans le package javax.xml.parsers
– La méthode newInstance permet d’en créer une instance
DocumentBuilderFactory fact=
DocumentBuilderFactory.newInstance();
La manufacture permet de créer des instances du
parseur DOM
– DocumentBuilder builder = fact.newDocumentBuilder();
11
Le parseur DOM
11
L’interface Document
12
L’interface mère Node: Le
type du noeud
12
Parcours de l’arbre: les frères
12
Modification de l’arbre (1/2)
12
Modification de l’arbre: (2/2)
12
Interface pour les Attributs
12
Démonstration
12
Squelette du programme
12
Les imports
Les APIs JAXP
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
Les exceptions
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import java.io.IOException;
La définition w3c
import org.w3c.dom.Node;
import org.w3c.dom.Document;
import org.w3c.dom.DOMException;
Lecture du fichier XML
import java.io.File;
13
Déclaration du DOM
13
Instanciation de la manufacture
13
Création du parseur
13
Affichage du tag racine
13
Exécution
13
Traitement d’un commentaire
14
Traitement des attributs (2/2)
Introduire la méthode:
public static void traiterListAttributs(Node n)
{
NamedNodeMap NNM=n.getAttributes();
Node m;
int l=NNM.getLength();
for (int i=0;i<l;i++)
{
m=NNM.item(i);
System.out.print("\n Attribut: "+m.getNodeName()+" = "+m.getNodeValue());
}
System.out.println("");
}
14
Traitement d’un nœud de l’arbre (1/2)
Introduire la méthode:
public static void traiterNoeud(Node n)
{
switch(n.getNodeType()) {
case Node.TEXT_NODE:
traiterText(n);
break;
case Node.COMMENT_NODE:
traiterCommentaire(n);
break;
case Node.PROCESSING_INSTRUCTION_NODE:
14 traiterInstruction(n);
Traitement d’un nœud de l’arbre (2/2)
case Node.ELEMENT_NODE:
traiterElement(n);
if(n.hasAttributes())
{
traiterListAttributs(n);
}
NodeList NL=n.getChildNodes();
for(int i=0;i<NL.getLength();i++)
{
traiterNoeud(NL.item(i));
}
break;
default: System.out.println("Type de nœud non pris en compte");
}
}
14
Traitement du document
14
Exécution
14
Exemple: Modification
de l’arbre DOM (1/2)
14
Exemple:
Modification de l’arbre DOM (2/2)
14 Recompiler et exécuter
A vous de jouer!
Modifier le code pour:
– Afficher exclusivement les marques des bouteilles
– Afficher les marques et les sources des bouteilles (sous la forme:
ville, departement)
– Afficher la marque de la bouteille qui possède le plus haut niveau
de magnésium ainsi que la valeur correspondante
– Afficher la marque qui possède le plus bas niveau de nitrate
– Afficher la valeur moyenne des niveaux de magnésium et de
nitrate pour toutes les bouteilles référencées dans le document
XML
– Transformer le DOM pour trier les bouteilles par ordre croissant de
teneur en calcium
15
Algorithme de tri par selection
procedure triSelection(entier tab[ ])
variables i, k,posmin,tmp: entiers
pour (i de 0 à N-2 en incrémentant de 1) faire
/* recherche du numéro du minimum */
posmin <- i;
Pour (k de i+1 à N-1 en incrémentant de 1) faire
Si (tab[k] < tab[posmin]) alors posmin <- k;
finSi
finPour
/* échange des valeurs entre la case courante et le minimum */
tmp <- tab[i];
tab[i] <- tab[posmin];
tab[posmin] <- tmp;
finPour
15
L’API Transformer de JAXP
XPATH et XSLT
15
Plan
15
Introduction au package
javax.xml.transform
15
Le package JAXP pour la
transformation
15
La manufacture des transformateurs
15
Les transformateurs
15
Les packages Source et Result
15
La classe DOMSource
DOMSource:
– Permet de définir un DOM comme source de la
transformation
– Constructeurs:
DOMSource()
DOMSource(Node n)
– Méthodes principales
Node getNode()
Void setNode(Node n)
16
La classe SAXSource
SAXSource:
– Permet de définir un SAX comme source de la
transformation
– Constructeurs:
SAXSource()
SAXSource(InputSource IS)
– Méthodes principales
InputSource getInputSource()
void setInputSource(InputSource IS)
16
La classe StreamSource
StreamSource:
– Permet de définir un fichier comme source de la
transformation
– Constructeurs:
StreamSource()
StreamSource(File f)
StreamSource(InputStream IS)
– Méthodes principales
InputStream getInputStream()
Void setInputStream(InputStream IS)
16
L’interface Result
16
La classe DOMResult
DOMResult:
– Permet de définir un DOM comme résultat de la
transformation
– Constructeurs:
DOMResult()
DOMResult(Node n)
– Méthodes principales
Node getNode()
Void setNode(Node n)
16
La classe SAXResult
SAXResult:
– Permet de définir un parseur SAX comme résultat
de la transformation
– Constructeurs:
SAXResult()
SAXResult(ContentHandler CH)
– Méthodes principales
ContentHandler getHandler()
void setHandler(ContentHandler CH)
16
La classe StreamResult
StreamResult:
– Permet de définir un fichier comme résultat de la
transformation
– Constructeurs:
StreamResult()
StreamResult(File f)
StreamResult(OutputStream OS)
– Méthodes principales
OutputStream getOutputStream()
Void setOutputStream(OutputStream OS)
16
Un programme simple:
Transformer un DOM pour
générer un fichier XML
16
Du DOM vers l’XML
16
Squelette du programme
16
Rappelez-vous le premier code la
classe DOM Echo
Les imports:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.*;
import org.w3c.dom.*;
import java.io.File;
import java.io.IOException;
17
Les imports
17
Le code de la classe EchoDOM
public class EchoDOM{
static Document document;
public static void main(String argv[])
{
if (argv.length != 1) {
System.err.println("passer nom du fichier XML en ligne de commande");
System.exit(1);
}
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder =factory.newDocumentBuilder();
document = builder.parse( new File(argv[0]) );}
catch(Exception e){
System.out.println(e.getMessage());
System.exit(2); }}}
17
La classe Transform_DOM_XML (1/2)
17
La classe Transform_DOM_XML (2/2)
.......
// transformation du DOM
TransformerFactory TFactory = TransformerFactory.newInstance();
Transformer transformer = TFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new File(argv[1]));
transformer.transform(source, result);
}
catch(Exception e)
{
System.out.println(e.getMessage());
System.exit(2);
}}}
17
Exécution
17
Transformer une branche d’un DOM
17
Faisons une selection sur la
première bouteille
17
Exécution
17
Transformer et les
feuilles de style
18
La fonction transform avec une
feuille de style
18
La suite…
18
XPATH
18
XPATH (XML Path Language)
18
Les expression XPATH (1/3)
18
Les expressions XPATH (2/3)
18
Les expressions XPATH (3/3)
18
Les nœuds XPATH
18
Eléments du chemin XPATH
19
Indexation et critères de sélection
19
Les jokers
19
Spécification de chemins avec
niveau d’imbrication indéterminé
19
Types XPATH
19
Opérateurs XPATH
19
Le texte
Dans XPATH, le texte contenu dans un élément
(String-value) est la concaténation de tout le contenu
texte des balises filles
Exemple:
– Pour le nœud
<source> La source:
<ville>St-Cyr la Source</ville>
<departement>Loiret</departement>
</source>
– Le String-value de source correspond à la chaîne de
caractères: La source:St-Cyr la SourceLoiret
19
Les fonctions XPATH
19
Les fonctions pour les chaînes de
caractères
19
Les fonctions booléennes
19
Les fonctions numériques
20
Les fonctions de conversion
20
XSLT
20
eXtensible Stylesheet Language
Transformation
20
Fonctionnement d’une
transformation XSLT (1/2)
Une transformation XSLT est exprimée comme un
document XML
Ce document contient des éléments appartenant à
l’espace de nom spécifique défini par le W3C
Une transformation exprimée en XSLT décrit les règles
pour transformer un arbre source en un arbre résultat
La transformation est obtenue en associant des motifs à
des modèles
– Les motifs sont appliqués aux éléments de l'arbre source
– Le modèle est instancié pour créer une partie de l'arbre résultat
20
Fonctionnement d’une
transformation XSLT (1/2)
20
XSLT et XPATH
20
L’espace de nom XSLT
20
Les templates XSLT
20
Exemple didactique
21
La feuille de style (1/2)
21
La feuille de style (2/2)
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
try{
File style=new File(argv[0]);
File XML=new File(argv[1]);
DocumentBuilder builder =factory.newDocumentBuilder();
document = builder.parse(XML);
StreamSource styleSource= new StreamSource(style);
TransformerFactory tFactory = TransformerFactory.newInstance();
// passer la feuille de style xslt comme argument du constructeur
Transformer transformer = tFactory.newTransformer(styleSource);
21
Transformation en utilisant la feuille
de style
…
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new File(argv[2]));
transformer.transform(source, result);
}
catch(Exception e)
{
System.out.println(e.getMessage());
System.exit(2);
}
}// fin main
}//fin class
21
Exécution
22
Traitement de la balise marque
22
Afficher la composition sous forme
d’items
<xsl:template match="//composition">
<h4> Ma bouteille se compose de:
<h5>
<ul>
<xsl:apply-templates/>
</ul>
</h5>
</h4>
</xsl:template>
22
Afficher les items
<xsl:template match="//calcium">
<li>
<xsl:apply-templates/>
mg/l de calcium
</li>
</xsl:template>
Introduire les templates équivalents pour les
balises: magnesium, chlorure, et nitrate
22
Pour ne pas afficher le contenu
d’une balise
Ne rien faire! :
<xsl:template match="//source">
On veut pas afficher la source <br/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="//ville|//departement">
</xsl:template>
22
Ignorer le reste d’un document
<xsl:template match="*">
</xsl:template>
22
Réordonner l’information
22
A vous de jouer!
Ecrire de feuilles de style pour générer un fichier comprenant:
– Exclusivement les marques des bouteilles
– Les marques et les sources des bouteilles (sous la forme: ville,
departement)
– Les marques ainsi que les valeurs correspondantes de calcium
– La marque de la bouteille qui possède le plus haut niveau de
magnésium ainsi que la valeur correspondante
– La marque qui possède le plus bas niveau de nitrate
22
Merci de votre attention
22