Sunteți pe pagina 1din 55

CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XML, XSL et toute la


petite famille

Réseaux et systèmes répartis C3

Plan du jour

z Généralités
z Grammaires
– DTD
– schéma
z Transformations
– XPath
– XSL, FO
z Utilisation avec Java

2 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 1


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Contexte du cours

z Lors du cours « Distribué 1 », portant sur la


connectivité Internet avec Java, nous avons vu :
– La notion d’hypertexte et d’hyper-document
– La notion de marquage
– SGML
– HTML

3 29 janvier 2005

Réseaux et systèmes répartis C3

Représentation de données

z Le mode de représentation ensembliste (les


bases de données relationnelles) n’est pas le
meilleur dans tous les cas
– Bien pour un ensemble de données stables
z Un client, un fournisseur ou un mouvement comptable
possèdent toujours un ensemble minimal d’informations
identiques
– Beaucoup moins efficace pour des données
possédant une grande variabilité et plusieurs niveaux
d’information imbriqués

4 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 2


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Stockage de documents

z Dans les années 70, Goldfarb, Mosher et Lorie


d’IBM étudient le problème du stockage des
documents
– Reconnaissance de la variabilité de la taille des
« champs » : introduction de la notion de balise
z La taille d’un champ n’est pas connue a priori lors de la
définition du modèle
z Sont connus a priori : le contenu du champ (nom dans le
modèle) et le type des données (par exemple une chaîne de
caractères)
– Naissance de SGML, Structured Generalized Markup
Language
5 29 janvier 2005

Réseaux et systèmes répartis C3

HTML

z HTML, HyperText Markup Language, a


révolutionné le monde naissant de l’Internet
– Il s’agit d’une des nombreuses applications de SGML
– HTML s’utilise de concert avec HTTP
z HTML permet de représenter l’information de
manière structurée mais simpliste
– Le nombre des balises est très limité
z Besoin d’un langage permettant plus de
possibilités, avec des balises sémantiques
6 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 3


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XML

z La naissance de XML, eXtensible Markup


Language, résulte d’un ensemble de
constatations
– SGML est trop complexe et de nombreux
mécanismes peuvent être abandonnés
– HTML est très intéressant mais les informations
contenues dans de tels documents sont
inexploitables de manière automatique
– De nombreux types d’information nécessitent un
format dédié

7 29 janvier 2005

Réseaux et systèmes répartis C3

XML (2)

z XML correspond principalement à une version


allégée de SGML
z Certains mécanismes complexes ont été
purement et simplement abandonnés
z XML sert désormais de base à de nombreux
projets, produits et concepts ayant besoin d’une
information structurée et hiérarchisée
z Le modèle relationnel ne doit pas être oublié
pour autant…
8 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 4


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XML (3)

z XML est une norme du World Wide Web


Consortium
– C’est donc un standard et tout ceux qui utilisent ce
standard sont censés en respecter scrupuleusement
les règles
– Le format doit donc pouvoir passer de manière
totalement transparente entre plusieurs plate-formes
et les résultats doivent être similaires lorsque l’on
utilise les outils standards sur XML

9 29 janvier 2005

Réseaux et systèmes répartis C3

Bref historique XML

z Les premiers documents écrits suivant le


standard XML, alors naissant, sont différents
livres religieux (Bible, Coran, …) et les pièces
de théâtre de Shakespeare
– Qui a écrit ces documents ?
z Le World Wide Web Consortium a un groupe de
travail (WG) sur XML
– Qui l’a dirigé à sa création ?

10 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 5


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Les points sur les i

z Les deux questions précédentes ont la même


réponse : John Bosak
z John Bosak est ingénieur chez Sun

z Si demain Microsoft revendique une


quelconque paternité sur XML, relisez ces deux
transparents !
11 29 janvier 2005

Réseaux et systèmes répartis C3

Announcement
Newsgroups: comp.infosystems.www.misc
Date: Fri, 22 Nov 1996 14:06:58 -0800
From: bosak@atlantic-83.Eng.Sun.COM (Jon Bosak)
Subject: XML proposed

A new language for advanced Web applications has been proposed by a working group of the World
Wide Web Consortium (W3C).

Extensible Markup Language (XML) is a standardized text format specially designed for transmitting
structured data to Web applications. The new language addresses the needs of Web publishers
who encounter limitations in the ability of HTML to express structured data.

XML differs from HTML in three basic ways:

1. Information providers can define new tag and attribute names at will.
2. Document structures can be nested to any level of complexity.
3. Any XML document can contain an optional description of its grammar for use by
applications that need to perform structural validation.

12 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 6


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XML sur le client

z XHTML est une synthèse de HTML et de XML :


