xquery transformations xslt formats de documentslsteffenel/cours/master1/par/... · 2014-06-13 ·...

86
Steffenel Programmation des Applications Réparties – Master M1 1 Programmation des Applications Réparties XQuery Transformations XSLT Formats de documents Luiz Angelo Steffenel [email protected]

Upload: others

Post on 12-Jul-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 1

Programmation des Applications Réparties

XQuery Transformations XSLT Formats de documents

Luiz Angelo Steffenel [email protected]

Page 2: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 2

XQuery

Page 3: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 3

Introduction

  XQuery est le langage de requêtes pour XML défini et standardisé par le W3C

  XQuery s’impose comme le langage de requêtes: -  Pour les bases de données XML natives -  Pour les documents XML textuels (XQuery Text) -  Pour l’intégration de données (bases de données virtuelles)

  Le besoin d’interroger les bases relationnelles en XQuery existe

-  Pour l’intégration et la publication de données -  Compétition avec les extensions de SQL (SQL/XML)

Page 4: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 4

Objectifs

Types XML Schema XPath 2

Puissance de SQL

Structure d'arbres

Recherche d'information

Langage fonctionnel

Page 5: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 5

La base

  Proposé par IBM , MS, AT&T, Data Direct, ...   Langage fonctionnel type CAML   Forme de requête élémentaire (FLWOR)

-  FOR $<var> in <forest> [, $<var> in <forest>]+ //itération -  LET $<var> := <subtree> // assignation -  WHERE <condition> // élagage -  ORDER BY <element> // ordre (optionnel) -  RETURN <result> // construction

  Les forêts sont sélectionnées par des Xpath (document ou collection)

  Le résultat est une forêt (un ou plusieurs arbres)

Page 6: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 6

Exemple de documents

<Guide Version= "2.0">

<Restaurant type="francais" categorie="***"> <Nom>Le Moulin</Nom> <Adresse> <Rue>des Vignes</Rue> <Ville>Mougins</Ville> </Adresse>

<Manager>Dupuis</Manager> </Restaurant>

<Restaurant type="francais" categorie ="**">

<Nom>La Licorne</Nom> <Adresse><Rue>Des Moines</Rue> <Ville>Paris</Ville>

</Adresse> <Téléphone>0148253278</Téléphone> <Manager>Dupuis</Manager>

</Restaurant>

<Bar type = "anglais"> <Nom>Rose and Crown</Nom> </Bar>

</Guide>

Page 7: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 7

Exemple 1 : XPath

  Noms de tous les restaurants :

-  doc(“Restaurants.xml”)/Guide/Restaurant/Nom/text()

-  doc(“Restaurants.xml”)/Guide/Restaurant/Nom

Page 8: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 8

Exemple 2 et 3 : XPath +

  Expression régulière -  Menu de tous les restaurants -  doc(“Restaurants.xml”)//Menu

  Accès via indice à attribut -  Donnez le nom des menus du premier restaurant -  doc(“Restaurants.xml”)/Guide/Restaurant[1]/Menu/@Nom

Page 9: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 9

