Scheda di revisione: Introduction à XML et ses Applications

📋 Plan du Cours

  1. Vers un langage semi-structuré
  2. Historique et place de XML
  3. Définition et structure arborescente XML
  4. Caractéristiques du XML : séparation données
  5. Applications du XML
  6. Exemple de document XML Master STIC
  7. Feuille de style XSL pour transformer XML
  8. Avantages et limites du XML
  9. Prologue XML et déclaration d’encodage
  10. Document XML bien formé et valide
  11. Noms, éléments, imbrication et attributs
  12. DTD : contraintes, types et exemples

📖 1. Vers un langage semi-structuré

🔑 Notions clés & Définitions

  • HTML : HTML est un langage de balisage hypertexte conçu pour créer des pages Web et des applications.
  • Langage strict : Un langage strict impose un ensemble fini de balises, chacune ayant une utilité prédéfinie et non modifiable.
  • XML : XML est un langage de balisage extensible utilisé pour représenter des données structurées sous forme d’arbre.
  • W3C : Le W3C est l’organisme qui propose des spécifications comme XML et contribue à leur standardisation.
  • SGML : SGML est un langage de balisage général dont XML constitue un sous-ensemble.

📝 Points essentiels

  • HTML utilise des balises prédéfinies (comme title, body, br), ce qui limite le champ d’action.
  • Dans un langage strict, on ne peut pas modifier les balises, donc la structure reste imposée.
  • Si on peut définir/modifier les balises, on obtient un langage plus flexible, donc semi-structuré.
  • XML a été proposé comme spécification par le W3C en 1998 et s’est imposé comme standard.
  • XML est un format général de documents orientés texte et il est un sous-ensemble de SGML.
  • XML s’appuie sur une structure d’arbre déterminée par des balises présentes dans le document.

💡 Astuce mémo

HTML = balises fixes ; XML = balises extensibles (donc semi-structuré).

📖 2. Historique et place de XML

🔑 Notions clés & Définitions

  • XML : XML est un langage de balisage générique conçu pour structurer des données sous forme de balises extensibles.
  • Langage de balisage extensible : Cette expression désigne un balisage où l’on peut définir ses propres balises pour représenter des informations spécifiques.
  • W3C : Le W3C est l’organisme qui recommande des technologies web, dont XML pour exprimer des langages de balisage particuliers.
  • SGML : SGML est un langage de balisage dont XML reprend plusieurs principes, notamment la structuration et la validation via des schémas.
  • XHTML : XHTML est un exemple de langage de balisage spécifique exprimable avec XML, recommandé par le W3C.

📝 Points essentiels

  • XML est un langage de balisage générique utilisé pour exprimer des langages de balisage spécifiques comme XHTML, SVG et XSLT.
  • Le W3C recommande XML pour formaliser des langages de balisage particuliers afin de faciliter leur utilisation et leur interopérabilité.
  • Objectif initial de XML : permettre l’échange automatisé de contenus entre systèmes d’informations hétérogènes, notamment sur Internet.
  • XML est un sous-ensemble de SGML et en conserve plusieurs principes, dont la possibilité de définir la structure via un schéma.
  • Un document XML peut être entièrement transformé en un autre document XML, ce qui rend les échanges et traitements plus systématiques.

💡 Astuce mémo

XML = échange + structure : schéma pour valider, transformation pour réutiliser.

📖 3. Définition et structure arborescente XML

🔑 Notions clés & Définitions

  • XML : XML est un langage à balises permettant de représenter des contenus de façon indépendante d’une application, grâce à une structure hiérarchique lisible.
  • Balises XML : Les balises XML encadrent les éléments du document et servent à organiser l’information sous forme de nœuds dans une structure arborescente.
  • Attribut XML : Les attributs XML décrivent des propriétés d’un élément sans changer sa place dans la hiérarchie du document.
  • Prologue XML : Le prologue est la partie initiale d’un document XML où figurent des déclarations facultatives, notamment des informations d’encodage.
  • Corps du document XML : Le corps contient le contenu principal du document, c’est-à-dire les éléments structurés en arbre.