existence d’un ensemble minimal de balises et
possibilité d’extension
– Mariage des balises HTML standard, que l’on sait
traiter, et de balises supplémentaires, permettant de
personnaliser le document
z SVG, Scalable Vector Graphic, pour la
représentation de données graphiques
vectorielles (dessins, cartes) (il existe, entre
autres, un viewer chez Adobe)
13 29 janvier 2005

Réseaux et systèmes répartis C3

XML sur le client (2)

z Initiatives particulières pour les formules


mathématiques ou chimiques, la représentation
de la voix pour la synthèse
z Initiatives pour des formats de conservation de
préférences utilisateur
z Initiatives pour le stockages de gros documents
tels que les livres : eBook pour la littérature (il
existe également un ensemble de readers, chez
Adobe ou Microsoft par exemple) et DocBook
pour les documents techniques
14 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 7


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XML sur le serveur

z XML est un excellent outil pour l’échange de


données
– Pour l’EDI : XML/EDI qui rend les messages EDI
lisibles…
– Entre applications (la suite de l’EDI) : messages XML
dans SOAP, ebXML
– Entre sites web : ICE, Internet Content Exchange,
pour la syndication de sites
– Registres XML : UDDI, ebXML Registry/Repository

15 29 janvier 2005

Réseaux et systèmes répartis C3

XML dans les bases de données

z XML permet de mettre en œuvre des bases de


données hiérarchiques qui sont une solution
aux problèmes rencontrés dans la définition de
bases de données objet
– La mise en correspondance entre un objet (C++,
Java, etc.) et une structure XML peut être faite
facilement : la définition du/des objets doit respecter
la grammaire de la structure XML
z Langage XML Query pour les requêtes,
ressemblant assez à SQL
16 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 8


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Autres normes XML

z Un avantage de XML est l’existence de normes


dérivées pour son exploitation
– XSL, XML Stylesheet Language, un dérivé de
DSSSL, permet de transformer un document
– XPath, permet de définir l’adresse d’un élément dans
un document
– XPointer, XLink, XML Base, permettent de spécifier
différents types de liens dans ou entre des
documents XML

17 29 janvier 2005

Réseaux et systèmes répartis C3

Autres normes XML (2)

z La définition de grammaires peut être faite de


plusieurs manières
– Une DTD, Document Type Definition, héritée de
SGML
z Les DTD sont écrites dans un langage qui leur est propre :
les outils de traitement de XML ne peuvent pas être utilisés
dans ce cas
– Un schéma XML, norme de définition de grammaire
XML en XML introduisant des notions de types

18 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 9


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Documents XML

z Un document XML possède deux niveaux de


validité
– Un document peut être bien formé (well-formed) : il
respecte les contraintes générales imposées aux
documents XML
– Un document peut être valide (valid) : il est bien
formé et il respecte une certaine grammaire
z Analyse d’un document XML en validant sa structure par
une DTD ou un schéma

19 29 janvier 2005

Réseaux et systèmes répartis C3

Documents XML (2)

z Document non valide :


<document>
<a>Avalue MAUVAIS :
<b>Bvalue imbrication des
</a> ouvertures
</b> et des
fermetures
</document> de balises

20 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 10


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Documents XML (3)

z Document valide :
<document>
<a>Avalue
</a>
<b>Bvalue
</b>
</document>

21 29 janvier 2005

Réseaux et systèmes répartis C3

Documents XML (4)

z L’exploitation des documents XML se fait de


deux manières
– DOM, Document Object Model
z Le document XML est totalement chargé en mémoire et
chacun de ses éléments est représenté par l’instance d’un
objet
– SAX : Simple API for XML
z Le document XML n’est pas chargé en mémoire, il est lu sur
disque en parallèle à la gestion d’une pile de balises
ouvertes

22 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 11


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Documents XML (5)

z DOM n’est pas efficace pour le traitement à la


volée de documents
z DOM est intéressant lorsque plusieurs
transformations/traitements successifs doivent
être effectués sur un même document
z SAX est très pratique pour les traitements
légers ou avec des systèmes informatiques
manquant de puissance

23 29 janvier 2005

Réseaux et systèmes répartis C3

Documents XML (6)

z DOM utilise la récursion pour modéliser un


document (schéma simplifié):

Node NodeList

ExpressionTerminale Element

Design Patterns : composition / interprète


24 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 12


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Utilisation de XML

document feuille de style nouveau document


XML XSL (format XML ou
autre)

25 29 janvier 2005

Réseaux et systèmes répartis C3

Syntaxe de XML

z XML possède une syntaxe héritée de celle de


SGML
z XML possède des balises
– Exemple : balise « employé » marquant la racine
d’une structure donnant des renseignements sur un
employé
z Ces balises sont généralement utilisées par
paires
– Balise ouvrante et balise fermante
z <employé> et </employé>

