Vous êtes sur la page 1sur 196

Les technologies xml

BEN LAHMAR El habib

XML ?
2

XML (Extensible Markup Language) est un mtalangage de description et dchange de donnes entre applications. Ce langage permet de sparer le contenu, la structure et la prsentation dun document. XML a lambition de devenir le format dchange universel de donnes intra et interentreprises. Comme HTML, XML est un langage qui prsente linformation encadre par des balises. XML est un langage pour mmoriser des donnes structures dans un fichier texte. XML est une famille de technologies. XML est libre de droits, indpendant des platesformes.

Les domaines dapplication de XML

dveloppement de systmes dinformation ; graphisme et multimdia ; administration et gestion de contenu ; communication, synthse et reconnaissance vocale ; marketing One-to-One et personnalisation ; gestion lectronique de documents et portail dinformation dentreprises ; intgration dapplications dentreprise ; commerce lectronique et EDI.

Les principaux facteurs de dveloppement de XML


les faiblesses du langage HTML ; la faible diffusion de SGML (lanctre de XML qui sest avr trop complexe mettre en oeuvre) ; les limites du modle client-serveur : protocoles non portables, extensions propritaires, donnes non compatibles ; le dveloppement du modle 3 couches : li internet et aux architectures web ; les besoins dun mtalangage : extensible tous les besoins, offrant un format dchanges de donnes entre applications, sparant la description et la prsentation, tolrant les changements de contenu et indpendant de la plate-forme.

Remarques
5

XML fournit une syntaxe, pas de smantique a priori Les balises n'ont pas de prsentation ou de signification dfinie par le langage mais elles peuvent bien sr avoir un sens pour les applications
<nom>jean</nom> <matire>jean</matire>

XML ne dfinit que la structure et le contenu d'un document, pas son comportement ni son traitement

Remarques
6

Dveloppement et promotion par W3C


Industriels: tous les poids lourds, notamment Oracle, IBM, Compaq, Xerox, Microsoft, etc.. Laboratoires de recherche: MIT (reprsentant les US), INRIA (Europe), universit Keio au Japon (Asie)

Sur Internet: publication et change dinformation Simplicit


Production Lecture, analyse syntaxique, comprhension

Les mmes donnes (avec diffrentes feuilles de style) disponibles pour de nombreux supports (pc, pda) et de nombreuses applications

XML est un univers impitoyable Les standards naissent et meurent


7

XML: donnes [DTD],Xschema: typage

Les documents doivent tre bien forms mais le typage ( valide ) nest pas obligatoire

XSL/T, [Xquery]: transformation et requtes XPATH: chemins XLink: liens entre documents DOM: Application programing interface SOAP: distributed computing [WebDAV]: distributed authoring and versioning Plus des tas dautres et de logiciels

XML : successeur de HTML


8

HTML Hypertext Markup Language.

Un ensemble prdfini et limit de balises surtout de prsentation, dfini par une norme (HTML 2.0, 3.2, 4.0).

Smantiques des balises :


h1,..,h6, title, address, donnent des indications structurelles center,hr,b,i,big,small, ne servent qu' dcrire une mise en page

Tim Berners-Lee (le crateur de HTML) a luimme prch pour un successeur. Pourquoi?

Des mta donnes + Surtout de la prsentation

Exemple de html

Problmes lis HTML


10

L'affichage d'un document est fortement dpendant de l'interprtation qu'en fait le navigateur Il est ncessaire de disposer de plusieurs versions du document en fonction du mdia de rendu L'indexation de documents ne peut se faire que sur la partie textuelle Document et pas donne

SGML et le balisage structurel


11

Il fallait passer dun de balisage de prsentation un BALISAGE STRUCTUREL XML comme SGML dont il est un descendant utilisent un balisage structurel SGML : Standardized Generalized Markup Language

Trs utilis en documentation technique Airbus: la doc doit tre prcise et non ambigu SGML + vocabulaire contrl: ontologie

Ce sont des mtalangages de description et dchange de documents structurs

Mtalangage: possibilit de dfinir des dialectes dans des domaines particuliers

XML contre SGML


12

SGML norme ISO 8879:1986 Trs utilis dans l'industrie pour de grandes documentations techniques. Trop complexe pour une utilisation grand public ou dans des domaines moins exigeants sur la prcision SGML: trop de trucs compliqus et inutiles XML utilise 10% de SGML pour reprsenter efficacement la plupart des besoins des applications

Exemple de document
13

En-tte Objet Salutation

WindStar 2000 Les rosires en buget AB562 Saint Ptaouchnoque Tel: 012133564 Fax: 879765426

Logo

Saint Ptaouchnoque, Le 30 nivose 2004

Date

Editions Duschmol, 12 rue Schmurz YT123 Rapis

Destinataire

Objet: ben quoi?

Formule de politesse

Monsieur, Bla bla bli, bli blo bla, kkkk vhlg vckjdhklbg fdskjbvhv feje slc ifehfe fhckh c jeflccj n khef iheznf jkvbc lkhdklvn v

Corps

Veuillez agrer patati patata vachement sincres. signature

Pied de page

Signature
Pied de page

Reprsentation XML
<lettre> 14 <entete> <logo loc="logo-graph.vml"/> <adresse> &abrev-adresse; </adresse> </entete> <destinataire> <nom> Mr Schnock </nom> <adresse> <rue> rue des glantiers </rue> <ville> Saint Glin </ville> </adresse> </destinataire> <objet> bla bla </objet> <date> 30 Nivose 2004 </date> <salutation> Monsieur, </salutation>

<corps> <para> Ici le premier paragraphe </para> <para> et l le deuxime </para> </corps>
</lettre>

Points importants
15

La reprsentation de cette lettre en XML ne comporte aucune indication sur sa mise en page
Les aspects graphiques ou typographiques sont absentes du source XML Ces aspects seront dfinis par l'intermdiaire d'une feuille de style

Une feuille de style est un ensemble de rgles pour spcifier la ralisation concrte d'un document sur un mdia particulier

Principe de fonctionnement des feuilles de style


<lettre> <entete> 16 . . . </entete>
<corps> . . . </corps> </lettre>
WindStar 2000 Les rosires en buget AB562 Saint Ptaouchnoque

Si lettre alors enfants Si entete alors Si corps alors enfants para Si para alors
Police new roman, taille 12, dcaler premire ligne

Si alors

Tel: 012133564 Fax: 879765426

Saint Ptaouchnoque, Le 30 nivose 2004

Editions Duschmol, 12 rue Schmurz YT123 Rapis Objet: ben quoi? Monsieur, Bla bla bli, bli blo bla, kkkk vhlg vckjdhklbg fdskjbvhv feje slc ifehfe fhckh c jeflccj n khef iheznf jkvbc lkhdklvn v Veuillez agrer patati patata vachement sincres. signature

Pied de page

Exemples de dialectes XML


17

XHTML MathML SVG XSL SOAP WSDL XML Schema

XHTML = HTML avec un syntaxe XML


18

Reformulation de HTML en tant qu'application XML


En

gros: on ferme ce quon a ouvert

Intrt
Syntaxe

plus rigoureuse Importation de fragments de documents d'autres domaines nominaux Possibilit d'utiliser les applications XML standard

MathML : les maths en XML


19

Permettre l'change et le traitement d'expressions mathmatiques sur le Web Insertion aise d'expressions mathmatiques dans des documents HTML ou XML Communication d'expressions entre applications au plan smantique

SVG : le graphique 2D en XML


20

Langage de description de graphiques 2D Graphiques vectoriels Interactifs et dynamiques


Animations

dclaratives Programmation ECMAScript

Recommandation du 04/09/2001

SOAP : calcul distribu en schangeant du XML


21

Simple Object Access Protocol SOAP 1.1 : soumission au W3C du 08/05/2000 Protocole d'change de donnes entre applications distantes Adapt pour tre utilis au-dessus du protocole HTTP (mthode POST) Structure d'un message SOAP

Enveloppe Envelope; Entte Header; Corps Body

Exemple
22

<evp:Envelope xmlns:evp='http://schemas.xmlsoap.org/soap/envelope/' evp:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'> <evp:Header> <t:Transaction xmlns:t='http://stock.org/registry/updPriceList/'> evp:mustUnderstand='1'> 5 </t:Transaction> </evp:Header> <evp:Body> <m:GetLastTradePrice xmlns:'http://stock.org/registry/updPriceList'> <symbol>DEF</symbol> <company>DEF Corp</company> </m:GetLastTradePrice> </evp:Body> </evp:envelop>

23

Avantages de XML

Echange et partage dinformation


24

En XML, une communaut d'auteurs invente librement les balises qui lui paraissent utiles pour reprsenter les informations quils comptent changer ou partager Exemple: diverses faons de reprsenter une date

<date> 5 Janvier 2000 </date> <date> <a>2000</a><m>01</m><j>05</j> </date> <date format='ISO-8601'> 2000-01-05 </date>

Exemples

Commandes en commerce lectronique ou toute transaction Publication et recherche dinformation dans un domaine industriel comme lindustrie des biotechnologies

Interoprabilit des outils de traitement


25

Existence doutils pour donnes XML

Parseurs, diteurs, browser

Consquences:
Un

serveur de documents XML est susceptible de rpondre l'ensemble des besoins d'une organisation. Un seul diteur permet de traiter l'ensemble des donnes d'une organisation.

Modularit et rutilisation
26

Chaque utilisateur est libre de dfinir ses propres structures de document Il peut aussi se conformer des structures types, appeles DTD Chaque communaut peut ainsi proposer des structures normalises La conformit une DTD permet l'automatisation des traitements et assure une possibilit de contrle de validit

