La technologie XML

Problème à signaler:

Télécharger



★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

La technologie XML

Bernd Amann

Cnam

 

La technologie XML / B. Amann et P. Rigaux – p.1/159

Objectifs du Cours

 

Mieux comprendre l’utilisation de la technologie XML pour la gestion des données sur le Web :

Représentation de données avec XML

Interrogation avec XPath

Transformation avec XSLT

Stockage de documents/données XML

                                                                                                                                La technologie XML / B. Amann et P. Rigaux      p.2/159

Introduction à XML

 

Introduction à XML - B. Amann – p.3/159

Pourquoi XML?

 

Une

présentation, basée sur une étude de cas, des apports de XML :

XML, format universel

Publication avec XSLT

Échange et intégration de données XML et bases de données

Les questions : XML, c’est quoi, et pour quoi faire?

p.4/159

Une étude de cas

L’Officiel des spectacles !

On a des cinémas qui veulent diffuser leur programme (salles, séances) sur le Web, sur le WAP, sur des tracts et des affiches

inclure des informations sur des films provenant d’une base de données MySQL, approvisionner un moteur de recherche pour chercher des séances, des films, des horaires

 

Introduction à XML - B. Amann – p.5/159

Echanges et publication des données

 

p.6/159

L’architecture du site

   

Introduction à XML - B. Amann – p.7/159

La fiche du film Gladiator

 

La fiche du film peut être publiée en HTML pour Netscape/IE en WML pour le portables WAP en SMIL pour Realplayer

              dans un moteur de recherche  

L’information ?

c’est la même, sous des formes différentes elle est échangée entre plusieurs acteurs

p.8/159

Les solutions XML?

Format universel : représentation en chaîne de caractères d’un contenu structuré indépendant de toute application

Publier l’information outils de transformation simples pour convertir un contenu XML

Échanger et intégrer l’information assembler des contenus XML, ou au contraire en extraire des informations

 

Introduction à XML - B. Amann – p.9/159

Pourquoi pas HTML?

 

Actuellement, le principal format du Web est HTML:

HTML est un langage pour présenter des informations à l’écran.

il ne permet pas d’échanger des données il ne permet pas un traitement des données autre que l’affichage

On ne sait pas interpréter des données fournies en HTML.

p.10/159

XML, c’est quoi?

XML = rendre un contenu accessible à toute application. Le contenu :

L’Epée de bois, 100 rue Mouffetard, métro

Censier-Daubenton Le même, en XML :

<?xml version="1.0" encoding="ISO-8859-1"?> <CINEMA><NOM>Epée de Bois</NOM><ADRESSE>100,

rue Mouffetard</ADRESSE><METRO> Censier-Daubenton</METRO></CINEMA>

 

Introduction à XML - B. Amann – p.11/159

Le même, mieux présenté

 

Présentation courante : avec indentation

<?xml version="1.0" encoding="ISO-8859-1"?>

<CINEMA>

<NOM>

Epée de Bois

</NOM>

<ADRESSE>

100, rue Mouffetard

</ADRESSE>

<METRO>

Censier-Daubenton

</METRO>

</CINEMA>

NB : il y a des espaces et des sauts de ligne

p.12/159

Encore mieux: sous forme d’arbre

 

Traiter un document XML = extraire des informations d’un arbre.

 

Introduction à XML - B. Amann – p.13/159

Un exemple plus complet, avec attributs

 

<?xml version="1.0" encoding="ISO-8859-1"?>

<CINEMA>

<NOM>Epée de bois</NOM>

<ADRESSE>100, rue Mouffetard</ADRESSE>

<METRO>Censier-Daubenton</METRO>

<SALLE NO=’1’ PLACES=’320’>

<TITRE>Alien</TITRE>

<REMARQUE>Reservation conseillée</REMARQUE>

<SEANCES>

<SEANCE>15:00</SEANCE>

<SEANCE>18:00</SEANCE>

<SEANCE>21:00</SEANCE>

</SEANCES>

</SALLE>

</CINEMA>

p.14/159

Sous forme d’arbre

 

15:00

18:00

21:00                        22:00

   

Introduction à XML - B. Amann – p.15/159

Documents XML

Un document XML est une représentation alphanumérique de données (semi-)structurées provenant d’un ou de plusieurs fichiers et/ou d’un message et/ou d’une base de données

p.16/159

Origine d’un document XML

XML permet d’intégrer des contenus provenant d’origines diverses d’un éditeur de texte d’un site Web d’une base de données d’un fichier

Encore la même idée : rendre le contenu indépendant de l’application

 

Introduction à XML - B. Amann – p.17/159

Exemple d’Intégration

 

<?xml version="1.0" encoding="ISO-8859-1"?>

<SALLE NO=’2’ PLACES=’120’>

<FILM>

<TITRE>Vertigo</TITRE>

<AUTEUR>Alfred Hitchcock</AUTEUR>

<ANNEE>1958</ANNEE>

<GENRE>Drame</GENRE>

<PAYS>Etats Unis</PAYS>

<RESUME>Scottie Ferguson, ancien inspecteur de police, est sujet au vertige depuis qu’il a vu mourir son collègue .

</RESUME>

</FILM>

<SEANCES>

<SEANCE>22:00</SEANCE>

</SEANCES>

</SALLE>

p.18/159

Sous forme d’arbre

   

Introduction à XML - B. Amann – p.19/159