26 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 13


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Syntaxe de XML (2)

z XML possède des éléments


– Les éléments sont entourés (nichés) entre une balise
ouvrante et une balise fermante
z Les éléments vides peuvent être décrits avec
une version abrégée
– <balise></balise > peut s’écrire < balise />
z Un document XML n’a qu’un seul élément
racine

27 29 janvier 2005

Réseaux et systèmes répartis C3

Syntaxe de XML (3)

z Les éléments XML peuvent posséder des


attributs
– Les attributs sont une alternative à la représentation
d’information, ils évitent de créer des sous-éléments
– <balise nom="balise" position="24"> … </balise>

28 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 14


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Syntaxe de XML (4)

z En XML, il est possible d’inclure des chaînes de


caractères qui ne seront pas interprétées :
character data
– <![CDATA[ … ]]>
– Ceci permet de mettre des fausses balises
z <![CDATA[ <texte> du texte </texte> ]]> et la balise texte
n’est pas interprétée
z <![CDATA[ </texte> du texte <texte> ]]> marche aussi !
– Une utilisation intéressante concerne l’inclusion de
pièces jointes dont le codage peut faire apparaître
des signes < ou >

29 29 janvier 2005

Réseaux et systèmes répartis C3

Syntaxe de XML (5)

z XML possède des entités


– Les entités permettent de représenter des caractères
qui seront interprétés par la suite pour affichage
(typiquement)
– Les entités de base de XML sont les mêmes que
celles de SGML
z < peut s’écrire &lt; (lower than)
z > peut s ’écrire &gt; (greater than)
z & peut s’écrire &amp;

30 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 15


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Syntaxe de XML (6)

z Entités XML (suite)


– Tous les caractères européens sont représentés
z À peut s’écrire &Agrave;
z É peut s’écrire &Eacute;
z ü peut s’écrire &uuml;
z ç peut s’écrire &ccedil;
– Les entités XML peuvent également être décrites
avec leur code Unicode
z Exemple &#38;
z Le # marque l’appartenance aux entités de codage Unicode

31 29 janvier 2005

Réseaux et systèmes répartis C3

Grammaires pour XML

z Une grammaire d’un document définit


l’ensemble des possibilités pour écrire un
document respectant cette grammaire
– Tient compte du fait que certains éléments sont
optionnels et d’autres obligatoires
– Tient compte du fait que d’autres peuvent avoir
plusieurs occurrences
z Il est possible de considérer ces grammaires
comme l’équivalent d’un schéma de base de
données relationnelle

32 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 16


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

DTD

z Une DTD, Document Type Definition, est une


manière d’exprimer une grammaire
z XML a repris les DTD qui ont tout d’abord été
mises en œuvre par SGML, sous la même
forme
z La définition d’une DTD correspond à une suite
d’expressions régulières du type de celles
utilisées dans les compilateurs pour la définition
de la syntaxe d’un langage (BNF)
33 29 janvier 2005

Réseaux et systèmes répartis C3

DTD (2)

z Un ELEMENT permet de définir un élément de


la grammaire
– Son nom correspond à la valeur qui se trouve dans
les balises ouvrantes et fermantes
– Sa définition correspond aux différents sous-
éléments ou données finales qui le constituent
z #PCDATA est un indicateur signalant qu’un
élément ne contiendra que du texte (attention :
aucune balise ne devra se trouver dans ce texte
sauf si CDATA est utilisé) (P = Parsed)

34 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 17


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

DTD (3)

z La liste des attributs doit également être définie,


comme les éléments :
– CDATA représente ici une chaîne de caractères
– ID représente une clé
– IDREF représente une clé externe (foreign key)
– IDREFS une liste d’IDREF
– Il est possible de faire des énumérations
– Etc.

35 29 janvier 2005

Réseaux et systèmes répartis C3

DTD (4)

z Les attributs peuvent également avoir une


quantification
– #REQUIRED lorsqu’il est obligatoire
– #IMPLIED lorsqu’il est optionnel
– Une valeur si on peut en donner une par défaut
– valeur #FIXED si elle est fixe

36 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 18


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

DTD (5)

z Cet ensemble de règles de rédaction d’une DTD


permet de produire des documents assez peu
lisibles
z Plus la DTD est grosse (ce qui est vite le cas…)
et plus l’utilisation d’outils graphiques d’édition
de DTD devient nécessaire
– La remarque est aussi vraie pour les gros documents
XML

37 29 janvier 2005

Réseaux et systèmes répartis C3

DTD (6)

