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 
 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 
 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.
  • [télécharger | voir] (2007-08-24 18:17:03, 151.0 KB) [[attachment:birt_presentation-2007-08-17.odp]]
  • [télécharger | voir] (2007-08-24 18:18:36, 17.2 KB) [[attachment:xml-intro-2007-08-31.txt]]
 All files | Selected Files: delete move to page copy to page

Vous n'êtes pas autorisé à joindre un fichier à cette page.