Exemple 4 : Sélection

  Lister le nom des restaurants de Cabourg: doc(“Restaurants.xml”)/Guide/Restaurant[Adresse/

Ville= “Cabourg"] /Nom

•  Cette syntaxe devient assez compliquée •  L'équivalent en format FLWOR

for $R in collection("Restaurants")/Restaurant where $R/Adresse/Ville = “Cabourg” return {$R/Nom}

Page 10: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 10

Exemple 5 : Jointure

  Lister le nom des Restaurants avec téléphone dans la rue de l'Hôtel Lutecia:

For $R in collection("Restaurants")/Restaurant, $H in collection("Hotels")/Hotel

where $H//Rue = $R//Rue and $H//Nom = "Le Lutecia" return

<Result> {$R/Nom} {$R/Téléphone} </Result>

Page 11: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 11

Exemple 6 : Restructuration d'arbre

  Construire une liste de restaurants par Ville

for $c in distinct(collection(“Restaurants”)/Restaurant//Ville) return <Ville>{$c}</Ville> <Restaurants> { for $r in collection(“Restaurants”)/Restaurant where $r//Ville = $c return {$r} } <Restaurants>

Page 12: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 12

Exemple 7 : Imbrication en Where

  Adresses des hotels dans des villes ayant des restaurants trois étoiles

for $h in collection(“Hotels”)/Hotel where $h/Adresse/Ville in for $r in collection(“Restaurants”)/Restaurant where $s/@categorie = "***" return {$r/Adresse/Ville/text()} return {$h/Adresse}

Page 13: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 13

Exemple 8 : Agrégat simple

  Combien de restaurants y-a-t-il en collection ?

let $R := collection(“Restaurants”)/Restaurant return

<NombreRestaurant > {count ($R)} </NombreRestaurant>

Page 14: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 14

Exemple 9 : Agrégat partitionné

  Lister le nom de chaque restaurant avec le prix moyens des menus proposés

for $r in collection(“Restaurants”)//Restaurant let $a := collection(“Restaurants”)// [Restaurant = $r]//Menu/@Prix return <resultat> {$r/Nom} <avgPrix>{AVG($a)}</avgPrix> </resultat>

Page 15: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 15

Exemple 10 : recherche textuelle

  Lister les bons restaurants de Paris

for $r in collection(“Restaurants”)//Restaurant where (contains ($r/Comments, “Bon”) or contains ($r/Comments, “Excellent”)) and $r/Adresse/Ville = “Paris” return {$r/Nom}

Page 16: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 16

Exemple 11 : Ordre et désordre

  Lister les bons restaurants de Paris par ordre alphabétique

for $r in unordered(collection(“Restaurants”)//Restaurant) where (contains($r/Comments, "Excellent”) or contains($r/Comments, "Good”)) and $r/Adresse/Ville = “Paris” return {$r/Nom} orderby ($r/Nom descending)

Page 17: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 17

Exemple 12 : Substring

  Trouver les livres dans lequel le nom d'un élément se termine par "or" et le même élément contient la chaîne "Suciu" quelque part. Pour chaque tel livre, retourner le titre et l'élément qualifiant.

for $b in document("document")//book let $e := $b/*[contains(string(.), "Suciu") and ends-with(local-name(.), "or")] where exists($e) return <book> { $b/title } { $e } </book>

Page 18: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 18

Exemple 13 : if-then-else

•  Il est possible d'inscrire expressions conditionnelles dans des clauses Xquery

•  De même, les comparaisons =, !=, <, <=, >, >= , etc.

for $x in doc("books.xml")/bookstore/book return if ($x/@category="CHILDREN") then <child>{data($x/title)}</child> else <adult>{data($x/title)}</adult>"

Page 19: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 19

Fonctionnalités XQuery Text

  Recherche sur mot-clés   Recherche de phrase   Support des mots de

laiaison   Recherche sur préfix, suffix,

infix   Normalisation des mots,

accents, capitales, …

  Recherche par proximité (unité = mots)

  Spécification de l'ordre des mots

  Combinaison logic avec AND, OR , NOT

  Recherche par similarité   Tri des résultats par

pertinence

Page 20: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 20

Bilan XQuery

  Véritable langage de programmation   Très puissant

-  Sélection -  Jointure -  Imbrication -  Restructuration -  Agrégation -  Tri -  Plein texte -  …

  Sur des forêts dont les arbres sont des documents   Nécessite un « moteur » XQuery

-  Un browser ne suffit pas :( -  Php5 n'a pas un moteur natif pour Xquery

Page 21: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 21

Programmation des Applications Réparties

Transformations XSLT

Page 22: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 22

XSLT

  Objectif: transformer un document XML en -  un ou plusieurs documents XML, HTML, WML, SMIL -  un document papier: PDF (XSL-FO), LaTeX -  un texte simple (ASCII ,sans format)

Page 23: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 23

Le Mécanisme

  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

XSL Processo

r

XML Document

Format ( Postcript)

Format (XML)

application e.Commer

ce

format (WML)

Browser

(XHTML, DHTML, HTML)

Format (XML) pour

Word, Excel

XSL Stylesheet

Page 24: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 24

Où appliquer XSLT ?

Fichier

Base de données

Affichage

• Affichage • Traitement

S E R V E U R

XML

XML

Programme

XML ASP PHP

JSP

Processeur XSL Affichage

HTML

HTML

XML

Processeur XSL

Page 25: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 25

Programme XSLT

  Un programme XSLT consiste à produire un document résultat à partir d’un document source

  Un programme XSLT est un document XML

  Les éléments XSLT sont différenciés grâce à un espace de noms xsl:   <?xml version="1.0"encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="COURS"> <html> <head><title>Fiche du cours</title></head> <body bgcolor="white"> <p> <h1><i><xsl:value-of select="SUJET"/></i></h1> <hr/> <xsl:apply-templates/> </body> </html> </xsl:template> </xsl:stylesheet>

Page 26: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 26

Fonctions d'un programme XSLT

  Transformation d’arbres XML: -  extraction de données -  génération de texte -  suppression de contenu (nœuds) -  déplacer le contenu (nœuds) -  dupliquer le contenu (nœuds) -  trier

Page 27: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 27

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)

Page 28: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 28

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">"

Page 29: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 29

Exemple

Page 30: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 30

Fonctionnalités de XSLT

  Extraction de données (xsl:value-of)

<xsl:template match="FILM"> <xsl:value-of select="TITRE"/> </xsl:template>

  Génération de texte (texte brut)

<xsl:template match="FILM"> Ceci est le texte produit par application de cette règle. </xsl:template>

  Génération d’un arbre XML (fragment XML bien formé)

<xsl:template match="FILM"> <body> <p>Un paragraphe</p> </body> </xsl:template>

Page 31: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 31

Fonctionnalités XSLT (2)

  Génération d’arbre avec extraction de valeur

<xsl:template match="FILM"> <body> <p>Titre: <xsl:value-of select="TITRE"/> </p> </body> </xsl:template>

Page 32: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 32

Les Règles

  C’est la structure de base

  Règle = template : élément de base pour produire le résultat -  une règle s’applique dans le contexte d’un nœud de l’arbre -  l’application de la règle produit un fragment du résultat

  Programme XSLT = ensemble de règles pour construire un résultat

  Dans une règle, on peut: -  accéder aux fils, aux descendants, au parent, aux frères, aux

neveux, aux attributs,... du noeud à transformer (grâce à XPath) -  effectuer des tests et des boucles,… -  “appeler” d’autres règles

Page 33: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 33

Exemple

Page 34: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 34

Exemple (2)

Page 35: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 35

Exemple (3)

  Boucle : traduction de l’élément XML <SALLES> en élément HTML <ol><li/></ol>

<xsl:template match="SALLE"> <h2>Salle No <xsl:value-of select="@NO"/></h2> Film:<xsl:value-of select="FILM/TITRE"/> de <xsl:value-of select="FILM/AUTEUR"/> <ol> <xsl:for-each select="SEANCES/SEANCE"> <li><xsl:value-of select="."/></li> </xsl:for-each> </ol> </xsl:template>

  Remarque: c’est un fragment HTML, à intégrer dans un document complet

Page 36: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 36

Appel des Règles

  En général, on produit un résultat en combinant plusieurs règles:

-  la règle initiale s’applique à la racine du document traité (’/’) -  on produit alors le cadre du document HTML -  on appelle d’autres règles pour compléter la création du résultat

  Exemple <xsl:template match="/"> <html> <head><title>Programme de <xsl:value-of select="CINEMA/NOM"/></title></head> <body bgcolor="white"> <xsl:apply-templates select="CINEMA"/> </body> </html> </xsl:template>

Page 37: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 37

Règle CINEMA

  Exploitation de l’élément CINEMA, puis appel à la règle SALLE <xsl:template match="CINEMA">

<h1><i><xsl:value-of select="NOM"/></i></h1><hr/> <xsl:value-of select="ADRESSE"/>, <i>Métro:</i> <xsl:value-of select="METRO"/> <hr/> <xsl:apply-templates select="SALLE"/> </xsl:template>

<xsl:template match="SALLE"> <h2>Salle No <xsl:value-of select="@NO"/></h2> Film:<xsl:value-of select="FILM/TITRE"/> de <xsl:value-of select="FILM/AUTEUR"/> <ol> <xsl:for-each select="SEANCES/SEANCE"> <li><xsl:value-of select="."/></li> </xsl:for-each> </ol> </xsl:template>

Page 38: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 38

Vue de l'Ensemble

Page 39: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 39

Sélection des Règles

  Un motif de sélection est une expression XPath restreinte -  les fils d’un élément (axe child) -  les attributs d’un élément (axe attribute) -  la simplification // (axe /descendant-or-self::node()/)

  Cette restriction garantit que l’on peut savoir si une règle doit être déclenchée pour un nœud N uniquement en analysant les ancêtres de N

  Cela diminue considérablement la complexité de l’algorithme de sélection

Page 40: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 40

Sélection des Règles (2)

  Exemples -  /COURS/ENSEIGNANTS: la règle s’applique à tous les nœuds

ENSEIGNANTS fils d’un élément racine COURS -  //SEANCE[@ID=2]: … à tous les nœuds de type SEANCE ayant

un attribut ID valant 2 -  /descendant::FILM[1]: … au premier élément de type FILM dans le

document -  FILM[1]: … aux premiers fils de type FILM (il peut y en avoir

plusieurs!) -  /COURS[@CODE="TC234"]: … aux cours avec le code TC234

Page 41: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 41

Règles par Défaut

  Lorsque aucune règle n’est sélectionnée, le moteur XSLT applique des règles par défaut

  La première règle pour les éléments et la racine du document <xsl:template match=”*|/”> <xsl:apply-templates/> </xsl:template>

-  on demande l’application de règles pour les fils du nœud courant   La deuxième règle insère dans le document résultat la valeur du nœud ou

de l’attribut <xsl:template match=”text()|@*”> <xsl:value-of select=”.”/> </xsl:template>

-  cela suppose (en particulier pour les attributs) d’avoir utilisé un xsl:apply-templates qui ait sélectionné ces nœuds

  La troisième règle concerne les processing-instructions et les commentaires

Page 42: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 42

Conséquences

  Si on se contente des règles par défaut, on obtient la concaténation de nœuds de type Text

  Programme minimal: <?xmlversion="1.0"encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

</xsl:stylesheet>

Page 43: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 43

xsl:apply-templates

  C’est une instruction qui possède 3 attributs -  select -  mode -  priority

  select doit sélectionner un ensemble de nœuds -  ces nœuds constituent le contexte d’utilisation -  pour chaque nœud, on va rechercher la règle à instancier

  mode permet de choisir explicitement une des règles à instancier parmi celles qui sont candidates

  priority permet de définir une priorité pour le processeur puisse choisir

Page 44: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 44

Priorités Implicites

  Idée: plus c’est «spécifique», plus c’est prioritaire -  Priorité 0: les motifs constitués d’une seule étape XPath, avec un

nom d’élément ou d’attribut et sans prédicat -  Priorité -0.5: les filtres autres qu’un nom d’élément ou d’attribut ont

une priorité égale à -0,5 (node(),*) -  Tous les autres ont une priorité de 0.5 (prédicats, plusieurs

étapes)

Page 45: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 45

Programme XSLT

  Ce programme permet d’effacer les nœuds de type RESUME

<!-- on ne recopie pas les nœuds RESUME dans le document résultat --> <xsl:template match="RESUME"/> <!-- on recopie les autres nœuds --> <xsl:template match="@*|node()" priority="-1"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template>

Page 46: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 46

Les Modes

  Objectif

-  un même nœud peut être traité plusieurs fois

-  exemple

  on parcourt tous les chapitres et paragraphes pour produire une table des matières

  on les parcourt à nouveau pour publier le contenu   Il faut donc des règles différentes qui s’appliquent aux mêmes nœuds: c’est le

mode qui va permettre la distinction

-  exemple: création de liens HTML

-  on peut créer des ancres «internes» à un document <a name=’Alien’/>

-  on peut ensuite créer un lien vers cette ancre <a href=’#Alien’>Lien vers le film Alien</A>

-  objectif: une règle pour créer les liens, une autre pour créer les ancres

Page 47: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 47

Règles avec Mode

<xsl:template match="FILM" mode="Ancres">

<a href="#{TITRE}"> <xsl:value-of select="TITRE"/> </a>

</xsl:template>

<xsl:template match="FILM">

<a name="{TITRE}"/>

<h1><xsl:value-of select="TITRE"/></h1>

<b><xsl:value-of select="TITRE"/>,</b>

<xsl:value-of select="GENRE"/> <br/>

<b>Réalisateur</b>: <xsl:value-of select="MES"/>

</xsl:template>

Page 48: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 48

L'appel des Règles

<xsl:template match="FILMS">

<html>

<head><title>Liste des films</title></head>

<body bgcolor="white">

<xsl:apply-templates select="FILM" mode="Ancres"/>

<xsl:apply-templates select="FILM"/>

</body>

</html>

</xsl:template>

Page 49: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 49

Synthèse : sélection d'une règle

  Soit un xsl:apply-templates, et N un des nœuds sélectionné

  On ne prend que les règles avec le même mode que xsl:apply-templates

  On teste le motif XPath pour savoir si le nœud satisfait la règle

  On prend celle qui a la plus grande priorité

Page 50: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 50

Éléments de Programmation

  Traitement conditionnel: xsl:if   Syntaxe <xsl:if test = "boolean-expression">

<!-- contenu -->

</xsl:if>

  Permet de changer l’output en fonction d’un test

  Attention: il n’existe pas de "else" (utilisez "choose" à la place)

  Cas d’utilisation: traitement d’un élément en fonction de sa position, des ses attributs,…

Page 51: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 51

Éléments de Programmation (2)

  Traitement conditionnel: xsl:choose <xsl:choose> <!-- Content: (xsl:when+, xsl:otherwise?) --> </xsl:choose> <xsl:when test = boolean-expression> <!-- contenu --> </xsl:when> <xsl:otherwise> <!-- contenu --> </xsl:otherwise>

  Cette définition dit:

-  on peut avoir plusieurs clauses avec un test (xsl:when). -  la première vraie est utilisée (donc la série des xsl:when correspond à "if

( ) {...}" elseif ( ) { ...}" elseif ( ) { ...}")

-  si aucune clause n’est vraie et s’il existe une clause xsl:otherwise, c’est cette dernière qui est exécutée (il s’agit donc du "else {...}")

Page 52: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 52

Éléments de Programmation (3)

  Itération: xsl:for-each

  Syntaxe <xsl:for-each select="motif-XPath"> "

<!-- contenu --> "

</xsl:for-each> "

  Permet de parcourir un ensemble de nœuds et d’appliquer un traitement

Page 53: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 53

Éléments de Programmation (4)

  Tri: xsl:sort   Syntaxe <xsl:sort

select="motif-XPath" <!-- par défaut, . -->

data-type="text|number" <!-- par défaut, text -->

order="ascending|descending" <!-- par défaut, asc -->

case-order="upper-first|lower-first" <!-- par défaut, upper -->

lang="nom_de_langue" <!-- par défaut, langue système -->

/>

  Associé à un parcours (xsl:for-each ou xsl:apply-templates)

  Permet de modifier l’ordre des nœuds

Page 54: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 54

Éléments avancés de programmation

•  Variables •  Parfois une seule requête Xpath ne suffit pas •  Les variables permettent de stocker des valeurs et les réutiliser

après <stylesheet version='1.0' xmlns='...'> " <template match="/factures">" <variable name='nom' select='clientID'/>" <for-each select='facture'>" <value-of select='//client[@id=$nom]/nom' /> : <value-of select='.' />"

</for-each>" </template>"</stylesheet>"

Page 55: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 55

Éléments avancés de programmation

•  Passage de paramètres •  Possibilité de passer des paramètres lors d'un appel de template <template match='...'> <param name='nom'>valeur défaut</param> …"

</template>"<apply-templates select='...'> <with-param name='nom'>une valeur </with-param>"

</apply-template>

•  Valeur de nom accessible avec $nom

Page 56: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 56

Exemple – doc.xml

doc.xml :"

<trains> <liste> <gare id='g'>Grenoble</gare> <gare id='l'>Lyon</gare> <gare id='c'>Chambéry</gare> </liste> <trajet> <horaire gare='g' t='10:01'/> <horaire gare='l' t='10:22'/> <horaire gare='c' t='11:07'/> </trajet> <trajet> <horaire gare='g' t='15:10'/> <horaire gare='l' t='16:22'/> <horaire gare='c' t='16:49'/> </trajet>"

</trains>"

Page 57: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 57

Exemple - avant

<stylesheet version='1.0' xmlns='http://www.w3.org/1999/XSL/Transform'> <template match="/"> <for-each select='//liste/gare'> <variable name='x' select='@id' /> <value-of select='.'/> : <for-each select='//trajet'> <value-of select='horaire[@gare=$x]/@t' /> <text> </text> </for-each> <text> </text> </for-each> </template> "</stylesheet>"

Réponse :

Grenoble : 10:01 15:10 Lyon : 10:22 16:22 Chambéry : 11:07 16:49

Problème : trop de "for-each"s, peu modulaire

Page 58: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 58

Exemple - après

<stylesheet version='1.0' xmlns='http://www.w3.org/1999/XSL/Transform'> <template match="liste/gare"> <value-of select='.'/> : <apply-templates select='//trajet' mode='h'> <with-param name='x'> <value-of select='@id' /> </with-param> </apply-templates> </template>

<template match='trajet' mode='h'> <param name="x">g</param> <value-of select='horaire[@gare=$x]/@t'/> <text> </text> </template>"</stylesheet>"

Réponse :

Grenoble : 10:01 15:10 Lyon : 10:22 16:22 Chambéry : 11:07 16:49

Page 59: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 59

XSL-FO

Page 60: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 60

XSL-FO

•  Recommandation du W3C depuis 2001

•  Format XML pour décrire un document imprimé : •  Taille du papier, •  Marges, •  Orientation, •  ...

•  Espace de noms : http://www.w3.org/1999/XSL/Format

Page 61: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 61

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

Page 62: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 62

Principes

  Peut s'appliquer aux résultats des feuilles XSLT

Page 63: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 63

Fonctionnalités

  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

Page 64: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 64

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.)

Page 65: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 65

Format

<root> <layout-master-set> <simple-page-master master-name=”couverture” …> <!-- page unique : description de la couverture --> </simple-page-master> <page-master-sequence master-name=”contenu” ...> <!-- description physique des pages internes --> </page-master-sequence> </layout-master-set> <page-sequence master-reference=”couverture”> <!-- Texte de la couverture --> </page-sequence> <page-sequence master-reference=”contenu”> <!-- Texte du livre --> </page-sequence> </root>"

Page 66: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 66

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 ………...

Page 67: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 67

XSL-FO: Hello World

<?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="contenu"> <fo:region-body margin="2 cm"/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-

reference="contenu"> <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.

Page 68: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 68

XSL-FO: Encore plus de détails

<?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=”contenu” page-height=”11cm” page-width=”8cm”

margin-top=”1cm” margin-bottom=”1cm” margin-left=”1cm” margin-right=”1cm”> <region-body region-name=”contenu-region” />

</fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference=”contenu”> <fo:flow flow-name=”contenu-region”> <fo:block font-family=”Helvetica” font-size=”20pt” font-weight=”bold”text-align=”center”> Un titre

</fo:block> <fo:block font-family=”NewRoman” font-size=”12pt”font-weight=”normal” text-align=”left”> Hello World! </fo:block> </fo:flow> </fo:page-sequence> </fo:root>

Page 69: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 69

Les processeurs XSL-FO

  Apache Group : FOP -  Formating Object Processor -  Génère du PDF http://www.apache.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

Page 70: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 70

Bilan XSL-FO

  XSL-FO est particulièrement verbeux.   la structure du document est suffisamment simple pour

pouvoir écrire un canevas et s'en servir pour formater du texte.

  Spécialement utile dans le cas de transformations automatiques   par exemple en partant de DocBook.

  Son usage principal est la production de PDF au niveau des serveurs de contenu   Lien "pdf" dans certains CMS

Page 71: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 71

Formats de documents XML

Page 72: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 72

Formats de documents texte

•  XHTML est spécialisé pour l'affichage pour le web.

•  D'autres formats existent :

•  Polyvalent : Docbook

•  Orientés impression papier : •  XSL-FO •  Suites bureautiques :

•  ODF : OpenOffice •  OOXML : Microsoft Office

Page 73: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 73

Docbook

•  Origine : format pour de la documentation technique

•  Défini comme standard par OASIS (Organization for the Advancement of Structured Information Standard) •  Aujourd'hui son utilisation se généralise

•  Documentation du format sur le site http://www.docbook.org

Page 74: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 74

Document Docbook

<!DOCTYPE xxx PUBLIC “-//OASIS//DTD DocBook XML V4.5//EN” “http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd”>

•  Livres, avec la racine <book> ... </book> •  Découpé en chapitres •  Page de titre •  Préface

•  Articles, avec la racine <article> .. </article> •  En un seul tenant •  Pas de sauts de page •  Pas de chapitres

Page 75: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 75

Exemple

<?xml version="1.0" encoding="utf-8"?> <article> <articleinfo> <title>Espaces de noms</title> <author> <firstname>Benoît</firstname> <surname>Valiron</surname> </author> </articleinfo> <sect1> <title>Déclaration d'un espace de noms</title> <sect2> <title>Un titre de sous-section</title> <para>Texte de <emphasis>l'exercice 1</emphasis>.</para> </sect2> </sect1> </article>"

Page 76: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 76

Principaux éléments pour un article

•  Cinq niveaux hiérarchique •  <sect1> à <sect5>"

•  Paragraphes encadrés par <para> ... </para>"•  Listes

•  Ordonnées : <orderedlist> "•  Non-ordonnées : <itemizedlist> "•  Items des listes : <listitem>"

•  Citations : <blockquote>"•  Morceau de code (DTD, XML, programme...) :

•  <programlisting>"•  Dans le texte :

•  Emphase : <emphasis> "•  Liens hypertextes : <ulink> "•  Code : <code>"

Page 77: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 77

Extensions

•  Docbook vient avec de nombreuses possibilités: •  Table des matières •  Index •  Format pour de la bibliographie

•  Le format est modulaire : •  nul besoin de tout connaitre pour produire un document

Page 78: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 78

Conversion

Page 79: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 79

ODF et OpenDocument

•  Un fichier OpenOffice est un ensemble de documents XML compressés dans un zip

Page 80: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 80

Dedans

•  Du XML !

•  En particulier : •  content.xml → le contenu du document •  styles.xml → la description des styles utilisés •  meta.xml → méta-données : titre, auteur, ... •  settings.xml → les réglages de la dernière sauvegarde (niveau de

zoom, position du curseur...)

Page 81: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 81

Content.xml

<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" ...>"

<office:scripts> <!-- Scripts définis --> </office:scripts> <office:font-face-decls> <style:font-face ...> <!-- Polices utilisées --> </office:font-face-decls> <office:automatic-styles> <style:style ...> <!-- Styles internes --> </office:automatic-style> <office:body> <!-- Corps du document --> </office:body>"

Page 82: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 82

Commentaire

•  Le format ODF d'OpenOffice est plutôt orienté machine •  même si il reste lisible, suivant la philosophie XML qui demande

des noms de balises explicites

•  À la différence de Docbook, ODF est plus concerné par la mise en page que par la structure logique du texte

•  Le formatage est strictement séparé dans des styles

Page 83: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 83

OOXML – Microsoft Office

•  Vrai nom : ECMA-376 : Office Open XML file format.

•  Après de nombreuses péripéties, c'est devenu un standard ISO. •  Son spécification compte plus de 6000 pages

•  Descendant des formats propriétaires : .xls, .doc, .ppt

•  Néanmoins, le corps du document est en XML

Page 84: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 84

Un fichier docx

•  Décompressé : •  [Content_Types].xml → décrit le contenu de l'archive •  _rels → dossier contenant des fichiers XML décrivant les relations

entre les composantes de l'archive. •  DocProps → dossier avec les propriètés

•  De l'application : app.xml •  Du document : core.xml •  Définies par l'utilisateur : custom.xml

•  Un répertoire pour le type du document (ex : word) contenant document.xml

Page 85: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 85

Exemple de document.xml

•  Un paragraphe contenant les mots “gras” et “italique” en gras et en italique : <w:p>

<w:r> <w:rPr><w:b/></w:rPr> <w:t>gras</w:t> </w:r> <w:r> <w:rPr><w:i/></w:rPr> <w:t>italique</w:t> </w:r>

</w:p>

Page 86: XQuery Transformations XSLT Formats de documentslsteffenel/cours/Master1/PAR/... · 2014-06-13 · Steffenel Programmation des Applications Réparties – Master M1 3 Introduction

Steffenel Programmation des Applications Réparties – Master M1 86

Commentaires

•  Comme pour ODF, on a un format orienté machine.

•  À la différence d'ODF, les styles sont inclus dans le contenu

•  OOXML est particulièrement peu lisible, avec des balises et des espaces de noms peu explicites, ce qui ne l'empêche pas d'être verbeux.

•  OOXML porte le lourd héritage du format binaire