<!DOCTYPE company [
<!ELEMENT company ((person|product)*)>
<!ELEMENT person (ssn, name, office, phone?)>
<!ELEMENT ssn (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT office (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT product (pid, name, description?)>
<!ELEMENT pid (#PCDATA)>
<!ELEMENT description (#PCDATA)>
]>

38 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 19


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

DTD (7)

<!ELEMENT person (ssn, name, office, phone?)>


<!ATTLIS person age CDATA #REQUIRED
id ID #REQUIRED
manager IDREF #REQUIRED
manages IDREFS #REQUIRED
>

39 29 janvier 2005

Réseaux et systèmes répartis C3

DTD (8)

<company>
<person age=“25”
id=“p29432”
manager=“p48293”
manages=“p34982 p423234”>
<ssn>123456789</ssn>
<name>John SMITH</name>
<office>B432</office>
<phone>1234</phone>
</person>

40 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 20


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

DTD (9)


<person age=“25”
id=“p48293”
manager=“p48293”
manages=“p29432 p24168”>
<ssn>987654321</ssn>
<name>Jim BO</name>
<office>B123</office>
</person>
<product> ... </product>
...
</company>
41 29 janvier 2005

Réseaux et systèmes répartis C3

Schémas

z Les DTD posent un problème, grave : elles ne


sont pas écrites en XML
z De ce fait, il faut développer des outils ad-hoc
pour les traiter
– Typiquement : le programme de lecture de fichiers
XML avec un programme de lecture de fichiers de
DTD
z La différence de représentation impose un effort
de développement inutile

42 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 21


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Schémas (2)

z Les schémas XML sont une généralisation des


DTD
z Ils utilisent une syntaxe XML
– Ce sont donc des documents XML et il est possible
de les générer, comme d’autres
z Les schémas XML sont assez complexes mais
offrent de nombreuses possibilités

43 29 janvier 2005

Réseaux et systèmes répartis C3

Schémas (3)

z Dans un schéma, il est possible d’utiliser la


notion d’élément, comme dans une DTD, ou la
notion de type, plus proche des langages de
programmation
z Il est également possible de créer des types
dérivés
– Il ne s’agit pas encore de programmation orientée
objet mais l’idée s’y trouve

44 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 22


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Schémas (4)

z Les types simples sont nombreux :


– Types algorithmiques : String, Token, Byte,
unsignedByte, Integer, positiveInteger, Int (qui est
plus large que Integer), unsignedInt, Long, Short, …
– Types spécifiques : Time, dateTime, Duration, Date
– Types techniques : ID, IDREF, IDREFS, listes,
unions, restrictions

45 29 janvier 2005

Réseaux et systèmes répartis C3

Schémas (5)

z Les types peuvent aussi avoir des attributs,


baptisés facettes
– Longueur (min, max)
– Nombre d’occurrences (min et max, inclusifs ou
exclusifs)
– Spécification du nombre de chiffres d’un nombre (!) :
totalDigits, et éventuellement du nombre de chiffres
après la virgule : fractionDigits
z Equivalent du PIC XXX en COBOL

46 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 23


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Namespaces

z Les langages orientés objet, comme C++ ou


Java, possèdent une notion d’espace de
nommage
– Cela permet de regrouper des classes en rapport les
unes avec les autres dans un même espace
lorsqu’elles ont des relations fortes
– Le principe peut se retrouver en UML avec la notion
de package, qui est la transposition du namespace
avec une notion de bloc insécable

47 29 janvier 2005

Réseaux et systèmes répartis C3

Namespaces (2)

z Un aspect très important des espaces de


nommage dans les langages orientés objet est
qu’ils permettent de définir plusieurs classes
possédant le même nom
– Cela ne pose pas de problème au système tant que
les classes sont dans des espaces de nommage
différents
– Il est possible d’utiliser deux classes de nom
identique dans des packages différents dans un
même programme (cela est impossible en C)

48 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 24


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Namespaces (3)

z XML a de forte relations avec le monde orienté


objet et il est possible d’y retrouver
explicitement la notion d’espace de nommage
– XML namespace
z Un namespace sert cependant de manière
détournée par rapport au monde orienté objet

49 29 janvier 2005

Réseaux et systèmes répartis C3

Namespaces (4)

z L’avantage des espaces de nommage en XML


est qu’il devient possible d’utiliser plusieurs
grammaires dans un même document
– Un document XML peut donc avoir une grammaire
principale pendant que certains îlots du document
contiennent des informations respectant une autre
grammaire

50 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 25


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Namespaces (5)

z Un document avec un seul schéma ou DTD est


supposé être dans l’unique espace de
nommage
z L’usage de plusieurs espaces de nommage doit
se faire en précisant au préalable la liste des
espaces de nommage qui seront utilisés
z À chaque espace de nommage est associé une
URL permettant l’identification de l’espace

51 29 janvier 2005

Réseaux et systèmes répartis C3

Namespaces (6)

z Il est également possible d’inclure des espaces


de nommage dans les DTD
– Une grammaire peut alors explicitement faire appel à
une autre grammaire !
– Cette possibilité était annoncée dans le courrier
d’annonce de l’apparition de XML
z Les espaces de nommage peuvent également
être utilisés avec XSL, lors des étapes de
transformation d’un document XML
– Et c’est normal puisque les espaces de nommage
sont autorisés en XML !
52 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 26


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Namespaces (7)

z Un espace de nommage doit être identifié dans


l’entête du document
z Un espace de nommage est signalé par xmlns
z Il est possible d’identifier tous les espaces de
nommage ou d’en considérer un comme
l’espace de nommage par défaut

53 29 janvier 2005

Réseaux et systèmes répartis C3

Namespaces (8)

<H:html xmlns:H="http://www.w3c.org/TR/REC-html40"
xmlns:mine="file:/DTD/lamienne.dtd">
<H:head>
<H:title>un titre HTML</H:title>
</H:head>
<H:body>
<H:p>un paragraphe HTML</H:p>
<mine:p>ma définition du paragraphe</mine:p>
</H:body>
</H:html>

54 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 27


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Namespaces (9)

<html xmlns="http://www.w3c.org/TR/REC-html40"
xmlns:mine="file:/DTD/lamienne.dtd">
<head>
<title>un titre HTML</title>
</head>
<body>
<p>un paragraphe HTML</p>
<mine:p>ma définition du paragraphe</mine:p>
</body>
</html>
L’espace de nommage HTML est devenu l’espace par défaut
55 29 janvier 2005

Réseaux et systèmes répartis C3

XPath

z XPath est un langage très largement utilisé en


XML
– Entre autres dans XSL
– Également avec XPointer, XML Query, etc
z Il fournit une syntaxe et une sémantique
permettant d’identifier les adresses (les
emplacements de parties de documents XML)
z XPath sert à naviguer dans un document XML
et se rapproche ainsi des langages de
navigation dans les BDD hiérarchiques
56 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 28


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XPath (2)

z XPath fournit également un ensemble


d’opérateurs de base permettant de réaliser des
opérations sur les chaînes de caractères, les
nombres ou les variables booléennes
z XPath utilise une notation compacte plutôt
qu’une notation façon XML qui est elle basée
sur les éléments

57 29 janvier 2005

Réseaux et systèmes répartis C3

XPath (3)

z XPath permet d’opérer sur la structure logique


et abstraite du document, donc ses nœuds,
plutôt que sur la syntaxe
z XPath utilise une notation ressemblant à celle
des URL pour définir une position
– XPath voit un document comme un arbre et est donc
proche de DOM de ce point de vue
z XPath permet de traiter des documents utilisant
les namespaces

58 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 29


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XPath (4)

z XPath considère le document comme un arbre qui


possèderait 7 types de nœuds différents
– Nœud racine (1 seul !)
– Nœuds élément (1 pour chaque élément)
– Nœuds attributs
– Nœuds namespace
– Nœuds processing instructions
– Nœuds commentaires
– Nœuds texte
z La lecture de l’arbre se fait de haut en bas et de gauche
à droite
59 29 janvier 2005

Réseaux et systèmes répartis C3

XPath (5)

<doc>
<?CR?>
<para>Un <em>premier</em> paragraphe</para>
<para>Un autre paragraphe</para>
</doc>
root

<doc>

<?pi?> <para> <para>

text <em> text text

text
60 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 30


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XPath (6)

z Les chemins d’emplacement de XPath


permettent de spécifier un ensemble de nœuds
– Offrent plus de possibilités qu’avec les ID et IDREF
z Il existe des chemins relatifs et des chemins
absolus
– De la même manière que sur un système de gestion
de fichiers hiérarchiques
z Un chemin est composé d’un ou plusieurs pas
et de prédicats optionnels

61 29 janvier 2005

Réseaux et systèmes répartis C3

XPath (7)
z Exemples de chemins
– child::para : tous les éléments enfants de type para du nœud
courant
– child::* : tous les éléments enfants du nœud courant
– attribute::nom : sélection d’un attribut du nœud courant dont
l’identifiant est nom
– ancestor::div : sélection de tous les ancêtres du nœud courant
de type div
– self::para : sélection du nœud courant s’il est de type para
– child::*/child::para : sélection de tous les petits fils de type
para
– / : la racine du document

62 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 31


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XPath (8)

z XPath possède des axes de parcours


– ancestor, ancestor-or-self
– attribute (version abrégée = ‘@’ )
– child (axe de parcours par défaut, peut être omis)
– descendant, descendant-or-self (abrégé = ‘//’ )
– following
– preceding
– following-sibling, preceding-sibling
– namespace
– parent (version abrégée = ‘..’ )
– self (version abrégée = ‘.’ )

63 29 janvier 2005

Réseaux et systèmes répartis C3

XPath (9)

z Le terme sibling représente la fratrie


– Un nœud peut avoir de 0 à n frères et il est possible
de faire un parcours sur le nœud suivant ou sur le
nœud précédent
z preceding-sibling et following-sibling pour les
frères (noeuds voisins)
z preceding et following pour tout ce qui est avant
ou après dans la hiérarchie du document

64 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 32


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XPath (10)

nœud courant = chapitre


para ou child::para

<chapitre>
<titre>…<titre>
<para>…</para>
<note>
<para>… </para>
</note>
<para>…</para>
</chapitre>
65 29 janvier 2005

Réseaux et systèmes répartis C3

XPath (11)

nœud courant = chapitre


.//para ou descendant-or-self::node()/child::para

<chapitre>
<titre>…<titre>
<para>…</para>
<note>
<para>… </para>
</note>
<para>…</para>
</chapitre>
66 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 33


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XPath (12)

z XPath réalise des évaluations d’expressions


z Les expressions peuvent traiter quatre types de
données
– Des ensemble de nœuds
– Des valeurs booléennes
– Des nombres (valeurs réelles : float)
– Des chaînes de caractères
z L’évaluation se fait en fonction du contexte

67 29 janvier 2005

Réseaux et systèmes répartis C3

XPath (13)

z Les expressions d’évaluation sont réalisées


grâce à des opérateurs standards
– Booléens : and, or, =, !=, <, >, <=, >=
– Nombres : +, -, *, /, %
z Il existe également des opérations
– Filtres : ils sont mentionnés entre [ et ]
– position() : teste la position du nœud dans une liste
– last() donne le dernier frère d’une liste
– count() calcule le nombre d’éléments d’une liste
– id() vérifie l’identifiant d’un nœud

68 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 34


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XPath (14)

z Opérations (suite)
– start-with( string, pattern ), ex : ( . , "Téléco" )
– contains( string, pattern )
– string-after
– string-before
– substring
– normalize : enlève les blancs inutiles
– translate : remplace une chaîne par une autre
– concat
– string-length

69 29 janvier 2005

Réseaux et systèmes répartis C3

XPath (15)

z Opérations (suite)
– number() : transforme une chaîne de caractères en
un nombre
– round()
– floor()
– ceiling()
– mod()
– name()

70 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 35


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XPath (16)

z Exemples XPath
– /bib/book[ @price < "60" ]
– /bib/book[ author/@age < "25" ]
– /bib//*[ name() = book ]
z Équivalent à /bib//book !

71 29 janvier 2005

Réseaux et systèmes répartis C3

XSL

z Que peut-on faire avec XPath ?


– Des tas de choses !
z Entre autres, XPath sert à indiquer des chemins
pour traiter des éléments d’un document
– Le traitement se fait avec XSL

72 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 36


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (2)

z XSL est le descendant de DSSSL qui était


associé à SGML
z XSL permet de réaliser des transformations de
documents et permet ainsi de séparer le
contenu (le document XML) de la présentation
(le résultat de la transformation effectuée à
l’aide de XSL)
z XSL = eXtensible Stylesheet Language

73 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (3)

z XSL est une spécification de documents


z Un fichier XSL est aussi un fichier XML
– XSL est une grammaire utilisant XML
z La transformation utilisant des documents XSL
est appelée XSLT, XSL Transformation

74 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 37


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (4)

z XSL contient 34 éléments différents


z Seuls 3 suffisent à faire une feuille de style
– stylesheet
– template
– apply-templates
z XSL utilise deux autres normes, celles
présentées précédemment : les espaces de
nommage et XPath

75 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (5)

z La balise stylesheet permet de définir les


caractéristiques de la feuille de style
z Elle permet également de donner la liste des
espaces de nommage utilisés dans la feuille de
style
z Remarque : il est possible d’associer une ou
plusieurs feuilles de style à un document XML
avec xml-stylesheet, à placer en entête du
document XML
76 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 38


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (6)

<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:mine="file:/DTD/lamienne.dtd">

</xsl:stylesheet>

z Attributs possibles
– default-space="preserve"
– indent-result="no"

77 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (7)

z Il est possible de ne pas écrire beaucoup de


XSL pour avoir une feuille de style
– Il est possible d’importer une ou plusieurs feuilles de
style pour en faire une nouvelle

<xsl:stylesheet …>
<import href="tables.xsl" />
<import href="composants.xsl" />

</xsl:stylesheet>

78 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 39


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (8)

z Une feuille de style est composée de blocs


indépendants au niveau de la rédaction
– Plus il y en a et plus on traite de cas
– Les cas non traités ne sont pas pris en compte par la
transformation
z Les cas mentionnés sont des templates
– On recherche une expression particulière

79 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (9)

<xsl:template match="para">

</xsl:template>

z L’attribut match de l’élément template spécifie


une expression XPath
– C’est donc grâce à ces templates que les nœuds de
l’arbre sont parcourus et traités si le cas est prévu

80 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 40


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (10)

z Les différents templates d’une feuille de style


sont définis en tenant compte de chemin XPath
z Ces chemins XPath sont choisi en fonction de la
structure interne du document et donc de la
grammaire du document
z Donc, un feuille de style « normale » est liée à
une grammaire. Si une même feuille de style est
appliquée à un autre document ne possédant
pas la même grammaire, les résultats ne seront
pas du tout équivalent
81 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (11)

z À l’intérieur d’un template, on donne le texte qui


sera le résultat de la transformation
z Il est par exemple possible d’écrire des
fragments de HTML qui seront mis dans le
résultat de la transformation
z Il est également possible de lancer un
traitement des autres nœuds se situant en
dessous du nœud courant

82 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 41


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (12)

<xsl:template match="para">

<xsl:apply-templates />

</xsl:stylesheet>
z Apply-templates lance le traitement récursif du
document
– La feuille de style est parcourue à nouveau dans sa
totalité pour trouver des templates qui traitent les
enfants

83 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (13)

z Il est également possible de raffiner les


templates avec des modes de traitement
<xsl:template match="chapitre/titre">

<xsl:apply-templates select="//chapitre/titre" mode="h3"/>

</xsl:stylesheet>
<xsl:template match="chapitre/titre" mode="h3">

</xsl:stylesheet>
84 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 42


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (14)

z Il est enfin possible de faire des appels avec


des paramètres (call-template)
<xsl:template match="nom">

<xsl:call-template name="nom2">
<xsl:with-param name="salut">Bonjour <xsl-with-param>
</xsl:call-template>

</xsl:stylesheet>
<xsl:template name="nom2">
<xsl:value-of select="$salut" />
85
</xsl:stylesheet>
29 janvier 2005

Réseaux et systèmes répartis C3

XSL (15)

z XSL ne se limite pas à cela !


– Il est possible d’effectuer des opérations sur le
nœuds courant et même sur ses enfants en étant
dans un template

86 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 43


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (16)

<xsl:template match="para">

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

</xsl:stylesheet>
z value-of permet de convertir le nom du nœud
courant (select sur point) en une chaîne de
caractères qui est alors affichée dans le reste
du texte issu de la transformation

87 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (17)

z Le paramètre du select peut en fait être


une expression XPath
– Toute l’arborescence est donc disponible
z Remarque : le select peut également
servir lors de l’appel de apply-templates :
– <xsl:apply-templates select="name[ @type='title']" />
z Remarque supplémentaire : dans un même
template, il est possible d’appeler plusieurs fois
apply-templates, même sans paramètres !

88 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 44


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (18)

z Il est possible de demander à ce qu’un tri soit


effectué lors de la transformation
(éventuellement avec un select en plus)
<xsl:template match="para">

<xsl:apply-templates>
<xsl:sort />
</xsl:apply-templates>

</xsl:stylesheet>

89 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (19)

z Le sort possède des attributs


– order, peut être ascending ou descending
– data-type, peut être text (défaut) ou number
– case-order, peut être lower-first ou upper-first

90 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 45


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (20)

z Il est possible de demander à ce qu’une


numérotation automatique soit réalisée
– xsl:number
z Les attributs de number permettent de faire
varier le niveau de numérotation (un ou
plusieurs niveaux), de spécifier un format de
numérotation (chiffres ou lettres) ou encore de
grouper les éléments numérotés par paquets
d’un certain nombre

91 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (21)

z Il est également possible de créer des variables


qui pourront être utilisées pendant le traitement
– <xsl:variable name="couleur">
rouge
<xsl:variable>

<xsl:value-of select="$couleur" />

92 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 46


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (22)

z Il est possible de créer des éléments dans le


document, les éléments pouvant être rattachés
à un espace de nommage
– <xsl:element namespace="html" name="h3">
<xsl:apply-templates />
</xsl:element>
– Peut s’utiliser en conjonction avec les variables ou
les paramètres : puissant !

93 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (23)

z Il est possible d’effectuer des copies complètes


d’une partie de l’arborescence
– xsl:copy-of
xsl:copy
– Permet de remplacer la création de template où se
trouve une série d’instructions xsl:value-of
– xsl:copy est plus flexible que xsl:copy-of

94 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 47


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (24)

z Dans les fonctions de copie, il est possible


d’utiliser un ensemble d’attributs qui servent,
d’une certaine manière, de paramètres
<xsl:attribute-set name="couleurs">
<xsl:attribute name="standard">blue</xsl:attribute>
<xsl:attribute name="important">red</xsl:attribute>
</xsl:attribute-set>

<xsl:copy use-attribute-set name="couleurs">
<xsl:apply-templates />
</xsl:copy>
95 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (25)

z Il est également possible de réaliser des tests


z xsl:if permet de réaliser un test simple
z Si le test est vérifié, le contenu de l’élément est
évalué

<xsl:if test="position() = 1">


<xsl:attribute name="style">color: red</xsl:attribute>
</xsl:if>

96 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 48


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (26)

z Les tests peuvent également être réalisés en


bloc avec xsl:choose
z Cela ressemble beaucoup à un switch C, C++
ou Java !

<xsl:choose>
<xsl:when test="position() = 1">red</xsl:when>
<xsl:when test="position() = 2">blue</xsl:when>
<xsl:otherwise>green</xsl:otherwise>
</xsl:choose>

97 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (27)

z Il est même possible de faire des itérations


z Cela permet de réaliser des sortes de templates
sans avoir à spécifier toutes les navigations
XPath ou tous les paramètres

<xsl:for-each select="nom">
Bonjour <xsl:value-of select="." /> !
</xsl:for-each>

98 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 49


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (28)

z Après cette présentation de XSL, vous avez


peut-être l’impression que XSL est une sorte de
langage de programmation
– Et c’est vrai !
z DSSSL, l’ancêtre, est une norme de
transformation inspirée du langage de
programmation fonctionnel Scheme
– XSL est donc une sorte de langage de
programmation fonctionnelle

99 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (29)

z Un exemple de XSL produisant du HTML :


<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<HTML>
<BODY>
<table border="2" bgcolor="yellow">
<xsl:for-each select="records/purchaseOrder">
<tr>
<td><xsl:value-of select="shipTo/name"/></td>
<td><xsl:value-of select="comment"/></td>
100 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 50


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

XSL (30)

<xsl:for-each select="items/item">
<td><xsl:value-of select="price"/></td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
101 29 janvier 2005

Réseaux et systèmes répartis C3

FO

z FO, Formatting Objects, est une sous partie de


XSL
z FO est en fait une étape supplémentaire à XSL
– Des instructions FO doivent être générées lors de la
transformation XSL
– Une transformation supplémentaire est alors opérée

102 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 51


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

FO (2)

z FO permet de récupérer des documents selon


des formats d’impression paginés
– PDF
– PostScript
– PCL
– MIF (Adobe FrameMaker, Maker Interchange
Format) (FrameMaker est l’ancien traitement de texte
de NeXT)
– SVG
– Java AWT (!)
103 29 janvier 2005

Réseaux et systèmes répartis C3

FO (3)

z Cette étape est rendue nécessaire car les


standards comme SGML ou XML ou encore
HTML ne possèdent pas la notion de page telle
qu’on la trouve dans les documents papier
z Une page HTML n’est pas limité en taille
comme une page papier
– Utilisez l’ascenseur de votre navigateur pour vous en
convaincre !

104 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 52


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

FO (4)

z Pour réintroduire la notion de page, FO est


nécessaire
z FO permet de spécifier tout un ensemble de
directives concernant l’impression de
documents papier comme
– Les marges
– La dimension d’une feuille
– etc

105 29 janvier 2005

Réseaux et systèmes répartis C3

FO (5)

z À l’heure actuelle, aucune solution Microsoft


n’est disponible pour FO
z Il existe un produit qui s’interface avec COM
mais il est écrit … en Java
z La mise à disposition d’outil FO pourrait
amoindrir le juteux marché des logiciels de
production de rapports

106 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 53


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Exemples avec Java

z L’exemple suivant (Stylizer.java) est extrait du


tutorial du Java Web Services Developer Pack
– Le tutorial de JWSDP de la semaine dernière
présente aussi l’utilisation de JAXP, Java API for
XML Processing
z Ce premier exemple permet de réaliser une
transformation d’un document avec XML et XSL
– Transformation de glossar.xml avec glossar.xsl
– Pas d’utilisation de glossar.dtd (d’autres exemples du
tutorial permettent de l’exploiter : allez voir...)
107 29 janvier 2005

Réseaux et systèmes répartis C3

Exemples avec Java (2)

z Un deuxième exemple permet de transorfmer


un Docbook en HTML ou en PDF
– Stylizer est suffisant pour la transformation en HTML
– Il est insuffisant pour une transformation finale en
PDF
– Besoin d’utiliser FOP, un package FO écrit en Java
destiné au départ à produire du PDF (bien d’autres
formats depuis)

108 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 54


CAMOS CNAM 29 janvier 2005

Réseaux et systèmes répartis C3

Questions / Remarques

109 29 janvier 2005

Informatique, réseaux, systèmes, multimédia / Réseaux et systèmes répartis C3 55

S-ar putea să vă placă și