Le cinéma: intégration des salles

 

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE CINEMA [

<!ENTITY salle1 SYSTEM "">

<!ENTITY salle2 SYSTEM "">

]>

<CINEMA>

<NOM>Epée de bois</NOM>

<ADRESSE>100, rue Mouffetard</ADRESSE>

<METRO>Censier-Daubenton</METRO>

&salle1;

&salle2;

</CINEMA>

p.20/159

Premier bilan

Disposer d’une et une seule représentation

J’utilise un traitement de texte ? je suis prisonnier du format

Je stocke dans une base de données ? idem

Créer un langage pour décrire nos données

Ne pas utiliser HTML, dédié à la présentation dans un navigateur

              =   utiliser XML, et convertir vers HTML

 

Introduction à XML - B. Amann – p.21/159

Publication de données avec XML

 

Séparer la gestion du contenu de la présentation

Gestion du contenu = décrire nos informations, avec un vocabulaire XML

Présentation =   mettre en forme nos documents pour une application particulière

p.22/159

Application

Nous avons décrit notre cinéma avec notre propre langage

(DTD). On peut traduire ce langage vers d’autres langages XML :

HTML pour la présentation Web standard

WML pour la présentation WAP

SMIL pour une présentation multimédia

XSL-FO pour la production de documents papier

 

Introduction à XML - B. Amann – p.23/159

Version HTML

 

HTML revisité :

Un document HTML est un document XML

Le vocabulaire est fixé, ainsi que la syntaxe

Chaque balise a une signification bien définie

HTML a été normalisé comme « dialecte » XML

=    XHTML

p.24/159

                                                                               Ce qu’on veut obtenir   (démo)

<html>

<head><title>Film: Vertigo</title></head>

<body bgcolor="white">

<p><img SRC=""> <h1><i>Vertigo</i></h1>

Drame, <i>Etats Unis</i>, 1958

</p>

<p>

Mis en scène par <b>Alfred Hitchcock</b>

<h3>Résumé</h3>Scottie Ferguson, ancien inspecteur de police, est sujet au vertige depuis qu’il a vu mourir son collègue

</p>

</body>

</html>

 

Introduction à XML - B. Amann – p.25/159

HTML, sous forme d’arbre

 

p.26/159

Transformation XSLT

Un programme de transformation XSLT doit nous permettre :

De prendre en entrée un document XML source

De produire en sortie un autre arbre XML

D’insérer dans le document en sortie des fragments du document source

 

Introduction à XML - B. Amann – p.27/159

WML, autre dialecte de XML

 

Document WML : marqué par la balise wml

Il est divisé en cartes, unité d’affichage sur le mobile

( card )

Elements principaux :

des balises simples de mise en forme ( b , i ) des ancres pour passer d’une carte à une autre

p.28/159

Exemple d’une carte WML

<?xml version="1.0" encoding="iso-8859-1"?>

<wml>

<card>

<p>

<b>

Alien

</b>

, 1979, Ridley Scott

<br/>

Près d&apos;un vaisseau spatial échoué sur une lointaine planète, ..

</p>

</card>

</wml>

 

Introduction à XML - B. Amann – p.29/159

SMIL

 

Langage pour la création de documents multimédia avec XML.

On indique une fenêtre d’affichage avec différentes régions pour l’affichage des composants.

On place les composants dans les différentes régions (positionnement spatiale).

On synchronise l’affichage des composants (positionnement temporel).

p.30/159

Entête SMIL: Fenêtre et régions

<head>

<meta name="title" content="Version SMIL" />

<meta name="author" content="c2001 " />

<layout>

<root-layout width="450" height="600" />

<region id="reg_img_grand" width="400" height="300" left="25" top="25" fit="meet" />

<region id="reg_img_petit" width="200" height="125" left="125" top="75" fit="meet" />

<region id="reg_texte" width="350" height="325" left="50" top="250" z-index="1"/>

</layout>

</head>

 

Introduction à XML - B. Amann – p.31/159

Corps SMIL: Positionnement

 

Démo !

p.32/159

XSL-FO

Langage de description de documents avec XML.

On indique les paramètres de mise en page (marges,

taille des polices )

On place le contenu entre des balises de formatage =  un processeur se charge de produire le document

 

Introduction à XML - B. Amann – p.33/159

Exemples d’un document XSL-FO

 

<?xml version="1.0" encoding="iso-8859-1"?>

<fo:root>

<fo:layout-master-set>

<fo:simple-page-master master-name="page" page-height="29.7cm" page-width="21cm"/>

</fo:layout-master-set>

<fo:page-sequence master-name=’simple’>

<fo:flow font-size="20pt">

<fo:block>

Ceci est le premier paragraphe,

</fo:block>

</fo:flow>

</fo:page-sequence>

</fo:root>

Démo !    Le programme de l’Epée de Bois!

p.34/159

Quelques idées

J’ai mes données

Je leur ai défini une représentation

Je leur applique des traitements (publication ou autre)

Je peux les transmettre à quelqu’un d’autre (tout ou partie)

=   un service externe m’apporte une valeur ajoutée

 

Introduction à XML - B. Amann – p.35/159

Quel format?

 

Mon problème :

J’ai décrit mes données avec mon langage XML

L’application attend des données dans son langage

Il faut :

Décrire formellement les deux langages Faire une traduction de l’un à l’autre

p.36/159

Les DTD

Document Type Definition

Pour définir la structure d’une classe de documents

(d’un langage)

Exemple : un élément de type texte :

