Pièce jointe « xml-intro-2007-08-31.txt »
Téléchargement 1 XML « Extensible Markup Language »
2 ================================================================================
3
4 XML = Recommandation du W3C
5 http://www.w3.org/TR/REC-xml/
6
7 Source d'infos
8 http://www.xml.org/
9
10 Extensible dans le sens où il supporte la définition de nouvelles balises
11 Compatible avec SGML, aucun lien direct avec HTML
12 XHTML = HTML reformulé en XML
13
14 Plusieurs langages dérivés du XML: RDF, SVG, ODF, XForms, etc.
15
16 Définit la structure (contenu), aucune information de mise en page (forme)
17 Idée = transmission de contenus structurés entre applications, organisations...
18
19
20 SYNTAXE XML
21 -----------
22
23 XML est sensible à la casse
24 convention: écrire les balises en minuscule
25
26
27 ÉLÉMENT
28
29 1. chaque « élément » a une balise ouvrante et une fermante
30
31 ---
32 <bottin></bottin>
33 ---
34
35 2. les balises fermantes doivent respecter l'ordre d'apparition des balises
36 d'ouverture (pas de chevauchement)
37
38 ---
39 <bottin>
40 <nom>
41 <tel></tel>
42 </nom>
43 </bottin>
44 ---
45
46 = ok
47
48 ---
49 <bottin>
50 <nom>
51 <tel>
52 </nom>
53 </tel>
54 </bottin>
55 ---
56
57 = illégal, chevauchement de « nom » et « tel »
58
59 3. élément vide peut être écrit avec raccourci syntaxique
60
61 ---
62 <bottin></bottin>
63 ou
64 <bottin /> (raccourci syntaxique)
65 ---
66
67 4. les « attributs » d'un élément sont écrits dans la balise ouvrante
68 leurs valeurs doivent êtres encadrées par guillements (simples ou doubles)
69
70 <tel usage="residence">987-3000</tel>
71
72 plusieurs attributs sont séparés par espaces
73
74 <tel usage="residence" codePays="1">987-3000</tel>
75
76 5. valeur d'un élément (son contenu):
77
78 - texte ou
79 - autre balise ou
80 - les deux (contenu mixte)
81
82
83 COMMENTAIRES
84
85 <!-- inscire commentaire -->
86
87
88 INSTRUCTIONS DE TRAITEMENT (Processing instructions)
89
90 <? nom_application instructions ?>
91
92 (rarement utilisé)
93
94
95 INSTRUCTIONS AU PARSEUR
96
97 <! instructions >
98
99 (utilisé par DTD)
100
101
102 DOCUMENT XML
103
104 le « document » xml =
105 XML Declaration + « élément racine »
106
107
108 1. Le « XML Declaration » (première ligne de contenu)
109
110 <?xml version="1.0" encoding="ISO-8859-1" ?>
111
112 valeur par défaut d'encoding = UTF-8
113
114 2. « élément racine » DOIT exister et est unique (pas deux racines)
115
116 <bottin></bottin>
117 <bottin></bottin>
118
119 = illégal, redondance peut exister mais pas à la racine du document
120
121 ex. de document XML:
122 ---
123 <?xml version="1.0" encoding="ISO-8859-1" ?>
124 <bottin>
125 </bottin>
126 ---
127
128
129 DOCUMENT « BIEN FORMÉ »
130 -----------------------
131
132 document bien formé (well formed) =
133 se conformer à la syntaxe XML définie par W3C
134 http://www.w3.org/TR/REC-xml/
135 (une seule page web)
136
137 = structure arborescente
138 vs structure relationnelle (base de données relationnelle)
139
140 dans un élément, insère valeur (ex.: texte)
141
142 Exemple d'un document complet en XML:
143
144 ---
145 bottin.xml
146 ---
147 <?xml version="1.0" encoding="ISO-8859-1" ?>
148 <bottin>
149 <entree>
150 <nom>Zoro, Davin</nom>
151 <tel>123-4567</tel>
152 </entree>
153 <entree>
154 <nom>Thibault, Mélanie</nom>
155 <tel>987-3000</tel>
156 </entree>
157 </bottin>
158 ---
159
160
161 « self-documenting document », XML conçu pour que ce soit human readable
162
163 on peut représenter le no de tél de façon plus détaillée:
164 ---
165 <tel>
166 <usage>residence</usage>
167 <no>987-3000</no>
168 </tel>
169 ---
170
171 XML donne une autre façon de le faire, avec les « attributs »
172
173 ---
174 <tel usage="residence">987-3000</tel>
175 <tel usage="residence">987-3000</tel>
176 ---
177
178 bonne pratique d'utiliser l'attribut seulement pour « qualifier » le contenu
179 élément d'information simple qui qualifie
180
181
182 DOCUMENT « VALIDE »
183 -------------------
184
185 Un coup que la « syntaxe » est respectée (analogie = code qui compile),
186 le document peut être comparé à une « grammaire » (référence)
187 pour voir si il s'y conforme.
188
189 bien formé = vérification de la syntaxe
190 valide = vérification de la grammaire (logique)
191
192 Cette grammaire s'appelle un Schéma
193
194 3 types de Schéma: DTD, Schema, Relax NG
195
196 Le parser doit supporter un des 3 types.
197 L'ensemble des éléments d'un document = un vocabulaire
198
199
200 DTD (Document Type Declaration)
201 -------------------------------
202
203 DTD provient de SGML, permet de valider:
204 - structure
205 - valeur (mais grossièrement, ne gère pas les types,
206 valeur = text (PCDATA) ou éléments)
207
208 Syntaxe de DTD n'est pas en XML
209
210
211 DÉFINITION DE LA DTD
212
213 La DTD peut être :
214 - incorporée au document xml ou, mieux
215 - définie dans un document séparé (mieux car réutilisable par d'autres docs)
216 - définition locale (relative à l'envrionnement) ou
217 - définition publique (associée à un catalogue public)
218
219 Syntaxe générale de la définition de la DTD:
220
221 <!DOCTYPE nom-balise-racine [ contenu-de-DTD ] >
222
223 Appel de définitions externes:
224
225 Locales:
226
227 <!DOCTYPE nom-balise-racine SYSTEM "nom-fichier.dtd" >
228 où nom de fichier = URI (path)
229
230 Publiques:
231
232 <!DOCTYPE nom-balise-racine PUBLIC "-//crim//DTD-exemple//FR" >
233 un nom logique est donné et grâce à « PUBLIC »
234 le lien avec la position physique (URI) peut être fait ailleurs
235
236 Si plusieurs URI sont données, lit première, sinon prend l'autre, sinon...
237 (if else)
238
239 exemple:
240
241 <!DOCTYPE nom-balise-racine PUBLIC "-//crim//DTD-exemple//FR" "test.dtd" >
242
243 Contenu de la DTD:
244
245 La DTD contient, entre les crochets [ ], les :
246 - déclarations des éléments (nom et valeurs permises)
247 - déclarations des attributs
248 - déclarations des entités
249 - contrôles d'occurences
250
251 Attention, si une DTD externe est utilisée, commencer le contenu de celle-ci
252 directement par les déclarations des éléments, attributs, entités, etc.
253
254 NE PAS ÉCRIRE :
255 <!DOCTYPE nom-elelment-racine [
256 ...
257 ]>
258
259
260 DÉCLARATION D'UN ÉLÉMENT
261
262 <!ELEMENT nom-element (valeurs-permises)>
263
264 où nom-element :
265 - commence par une lettre
266 (reste peut avoir ".", "-", "_", ":"..., pas de contrainte longueur)
267
268 où valeurs-permises :
269 - soit le mot réservé PCDATA + # devant pour dire que = mot réservé
270 (#PCDATA): pour le texte seulement (utiliser les entités dans texte)
271 - soit EMPTY pout élément qui sera TOUJOURS vide
272 - soit ANY (pour texte ou autre éléments) (rare, trop permissif)
273 - soit le nom d'autres éléments (qui devront aussi être déclarés)
274 avec, optionnellement, des contrôles d'occurence
275
276 exemples
277
278 <!ELEMENT bottin (#PCDATA)>
279 ou
280 <!ELEMENT bottin EMPTY>
281 ou
282 <!ELEMENT bottin ANY>
283 ou
284 <!ELEMENT bottin (entree)>
285 ou
286 <!ELEMENT bottin (entree*)>
287
288
289 DÉCLARATION DES ATTRIBUTS
290
291 Les attributs modifient la signification d'un élément.
292 Dans la DTD, un attribut est déclaré par
293 - le nom de l'élément auquel il se rattache
294 - son nom (de l'attribut) (ne jamais commencer par "xml:")
295 - son type
296 - sa valeur par défaut (optionnel)
297 - contrainte de validité (optionnelle)
298
299 Déclaration d'un attribut
300
301 La déclaration d'un attribut vient après la déclaration d'un élément
302
303 <!ATTLIST nom-element nom-attribut1 type-att1 val-def-att1 contrainte-att1
304 nom-attribut2 type-att2 val-def-att2 contrainte-att2
305 etc. >
306 exemple:
307
308 <!ATTLIST tel usage (residence|travail|portable) "residence">
309 lire:
310 trois usage possible pour le numéro de téléphone,
311 par défaut = résidence
312
313 Appel d'un attribut (exemple)
314
315 <tel usage="travail">343-6630</tel>
316
317 Types possibles:
318 - CDATA (chaîne de caractères, pas PCDATA mais bien CDATA)
319 - types énumérés (donner son énumération avec « | » pour dire « ou »)
320 - NMTOKEN ou NMTOKENS (respectivement un ou plusieurs « mots »)
321
322 Contraintes de validité possibles:
323 - #REQUIRED = attribut obligatoire
324 - #IMPLIED = attribut optionnel et sans valeur par défaut
325 - #FIXED = attribut utilise toujouts valeur implicite (à déclarer)
326 = constante, rare
327
328
329 DÉCLARATION DES ENTITÉS
330
331 L'entité est une chaîne de caractères qui peut être appelée par un raccourci
332 déclaré. Utilisé pour simplifier rédaction.
333 (La chaîne de caractères pourrait être un fichier txt...)
334
335 Certaines entités sont prédéfinies, notamment pour représenter caractères
336 réservés de XML
337 http://www.w3.org/TR/REC-xml/#sec-predefined-ent
338
339 4 types d'entités:
340 générales interne, générale externe
341 paramètres interne, paramètre externe
342
343 où
344 générale = utilisées par fichier XML
345 paramètre = utilisées par DTD
346
347 Déclaration des entités générales (exemple):
348
349 <!ENTITY droits "Tous droits réservés">
350
351 Appel des entités GÉNÉRALES INTERNES (exemple):
352
353 &droits;
354
355 Déclaration des entités paramètres (exemple):
356
357 <!ENTITY % droits "Tous droits réservés">
358 (l'espace entre le « % » le nom de l'entité est important)
359
360 Appel des entités PARAMÈTRES INTERNES (exemple):
361
362 <!ENTITY % usage "usage (residence|travail|portable)" >
363 <!ELEMENT tel (#PCATA)>
364 <!ATTLIST tel %usage; >
365
366 noter l'appel = %usage; et non &usage;
367 utile de déclarer l'entité « usage »
368 si doit être utilisé plusieurs fois dans DTD
369
370 Déclaration des entités EXTERNES
371
372 même mécanisme que déclaration des DTD externes
373 (utiliser SYSTEM pour local ou
374 PUBLIC si fait référence à catalogue public)
375
376
377 CONTRÔLES D'OCCURENCES
378
379 Pour chaque élément déclaré, il est possible de
380 définir la séquence d'éléments (sous-éléments) permis.
381
382 , = ET
383 | = OU
384
385 ? = 0 ou 1 fois
386 + = 1 ou plusieurs fois
387 * = 0 ou plusieurs fois
388
389 (notations proches des patterns matching et de notation UML)
390
391 comme dans pattern matching, peut imbriquer ces contrôles d'occurences
392
393 exemples:
394
395 (a,b) = a ET b
396 (a|b) = a OU b
397 (a,b?) = a ET (b 0 ou 1 fois)
398 (a,b+) = a ET (b 1 ou plusieurs fois)
399 (a|b*) = a OU (b 0 ou plusieurs fois)
400 (a,b)* = (a ET b) 0 ou plusieurs fois (illimité)
401 (a, (b|c)) = a ET (b OU c)
402 (a, a+) = a au moins 2 fois
403
404 exemples concrets:
405
406 <!ELEMENT p (#PCDATA|emph)*>
407 <!ELEMENT div (p | liste | note)*>
408 lire: l'élément « p »
409 contient 0 ou plusieurs fois (du texte OU élément « emph »)
410 (où « emph » resterait à déclarer)
411
412 l'élément « div » contient 0 ou plusieurs fois (l'élément « p » OU
413 l'élément « liste » OU l'élément « note »)
414 (où les éléments « liste » et « note » resteraient à déclarer)
415
416 <!ELEMENT bottin (entree*) >
417 lire: « bottin » a 0 ou plusieurs « entree »
418
419 <!ELEMENT entree (nom, tel+) >
420 lire: « entree » a un « nom » ET un ou plusieurs « tel »
421
422
423 Exemple d'un document XML valide car respecte sa DTD INTERNE
424
425 ---
426 bottin.xml
427 ---
428 <?xml version="1.0" encoding="ISO-8859-1" ?>
429 <!DOCTYPE bottin [
430 <!ELEMENT bottin (entree)*>
431 <!ELEMENT entree (nom, tel+)>
432 <!ELEMENT nom (#PCDATA)>
433 <!ELEMENT tel (#PCDATA)>
434 <!ATTLIST tel usage (residence|travail|portable) "residence">
435 ]>
436 <bottin>
437 <entree>
438 <nom>Zoro, Davin</nom>
439 <tel usage="residence">123-4567</tel>
440 </entree>
441 <entree>
442 <nom>Thibault, Mélanie</nom>
443 <tel usage="travail">987-3000</tel>
444 </entree>
445 </bottin>
446 ---
447
448
449 Exemple d'un document XML valide car respecte sa DTD EXTERNE ET LOCALE
450
451 ---
452 bottin.xml
453 ---
454 <?xml version="1.0" encoding="ISO-8859-1" ?>
455 <!DOCTYPE bottin SYSTEM "bottin.dtd" >
456 <bottin>
457 <entree>
458 <nom>Zoro, Davin</nom>
459 <tel usage="residence">123-4567</tel>
460 </entree>
461 <entree>
462 <nom>Thibault, Mélanie</nom>
463 <tel usage="travail">987-3000</tel>
464 </entree>
465 </bottin>
466 ---
467
468 ---
469 bottin.dtd
470 ---
471 <!ELEMENT bottin (entree)*>
472 <!ELEMENT entree (nom, tel+)>
473 <!ELEMENT nom (#PCDATA)>
474 <!ELEMENT tel (#PCDATA)>
475 <!ATTLIST tel usage (residence|travail|portable) "residence">
476 ---
477
478 NOTA: quand la DTD est externe, le fichier commence directement avec
479 le CONTENU de la DTD.
480
481 C'est comme si le contenu du fichier était loadé dans le
482 <!DOCTYPE bottin [ ] >
483 du fichier XML
484
485 donc l'appel « SYSTEM "bottin.dtd" » remplace « [ contenu ] »
486
487
488 SCHEMA
489 ------
490 http://www.w3.org/XML/Schema
491
492 ***à compléter***
493
494 Défini par W3C, écrit en XML et valide les formats (types).
495 à la manière des langages
496
497 Ne permet pas de faire des validations interchamps
498
499 Plus fort que DTD
500
501
502 RELAX NG
503 --------
504
505 Écrit en XML, notation simplifiée (gère autres choses?)
506
507
508 ESPACES DE NOMS (NAMESPACES, NS)
509 ----------------------------
510
511 En travaillant avec de multiples fichiers XML ou avec un fichier
512 utilisant divers vocabulaires de XML il est impératif de préciser
513 chaque vocabulaire.
514
515 Ainsi, 2 éléments au même nom mais provenant de vocabulaires différents
516 se verront « qualifiés », ils auront chacun un nom qualifié
517 pour les différencier.
518
519 Le vocabulaire est une collection de noms.
520 Les différents termes sont définis dans un Schéma (un des 3 types vus).
521 Un alias (raccourci) fait référence à l'URI de Schéma.
522
523 Déclaration d'un espace de noms:
524
525 Les déclarations d'espace de noms se font dans
526 la balise ouvrante d'un élément.
527
528 Ces déclarations ont des portées similaires à la déclaration de variables
529 dans les langages de programmation: elles s'appliquent à
530 - l'élément en question et
531 - ses sous-éléments (éléments fils, éléments inclus dans cet élément)
532
533 Elles peuvent être déclarées dans n'importe quelle balise ouvrante.
534
535 Un espace de nom par défaut n'a pas d'alias.
536
537 Dans un même élément, plusieurs espaces de noms peuvent être déclarés
538 (incluant un espace de nom par défaut).
539
540 Donc déclarer un (ou plusieurs) NS dans l'élément racine applique ce NS
541 à tout le document.
542
543 Exemple:
544
545 <?xml version="1.0" encoding="ISO-8859-1" ?>
546 <!DOCTYPE bottin SYSTEM "bottin.dtd" >
547 <bottin xmlns="bottin.dtd"
548 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
549 xmlns:dc="http://purl.org/dc/elements/1.1/" >
550 <dc:creator>Davin Baragiotta</dc:creator>
551 <entree>
552 <nom>Zoro, Davin</nom>
553 <tel usage="residence">123-4567</tel>
554 </entree>
555 <entree>
556 <nom>Thibault, Mélanie</nom>
557 <tel usage="travail">987-3000</tel>
558 </entree>
559 </bottin>
560
561 Le NS par défaut est défini dans "bottin.dtd"
562 donc le nom bottin est compris au sens de la DTD bottin.dtd
563
564 Tous les éléments ou attributs commençant par:
565 rdf -> sont compris au sens du langage RDF définit par le W3C
566 (utilisation des noms réservés à ce langage)
567 (pas d'utilisation dans cet exemple)
568 dc -> sont compris au sens définis par le Dublin Core
569 soit, pour <dc:creator> :
570 « An entity primarily responsible for making the content
571 of the resource. »
572 (définition obtenue en suivant l'URI donnée par le NS de « dc »)
573
574
575 NOMS QUALIFIÉS (QNAME)
576
577 Nom qualifié = prefixe:nom-de-base
578
579 où
580 prefixe = alias déclaré (xmlns:prefixe=" ")
581 nom-de-base = nom de l'élément ou de l'attribut
582
583 QName s'appliquent à la fois aux noms d'éléments et aux noms d'attributs
584 qui utilisent un préfixe.
585 (Si le préfixe est absent car le nom de base utilise
586 l'espace de nom par défaut,
587 alors on ne devrait pas parler de « nom qualifié »)
588
589
590 TRAITEMENT DE DOCUMENTS
591 -----------------------
592
593 Manière d'accéder aux données.
594 Demander au parser de le représenter sous forme de SAX ou DOM.
595
596
597 DOM
598
599 Norme du W3C
600
601 1. lit le document XML et en
602 2. fait une représentation en mémoire,
603 3. va créer API, noms de méthodes pour manipuler éléments
604 ( « facilités » pour traiter le document)
605
606
607 SAX
608
609 Norme de facto largement utilisée
610
611 1. lit le document XML et
612 2. a une série d'événements
613 3. pour chaque événement on lui dit quoi faire mais
614 ne se souvient pas d'étape précédante
615
616 ne construit pas l'arbre en mémoire
617
618 souvent, pour construire DOM, utilise SAX
619 DOM plus lourd
620 SAX est relativement plus simple
621
622
623 JDOM
624
625 Voulait simplifier les choses
626 Structure en mémoire (DOM) mais l'API change
627
628
629 JAXB
630
631 solution en Java
632 « Java API for XML binding »
633 prend un schema (xsd), crée une classe à partir du schéma
634
635
636 Avantages et inconvénients de la structure de données XML:
637 base de données relationnelles vs XML un peu comme
638 ArrayList versus LinkedList en Java...
639 les BD utilisent souvent des tables de hachage...
640 impact sur:
641 - accès
642
643 aujourd'hui la plupart des ordi ont parsers XML
644
645
646 TRANSFORMATION DU XML
647 ---------------------
648
649 avec XSL ou XSLT, peut transformer en autres choses
650 ex.: XML - XSLT -> XML
651 ex.: XML - XSLT -> XHTML
652
653 transformer une structure en une autre structure
654
655 XSLT = XML StyleSheet Transform Language
656
657 XSLT = document XML
658 de façon déclarative peut faire transformation
659
660 XSL-FO
661 permet de sortir en format FO (norme, = document XML)
662 FO = Formatting object
663 ex.: XML - XSL-FO -> FO
664
665 de ça peut faire PDF, RTF, OpenOffice, etc.
666
667 --------------------------------------------------------------------------------
668
669 XML et le reste permettent de : SÉPARER LA FORME ET LE CONTENU
670
671 éditeur XMLmind = libre
Fichiers joints
Pour vous référer aux pièces jointes d'une page, utilisez attachment:filename, comme indiqué ci-dessous dans la liste de fichiers. N'utilisez pas l'URL du lien [get], car elle peut changer et donc être facilement cassée.Vous n'êtes pas autorisé à joindre un fichier à cette page.