Accs des sources d'information htrognes


27

L'interrogation et l'change de donnes entre systmes d'information htrognes est souvent complexe XML contribue rsoudre ce problme

format d'change normalis indpendant de toute plateforme

L'indexation et l'interrogation de grosses bases documentaires

informations structurelles en plus d'informations textuelles.

28

Zoom sur le langage

29

Structure dun document XML

Tout document XML se compose : dun prologue, dont la prsence est facultative mais conseille. Il contiendra un certain nombre de dclarations. dun arbre dlments. Il forme le contenu du document. de commentaires et dinstructions de traitement, dont la prsence est facultative. Ils pourront, moyennant certaines restrictions, apparatre aussi bien dans le prologue que dans larbre dlments.

Le prologue
30

Il peut contenir une dclaration XML, des instructions de traitement et une dclaration de type de document. Dclaration XML Syntaxe : <?xml version=1.0 encoding=ISO-8859-1 standalone=yes ?> Elle indique au programme qui va traiter le document : la version du langage XML utilise le codage de caractres utilis dans le document ; par dfaut ISO 10646 mais le programme doit pouvoir traiter aussi lUTF-8 et lUTF-16. lexistence ou non de dclarations extrieures au document qui doivent tre prise en compte pour le traitement de celui-ci. La dclaration est facultative mais fortement conseille. Chacune des trois informations est elle aussi facultative mais si elles apparaissent cest obligatoirement dans cet ordre.

Instructions de traitement
31

Elles sont facultatives et ne font pas, strictement parler, partie du document. Leur contenu est simplement transmis une application en vue de dclencher certains traitements.

32

Dclaration de type de document


La dclaration de type de document indique, le cas chant, la DTD laquelle se conforme le document. Elle permet aussi de spcifier certaines dclarations propres au document. Syntaxe : <!DOCTYPE nom_type [ dclarations ]>

nom_type est un nom choisi arbitrairement et qui sert indiquer la porte des dclarations dfinies entre crochets. Elles seront valides pour tout document dont llment racine sera du type nom_type.

La DTD peut aussi tre dfinie dans un fichier externe.

Syntaxe : <!DOCTYPE nom_type SYSTEM "fichier.dtd"[dclarations ]>

Notons que la dclaration de type de document : est obligatoire pour les documents valides (se conformant une DTD). est obligatoire lorsque lauteur veut inclure des dclarations spcifique aux documents, que ceux ci se conforment ou non une DTD.

DTD - Exemple
33

Larbre dlment
34

un ou plusieurs autres lments. On parlera dlment pre et dlment fils. En fait la partie essentielle dun document XML sera toujours forme dune hirarchie dlments qui dnote la smantique de son contenu : cest larbre dlment. Dans un document XML il nexiste quun et un seul lment pre, llment racine, qui contient tous les autres.

Exemple
35

Les commentaires
36

Des commentaires peuvent tre insrs dans les documents. Ils sont encadrs pas les marques de dbut <!-- et de fin --> de commentaire. Syntaxe : <!-- commentaire --> Le corps du commentaire peut contenir nimporte quel caractre lexception de la chane --. On ne peut donc pas inclure un commentaire dans un autre. Le commentaire ne peut pas non plus tre inclus lintrieur dune balise.

Elments et attributs
37

Les balises Tout document XML doit comporter une racine. En fait, la premire paire de balises d'un document XML sera considr comme la balise de racine [root]. Par exemple :
<racine> ... suite du document XML ... </racine>

Si on ose faire un lien avec le Html, votre lment racine tait <body> ... </body>. Tous les autres lments seront imbriqus entre ces balises de racine. Par exemple :
<parents> <enfants> <petits_enfants> ... </petits_enfants> </enfants> </parents>

Balises (suit)
38

Les balises doivent tre correctement imbriques. Chaque lment dun document XML se compose dune balise douverture, dun contenu dlment et dune balise de fermeture. Syntaxe : <nom>contenu_lment</nom> La balise douverture dun lment peut inclure des attributs sous la forme de paires nom=valeur Les valeurs des attributs doivent toujours tre mises entre des guillemets. Exemple : <personne id="394563-M">Martin</personne> Notons quune syntaxe simplifie existe pour les lments vides : <nom/> <personne id="394563-M" /> Il est interdit en XML de faire chevaucher des balises, c'est--dire d'avoir une succession de balises du type: <balise1> <balise2> </balise1> </balise2>

Quelques rgles importantes


39

le nom des lments est compos de caractres alphanumriques, de lunderscore _, du signe moins ou du point .. Le caractre deux-points : est autoris mais il a une signification particulire. De plus le premier caractre doit obligatoirement tre alphabtique ou un underscore. ce nom ne doit pas contenir despacement ou de fin de ligne. aucun nom ne peut commencer par la chane xml (casse indiffrente). la valeur dun attribut est une chane de caractre encadrs par des apostrophes ' ou par des guillemets ". Elle ne doit pas contenir les caractres ^%&.

Quelques rgles importantes


40

XML fait une distinction entre majuscule et minuscule, ce qui fait que les balises <Nom>, <nom> et <NOM> ne sont pas quivalentes. Bien que pouvant tre arbitrairement choisis, les noms dlments sont en gnral en rapport avec le contenu quils encadrent

Les attributs
41

Il ny a pas vraiment de rgle quant au choix entre un document utilisant uniquement des lments sans attribut et un autre utilisant des lments avec attributs.
<liste> <personne prenom=Anne nom=Martin> <adresse rue=rue de Mandur ville=Rouen /> </personne> <personne prenom=Gaelle nom=Martin> <adresse rue=rue de Mandur ville=Rouen /> </personne> </liste>

<liste> <personne> <prenom>Anne</prenom> <nom>Martin</nom> <adresse> <rue>rue de Mandur</rue> <ville>Rouen</ville> </adresse> </personne>
</liste>

Contenu dun lment


42

Un lment peut contenir dautres lments, des donnes, des rfrences des entits, des sections littrales et des instructions de traitement. Un lment peut avoir un contenu rcursif, cest dire quil peut contenir une instance du mme type dlment que lui-mme. Les donnes des lments peuvent contenir tous les caractres autoriss sauf le et commercial & et le infrieur <.

43

Rfrence des caractres ou des idogrammes

Un auteur peut vouloir insrer un caractre non disponible sur sa plate-forme ou son clavier. Il utilise pour cela le numro du caractre dans les tables ISO 10646 ou Unicode. Ce numro sera prcd des caractres &# puis suivi dun point virgule ;. Le numro peut tre donn en dcimal ou en hexadcimal (dans ce cas on le prfixe par &#x). Par exemple &#38; ou &#x2267; correspond au caractre et commercial &.

44

Rfrence des entits prdfinies

Il existe quelques entits prdfinies afin de faciliter leur insertion dans un document XML. Il sagit notamment des caractres <, >, &, et " &lt; < &gt; > &amp; & &apos; &quot; "

45

Rfrence des entits internes

Il est galement possible de dfinir ses propres entits et dy faire rfrence dans le contenu des lments. Cette dfinition se fait dans la partie dclaration du DOCTYPE :
<!DOCTYPE nom_type [ <!ENTITY nom_entit "valeur_remplacement"> ]>

Exemple :
<!DOCTYPE test [ <!ENTITY asi "D&eacute;partement ASI"> ]>

<p>&asi;</p> qui donne : Dpartement ASI

Section littrale
46

Lorsque lon dsire insrer une chane contenant beaucoup de caractres spciaux il est prfrable dutiliser le marqueur de section littrale <![CDATA []]> Exemple :
<p>Entit&eacute; litt&eacute;rale <![CDATA [<dep>D&eacute;partement ASI</dep>]]></p>

qui donne : Entit littrale <dep>D&eacute;partement ASI</dep>

Entits et notations
47

Le mcanisme des entits ne se limite pas aux lments prdfinis ou aux lments dfinis en interne. On peut distinguer les entits selon quelle sont internes ou externes au document qui les utilise. On peut aussi distinguer les entits qui contiennent un document ou un fragment de document XML bien form, de celle qui contiennent des donnes non XML (images, graphiques, sons,). Notons que des entits contenant des donnes non XML seront obligatoirement des entits

48

Entits externes adresses par URL