📝 Points essentiels

  • XML vise d’abord la représentation de contenus indépendamment de toute application qui les affichera ou les traitera.
  • Un document XML est organisé en structure arborescente composée d’éléments imbriqués.
  • Le prologue peut inclure des déclarations facultatives, dont la déclaration XML et l’encodage.
  • La déclaration d’en-tête peut préciser une version et un jeu de caractères, par exemple version 1.0 et ISO-8859-1.
  • Le corps du document correspond au contenu réel, organisé en éléments et sous-éléments.
  • Des commentaires et des instructions de traitement peuvent apparaître dans le prologue comme dans le corps.

💡 Astuce mémo

Arbre XML = Prologue (déclarations) → Corps (contenu) ; le reste (commentaires/instructions) peut se glisser partout.

📖 4. Caractéristiques du XML : séparation données

🔑 Notions clés & Définitions

  • Character set : En XML, le character set indique à l’analyseur le jeu de caractères à utiliser pour interpréter le texte du document.
  • Déclaration XML : La déclaration XML est la première ligne du document qui précise la version, le codage et le mode autonome du document.
  • Autonome standalone : Un document XML est autonome quand il ne contient pas de déclarations d’entités externes.
  • Unicode UTF-8 : Le codage par défaut d’un document XML est Unicode, généralement exprimé en UTF-8.
  • Document bien formé : Un document XML est bien formé quand sa syntaxe de balises est correcte et que ses éléments sont correctement imbriqués en arbre.

📝 Points essentiels

  • Le character set est annoncé dans le prologue et sert à choisir le jeu de caractères pour l’interpréteur XML.
  • ISO-8859-1 accepte beaucoup de lettres accentuées pour les francophones, contrairement à certains codages orientés anglais.
  • La déclaration XML a la forme générale <?xml version="1.0" encoding="utf-8" standalone="no" ?>.
  • La version la plus utilisée de XML est 1.0, datée du 10 février 1998.
  • Un document est bien formé si la syntaxe des balises est respectée et si les éléments sont correctement imbriqués.
  • Les éléments imbriqués forment une structure en arbre, ce qui correspond à l’imbrication logique du document.

💡 Astuce mémo

Déclaration XML = Version + Codage + Autonomie ; Bien formé = Balises correctes + Imbrication en arbre.

📖 5. Applications du XML

🔑 Notions clés & Définitions

  • Noms XML : Les noms XML identifient les balises et doivent respecter des règles de syntaxe pour être acceptés par un parseur.
  • Balise ouvrante : Une balise ouvrante marque le début d’un élément et indique son nom XML.
  • Balise fermante : Une balise fermante marque la fin d’un élément et reprend le même nom XML que la balise ouvrante.
  • Élément vide : Un élément vide représente un élément sans contenu, écrit sous forme de balise autofermée.
  • Attribut XML : Un attribut est une paire nom et valeur placée dans une balise ouvrante ou d’élément vide.

📝 Points essentiels

  • Les noms XML ne doivent pas contenir d’apostrophe dans le nom de balise (exemple : Driver's_License_Number est incorrect).
  • Les noms XML ne doivent pas contenir d’espace (exemple : first name est incorrect).
  • Les noms XML ne doivent pas contenir de caractère interdit par la syntaxe du nom ; des lettres accentuées peuvent être acceptées mais peuvent poser problème selon les programmes (exemple corrigé : àçttûä est correct).
  • Les noms XML ne doivent pas contenir de caractères comme / (exemple : month/day/year est incorrect).
  • Un nom XML ne commence pas par un chiffre (exemple : 4-lane est incorrect).
  • Les balises délimitent les éléments : le contenu est situé entre balise ouvrante et balise fermante, ou absent pour un élément vide.

💡 Astuce mémo

Balises = début/fin ; noms = pas d’espace, pas d’apostrophe, pas de /, pas de chiffre au début.

📖 6. Exemple de document XML Master STIC

🔑 Notions clés & Définitions

  • xml:lang : Attribut de langue d’un élément, dont la valeur est un code ISO 639 (et éventuellement des sous-codes ISO 3166).
  • Commentaire XML : Construction XML qui n’est pas considérée comme des données textuelles du document et sert uniquement à documenter le contenu.
  • CDATA : Bloc XML où les balises ne sont plus interprétées comme du balisage, mais comme du texte brut.
  • Entité document : Entité correspondant au fichier de départ utilisé par le lecteur XML pour commencer l’analyse du document.
  • Appel de caractère : Mécanisme XML permettant d’insérer un caractère Unicode via une écriture numérique suivie d’un point-virgule.

📝 Points essentiels

  • La valeur de xml:lang doit être un code de langue ISO 639 (ou privé) éventuellement complété par des sous-codes ISO 3166, par exemple fr-FR ou br-CA.
  • Les commentaires s’écrivent avec <!-- ... --> et ne font pas partie des données textuelles du document.
  • Dans un commentaire, la séquence -- n’est pas autorisée.
  • Une section CDATA s’écrit <![CDATA[ ... ]]> et permet d’inclure des caractères sans que les balises soient reconnues.
  • Les données CDATA ne doivent pas contenir la séquence ]]> et les CDATA ne peuvent pas être imbriquées.
  • Un document XML contient l’entité document et éventuellement des appels de caractère, des entités internes et des entités externes.