<!ELEMENT TITRE (#PCDATA) >

Exemple : un élément constitué d’un titre, d’un cinéma, d’une ville, d’une URL (optionnelle) et d’une séquence d’heures.

<!ELEMENT FILM (TITRE, CINEMA, VILLE,

URL?, HEURE+)>

 

Introduction à XML - B. Amann – p.37/159

La DTD du moteur de recherche

 

Un fichier auquel on peut faire référence dans un

 

document :

 

1

<!ELEMENT FILM

( TITRE, CINEMA, VILLE, URL?, HEURE+ ) >

2

<!ELEMENT TITRE

( #PCDATA ) >

3

<!ELEMENT CINEMA

( #PCDATA ) >

4

<!ELEMENT VILLE

( #PCDATA ) >

5

<!ELEMENT URL

( #PCDATA ) >

6

<!ELEMENT HEURE

( #PCDATA ) >

Document valide : conforme à une DTD.

p.38/159

Architecture ( Démo )

   

Introduction à XML - B. Amann – p.39/159

Le document intégrateur

 

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE MOTEUR [

<!ENTITY EpeeDeBois

SYSTEM "">

<!ENTITY CineMarseille

SYSTEM "">

]>

<MOTEUR>

<CINEMA>

&EpeeDeBois;

</CINEMA>

<CINEMA>

&CineMarseille;

</CINEMA>

</MOTEUR>

p.40/159

Gestion de l’information avec XML

   

Introduction à XML - B. Amann – p.41/159

Les applications du Web avec XML

 

Publication d’informations: transformation de XML en différents formats/dialectes : HTML, SMIL, WML, SVG, MathML

Diffusion d’informations: Web Sémantique : RDF/RSS,

Dublin core

Échange et partage d’informations: dialectes XML partagés entre les membres d’une communauté, services Web (SOAP)

Recherche d’information: langages requêtes (XQuery)

p.42/159


Récapitulons!

XML = format d’échange de données entre application

Permet de définir des « langages » pour décrire des données (« méta-langage »)

Permet de représenter pratiquement toute information semi-structurée

De nombreux outils d’analyse, parsing, interrogation, transformation,

=   Bien adapté au web.

 

Introduction à XML - B. Amann – p.43/159

 

Les API DOM et Sax

                                                                                                                                            Les API DOM et Sax                         p.44/159

Programmer avec XML

Les deux principales interfaces de programmation XML :

DOM (Document Object Model), basé sur une représentation hiérarchique

SaX (Simple API for XML), basé sur des déclencheurs (événements/action)

 

Les API DOM et Sax - B. Amann – p.45/159

Les API XML

 

L’API DOM :

Construit une représentation du document en mémoire sous forme d’arbre

Adaptée aux applications qui modifient ou traitent dans leur globalité un document.

L’API SaX :

Définit des triggers qui se déclenchent sur certaines balises.

Adaptée aux applications qui extraient de l’information d’un document

                                                                                                                                            Les API DOM et Sax                         p.46/159

DOM et SaX

Toutes les applications XML passent par une phase préalable d’analyse

   

Les API DOM et Sax - B. Amann – p.47/159

 

Document Object Model (DOM)

p.48/159


L’API orientée-objet

Un parseur DOM prend en entrée un document XML et construit un arbre formé d’objets :

chaque objet appartient à une sous-classe de Node des opérations sur ces objets permettent de créer de nouveaux nœuds, ou de naviguer dans le document

=   éditeurs XML, processeurs XSLT

 

Document Object Model (DOM) - B. Amann – p.49/159

Les nœuds DOM

 

Types de noeuds

Type de Nœuds

Catégorie syntaxique XML

Document

document XML (racine)

DocumentType

type du document (DTD)

ProcessingInstruction

instruction de traitement

Element

élément XML

Attribute

attribut XML

Entity

déclaration d’entité

Table 1: Types de nœuds DOM

 

Document Object Model (DOM) - B. Amann – p.51/159

Types de noeuds DOM (suite)

 

Type de Nœuds

Catégorie syntaxique XML

EntityReference

référence vers entité

Comment

commentaire

CharacterData

commentaire et section de texte

Text

section de texte

CDataSection

section CDATA

DocumentFragment

fragment de document XML

Notation

notation

Table 2: Types de nœuds DOM

p.52/159

Structure d’un arbre

   

Document Object Model (DOM) - B. Amann – p.53/159

Un document avec attributs

 

<?xml version=’1.0’ encoding="ISO-8859-1"?>

<COURS CODE="19599">

<SUJET>Structures de données</SUJET>

<ENSEIGNANTS>

<NOM RESPONSABLE="0">Carrez</NOM>

<NOM RESPONSABLE="1">Akoka</NOM>

</ENSEIGNANTS>

</COURS>

p.54/159

L’arbre

   

Document Object Model (DOM) - B. Amann – p.55/159

Propriétés du type Node

 

Propriété

Type

nodeType

unsigned short

nodeName

DOMString

nodeValue

DOMString

attributes

NamedNodeMap

Table 3: Propriétés du type Node

p.56/159


Propriétés du type Node

Propriété

Type

parentNode

Node

firstChild

Node

lastChild

Node

childNodes

NodeList

previousSibling

Node

nextSibling

Node

Table 4: Propriétés du type Node

 

Document Object Model (DOM) - B. Amann – p.57/159

Opérations du type Node

 

Résultat

Méthode

Paramètres

Node

insertBefore()

Node nouv, Node fils

Node

replaceChild()

Node nouv, Node anc

Node

removeChild()

Node fils

Node

appendChild()

Node nouv

boolean

hasChildNodes()

 

Node

cloneNode()

boolean prof

Table 5: Opérations du type Node

p.58/159

DOM : Exemple de code

Ajoute

<adventure

type="epic">&adventure1;</adventure> avant le 4e élément du document :

var racine = myDocument.documentElement; var enfants = racine.childNodes;

var el_nouv = createElement("adventure") ; var ent_ref = createEntityReference("adventure1");

el_nouv.setAttribute("type", "epic"); el_nouv.appendChild(ent_ref) insertBefore(el_nouv, (3));

 

Document Object Model (DOM) - B. Amann – p.59/159

 

L’API SAX

p.60/159

Architecture SAX

Associer des événements aux balises :

   

L’API SAX - B. Amann – p.61/159

Les événements SAX

 

Un parseur SAX génère un événement à chaque fois qu’il rencontre le début et la fin de document, le début et la fin d’un élément, une instruction de traitements un commentaire,

Les fonctions s’exécutent indépendamment =     il faut leur faire partager une zone mémoire (« accumulateur »)

p.62/159

Les événements SAX: exemple

import .*; import .*; import .helpers.*; import org.apache.xerces.parsers.SAXParser; public class Trace extends DefaultHandler {

// début de document public void startDocument() {

.println("start document");

}

// fin de document public void endDocument() {

.println("end document");

}

 

L’API SAX - B. Amann – p.63/159

Suite

 

// balise d’ouverture public void startElement(String uri,

String localName, String qName,

Attributes attributes) {

.println("starting element: " + qName);

}

// balise de fermeture public void endElement(String uri,

String localName, String qName) {

.println("end element: " + qName); }

p.64/159

Suite

// espace blanc

public void ignorableWhitespace(char[] ch, int start, int length) {

.println("whitespace, length " + length);

}

// instruction de traitement

public void processingInstruction(String target,

String data) {

.println("processing instruction: " + target);

}

 

L’API SAX - B. Amann – p.65/159

Suite

 

// texte

public void characters(char[] ch, int start, int length){

.println("character data, length " + length);

}

// procédure principale

public static void main(String[] args) {

Trace t = new Trace(); SAXParser p = new SAXParser(); p.setContentHandler(t); try { p.parse(args[0]); }

catch (Exception e) {e.printStackTrace();} }

p.66/159

Exemple type: insertion dans une BD

À partir d’un flux XML contenant des films :

<FILMS>

<FILM>

<TITRE>Alien</TITRE>

<ANNEE>1979</ANNEE>

<AUTEUR>Ridley Scott</AUTEUR>

<GENRE>Science-fiction</GENRE

<PAYS>USA</PAYS>

</FILM>

</FILMS>

 

L’API SAX - B. Amann – p.67/159

Les événements

 

Début de document : connexion à la base

Balise

FILM

: création d’un enregistrement Film

Balise

TITRE

: on affecte Film.titre

Balise etc..

ANNEE

: on affecte Film.annee

Balise base

FILM

: insertion de l’enregistrement dans la

Balise

/FILM

: destruction de Film

p.68/159


XPath: Sélectionner des Fragments XML

 

XPath: Sélectionner des Fragments XML - B. Amann – p.69/159

Exemple: Document XML

 

Document XML:

 

p.70/159

Exemple: Règle de transformation

   

XPath: Sélectionner des Fragments XML - B. Amann – p.71/159

Exemple: Résultat

 

Fragment HTML:

 

p.72/159

Référencer des fragments XML avec XPATH

Pour pouvoir transformer un document XML il faut pouvoir extraire des fragments (nœuds) XML d’un document XPath :

XPath est fondé sur une représentation arborescente

(DOM) du document XML

Objectif : référencer nœuds (éléments, attributs, commentaires, ) dans un document XML

 

XPath: Sélectionner des Fragments XML - B. Amann – p.73/159

XPath: Exemples de chemins XPath

 

p.74/159

XPath: Utilisation

Le langage permet de désigner un ou plusieurs nœuds dans un document XML, à l’aide d’expressions de chemin.

XPath est utilisé par

XSLT pour sélectionner des règles de transformation

XQuery pour l’interrogation de documents XML

XML Schéma pour créer des clés et références

XLink pour créer des liens entre documents/fragments XML

 

XPath: Sélectionner des Fragments XML - B. Amann – p.75/159

Les arbres XPath

 

Un typage simplifié par rapport à celui de DOM

Document

Element

Text

Attribut

ProcessingInstruction

Comment

pas d’entité, pas de section littérale

p.76/159

Exemple: l’arbre DOM

   

XPath: Sélectionner des Fragments XML - B. Amann – p.77/159

Puis l’arbre XPath

 

p.78/159

Expressions XPath

Une expression XPath :

s’évalue en fonction d’un nœud contexte désigne un ou plusieurs chemins dans l’arbre à partir du nœud contexte a pour résultat un ensemble de nœuds ou une valeur, numérique, booléenne ou alphanumérique

 

XPath: Sélectionner des Fragments XML - B. Amann – p.79/159

Chemins XPath

 

Un chemin XPath est une suite d’étapes :

[/]étape/étape/ /étape

Deux variantes : Un chemin peut être

absolu : /FILM/RESUME

Le nœud contexte est alors la racine du document.

ou relatif : RESUME/text()

Le nœud contexte est un nœud dans le document (pas forcément la racine).

p.80/159

Étapes XPath

Une étape : trois composants

[axe::]filtre[prédicat1][prédicat2]

l’axe : sens de parcours des nœuds (par défaut: child).

le filtre : type des nœuds/noms des éléments qui seront retenus le(s) prédicat(s) que doivent satisfaire les nœuds retenus

 

XPath: Sélectionner des Fragments XML - B. Amann – p.81/159

Les axes XPath

 

Un axe XPath recouvre les deux notions suivantes :

un sous-ensemble des nœuds de l’arbre relatif au nœud contexte ; l’ordre de parcours de ces nœuds à partir du nœud contexte.

p.82/159


Exemple de référence

 

XPath: Sélectionner des Fragments XML - B. Amann – p.83/159

Exemple: le nœud contexte

 

p.84/159

child::D ou D

 

XPath: Sélectionner des Fragments XML - B. Amann – p.85/159

attribute::att1 ou @att1

 

p.86/159

parent::A

 

XPath: Sélectionner des Fragments XML - B. Amann – p.87/159

Notation abrégée de parent::A

 

La notation abrégée .. désigne le père du nœud contexte, quel que soit son type. Équivalent à :

parent::node()

node() est un filtre qui désigne tous les types de nœuds

(sauf les attributs).

parent::* * est un filtre qui désigne tous les éléments.

p.88/159

descendant::node()

 

XPath: Sélectionner des Fragments XML - B. Amann – p.89/159

ancestor::node()

 

p.90/159


self::node()

il désigne le nœud contexte lui-même. Doit être complété par un filtre. Exemples : notre nœud contexte : self::B mais self::A renvoie un ensemble vide

Pour prendre le nœud quel que soit son type :

self::node()

Notation abrégée : « . »

 

XPath: Sélectionner des Fragments XML - B. Amann – p.91/159

preceding-sibling::node()

 

p.92/159

following::node()

 

XPath: Sélectionner des Fragments XML - B. Amann – p.93/159

Axes: Résumé

 

nœuds enfants et descendants: child, descendant, descendant-or-self nœud parent et ancêtres: parent, ancestor frères: preceding-sibling, following-sibling

nœuds précédents et suivants: preceding, following nœud même: self

p.94/159

Filtres

Deux manières de filtrer les nœuds :

par leur nom :

possible pour les types de nœuds qui ont un nom :

Element, ProcessingInstruction et Attr par leur type DOM.

 

XPath: Sélectionner des Fragments XML - B. Amann – p.95/159

Chemin absolu: /A/B/D

 

p.96/159


/descendant::node()/@att2

 

XPath: Sélectionner des Fragments XML - B. Amann – p.97/159

Nom générique: /A/*

 

p.98/159

Filtrage sur le type de nœud

text() : Nœuds de type Text comment() : Nœuds de type Comment Exemple : /comment()

processing-instruction() : Nœuds de type ProcessingInstruction

Exemple : /processing-instruction(), ou /processing-instruction(’java’) node() : Tous les types de nœud

 

XPath: Sélectionner des Fragments XML - B. Amann – p.99/159

/A/B//text()

 

p.100/159

/comment()

 

XPath: Sélectionner des Fragments XML - B. Amann – p.101/159

Prédicats

 

Prédicat : expression booléenne constituée d’un ou plusieurs tests, composés avec les connecteurs logiques habituels and et or

Test : toute expression XPath, dont le résultat est convertie en booléen; une comparaison, un appel de fonction.

il faut connaître les règles de conversion

p.102/159


Quelques exemples

/A/B[@att1]: Les nœuds /A/B qui ont un attribut @att1

/A/B[@att1=’a1’]: Les nœuds /A/B qui ont un attribut @att1 valant ’a1’

/A/B/descendant::text()[position()=1]: Le premier nœud de type Text descendant d’un /A/B.

/A/B/descendant::text()[1]: idem

 

XPath: Sélectionner des Fragments XML - B. Amann – p.103/159

Pour bien comprendre

 

Dans l’expression /A/B[@att1] :

On s’intéresse aux nœuds de type B fils de l’élément racine A.

Parmi ces nœuds on ne prend que ceux pour lesquels le prédicat [@att1] s’évalue à true

Cette expression s’évalue avec pour nœud contexte un élément B

[@att1] vaut true ssi @att1 renvoie un ensemble de nœuds non vide

p.104/159

Contexte d’évaluation

Une étape s’évalue en tenant compte d’un contexte constitué de un nœud contexte, position initiale du chemin ; ce nœud fait lui-même partie d’un ensemble obtenu par évaluation de l’étape précédente on connaît la taille de cet ensemble (fonction last())

on connaît la position du nœud contexte dans cet ensemble (fonction position())

 

XPath: Sélectionner des Fragments XML - B. Amann – p.105/159

/A/B/descendant::text()[1]

 

p.106/159

Typage avec XPath

On peut effectuer des comparaisons, des opérations. Cela implique un typage et des conversions de type. Types XPath :

les numériques les chaînes de caractères les booléens (true et false) enfin les ensembles de nœuds

 

XPath: Sélectionner des Fragments XML - B. Amann – p.107/159

Numériques

 

Notation décimale habituelle

Comparaisons habituelles (<, >, !=)

Opérations : +, -, *, div, mod

La fonction number() permet de tenter une conversion

Si la conversion échoue on obtient NaN (Not a Number). À éviter

Ex : //node()[number(@att1) mod 2=1]

p.108/159

Conversions

Deux conversions sont toujours possibles.

Vers une chaîne de caractères.

utile pour la production de texte en XSLT (balise xsl:value-of)

Vers un booléen utile pour les tests effectués dans XSLT (xsl:if, xsl:when)

 

XPath: Sélectionner des Fragments XML - B. Amann – p.109/159

Conversions booléennes

 

Pour les numériques : 0 ou NaN sont false, tout le reste est true

Pour les chaînes : une chaîne vide est false, tout le reste est true

Pour les ensembles de nœuds : un ensemble vide est false, tout le reste est true

Comparaisons : des règles de conversion étranges

p.110/159

Fonctions XPath

Quelques fonctions utiles dans les prédicats :

concat(chaîne1, chaîne2, ) pour concaténer des chaînes contains(chaîne1, chaîne2) teste si chaîne1 contient chaîne2 count (expression) renvoie le nombre de nœuds désignés par expression name() renvoie le nom du nœud contexte not(expression) : négation

 

XPath: Sélectionner des Fragments XML - B. Amann – p.111/159

Prédicats: Exemples

 

Axes « d’avancement » :

child::*[3]: le 3e enfant child::*[position()=3]: idem child::*[last()]: le dernier enfant descendant::*[last()]: le dernier descendant

La position d’un nœud dépend de l’axe choisi.

p.112/159

Prédicats: Axes inverses

Axes « inverses » :

ancestor::*[1]: le premier ancêtre du nœud contexte (dernier dans l’ordre du document).

preceding-sibling::*[last()]: le dernier frère qui précède le nœud contexte (premier dans l’ordre du document).

 

XPath: Sélectionner des Fragments XML - B. Amann – p.113/159

Prédicats: Exemples

 

Test du nombre d’occurrences :

CINEMA[count(SEANCE) > 1]: cinémas avec au moins 2 séances

FILM[count(ACTEUR) = 0]: films sans acteur FILM[not(ACTEUR)]: films sans acteur

p.114/159

Prédicats: Sélection par valeur

Sélection par valeur:

FILM[not(ACTEUR[NOM=’Willis’])]: films sans

Bruce Willis

FILM[ACTEUR/NOM=’Willis’]: films avec Bruce

Willis

FILM[ACTEUR[NOM=’Willis’]]: idem

 

XPath: Sélectionner des Fragments XML - B. Amann – p.115/159

Prédicats: Exemples

 

Test sur la structure : chemins imbriqués avec connecteurs logiques (qualifiers)

ACTEUR[NOM and DATENAISSANCE] ou

ACTEUR[NOM][DATENAISSANCE]: les acteurs avec un nom et une date de naissance

FILM[@TITRE = ’Brazil’ and ACTEUR/NOM =

’De Niro’]: le film Brazil avec l’acteur De Niro

FILM[@TITRE = ’Brazil’][ACTEUR/NOM =

’De Niro’]: idem

p.116/159

Remarque sur les prédicats

Attention: Les deux premières expressions sont equivalentes, mais pas la troisième! Pourquoi?

FILM[ACTEUR and position()=1]

FILM[position()=1][ACTEUR]

FILM[ACTEUR][position()=1]

 

XPath: Sélectionner des Fragments XML - B. Amann – p.117/159

Un cas épineux: les espaces

 

Un document XML avec espaces

<?xml version="1.0" encoding="ISO-8859-1"?>

<?xml-stylesheet href="" type="text/xsl"?>

<!-- commentaire -->

<!DOCTYPE A SYSTEM "" >

<A>

<B at1=’ val1 ’ at2=’ avec blanc ’

/>

<C> </C>

<D> texte </D> </A>

p.118/159

Où sont les espaces?

Un peu partout !

avant la balise ouvrante de l’élément racine ; à l’intérieur d’une balise ; à l’intérieur d’un élément ; à l’intérieur de la valeur d’un attribut ; entre deux balises ; entre deux attributs.

Tous n’ont pas la même importance

 

XPath: Sélectionner des Fragments XML - B. Amann – p.119/159

Les espaces dans XPath

 

Les espaces du prologue ou de l’épilogue sont supprimés.

Les espaces consécutifs sont réduits à un seul.

Les fins de lignes sont représentées par le caractère #xA.

En général, les espaces en début et fin d’attributs sont supprimées.

p.120/159

L’arbre XPath du document

 

Instruction xsl:strip-space

 

p.122/159


XPath: Résumé

XPath est un langage pour extraire des noeuds dans un arbre XML :

On navigue dans l’arbre grâce à des axes de navigation.

Un chemin de navigation est une séquence d’étapes.

Dans chaque étape on choisi un axe, un filtre et éventuellement des prédicats.

Le résultat d’une étape (d’une séquence d’étapes) est un séquence de noeuds.

 

XPath: Sélectionner des Fragments XML - B. Amann – p.123/159

 

Introduction à XSLT

p.124/159

Sommaire

Une introduction à XSLT, destinée à comprendre les mécanismes du langage.

Règles XSLT

Désignation de fragments XML

Appels de règles

                         Application : XML -   HTML et XML -   WML

Passage de paramètres

 

Introduction à XSLT - B. Amann – p.125/159

Qu’est-ce qu’on peut faire avec XSLT?

 

Transformer un document XML en un ou plusieurs documents XML, HTML, WML, SMIL document papier: PDF (XSL-FO), LaTeX texte simple

p.126/159

Fonctions d’une Feuille de Style XSLT

Fonction de Base: Langage de règles de transformation de documents/arbres XML: extraction de données génération de texte suppression de contenu (noeuds) déplacer contenu (noeuds) dupliquer contenu (noeuds)

trier

 

Introduction à XSLT - B. Amann – p.127/159

Exemple

 

p.128/159

Exemple: Règle de transformation

1              <xsl:template match="FILM">

2              <p>

3              <h1>

4              <i>

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

6              </i>

7              </p>

8              <i>

9              <xsl:value-of select="ANNEE"/>

10              </i>

11              <p>

12              <xsl:value-of select="AUTEUR"/>

13              </p>

14              <h3>Résumé:

15              <xsl:value-of select="RESUME"/>

16              </h3>

17              </p>

18              </xsl:template>

 

Introduction à XSLT - B. Amann – p.129/159

Extraction de données

 

Exemple : recherche du titre pour le nœud FILM :

xsl:value-of select="TITRE"/

Plus généralement : on donne un chemin d’accès XPath à un nœud à partir du nœud courant (noeud contexte).

p.130/159

Génération de texte

Produire une phrase quand on rencontre un nœud FILM :

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

</xsl:template>

 

Introduction à XSLT - B. Amann – p.131/159

Génération d’un arbre XML

 

Produire un document/fragment/arbre XML quand on rencontre un nœud FILM :

<xsl:template match="FILM">

<body>

<p>Un paragraphe</p>

</body

</xsl:template>

p.132/159

Génération avec extraction

Produire un document/fragment/arbre XML quand on rencontre un nœud FILM :

1                <xsl:template match="FILM">

2                <body>

3                <p>

4                <xsl:text>Titre: </xsl:text>

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

6                </p>

7                </body>

8                </xsl:template>

 

Introduction à XSLT - B. Amann – p.133/159

Structure de base: les règles

 

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

p.134/159

Un exemple

1           <xsl:template match="FILM">

2           <p>

3           <h1>

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

5           </h1>

6           <i><xsl:value-of select="ANNEE"/></i>

7           <p><xsl:value-of select="AUTEUR"/></p>

8           <h3>

9           Résumé: <xsl:value-of select="RESUME"/>

10           </h3>

11           </p>

12           </xsl:template>

Motif de sélection : match="FILM"

Corps de la règle = fragment d’arbre à produire

 

Introduction à XSLT - B. Amann – p.135/159

Illustration

 

p.136/159

Une règle complète

1             <xsl:template match="FILM">

2             <html>

3             <head>

4             <title>Film:

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

6             </title>

7             </head>

8             <body>

9             Le genre du film, c’est

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

11             </body>

12             </html>

13             </xsl:template>

 

Introduction à XSLT - B. Amann – p.137/159

Le résultat

 

On obtient :

1                     <html>

2                     <head>

3                     <title>Film:

4                     Vertigo

5                     </title>

6                     </head>

7                     <body>

8                     Le genre du film, c’est

9                     <b>Suspense</b>

10                     </body> 11 </html>

p.138/159

Chemins complexes

Dans l’exemple précédent, on accédait aux fils d’un nœud. En fait on peut :

Accéder à tous les descendants

Accéder aux parents, aux frères, aux neveux

Accéder aux attributs

Effectuer des boucles

Le langage d’expression de chemins : XPath.

 

Introduction à XSLT - B. Amann – p.139/159

Exemple: Document XML

 

1 <?xml version="1.0" encoding="ISO-8859-1"?>

2

3        <?xml-stylesheet href="" type="text/xsl"?>

4        <?cocoon-process type="xslt"?>

5        <SALLE NO=’1’ PLACES=’320’>

6        <FILM>

7        <TITRE>Alien</TITRE>

8        <AUTEUR>Ridley Scott</AUTEUR>

9        <ANNEE>1979</ANNEE>

10        <GENRE>Science-fiction</GENRE>

11        <PAYS>Etats Unis</PAYS>

12        <RESUME>Près d’un vaisseau spatial échoué sur une lointaine

13        planète, des Terriens en mission découvrent de bien étranges 14 "oeufs". Ils en ramènent un à bord, ignorant qu’ils viennent

15           d’introduire parmi eux un huitième passager particulièrement 16         féroce et meurtrier.

17            </RESUME>

18            </FILM>

19            <REMARQUE>Réservation conseillée</REMARQUE>

20            <SEANCES>

21            <SEANCE>15:00</SEANCE>

22            <SEANCE>18:00</SEANCE>

23            <SEANCE>21:00</SEANCE>

24            </SEANCES> 25 </SALLE>

p.140/159

Exemple: Traduction de Salle

1      <xsl:template match="SALLE">

2      <h2>Salle No

3      <xsl:value-of select="@NO"/></h2>

4      Film: <xsl:value-of select="FILM/TITRE"/>

5      de  <xsl:value-of select="FILM/AUTEUR"/>

6      <ol> <xsl:for-each select="SEANCES/SEANCE">

7      <li><xsl:value-of select="."/></li>

8      </xsl:for-each>

9      </ol> 10 </xsl:template>

 

Introduction à XSLT - B. Amann – p.141/159

Le résultat

 

Appliqué à :

1       <h2>Salle No 1 </h2>

2       Film: Alien

3       de  Ridley Scott

4

<ol>

   

5

 

<li>

15:00</li>

6

 

<li>

18:00</li>

7

 

<li>

21:00</li>

8

</ol>

   

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

p.142/159

Salles et séances

   

Introduction à XSLT - B. Amann – p.143/159

Chemins complexes

 

Descendants : le titre du film est désigné par select="FILM/TITRE" ;

Attributs : le numéro de la salle est désigné par select="@NO" ;

Boucles : avec xsl:for-each sur l’ensemble des séances désignées par select="SEANCES/SEANCE" ;

L’élément contexte : désigné par le symbole ’.’, comme dans select=".".

p.144/159

Appels de 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

 

Introduction à XSLT - B. Amann – p.145/159

Exemple: L’Épée de bois

 

« Cadre » HTML, puis appel de la règle CINEMA

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

p.146/159

Règle CINEMA

Exploitation de l’élément CINEMA, puis appel à la règle SALLE

1                <xsl:template match="CINEMA">

2                <h1><i>

3                <xsl:value-of select="NOM"/>

4                </i></h1><hr/>

5                <xsl:value-of select="ADRESSE"/>,

6                <i>Métro: </i>

7                <xsl:value-of select="METRO"/>

8                <hr/>

9                <xsl:apply-templates select="SALLE"/>

10

11 </xsl:template>

 

Introduction à XSLT - B. Amann – p.147/159

Vue d’ensemble

 

p.148/159

La même chose, en WML

On génère les cartes du site

1          <xsl:template match="/">

2          <wml>

3          <!-- Carte d’accueil -->

4          <xsl:apply-templates select="CINEMA"/>

5

6          <!-- Cartes pour les salles et séances -->

7          <xsl:apply-templates select="CINEMA/SALLE"/>

8

9          <!-- création des cartes pour les films -->

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

11          </wml>

12          </xsl:template>

 

Introduction à XSLT - B. Amann – p.149/159

Arbre XML du site

 

p.150/159


Règle CINEMA

<xsl:template match="CINEMA">

<card id="index" title="Programme">

<p align="center">

4                      <xsl:value-of select="NOM"/>

5                      </p>

6                      <xsl:for-each select="SALLE">

7                      <p> <a href="#S{@NO}">

8                      Salle <xsl:value-of select="@NO"/>:

9                      </a>

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

11                      </p>

12                      </xsl:for-each>

13                      </card>

14                      </xsl:template>

 

Introduction à XSLT - B. Amann – p.151/159

Résultat

 

1             <card id="index" title="Programme">

2             <p align="center">

3             Ep&#xE9;e de bois

4             </p>

5             <p>

6             <a href="#S1"> Salle 1: </a>

7             Alien

8             </p>

9             <p>

10             <a href="#S2"> Salle 2: </a>

11             Vertigo

12             </p>

13             </card>

p.152/159

Règle SALLE

<xsl:template match="SALLE">

<card id="S{@NO}">

<p>Séances salle

4                <xsl:value-of select="@NO"/></p>

5                <p>

6                <a href="#{FILM/TITRE}">

7                Film :

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

9                </a>

10             </p>

11             <xsl:apply-templates select="SEANCES"/>

12             </card>

13             </xsl:template>

 

Introduction à XSLT - B. Amann – p.153/159

Résultat

 

1                   <card id="S2">

2                   <p>

3                   S&#xE9;ances salle 2

4                   </p>

5                   <p>

6                   <a href="#Vertigo">

7                   Film : Vertigo</a>

8                   </p>

9                   <p>

10                   S&#xE9;ance 22:00

11                   </p>

12                   </card>

p.154/159

XSLT avec paramètres

<html>

<head>

<title>Formulaire de Recherche</title>

4                </head>

5                <body bgcolor="white">

6                <h1>Formulaire de Recherche</h1>

7                <form method=’get’ action=’’

8                name=’Form’>

9                Film: <input type=’text’ name=’titre’> <br>

10                Séance: <input type=’text’ NAME=’seance’ >

11                (hh:mm)<br>

12                Ville: <input type=’text’ name=’ville’><br>

13                <input type=’submit’ name=’chercher’

14                value="Chercher"/>

15                </form>

16                </body>

17                </html>

 

Introduction à XSLT - B. Amann – p.155/159

Le document XML

 

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE MOTEUR [

<!ENTITY EpeeDeBois

SYSTEM "">

<!ENTITY CineMarseille

SYSTEM "">

]>

<MOTEUR>

<CINEMA>

&EpeeDeBois;

</CINEMA>

<CINEMA>

&CineMarseille;

</CINEMA>

</MOTEUR>

p.156/159


Traitement des paramètres

<xsl:param name="titre"/>

<xsl:param name="seance"/> <xsl:param name="ville"/>

<xsl:template match="MOTEUR">

<xsl:for-each select="CINEMA">

<xsl:if test="

CINEMA//TITRE = $titre) and

CINEMA//HEURE &gt;= $seance) and CINEMA/VILLE = $ville)">

<xsl:apply-templates select="." /><p/>

</xsl:if>

</xsl:for-each>

</xsl:template>

 

Introduction à XSLT - B. Amann – p.157/159

Conclusion sur XSLT

 

Un langage totalement adapté au traitement de documents

XML

Parcours d’un document, vu comme un arbre

Déclenchement de règles sur certains nœuds

Association de plusieurs programmes à un même document

p.158/159

Bibliographie sur XSLT

1.    Recommendation XSLT sur le site du W3C

2.    B. Amann et P. Rigaux, Comprendre XSLT, O’Reilly :8080/XSLT

3.    P. Wadler, A formal semantics of patterns in XSLT

 

Introduction à XSLT - B. Amann – p.159/159


41