Ce type dentit permet, par exemple, de fragmenter un document XML en plusieurs sous-documents. Ceux-ci peuvent alors tre utiliss dans plusieurs documents distincts. Syntaxe : <!ENTITY nom SYSTEM url> On utilise le mot-clef SYSTEM suivi de l'URL o se trouve l'entit. Cette URL peut tre donne en relatif ou en absolu. Les URL passes en absolu peuvent faire appel l'un des protocoles rseaux utiliss couramment sur l'Internet (http://, ftp://, ...). Comme pour toute entit, les rfrences externes sont remplaces par leurs valeurs (le contenu des fichiers) lors du traitement du document.

49

Entits externes adresses par URL Exemple


<?xml version="1.0"> <!DOCTYPE carnet_adresse [ <!ENTITY usager "Emile Ezime"> <!ENTITY personne-1 SYSTEM "http://www.myhome.fr/anne_martin.xml"> <!ENTITY personne-2 SYSTEM "./gaelle_martin.xml"> ]> <carnet_adresse> <titre>Carnet d'adresse de &usager;</titre> &personne-1; &personne-2; </carnet_adresse>

50

Entits externes adresses par URL Quelques rgles :


les entits externes doivent elles-mmes tre des fichiers XML bien forms. les entits externes n'ont pas contenir de prologue, celui-ci tant prsent dans le document principal. Il est cependant possible d'inclure une dclaration XML simplifie si celle-ci contient des caractres dans un codage diffrent de celui utilis dans le document principal. les entits externes ne doivent pas contenir une redfinition d'un lment du document principal. les dclarations d'entits internes au document principal sont valides dans les sous documents qu'il utilise.

51

Entits externes adresses par identificateur public (FPI)


Avertissement : les applications XML ne sont pas toutes capables de traiter les identificateurs publics. Aussi nous ne ferons qu'un bref passage sur ce point. Syntaxe : <!ENTITY nom PUBLIC fpi url> Un identificateur public permet une indirection entre le nom symbolique donn l'entit et son URL. Si l'application n'est pas capable de rsoudre l'identificateur public pour trouver la ressource de l'entit, le paramtre url de la dclaration d'lment est utilis. Exemple : <!ENTITY Rec-XML PUBLIC "-//W3//DOCUMENT Recommandation open The recommandation for XML 1.0//EN" "http://www.w3.org/TR/1998/RECxml- 9980210.xml"> Cette indirection est physiquement ralise par un fichier catalogue (une sorte de DNS). Si l'URL venait changer il suffirait de ne changer qu'une ligne dans le fichier catalogue. Avantage :

pas d'URL absolu donc pas de difficult de mise jour. recherche sur serveur le plus proche possible ou le plus facile d'accs

Entits non XML


52

La dclaration d'entits non XML ncessite de dclarer pralablement le format de l'entit et d'associer ce format une application capable de le traiter. En XML une telle dclaration se nomme une NOTATION. Syntaxe : <!NOTATION nom_format SYSTEM url> On utilise le mot-clef NDATA dans l'entit afin de prciser le format du fichier. Ensuite la rfrence une telle entit se fait pas l'intermdiaire d'un attribut en utilisant le nom symbolique de l'entit.

53

Entits non XML Exemple

Attention : ne jamais rfrencer une telle entit en utilisant la construction &nom_entit;

Document bien form


54

Le XML est un langage strict. le document doit imprativement respecter la syntaxe du XML. On dira alors que le document est "bien form" [Well-formed]. Seuls les documents "bien forms" seront affichs correctement. A la moindre erreur de syntaxe, le document ne sera pas ou ne sera que partiellement affich.

Qu'appelle-t-on un analyseur ?
55

La rcupration des donnes encapsules dans le document ncessite un outil appel analyseur syntaxique (en anglais parser), permettant de parcourir le document et d'en extraire les informations qu'il contient On distingue deux types de parseurs XML :
les parseurs validants (validating) permettant de vrifier qu'un document XML est conforme sa DTD les parseurs non validants (non-validating) se contentant de vrifier que le document XML est bien form (c'est--dire respectant la syntaxe XML de base)

Analyseurs XML
56

Les analyseurs XML sont galement diviss selon l'approche qu'ils utilisent pour traiter le document. On distingue actuellement deux types d'approches :