💡 Astuce mémo

xml:lang = « langue » (ISO 639 + pays ISO 3166) ; <!-- --> = « pas des données » ; <![CDATA[ ]]> = « balises ignorées ».

📖 7. Feuille de style XSL pour transformer XML

🔑 Notions clés & Définitions

  • Entité XML : Une entité XML est un nom symbolique déclaré qui peut être réutilisé dans le document via une référence de la forme &nom;.
  • Entité interne : Une entité interne est déclarée dans le même document XML, généralement dans la déclaration de type de document (DOCTYPE).
  • Entité externe : Une entité externe est déclarée pour référencer du contenu provenant d’un fichier ou d’une source externe, puis utilisée comme une entité classique avec &nom;.
  • DTD : Une DTD est un ensemble de règles qui décrit la structure attendue d’un document XML (éléments, attributs et contraintes de contenu).
  • Déclaration DOCTYPE : La déclaration DOCTYPE introduit la DTD associée au document XML et indique si elle est interne ou externe.

📝 Points essentiels

  • Une référence d’entité s’écrit avec le caractère '&', le nom de l’entité, puis le caractère ';' (ex. &cie;).
  • Les entités internes sont déclarées dans une section DOCTYPE, puis utilisées directement dans le contenu XML comme des morceaux de texte ou de balisage.
  • Une entité externe est déclarée via une référence SYSTEM vers un fichier, puis appelée dans le document avec &nom; pour insérer le contenu du fichier.
  • Les navigateurs (Mozilla et Internet Explorer à partir de IE 5) peuvent afficher l’arborescence XML, et interprètent une feuille de style si elle est spécifiée (IE à partir de la version 6).
  • Une DTD décrit généralement le nom et le contenu de chaque balise ainsi que le contexte où elle peut apparaître.
  • La DTD sert notamment à définir les éléments autorisés, la hiérarchie, les attributs autorisés et le modèle de valeur d’un attribut.

💡 Astuce mémo

&nom; = “je réutilise un nom déclaré” ; DTD = “plan de la structure XML”.

📖 8. Avantages et limites du XML

🔑 Notions clés & Définitions

  • DTD : Une DTD décrit la structure attendue d’un document XML, en précisant quels éléments existent et comment ils s’emboîtent.
  • Déclaration d’élément : Une déclaration d’élément associe un nom d’élément à un type de contenu (texte, vide, séquence, choix, etc.).
  • Élément texte : Un élément texte contient principalement des données textuelles, déclarées avec #PCDATA.
  • Élément vide : Un élément vide ne contient aucun contenu et se déclare avec le mot-clé EMPTY.
  • Contenu mixte : Un élément à contenu mixte peut contenir à la fois du texte (#PCDATA) et des sous-éléments.

📝 Points essentiels

  • La forme générale d’une déclaration est <!ELEMENT nom type_element>, où nom est le nom de l’élément et type_element son type de contenu.
  • Un élément texte se déclare par <!ELEMENT elt (#PCDATA)>, ce qui autorise uniquement du texte (selon la DTD).
  • Un élément vide se déclare par <!ELEMENT elt EMPTY> et s’écrit typiquement sous la forme <elt/>.
  • Une séquence impose un ordre précis des enfants, par exemple <!ELEMENT elt0 (elt1, elt2, elt3)> n’accepte pas un ordre différent.
  • Un choix d’enfants se fait avec |, par exemple <!ELEMENT elt0 (elt1 | elt2 | elt3)> n’autorise qu’un des éléments listés à cet endroit.
  • Les indicateurs d’occurrence ?, +, * s’appliquent aux enfants dans une séquence ou un choix, où ? = au plus une fois, + = au moins une fois, * = zéro ou plusieurs fois.

💡 Astuce mémo

DTD = Décrit l’Ordre et le Type : Texte (#PCDATA), Vide (EMPTY), Séquence (,) Choix (|), Occurrences (?, +, ), Mixte (#PCDATA|enfants).

📖 9. Prologue XML et déclaration d’encodage

🔑 Notions clés & Définitions

  • Déclaration d’encodage : Déclaration d’encodage : information placée dans le prologue XML pour indiquer comment les caractères du document doivent être interprétés.
  • Prologue XML : Prologue XML : partie initiale du document qui contient les informations générales nécessaires avant le contenu (dont l’encodage et la déclaration de type, si utilisée).
  • CDATA : CDATA : type d’attribut qui correspond à une chaîne de caractères sans balises.
  • #REQUIRED : #REQUIRED : valeur implicite indiquant qu’un attribut est obligatoire dans l’élément.
  • #IMPLIED : #IMPLIED : valeur implicite indiquant qu’un attribut est facultatif et peut être absent.

📝 Points essentiels

  • La déclaration d’encodage sert à éviter les erreurs d’interprétation des caractères lors du parsing du document XML.
  • Le prologue XML regroupe les informations placées avant les éléments pour guider l’analyse (notamment l’encodage).
  • Le type CDATA est le type d’attribut le plus courant pour stocker une chaîne de caractères.
  • #REQUIRED impose la présence de l’attribut dans l’élément concerné.
  • #IMPLIED autorise l’absence de l’attribut sans rendre le document invalide.
  • #FIXED impose une valeur constante pour l’attribut, tandis que une valeur entre guillemets donne une valeur par défaut facultative.

💡 Astuce mémo

Encodage = « comment lire les caractères » ; REQUIRED = « présent obligatoire » ; IMPLIED = « optionnel ».

📖 10. Document XML bien formé et valide

🔑 Notions clés & Définitions

  • Attribut optionnel : Un attribut optionnel est un attribut déclaré dans la DTD qui peut être absent du document sans rendre le XML invalide.
  • Valeur fixe d’attribut : Une valeur fixe d’attribut impose qu’un attribut prenne exactement la même valeur à chaque occurrence, telle que déclarée dans la DTD.
  • CDATA : CDATA désigne un type d’attribut qui accepte une chaîne de caractères quelconque, y compris des caractères réservés à XML comme <, > et &.
  • ID : ID est un type d’attribut qui fournit un identifiant unique, sous forme de nom XML, et ne peut pas se répéter dans un même document.
  • IDREF : IDREF est un type d’attribut dont la valeur doit correspondre à un ID déclaré ailleurs dans le document.

📝 Points essentiels

  • Un attribut optionnel se déclare avec #IMPLIED dans la DTD, ce qui autorise son absence dans le document.
  • Une valeur fixe se déclare avec #FIXED "valeur", ce qui force l’attribut à contenir exactement cette valeur.
  • Le type CDATA est le plus général : il accepte du texte libre et peut inclure <, > et & sans échouer sur le type d’attribut.
  • Le type ID impose une unicité : une même valeur ne peut pas apparaître deux fois dans le document, et une valeur d’ID doit être un nom XML (donc pas un nombre).
  • IDREF doit référencer un ID existant ailleurs dans le document, sinon la validation échoue.
  • IDREFS correspond à une suite de valeurs IDREF séparées par des blancs, pour référencer plusieurs éléments.

💡 Astuce mémo

#IMPLIED = absent OK ; #FIXED = valeur imposée ; ID = unique ; IDREF = référence à un ID existant.

📖 11. Noms, éléments, imbrication et attributs

🔑 Notions clés & Définitions

  • DTD interne : Une DTD interne est une déclaration de structure XML incluse directement dans le document via une section <!DOCTYPE ... [ ... ]>.
  • DTD externe : Une DTD externe est une déclaration de structure XML chargée depuis un fichier ou une URL grâce à une référence SYSTEM dans <!DOCTYPE ...>.
  • Déclaration d’élément : Une déclaration d’élément décrit le nom d’un tag XML et son contenu autorisé (données #PCDATA ou imbrication d’autres éléments).
  • Attributs DTD : Les attributs DTD précisent des propriétés associées à un élément, avec un type et une valeur par défaut ou une contrainte de présence.
  • Déclarations d’entités : Les déclarations d’entités définissent des remplacements réutilisables dans une DTD pour écrire plus facilement des symboles ou des textes.

📝 Points essentiels

  • La syntaxe d’une DTD interne suit <!DOCTYPE élément-racine [ déclaration des éléments ]> avec la racine indiquée dans le <!DOCTYPE>.
  • Une DTD externe utilise <!DOCTYPE élément-racine SYSTEM "nom_du_fichier.dtd"> pour référencer un fichier DTD.
  • La déclaration <!ELEMENT garcon (#PCDATA)> indique que l’élément contient des données texte, tandis que <!ELEMENT parent (garcon,fille)> impose une imbrication précise.
  • La déclaration <!ELEMENT DOCUMENT(PERSONNE*)> autorise 0 ou plusieurs occurrences de PERSONNE à l’intérieur de DOCUMENT.
  • Les attributs se déclarent avec <!ATTLIST nomElement nomAttribut type valeurParDefaut> et peuvent être requis ou optionnels selon la valeur (#REQUIRED, #IMPLIED).
  • Dans l’exemple, PNUM est déclaré ID #REQUIRED pour PERSONNE, tandis que MERE et PERE sont déclarés IDREF #IMPLIED pour référencer d’autres PERSONNE par identifiant.

💡 Astuce mémo

DTD interne = DOCTYPE + crochets; DTD externe = DOCTYPE + SYSTEM; imbrication = parenthèses (enfants) ; texte = #PCDATA ; attributs = ID (référence) vs IDREF (lien).

📖 12. DTD : contraintes, types et exemples

🔑 Notions clés & Définitions

  • Déclaration d’entité : Une déclaration d’entité décrit un nom réutilisable dans un document XML, associé soit à du texte, soit à une ressource externe.
  • Entité interne : Une entité interne associe un nom à une chaîne de remplacement directement fournie dans la DTD.
  • Entité externe : Une entité externe associe un nom à une ressource via un identifiant SYSTEM (fichier ou URL).
  • Déclaration d’élément : Une déclaration d’élément fixe la structure autorisée pour un tag XML, via une liste d’enfants et/ou un contenu de type #PCDATA.
  • Déclaration d’attribut : Une déclaration d’attribut précise le type, si l’attribut est requis ou optionnel, et éventuellement une valeur par défaut ou un ensemble de valeurs.

📝 Points essentiels

  • Une DTD peut définir des entités avec la syntaxe &NomEntité; pour réutiliser facilement du texte ou des références.
  • Une entité interne s’écrit avec <!ENTITY nom "texte de remplacement"> et remplace directement le contenu lors de l’usage.
  • Une entité externe s’écrit avec <!ENTITY nom SYSTEM "fichier ou URL"> et pointe vers une ressource externe.
  • Dans l’exemple bibliographie, biblio autorise une suite de livre ou article via (livre|article)*.
  • Dans l’exemple bibliographie, livre contient (titre, auteur+, tome*, edition) : titre unique, au moins un auteur, zéro ou plusieurs tomes, puis edition.
  • Dans l’exemple bibliographie, article contient (titre, auteur+, journal) : au moins un auteur et un journal obligatoire.

💡 Astuce mémo

Entité = &Nom; : interne = texte, externe = SYSTEM (fichier/URL).

📅 Repères chronologiques

DateÉvénement
1998XML proposé par le W3C et s’impose comme standard incontournable
10 février 1998Version la plus utilisée de XML : 1.0 (10 février 1998)
08 Mai 1945Date figurant sur la page de présentation du cours

📊 Tableaux de synthèse

HTML vs XML (logique du cours)

AspectHTMLXML
Type de langageLangage strictLangage extensible (semi-structuré)
BalisesBalises prédéfinies, nombre finiBalises extensibles : on peut définir ses propres balises et attributs
ConséquenceChamp d’action limité, balises non modifiablesPlus flexible, structure définissable et validable

⚠️ Pièges & confusions fréquents

  1. Confondre langage strict et semi-structuré : en langage strict on ne modifie pas les balises, alors qu’en XML on peut définir ses propres balises et attributs.
  2. Croire qu’un document XML est valide juste parce qu’il est “bien formé” : bien formé = syntaxe + imbrication correcte, valide = en plus respecte les contraintes de la DTD.
  3. Mettre des balises dans la valeur d’un attribut : le cours insiste de ne pas mettre de balises dans la valeur d’un attribut.
  4. Se tromper sur les noms XML : un nom ne doit pas contenir d’espace, ne doit pas commencer par un chiffre, et ne doit pas commencer par “xml/XML/Xml...”.
  5. Oublier les règles de commentaires : dans un commentaire XML, la séquence “--” n’est pas autorisée et le commentaire ne fait pas partie des données textuelles.
  6. Confondre CDATA et entités : CDATA désactive l’interprétation des balises jusqu’au “]]>”, alors que les entités s’insèrent via &nom; (et peuvent être internes ou externes).
  7. Confondre entité document et autres entités : l’entité document correspond au fichier de départ, tandis que les autres entités sont appelées et remplacées par du texte ou du contenu externe.

✅ Checklist Examen

  1. Expliquer pourquoi HTML est un langage strict et en quoi XML est plus flexible (balises extensibles, possibilité de définir ses propres balises et attributs).
  2. Donner la place de XML dans l’histoire : proposition W3C en 1998, standard, sous-ensemble de SGML, objectif d’échange automatisé.
  3. Décrire la structure d’un document XML : données en structure d’arbre déterminée par les balises, et séparation logique entre prologue/corps/commentaires-instructions.
  4. Identifier les constituants d’un document XML : prologue (déclarations facultatives), corps (contenu), et commentaires/instructions pouvant apparaître partout.
  5. Reconnaître les conditions de “document bien formé” : syntaxe des balises respectée et éléments correctement imbriqués formant un arbre.
  6. Expliquer la différence “bien formé” vs “valide” : la validité dépend du respect des contraintes imposées par la DTD.
  7. Savoir écrire la déclaration XML et interpréter les paramètres : version, encoding, et standalone (autonome si pas d’entités externes).
  8. Maîtriser les règles de noms XML vues au cours : pas d’espace, pas de début par chiffre, pas de début par “xml/XML/Xml...”, et éviter certains signes pouvant prêter à confusion.
  9. Décrire la structure logique : balises ouvrantes/fermantes ou balise d’élément vide, contenu entre balises, et imbrication formant l’arborescence.
  10. Expliquer les attributs XML : nom + valeur entre quotes, et rappeler l’interdiction de mettre des balises dans la valeur d’un attribut.
  11. Savoir utiliser xml:lang : valeur = code ISO 639 éventuellement complété par sous-codes ISO 3166 (exemples fr-FR, fr-CA, br).
  12. Maîtriser la DTD : rôle, DTD interne vs externe (DOCTYPE avec crochets vs SYSTEM), et déclarations d’éléments (texte #PCDATA, vide EMPTY, séquence, choix, indicateurs ?, +, *).
  13. Savoir déclarer des attributs dans la DTD : syntaxe <!ATTLIST ...>, types (CDATA, ID, IDREF, IDREFS, ENTITY, etc.) et valeurs implicites (#REQUIRED, #IMPLIED, #FIXED, valeur par défaut).
  14. Savoir insérer des entités : appel &nom; ; distinguer entité interne (définie dans la DTD) et entité externe (SYSTEM vers fichier/URL).

Metti alla prova le tue conoscenze

Metti alla prova le tue conoscenze su Introduction à XML et ses Applications con 10 domande a scelta multipla con correzioni dettagliate.

1. En quelle année XML a-t-il été proposé comme spécification par le W3C ?

2. Quel est l’objectif initial de XML concernant les contenus entre systèmes d’informations ?

Fai il quiz →

Ripassa con le flashcard

Memorizza i concetti chiave di Introduction à XML et ses Applications con 24 flashcard interattive.

XML — langage ?

Langage de balisage extensible pour données structurées.

Langage strict — définition ?

Impose un ensemble fixe de balises prédéfinies.

XML — place dans SGML ?

Sous-ensemble de SGML, plus simple.

Vedi le flashcard →

Similar courses

Crea le tue schede di revisione

Importa il tuo corso e l'AI genera schede, quiz e flashcard in 30 secondi.

Generatore di schede