Les API utilisant une approche hirarchique : les analyseurs utilisant cette technique construisent une structure hirarchique contenant des objets reprsentant les lments du document, et dont les mthodes permettent d'accder aux proprits. La principale API utilisant cette approche est DOM (Document Object Model) Les API bass sur un mode vnementiel permettent de ragir des vnements (comme le dbut d'un lment, la fin d'un lment) et de renvoyer le rsultat l'application utilisant cette API. SAX (Simple API for XML est la principale interface utilisant l'aspect vnementiel

57

DTD : Document Type Definition

Introductionn
58

XML permet d'utiliser un fichier afin de vrifier qu'un document XML est conforme une syntaxe donne. La norme XML dfinit ainsi une dfinition de document type appele DTD (Document Type Definition), c'est-dire une grammaire permettant de vrifier la conformit du document XML. La norme XML n'impose pas l'utilisation d'une DTD pour un document XML, mais elle impose par contre le respect exact des rgles de base de la norme XML. Ainsi on parlera de

document valide pour un document XML comportant une DTD document bien form pour un document XML ne comportant pas de DTD mais rpondant aux rgles de base du XML

intrts
59

Les DTD prsentent plusieurs intrts :


elles

sont rutilisables, ce qui vous vite de rcrire une DTD lorsque vous voulez composer plusieurs documents valides se conformant une mme structure. elles sont rutilisables ! De fait vous pouvez trouver des DTD libres de droit sur Internet et composer des documents se conformant une structure valide par toute une communaut dutilisateur. elles sont composables partir dautres DTD (moyennent quelques petites rgles respecter).

DTD interne et externe


60

Une DTD peut tre dfinie de 2 faons:

sous forme interne, c'est--dire en incluant la grammaire au sein mme du document

Un document valide peut inclure directement sa DTD dans sa dclaration de type. L'attribut standalone doit prendre la valeur yes, indiquant ainsi que le document est complet et qu'aucune dclaration externe ne doit tre recherche.
Exemple : <?xml version="1.0" standalone="yes" ?> <!DOCTYPE carte [ <!ELEMENT carte (#PCDATA)> ]> <carte>As de pique</carte>

DTD interne et externe


61

sous forme externe,soit en appelant un fichier contenant la grammaire partir d'un fichier local ou bien en y accdant par son URL Le document peut aussi faire rfrence une DTD stocke dans une entit externe. L'avantage est alors la rutilisation possible de la DTD. Exemple :
Fichier jeu.xml <?xml version="1.0" standalone="no" ?> <!DOCTYPE carte SYSTEM "carte.dtd"> <carte>As de pique</carte>

Fichier carte.dtd
<?xml version="1.0" encoding="ISO8859-1" ?> <!ELEMENT carte (#PCDATA)> L'attribut standalone doit prendre la valeur no afin d'indiquer au processeur que des dclarations ou des parties de dclaration sont contenues dans des entits externes. La dclaration XML dans le fichier carte.dtd n'est pas indispensable mais elle permet d'indiquer la version d'XML utilise.

DTD en partie externe


62

Il est possible de dfinir certaines dclarations en interne et de faire en mme temps appel une DTD externe. Les dclarations locales forment la partie interne et les dclarations contenues dans la DTD forment la partie externe. Exemple :
Fichier jeu.xml <?xml version="1.0" standalone="no" ?> <!DOCTYPE carte SYSTEM "carte.dtd" [ <!ATTLIST carte force (forte | moyenne | faible)> ]> <carte force="forte">As de pique</carte> Fichier carte.dtd <?xml version="1.0" encoding="ISO8859-1" ?> <!ELEMENT carte (#PCDATA)>

Contenu d'une DTD


63

Une DTD a pour objectif de spcifier quatre types d'information:


1) Quels sont les lments permis dans les documents 2) Quel contenu peuvent possder les lments 3) Quels attributs peuvent tre associs quels lments 4) Quelles sont les valeurs permises pour les attributs

Les deux premiers types d'information s'effectuent l'aide des dclarations d'lments, alors que les deux autres s'effectuent l'aide des dclarations

Contenu d'une DTD


64

Ainsi Une DTD peut contenir :


des

dclarations d'entits gnrales des dclarations d'entits paramtres des dclarations de notations des dclarations d'lments des dclarations de listes d'attributs des commentaires

Les dclarations d'lments


65

Pour pouvoir crer un document XML il est utile dans un premier temps de dfinir les lments pouvant tre utiliss, ou plus exactement les informations que l'on dsire utiliser. Ainsi pour dfinir un lment on utilisera la syntaxe suivante:
Type prdfini

ANY EMPTY #PCDATA

Description L'lment peut contenir tout type de donnes L'lment ne contient pas de donnes spcifiques L'lment doit contenir une chane de caractre

<! ELEMENT Nom Modle > Le paramtre modle reprsente soit un type de donne prdfini, soit une rgle d'utilisation de l'lment. Les types prdfinis utilisables sont les suivants:

Les dclarations d'lments


66

Ainsi un lment nomm Nom contenant un type #PCDATA sera dclar de la faon suivante dans la DTD:
<!

ELEMENT Nom (#PCDATA) >

Le mot cl #PCDATA doit ncessairement tre crit entre parenthse, au risque sinon d'obtenir une erreur du parseur ! Cet lment pourra tre crit de la faon suivante dans le document XML:
<Nom>Pillou</Nom

Les dclarations d'lments


67

D'autre part il est possible de dfinir des rgles d'utilisation, c'est--dire les lments XML qu'un lment peut ou doit contenir. Cette syntaxe se fait l'aide de notations spcifiques dont voici un rcapitulatif:
Oprateur + * ? | , () Signification L'lment doit tre prsent au minimum une fois L'lment peut tre prsent plusieurs fois (ou aucune) L'lment peut tre optionnellement prsent L'lment A ou B peuvent tre prsents (pas les deux) L'lment A doit tre prsent et suivi de l'lment B A+ A* A? A|B A,B Exemple

Les parenthses permettent de regrouper des lments afin (A,B)+ de leur appliquer les autres oprateurs

EXEMPLE
68

Ainsi on peut crer la dclaration suivante dans la DTD:


<!ELEMENT personne (nom,prenom,telephone),email? > <!ELEMENT nom (#PCDATA) > <!ELEMENT prenom (#PCDATA) > <!ELEMENT telephone (#PCDATA) > <!ELEMENT email (#PCDATA) > Cette dclaration pourra donc donner un document XML du style: <personne> <nom>Pillou</nom> <prenom>Jean-Francois</prenom> <telephone>555-123456</telephone> <email>webmaster@commentcamarche.net</email> </personne> ou bien <personne><nom>Pillou</nom><prenom>Jeff</prenom> <telephone>555-542136</telephone></personne>

Dclarer des attributs


69

Il est possible d'ajouter des proprits un lment particulier en lui affectant un attribut, c'est--dire une paire cl/valeur. Ainsi avec XML la syntaxe pour dfinir un attribut est la suivante:
<! ATTLIST Elment Attribut Type > Type reprsente le type de donne de l'attribut, il en existe trois: littral: il permet d'affecter une chane de caractres un attribut. Pour dclarer un tel type il faut utiliser le mot cl CDATA l'numration: cela permet de dfinir une liste de valeurs possibles pour un attribut donn, afin de limiter le choix de l'utilisateur. La syntaxe de ce type d'attribut est: <! ATTLIST Elment Attribut (Valeur1 | Valeur2 | ... ) > Pour dfinir une valeur par dfaut il suffit de faire suivre l'numration par la valeur dsire entre guillemets : <! ATTLIST Elment Attribut (Valeur1 | Valeur2 ) "valeur par dfaut" > atomique: il permet de dfinir un identifiant unique pour chaque lment grce au mot cl ID.

Dclarer des attributs


70

Enfin chacun de ces types d'attributs peut-tre suivi d'un mot cl particulier permettant de spcifier le niveau de ncessit de l'attribut:

#IMPLIED signifie que l'attribut est optionnel, c'est--dire non obligatoire #REQUIRED signifie que l'attribut est obligatoire #FIXED signifie que l'attribut sera affect d'une valeur par dfaut s'il n'est pas dfini. Il doit tre immdiatement suivi de la valeur entre guillemets

Ainsi on pourra avoir une dclaration d'attribut du type:


<! ATTLIST disque IDdisk ID #REQUIRED type(K7|MiniDisc|Vinyl)"CD" > Ce qui signifie que l'on affecte l'lment disque deux attributs IDdisk et type. Le premier attribut est de type atomique, il s'agit d'un identifiant unique obligatoire. L'lment type peut tre soit K7, MiniDisc, Vinyl ou CD, sachant que ce dernier sera affect par dfaut...

Dclarer des notations


71

XML permet de dfinir une application par dfaut lancer pour ouvrir des documents non XML encapsuls dans le code XML. Il est ainsi possible d'associer les images JPG au programme Paint Shop Pro (psp.exe) grce la syntaxe suivante : <! NOTATION jpg SYSTEM "psp.exe">

Dclarer des entits


72

XML permet de crer des entits, c'est--dire de dclarer un groupe d'lments sous un nom afin de ne pas avoir rcrire ces derniers plusieurs fois dans la DTD s'ils se rptent, dans le mme esprit que les macros dans les diteurs de texte. D'autre part, l'utilisation d'entits dans un document XML permet :

une meilleure lisibilit un contrle accru sur le contenu une plus grande facilit de mise jour les entits gnrales les entits paramtres les entits caractres

On distingue plusieurs types d'entits dans XML :


73

XPath

Introduction
74

Historique: XPath est le rsultat dun effort dhomognisation de la syntaxe et de la smantique de fonctions communes XSLT, XPointer, etc. Le langage XPATH ore un moyen d'identifier un ensemble de nuds dans un document XML. Toutes les applications ayant besoin de reprer un fragment de document XML peuvent utiliser ce langage. XPath nest pas un langage XML (utilise une autre syntaxe) Sa syntaxe lmentaire ressemble l'expression

Arbre XML
75 <?xml version="1.0" encoding="ISO-8859-1" ?> <Livres> <Livre> <Titre> XML </Titre> <auteur> <nom> pop </nom> <prnom> koko </prnom> <Prix> 150dh </prix> <Edition> Lolo </Edition> </Livre> <Livre> ----</Livres>
Livres

Livre Titre Nom pop Prix Edition auteur Prnom Prix Titre

Livre auteur Nom Edition Prnom

XML

koko

150 dh

lolo

/Livres /livre[1] /auteur /nom /text()

Les expressions XPath


76

Le langage XPath dsigne un ou plusieurs nuds en exprimant des chemins dans un arbre (chemins de localisation) Une expression XPath peut s'exprimer : relativement, vis vis d'un nud contextuel, ie: prendre pour origine un nud du document, dit nud contextuel.
Exemple

auteur/nom/text()

d'une manire absolue, et prendre son origine la racine du document, note / .


Exemple: /Livres/Livre/Titre/Text()

Le rsultat d'une expression XPath peut tre : un ensemble de nuds (ou un nud seul) une chane de caractres un nombre un boolen

Syntaxe XPath
77

Un chemin est constitu dune suite dtapes (ou pas), spares par des / . La forme gnrale est donc : [/]pas1/pas2/.../pasn

Chaque Pas de localisation est caractris par trois composants :


1.

laxe qui dfinit le sens de parcours des nuds partir du nud contexte un test de nud ou le filtre qui indique le type des nuds qui seront retenus dans lvaluation du chemin ; le (ou les) prdicat(s) qui exprime(nt) des proprits que doivent satisfaire les nuds retenus lissue du filtrage pour tre finalement inclus dans le rsultat.

2.

3.

La forme gnrale dune tape est donc : axe::filtre[prdicat1][prdicat2]

Axes
78

Un axe slectionne, dans larbre du document et partir du nud contexte, lensemble des nuds qui peuvent tre atteints en suivant une certaine direction. Un axe XPath recouvre alors les deux notions suivantes :
1.

2.

un sous-ensemble des nuds de larbre relatif au nud contexte ; lordre de parcours de ces nuds partir du nud contexte (avant ou arrire)

Axes
79

On distingue 13 axes :
Axe child attribute parent descendant Description Les fils du nud contexte Les attributs du nud contexte Le pre du noeud contexte Tous les descendants du noeud contexte

ancestor

Tous les anctres du noeud contexte

Axes
80

Axe
self

Description
Le noeud contexte lui-mme

preceding-sibling following-sibling preceding document following

Tous les frres gauches du nud contexte Tous les frres droits du noeud contexte Les noeuds prcdant le noeud contexte dans lordre de parcours du

Les noeuds suivant le noeud contexte dans lordre de parcours du document

Axes
81

Axe
descendant-or-self contexte ancestor-or-self nud le nud contexte namespace

Description
Les descendants du nud contexte, et le nud lui-mme Les anctres du contexte, et lui-mme Sapplique aux espace de noms

82

Abrviation
. .. //

Description
quivalent self::node() quivalent parent::node() quivalent /descendant-orself::node()/

.// or@att

quivalent self::node()/descendantself::node()/ quivalent attribute::att

Test de nud ou le filtre


83

Un filtre permet dliminer un certain nombre de nuds parmi ceux slectionns par un axe. Il existe essentiellement deux faons de filtrer les nuds

Un filtre a lune des formes suivantes :

n o n est un nom : slectionne les nuds de laxe de mme sorte que la sorte principale de laxe et dont le nom tendu est gal au nom tendu de n ; *: slectionne les nuds de laxe de mme sorte que la sorte principale de laxe ; node(): slectionne tout nud de laxe ; text(): slectionne tout nud de laxe de type texte ; comment(): slectionne tout nud de laxe de type commentaire ; Processing-instruction(n): slectionne tout nud de laxe

Prdicats
84

Un prdicat est une expression boolenne constitue dun ou plusieurs tests, composs avec les connecteurs logiques habituels and et or Exemple dune expression XPath avec prdicat. /Livres/Livre/descendant::text()[position()=1]

Types XPath
85

XPath connat quatre types de donnes : les numriques (-12.3) les chanes de caractres dlimites par des guillemets (") ou des apostrophes () les boolens : true et false ; un sous-ensemble, sans doublon, des nuds du document source.

1. 2.

3. 4.

Les fonctions XPath


86

Les fonctions fn:last(), fn:position(), fn:count(), fn:number(), fn:sum(), fn:round() fn:floor() fn:ceiling(), fn:abs() retournent des nombres fn:last() retourne lordinal du dernier frre ;

fn:position() retourne lordinal du nud courant parmi ses frres ;


fn:count(noeuds) retourne le nombre de nuds dans lensemble noeuds.

Les fonctions XPath


87

fn:number(objet) convertit objet en nombre ; fn:sum(noeuds) retourne la somme des valeurs des noeuds de nuds converties en nombres ; fn:round(nombre), fn:floor(nombre), fn:ceiling(nombre) arrondissent les nombres ; fn:abs(nombre) retourne la valeur absolue.

Les fonctions XPath


88

Les fonctions

fn:name(), fn:local-name(), fn:namespace-uri(), fn:string(), fn:concat(), fn:substring(), fn:substring-before(), fn:substring-after() retournent des chanes de caractres.

fn:name(noeud) retourne le nom complet du noeud


fn:local-name(noeud) retourne le nom local du noeud fn:namespace-uri(noeud) retourne lespace de noms du noeud

Les fonctions XPath


89

fn:string(objet) convertit objet en chane de caractres ; fn:concat(chane+) concatne les chanes de caractres fn:substring-before(chane, chane), fn:substring-after(chaine, chane ), retournent des sous-chanes de caractres ; fn:substring(chane,nombre,nombre?), retourne une sous-chane de caractres.

Les fonctions XPath


90

Les fonctions fn:starts-with(), fn:contains(), fn:boolean(), fn:not(), fn:true(), fn:false(), fn:lang() retournent des booleennes.

fn:starts-with(chane,chane) verifie si la premie`re chane commence par la seconde ; fn:contains(chane,chane) verifie si la premie`re chane contient la seconde ;

Les fonctions XPath


91

fn:boolean(objet) convertit objet en boolen : un nombre est vrai sil est non-nul, un ensemble de noeuds ou une chane de caractres sont vrais sil sont non-vides;

fn:not(boolen) inverse la valeur de boolen ;


fn:true() (resp. fn:false()) retournent toujours vrai (resp. faux) ; fn:lang(langue) verifie si la langue courante est langue.

Les fonctions XPath


92

La fonction fn:id("toto") retourne le nud qui a comme identifiant unique toto. La fonction fn:id(noeuds) retourne les noeuds qui ont des identifiants uniques parmi les valeurs textuelles de tous les noeuds de noeuds. La fonction fn:id(objet) convertit dabord objet en chane de caractres, ensuite la subdivise en unites lexicales separees par des blancs, et finalement retourne tous les noeuds qui ont des identifiants uniques parmi celles-ci.

93

XSL

La manipulation de fichiers XML

Directement avec un diteur de texte

Via la programmation
deux librairies standards : DOM et SAX pour tous les langages de dveloppement Ncessite de dvelopper

Avec un fichier XML !


Utilisation des technologies XSL
94

Principe de XSL

XSL : eXtensible Stylesheet Language.


Un

standard du W3C Un langage de feuille de style XML

HTML CSS XSL


Trois composantes de XSL :
XSLT

le langage pour transformer un XML XPath pour retrouver une information dans un XML XSL-FO est un langage pour formater un 95 document XML

XPATH le langage pour trouver linformation

Une syntaxe pour dfinir une fraction dun document XML Utilise des expressions pour naviguer dans des documents XML Contient une librairie standard de fonctions Un standard W3C.
96

La terminologie XPath

Les nuds (nodes) Valeurs atomiques (Atomic values)

Relations entre nuds :


Parent Enfant Siblings : nuds qui ont le mme parent Ancestors : le parent dun nud, le parent du parent, Descendants : le fils dun nud, le fils du fils du noeud,
97

XSLT, le langage de transformation

Le principe :
Dfinit

un ensemble de nuds (parts) du document source quil fusionne avec une template Parcourt le document source. Ds quil trouve le nud, il appelle la template et produit le document rsultat

Utilisation de fonctions ddis laffichage des valeurs atomiques dun document source
98

XSLT : acteurs
99

XSL comment
quoi

XML source
partir de quoi

X Processeur XSLT

HTML PDF Texte ...

Processeur XSLT

XML rsultat

srialisateur

EXTRAIRE DES INFORMATIONS

Arbre XML
101
Livres

Livre Titre Nom pop Prix Edition auteur Prnom Prix Titre

Livre auteur Nom Edition Prnom

XML

koko

150 dh

lolo

/Livres /livre[1] /auteur /nom /text()

Extraire le texte contenu dans une balise


102

<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html><body> <p>Titre du corpus : <xsl:value-of select = "/Livres/Livre/auteur/nom"/> </p> </body> </html> </xsl:template> </xsl:stylesheet>

L'instruction xsl:value-of
103

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

Remplacer cette instruction par le texte

trouve cet endroit

La valeur de l'attribut select est une expression XPath : elle dsigne un endroit du document o aller chercher le texte.

"/Livres/livre/auteur/nom "
Document / 104

PI <?xml version=1.0?>

Element Lvres

Element Livre

Element

Element auteur

Element

Element

Text Element nom Text

Text

Text

Text

<xsl:value-of select="/corpus/text/p/name"/>
Document / 105

PI <?xml version=1.0?>

Element corpus

Bien quil y ait plusieurs p, un seul chemin satisfait entirement lexpression (un seul p a un lment name)
Element p Element p

Element text

Element p

Element p

Text Element name Text

Text

Text

Text

XPath
106

XPath est une autre recommandation, comprise dans XSLT XPath remplit la fonction de "slectionner", "pointer" sur des lments du document, tandis que XSLT organise, trie, etc. XPath retourne des nuds de l'arborescence, par exemple des balises, des attributs, des nuds textes. XPath permet de dsigner les proprits XML (nom des balises et attribut, contexte, ordre)

xsl:value-of convertit le nud en texte : supprime les balises incluses


107

Instruction XSLT

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


sur ce document XML

<p>du texte et <hi rend="italics">d'autres</hi> lments</p>


XPath retourne un nud , XSLT converti en texte :

du texte et d'autres lments

Si plusieurs lments correspondent ?


108

<xsl:value-of select= "/Livres/livre/auteur/nom>

Il y a sans doute beaucoup de qui correspondent ce chemin. XPath les retourne tous, mais la fonction xsl:value-of ne slectionne que le premier pour l'afficher.

xsl:for-each
109

Si on veut traiter tous les nuds retourns par l'expression XPath, il faut utiliser xsl:foreach

<xsl:for-each select="expression XPath"> On traite une une les valeurs trouves </xsl:for-each>

110

<xsl:for-each select="/doc/text/p"> <para><i><xsl:value-of select="." /></i></para>

</xsl:for-each>

<doc> <p>Premier <hi rend="italics">paragraphe</hi> lments</p> <p>Second paragraphe</p> <p>Troisime paragraphe</p> </doc> <para><i>Premier lments</i></para> <para><i>Second paragraphe</i></para> <para><i>Troisime paragraphe</i></para>

<xsl:for-each select="/teiCorpus.2/TEI.2/text/p"> <p><i><xsl:value-of select="." /></i></p>


111

</xsl:for-each>
Element TEI.2

Element text

Element p

Element p

Element p

Element p

Text Element name Text

Text

Text

Text

112

xsl:for-each regroupe dabord les nuds avec select, ensuite excute le contenu de la boucle autant de fois quil y a de nuds
-

L'expression XPath de select trouve quatre nuds. S'il n'y avait qu'un seul lment, ou zro, la boucle serait excute une ou zro fois. chaque passage on traite un des nuds trouvs, qui devient le "nud contexte" durant ce passage et peut tre dsign par .. Dans le contenu de la boucle, on peut se dplacer nouveau dans l'arborescence, mettre un lment littral, etc.

<?xml version="1.0"?> <xsl:stylesheet version="1.0" 113 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html><body> <p>Titre du corpus : <xsl:value-of select = "/teiCorpus.2/teiHeader/fileDesc/titleStmt/title"/> </p> <xsl:for-each select="/teiCorpus.2/TEI.2"> <p>Titre : <xsl:value-of select="teiHeader/fileDesc/titleStmt"/> </p> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>

<xsl:for-each select="/teiCorpus.2/TEI.2">
114 Element

Element TEI.2

Element TEI.2

Element TEI.2

Element TEI.2

Element

Element

A chaque itration on applique une nouvelle recherche XPath

Element title Text

Element

<xsl:value-of select="teiHeader/fileDesc/titleStmt/title"/>

Le contexte
115

Il y a toujours un nud contexte quand une instruction est excute.

Ce nud contexte peut tre dsign explicitement avec "."

C'est partir du nud contexte que sont values les expressions XPath qui ne commencent pas par "/" : select="teiHeader/fileDesc/titleStmt"

On dsigne, par rapport au nud contexte, un endroit de la sous-arborescence. On aurait pu crire aussi : select="./teiHeader/fileDesc/titleStmt"

Une utilisation de xsl:for-each : faire une table des matires du corpus


116

On ne sait pas combien de textes ni de titres de niveau 1, 2, etc., il peut y avoir Il faut traiter tous les textes, et dans chaque texte traiter les niveaux 1, dans chaque niveau 1 traiter les niveaux 2, etc. On peut donc imbriquer des boucles xsl:for-each

Une table des matires (1)


117

On extrait le titre de chaque texte dans le corpus :

<xsl:for-each select="/teiCorpus.2/TEI.2"> <p>Titre : <xsl:value-of select="teiHeader/fileDesc/titleStmt/title"/> </p> <hr /> </xsl:for-each>

Cf. ci-joint le fichier TableDesMatieres.xsl

Une table des matires (2)


118

A l'intrieur du for-each, chaque itration, le nud contexte est donc l'lment TEI.2 trait On peut lancer une nouvelle boucle, dans la premire, pour chercher les titres de niveaux 1 dans cet lment TEI.2 Lexpression XPath ne

<xsl:for-each select="/teiCorpus.2/TEI.2"> commence pas par / : text est recherch <p>Titre : parmi les enfants du <xsl:value-of select= "teiHeader/fileDesc/titleStmt/title"/> nud contexte (le TEI.2 trait) </p> <xsl:for-each select="text/body/div[@type = '1']"> <h1><xsl:value-of select="head"/></h1> </xsl:for-each> <hr /> Par rapport au nouveau contexte (div), </xsl:for-each> on dsigne le premier enfant head

119

select="text/body/div[@type = '1']"
1.

2. 3.

Ce qui est entre crochets est un prdicat : permet de filtrer les lments slectionns. @ permet de dsigner un attribut. Respecter lalternance guillemets / apostrophes

<xsl:value-of select="head"/>
Slectionne le premier lment head directement en dessous de div. On aurait pu crire aussi :

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

Une table des matires (3)


120

<xsl:for-each select="/teiCorpus.2/TEI.2"> <p>Titre : <xsl:value-of select="teiHeader/fileDesc/titleStmt/title"/></p> <xsl:for-each select="text/body/div[@type = '1']"> <h1><xsl:value-of select="./head"/></h1> <xsl:for-each select="div[@type = '2']"> <h2><xsl:value-of select="./head"/></h2> <xsl:for-each select="div[@type = '3']"> <h3><xsl:value-of select="./head"/></h3> </xsl:for-each> </xsl:for-each> </xsl:for-each>

<hr /> </xsl:for-each>

Classer avec xsl:sort


121

<xsl:for-each select="/teiCorpus.2/TEI.2"> <xsl:sort select=teiHeader/fileDesc/titleStmt/title" order="ascending"/> <!-- les textes sont classs par leur titre--> <xsl:value-of select="." /> </xsl:for-each>

Les lments sont extraits avec for-each ; avant dtre traits un un, ils sont classs par xsl:sort, ici par ordre alphanumrique ( ascending ), en fonction du contenu du select de sort (ici les textes sont donc classs par leur titre).

Ajouter un index
122

xsl:number permet de retourner un nombre correspondant l'index de l'lment dans le node set.

<xsl:for-each select="/teiCorpus.2/TEI.2"> <xsl:number value="position()" format="1. "/> <xsl:value-of select="." /> </xsl:for-each> 1. Premier titre 2. Second Titre 3. Etc

xsl:output
123

Indiquer le jeu de caractres de la sortie avec <output encoding='...'> Indiquer le type de sortie (text, XML, HTML) avec mode (Permet dajouter le prologue XML ou HTML)

<xsl:stylesheet version="1.0" xmlns:xsl= "http://www.w3.org/1999/XSL/Transform"> <xsl:output encoding="iso-8859-1" mode="html" />

EXPRESSION DE CONDITIONS OPRATION SUR LES CHANES

xsl:if
125

<xsl:if test="expression XPath"/>


Permet de filtrer ou de choisir entre diffrentes possibilits.
Si lexpression XPath de @test renvoie une valeur non nulle ou vraie, alors le contenu de xsl:if est excut.
<xsl:if test="TEI.2[1]//sourceDesc"> <p> Le premier texte du corpus a un lment sourceDesc </p> </xsl:if>

Exemples de xsl:if
126

<xsl:for-each select="name"> <xsl:if test="@type='person'"> <xsl:value-of select='.'> </xsl:if> </xsl:for-each>


Ici c'est l'quivalent de :

<xsl:for-each select="name[@type='person']"> <xsl:value-of select='.'> </xsl:for-each>

Dans le contexte de xsl:if, XPath retourne une valeur boolenne


127

Une expression XPath peut tre utilise avec xsl:if pour voir si elle retourne vrai ou faux :
Elle

retourne vrai si elle trouve des nuds. Elle retourne faux si elle ne trouve rien.

xsl:choose
128

Exprimer des alternatives avec xsl:choose. Le premier lment when dont le test est positif est excut.
<xsl:choose> <xsl:when test='expression XPath'> [action] </xsl:when> <xsl:when test='expression XPath'> [action] </xsl:when> <xsl:otherwise> [action] </xsl:otherwise> </xsl:choose>

...

<xsl:template 129

match="/">

... <xsl:for-each select="/teiCorpus.2/TEI.2"> <p>Titre : <xsl:value-of select="teiHeader/fileDesc/titleStmt/title"/></p>

<xsl:if select="teiHeader/fileDesc/sourceDesc"> <p> Source du texte : <xsl:if select=".//author"> <xsl:value-of select="." /> </xsl:if> <xsl:if select=".//docDate"> <xsl:text> (</xsl:text> <xsl:value-of select="." /> <xsl:text>), </xsl:text> <xsl:if> <xsl:if select=".//title"> <i><xsl:value-of select="title" /></i> <xsl:if> </p> </xsl:if>
...

Extraire une sous-chane


130

Dans un nud texte, on peut extraire une sous chane. ex. Extraire la date seule dans "value = "2002"" Utiliser la fonction XPath "substring-after()" qui prend deux arguments
La chane source La chane partir de laquelle slectionner le texte.

substring-after(chane, pattern)

Exemple
131

<xsl:if test="docDate"> <xsl:text> (</xsl:text> <xsl:value-of select= "substring-after(docDate, '= ')" /> <xsl:text>), </xsl:text> <xsl:if>

docDate value = "2002"

substring-after(docDate, = )

"2002"

132

XPath dans ce cas retourne une chane, et non plus un sac de nuds . En attendant XSLT 2.0 et les expressions rgulires, les fonctions chanes de XPath sont nombreuses mais rudimentaires:

Fonctions sur des chanes


133

substring-before(chane, pattern) substring-after(chane, pattern) substring(chane, index, len?) ex: substring(1234567890, 2, 5) => 23456 string-length(chane) ex: string-length(1234567890) => 10 concat(chane cible, chane ajouter) Deux fonctions sur les chanes retournent une valeur boolenne : starts-with() ex: <xsl:if test="starts-with(docDate, 'va')"> [action] </xsl:if> contains(chane tester, chane test) ex: <xsl:for-each select=docDate[contains(., 2002')]"> <!-- Slectionne les noeuds contenant 2002 -->

134

Exemple d'utilisation : on veut les lments en italique, avec la valeur IT dans l'attribut @rend. Mais @rend peut galement contenir "IT BO" ou "BO IT" pour marquer italique + gras, etc. On ne les extraira pas si on utilise select="//*[@rend = 'IT']", qui recherchera les @rend avec comme valeur exactement IT. contains permet ici de rcuprer tous les italiques Select="//*[contains(@rend, 'IT')]"

135

Ces fonctions ne sont utiles que sur des contenus trs normaliss : XSLT nest pas adapt au traitement de chanes de caractres.
Impossible

par exemple de sen servir pour extraire les phrases en se basant sur la ponctuation

QUANTIFIER

count(), la fonction magique


137

Cette fonction XPath permet de retourner le nombre de nuds trouvs dans lexpression XPath entre parenthses Permet de dnombrer tout phnomne exprim en XML

<xsl:value-of select= "count(//p[@type = 'intro'])"/> <xsl:value-of select= "count(//*[@lang = 'en'])"/> <xsl:value-of select= "count(//div/p[1]/*[@ana= 'exemple'])"/>

Utiliser des variables


138

Jusqu prsent on a systmatiquement mis le rsultat dune expression XPath dans xsl:value-of, qui affiche directement le rsultat. Mais si lon veut stocker et manipuler la valeur, pour afficher par exemple un pourcentage plutt que le chiffre brut ?

xsl:variable
139

xsl:variable permet de strocker puis de rutiliser une chane ou un fragment darbre. On cre une variable avec xsl:variable
<xsl:variable name='hello' select="hello world"/> @name pour lui donner un nom @select : calculer sa valeur (expression XPath ou texte littral)

On dsigne la valeur de la variable avec le nom prfix de $ dans une expression XPath
<xsl:value-of select="$hello"/>
Nom de la variable : Valeur de la variable :

hello Hello World

Stocker une valeur calcule


140

<xsl:variable name="nbrDiv" select="count(//div)" /> <xsl:variable name="nbrDiv1" select="count(//div[@type = '1'])" /> <xsl:variable name="nbrDiv2" select="count(//div[@type = '2'])" /> Pourcentage de section de niveau 1 : <xsl:value-of select="($nbrDiv1 * 100) div $nbrDiv" /> Pourcentage de section de niveau 2 : <xsl:value-of select="($nbrDiv1 * 100) div $nbrDiv" />

vite de recalculer plusieurs fois count(//div) Code plus lisible

Porte des variables


141

Une variable reste utilisable dans tout llment dans lequel elle a t dclare dans la feuille de style et dans les sous-lments de celui-ci. Une fois sortie de cet lment, elle est dtruite
Une variable dclare directement comme enfant de xsl:stylesheet peut tre utilise dans toute la feuille de style. Une variable dclare dans un lment (xsl:template, xsl:if, etc.) ne peut tre utilise que dans cet lment et ses sous-lments.

Quelques fonctions arithmtiques


142

sum(node set) calcule la somme de toutes les valeurs prsentes dans le node set round(numbre) arrondit number lentier le plus proche Exemple round(2.3) retourne 2

Etc.

143

Utiliser un template pour calculer les pourcentages

Problme : on rpte n fois la mme opration pour calculer des pourcentages Solution : factoriser cette opration XSLT permet de crer une sous-routine (un template) qui retourne une valeur en fonction d'arguments

<xsl:template match="/"> <xsl:variable name="nbrDiv" select="count(//div)" /> <xsl:variable name="nbrDiv1" select="count(//div[@type = '1'])" /> <xsl:variable name="nbrDiv2" select="count(//div[@type = '2'])" /> Pourcentage de section de niveau 1 : <! La formule du calcul du pourcentage est confie un template, auquel on transmet des arguments --> <xsl:call-template name="calculPourcentage"> Appel dun template <xsl:with-param name="Nbr1" select="$nbrDiv1"/> <xsl:with-param name="Nbr2" select="$nbrDiv"/> xsl:with-param permet </xsl:call-template> de transmettre les Pourcentage de section de niveau 2 : <!-- etc. --> <!-- calcul des pourcentages --> <xsl:template name="calculPourcentage"> <xsl:param name="Nbr1"/> <xsl:param name="Nbr2"/> <xsl:value-of select="($Nbr1 * 100) div $Nbr2"/> </xsl:template>
144

arguments

xsl:param permet de nommer les arguments reus

UTILISER DES TEMPLATES

146

L'intrt d'une approche "procdurale"

Nous avons vu une faon d'utiliser XSLT o l'on sait o chercher l'information extraire. Cette dmarche est adapte pour les cas o l'on fait une extraction de faible volume dans des endroits prcis de la structure. Mais

L'intrt d'une approche par templates


147

Si l'on veut, plutt qu'extraire un lment, recopier la totalit du document sauf un lment ? Ou si l'on veut extraire un grand nombre d'lments ? XML a une structure non limite : il faudrait un nombre irraliste de for-each et if Il est plus conomique dans ce cas d'indiquer ce que l'on veut enlever ou modifier que ce que l'on veut extraire.

Besoins .
148

Plutt que de dcrire des oprations, on dessine un nouvel arbre en indiquant seulement les points modifier de l'arbre existant.

Retour en arrire
149

Toutes les feuilles de style commenaient par <xsl:template match="/"> Cet lment xsl:template sert regrouper des actions faire un "moment" prcis Ce moment est dsign dans l'attribut @match @match attend une expression XPath, ici "/" indique la racine du document. Un template avec match="/" est excut en premier, puisque la racine est la premire chose que cherche le processeur.

Comment utiliser les templates ?


150

Il suffit, pour llment que lon veut traiter, de lui faire un lment template avec un @match qui lui correspond.

@match peut correspondre tout nud : lment, attribut (avec @) ou texte (avec text()). Exemple : un template qui sappliquera chaque lment titre dans le document :
<xsl:template match= titre"> ... <xsl:template>

Exemple : mettre un titre HTML chaque auteur


151

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:template match= auteur"> <h1>le titre est: <xsl:value-of select=".//titre" /> </h1> <xsl:apply-templates /> </xsl:template>

</xsl:stylesheet>

xsl:apply-templates
152

Dans l'exemple prcdent, applytemplates sert relancer l'analyse (la recherche d'un template avec un attribut match qui correspond) dans la sousarborescence du nud trait par le template Si on ne met pas apply-templates le processeur est teint , il abandonne tout ce qui est en dessous

Que fait le processeur ?


153

Aprs avoir construit une reprsentation du document, le processeur rentre dans l'arborescence. Il cherche dans la feuille de style un template qui correspond sa premire position, qui est "/" S'il n'en trouve pas, il passe aux descendants et recommence. Sil trouve un nud texte, il imprime son contenu.

Document / 154

Le processeur parcours les lments dans un ordre prvisible (les attributs d'un lment dans un ordre non prvisible)

PI <?xml version=1.0?>

Element livres

Element livre

Element titre

Element auteur

Element prix

Element edition

Text Element name Text

Text

Text

Text

155

Tant que parmi les descendants le processeur ne trouve pas de templates appliquer, il continue descendre dans lordre enfant / frre, en imprimant les nuds texte.

Si un template avec match=auteur" est dfini, le processeur lapplique, sinon il descend au nud texte, limprime, et remonte au p suivant Idem : sil nexiste pas de template pour name, passe aux nuds enfants

Element titre

Element auteur

Text Element name

156

Si un template correspond, le processeur lexcute, et ne passe aux descendants que lorsquil est explicitement relanc avec linstruction xsl:apply-templates

<xsl:template match= auteur"> <p><xsl:apply-templates /></p> </xsl:template>


Ce template est excut chaque auteur rencontr. Une balise auteur est ouverte, lanalyse reprend dans la sous-arborescence (dautres templates peuvent tre excuts), puis le auteur est ferm
Element titre Element auteur

<xsl:template match="name"> M. *** </xsl:template>

Text Element name

Toutes les balises name et leur contenu sont remplacs par M. *** .

Lenchssement
157

Dans un template, l instructions, xsl:applytemplates a un effet spcial : elle relance la recherche de templates parmi les enfants.

Quand le processeur a fini de traiter les descendants, il reprend et termine lexcution du template d'o il est parti du fait de l'instruction apply-templates

Sinon, il ne rentre pas dans la sous-arborescence. Avec les xsl:apply-template les templates sont donc "enchsss" autant de fois que ncessaire pendant l'excution. xsl:template permet de traiter les lments inclus, contrairement value-of

L'enchssement (2)
158

<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <html><body> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:template match=titre"> <item><xsl:value-of select="." /> </item> </xsl:template> </xsl:stylesheet>

1. Imprim en premier 2. Passe la descendance, alors que le template n'est pas fini. Imprime le texte contenu dans les lments sauf titre 3. Tous les titre sont traits

4. Quand la descendance est traite "remonte" de templates appelant en templates appelant et fini chacun. Cette ligne est donc imprime en tout dernier

Utilisation de xsl:apply-templates
159

On peut mettre plusieurs xsl:apply-templates dans le mme template.

<xsl:template match="/"> <html><body> <h1>1. les ref</h1> <xsl:apply-templates select="//livre"> <h1>2. les id</h1> <xsl:apply-templates select="//livre/@cat"> </body></html> </xsl:template>

apply-templates : utiliser @select


160

@select permet de prciser au processeur o reprendre la recherche de templates


<xsl:template match="/"> <sauteur> <xsl:apply-templates select=livres//auteurs//nom'/> </sauteur> </xsl:template> <xsl:template match=nom"> <item><xsl:value-of select="." /> </item> </xsl:template>
Ici on vite de recopier les header, front et back, en passant directement aux nom

Voir les deux schmas suivants

select indique o relancer l'analyse dans l'arborescence. Le processeur ne cherche pas de templates pour les 161 descendants de /, par exemple il saute par-dessus un teiHeader.
PI <?xml version=1.0?>

Document /

<xsl:template match="/"> <apply-template select =xx/xx//p'

Element corpus

Element text

Element p

Element p

Element p

Element p

Text Element name Text

Text

Text

Text

162

<xsl:template match=p">

Pour chacun des fragments dsigns par select, la recherche de templates et le parcours dans la sousarborescence reprend

Element p

Element p

Element p

Element p

Text Element name Text

Text

Text

Text

163

@select permet ici de descendre directement plus bas dans la sous-arborescence en "sautant" toute une partie. On peut aussi dsigner un endroit qui n'est pas dans la sous arborescence, voire relancer l'analyse la racine avec un select="/" qui fait boucler indfiniment. Note : par dfaut, un xsl:apply-templates contient donc un @select="node()" qui le fait slectionner ses enfants

Supprimer les balises


164

Une feuille de style contenant ce seul template recopie le document source en enlevant toutes les balises :
<xsl:template match="/"> <xsl:apply-templates /> </xsl:template>

Par dfaut, dans tous les nuds o il ne trouve pas de xsl:template qui sapplique, le processeur imprime le contenu pour les noeuds de type texte et passe aux enfants pour les autres types de nuds.

select : exemple d'utilisation


165

On veut recopier le texte du corpus sans balises, et sauter les header du corpus et des textes.
Dans ce cas de figure, la majorit du corpus est recopi, et c'est seulement un tag dont le contenu est exclure. La mthode la plus conomique consiste donc laisser le processeur recopier par dfaut, et indiquer le tag exclure.

Mthode 1
166

select permet de paramtrer le chemin du processeur pour exclure les headers


<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="teiCorpus.2"> <!-- on saute le header du corpus en passant directement aux TEI.2 --> <xsl:apply-templates select='//TEI.2'/> </xsl:template> <xsl:template match="TEI.2"> <!-- ds qu'on arrive un TEI.2, on fait sauter le header des TEI.2 en passant au texte --> <xsl:apply-templates select='text'/> </xsl:template> </xsl:stylesheet>

Mthode 2
167

Plutt que d'indiquer au processeur des chemins parcourir qui excluent les headers, on peut modifier son action par dfaut (recopier le texte) sur les nuds exclure :

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


<xsl:template match="teiHeader"> <! le template ne contient rien : ni action, ni relance du processeur avec apply-templates. Le contenu est donc abandonn --> </xsl:template> </xsl:stylesheet>

La clef : les templates par dfaut


168

Pourquoi, par dfaut, le processeurs descend dans l'arborescence et imprime les noeuds textes? Une feuille de style a deux templates par dfaut ; Ces templates sont appliqus quand le processeur ne trouve pas dans la feuille de style un template correspondant au noeud trait
Correspond la racine (/) ou (|) tout element (*). Action = avancer le processeur aux enfants (incluant lment, attribut et noeud texte : apply-template par dfaut @select=node()), et leur appliquer les templates. Correspond tout noeud texte. Action = imprimer son contenu

<xsl:template match=/ | *> <xsl:apply-templates/> </xsl:template>

<xsl:template match=text()> <xsl:value-of select=./> </xsl:template>

169

Quand plusieurs templates peuvent sappliquer


pourquoi le processeur applique
<xsl:template match="TEI.2"> et non le template par dfaut <xsl:template match="/ | *">, alors que les deux correspondent ?

Le processeur applique le template le plus spcifique. On peut utiliser cette proprit pour prvoir un cas gnral et des cas particuliers :
@match="p" : sapplique tous les p sauf... @match="p[1]" sapplique tous les ans des fratries.

Redfinir les templates par dfaut


170

On peut redfinir les templates par dfaut pour modifier le comportement du processeur. Si on ajoute
<xsl:template match="text()"> </xsl:template>

le processeur parcours toujours l'arborescence mais n'imprime plus les noeuds textes.

171

Exemple de modification des templates par dfaut

On veut extraire du corpus seulement le contenu des nuds note. Dans ce cas de figure la majorit du corpus est exclure, seulement un tag est conserver. Comme dans l'exemple prcdent on peut utiliser deux possibilits :
Indiquer

le chemin qui mne aux nuds voulus Laisser le cheminement par dfaut dans l'arborescence, mais modifier le comportement par dfaut pour ne pas recopier les nuds textes

Mthode 1
172

Laisser le comportement par dfaut, mais utiliser @select pour mener directement sur les note
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <xsl:apply-templates select="//note"> </xsl:template> </xsl:stylesheet>

Mthode 2
173

On modifie le comportement par dfaut : on laisse le cheminement dans l'arborescence, mais les nuds textes ne sont plus recopis, sauf pour le nud voulu.
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="text()"> </xsl:template> <xsl:template match="note"> <note><xsl:value-of select='.'/></note> </xsl:template> </xsl:stylesheet>

Pour rsumer (1)


174

Le processeur parcours larborescence, pilot par des templates, qui peuvent l'arrter des endroits prcis, excuter des instruction XSLT, et le relancer Quand il ne trouve pas de template appliquer, le processeur parcours l'arborescence, relanc par un template par dfaut, dans un ordre lments enfants / lments frres, et imprime le texte. A moins quun template capte le processeur dans larborescence et ne le relance pas, larbre est parcouru entirement, et tous les nuds textes sont rpliqus.

Pour rsumer (2)


175

Avec des templates on pilote le processeur :


insrant des templates des points avec match En relanant ou non avec apply-templates En slectionnant des sous arbres avec @select En utilisant ou modifiant les templates par dfaut.
En

Lensemble de ces moyens daction permet d'utiliser l'approche la plus conomique pour dcrire une transformation de larborescence source en une arborescence cible.

Exemple
176

Conversion TEI -> Hyperbase Conversion TEI -> HTML


permet

de lire le fichier l'cran avec un navigateur internet, de l'ouvrir avec Microsoft Word pour l'imprimer ou le convertir dans le format Word.

Cf. fichiers joints

GROUPER

Extraire les valeurs diffrentes


178

Comment produire une liste sans doublon des valeurs de @cat?


Avec

<xsl:for-each select="//@cat"> la liste produite peut contenir plusieurs fois la mme valeur.

Comment regrouper les nuds sur une valeur commune ?


Par

exemple partir de plusieurs tag correction (<corr resp="DC" date="12-06-2002">), les classer par correcteur sans les connatre l'avance.

Solution : xsl:key
179

xsl:key dclare une variable dans laquelle des nuds sont regroups par "clefs". xsl:key a trois attributs obligatoires :
@name

: donne un nom la variable @match : une expression XPath indiquant les nuds collecter @use : une expression XPath indiquant quelle valeur utiliser pour grouper ces nuds.

180

<xsl:key name="grouperParResp" match="//corr" use="@resp" />

On recherche les tags corr On les groupes selon la valeur de leur attribut @resp (le contexte de cette expression XPath est le nud corr)

en se <corr sic='dsaisissant' resp='DB'>dessaisissant</corr> ... <corr sic='desine' resp='DB'>dessine</corr> dj les traits ... <corr sic='l&apos;originial' resp='CF'>l'original</corr> ... <corr sic='uotre' resp='CF'>notre</corr> Clefs
DB

Nuds collects
<corr sic='dsaisissant' resp='DB'>dessaisissant</ corr>
<corr sic='l&apos;originial' resp='CF'>l'original</corr> <corr sic='desine' resp='DB'>dessine</corr>

CF

<corr sic='uotre' resp='CF'>notre</corr>

Key
181

Llment key dfinit un groupe de nud, lui attribue un nom et dfinit lexpression (la clef) qui permet de diffrencier les nuds au sein de ce groupe.

Utilisation
182

Une fois cre une variable xsl:key peut tre utilise pour obtenir les nuds associs une clef. la fonction XPath key(nom_table, clef) retourne tous les nuds associs l'entre clef dans la table nom_table

<xsl:for-each select="key(grouperParResp, 'DB')"> Texte d'origine : <xsl:value-of select="@sic"/> Texte corrig : <xsl:value-of select="."/> </xsl:for-each>
Appliqu l'exemple prcdent :

Texte Texte Texte Texte

d'origine corrig d'origine corrig

: : : :

dsaisissant dessaisissant desine dessine

Trouver les valeurs uniques


183

Avec la fonction key() on ne peut que retrouver les nuds associs une clef, on ne peut pas lister directement les clefs d'une variable xsl:key. Pour une liste de valeurs diffrentes, par exemple la liste des valeurs utilises dans @lang, il faut utiliser une mthode dtourne :

utiliser une expression qui extrait un lment de chaque groupe correspondant une clef.

Par exemple ne prendre que les lments dont l'index dans le groupe dont il fait parti est 1 Pour savoir si un nud est le mme que le premier retourn par un groupe , on peut comparer la valeur que retourne generate-id() qui retourne un identifiant unique constant pour chaque nud.

Exemple
184

<xsl:key name="langues" match="//@lang" use="."/> <xsl:for-each select="//@lang[generate-id(.)= generate-id(key(Langues', .)[1])]"> ... key(Langues', .) retourne le groupe des noeuds doublons du noeud trait. key(Langues', .)[1] retourne le premier lment du groupe generate-id retourne un identifiant unique pour un noeud. L'id du noeud contexte doit tre le mme que l'id du premier noeud du groupe des noeuds doublons. On slectionne uniquement le premier noeud de chaque groupe, donc un noeud par groupe.


185

Cette mthode peut tre utilise avec un nud diffrent entre match et use :

<xsl:key name="Langue" match="*[@lang]" use="@lang"/> <table> <tr> <td>Langues</td> <td>Nombre d'lments dans cette langue</td> </tr> <xsl:for-each select="//*[@lang and generate-id(.)= generate-id(key('Langue', @lang)[1])]"> <tr> <td><xsl:value-of select="@lang" /></td> <td><xsl:value-of select="count(key('Langue', @lang))"/> </td> </tr> </xsl:for-each> </table>

186

@use peut tre n'importe quelle expression calcule. Par exemple on peut grouper les p en fonction du nombre de notes quils contiennent
xsl:key

name="pParNote" match="//p" use="count(note)

On peut imaginer maintenant de regarder pour chaque groupe la position moyenne en dbut ou fin de texte, etc.

AJOUT DINFORMATION, EDITER LE CORPUS SOURCE

188

Jusquici XSLT tait utilis pour extraire des donnes, pas pour diter le corpus source. XSLT impose de nombreuses limites une utilisation pour ajouter de linformations : il est difficile de recopier lidentique. Ldition dun corpus avec XSLT ne peut donc se faire que sur des corpus trs normaliss.

Recopier lidentique : copy-of


189

A La diffrence de value-of, copy-of retourne la reprsentation textuelle de larborescence. xsl:copy-of ne permet pas dajouter de linformation, mais illustre les limites de la duplication identique, par exemple la perte du prolog (<!DOCTYPE...) que XSLT ne prend pas en charge
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:template match="/"> <xsl:copy-of select="." /> </xsl:template> </xsl:stylesheet>

xsl:copy
190

En utilisant rcursivement la fonction copy dans un template, on peut obtenir cette duplication et dfinir des templates pour ajouter des modifications
<xsl:template match="node() | @*"> <xsl:copy> <xsl:apply-templates select="node() | @*"/> </xsl:copy> </xsl:template>
<!-- Les templates de modification : --> <xsl:template match="xptr[not(@id)]"> <!-- on supprime les xptr sans id. --> </xsl:template>

xsl:element et xsl:attribut
191

Pour gnrer des balises et des attributs on peut utiliser les lments xsl:element et xsl:attribut qui permettent de les construire pas pas. Les deux fonctions prennent un attribut name, qui sera le nom de la balise ou de lattribut, et le texte contenu dans xsl:element et xsl:attribut deviendra le texte de llment ou la valeur cr.

Exemple 1 : dplacer un lment


192

Dans un corpus les notes sont regroupes la fin du document. Des lments ptr ont permis denregistrer lendroit des appels de note ; leur attribut @target permet de les associer la note dont lattribut @id correspond Le but est de remonter les notes, conformment aux prescription TEI, directement leur point dinsertion dans le texte et supprimer les pointeurs ptr.

193

<xsl:template match="node() | @*"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="ptr"> <xsl:variable name="id" select="@target" /> <xsl:element name="note"> <xsl:for-each select="./ancestor::text/back/note[@id=$id]/@*"> <xsl:attribute name="{name(.)}"> <xsl:value-of select="."/> </xsl:attribute> </xsl:for-each> <xsl:value-of select=".//ancestor::text/back/note[@id=$id]"/> </xsl:element> </xsl:template> <xsl:template match="note"> </xsl:template> </xsl:template> Cf. ci-joint "ajout.xsl"

CONCLUSION

Limites d'XSLT
195

Dlicat pour l'ajout d'annotation au corpus

Dlicat de contrler compltement la rcriture

Lourd et insuffisant pour la manipulation des chanes de caractre (les nuds texte)

Prvu pour la manipulation de la structure, de l'encodage plus que du contenu des nuds textes Prvoir dix fois la taille du fichier en mmoire vive.

Inutilisable avec de trs gros documents

Ces limites sont dues l'approche "arborescente" : XSLT permet de manipuler une arborescence en mmoire.

Une autre reprsentation du contenu, dite "squentielle" permet plus de prcision et nest pas limit par la taille du document, mais demande lutilisation dun langage de programmation.

Efficacit comme langage de requte


196

Deux stratgies cumuler : dominante procdurale ou dclarative. Economie et plasticit grce lutilisation de templates et templates par dfaut. Adapt lextraction dinformation, la projection de sous-corpus ou la conversion vers dautres formats. La version 2 de XSLT apportera des amliorations (expressions rgulires, typage, regroupement), sans changer cette dominante extraction , plus que dition , dans la transformation