1.17k likes | 1.38k Views
Introduction au XML. Choopan Rattanapoka ( choopan@icps.u-strasbg.fr ) Université Louis-Pasteur, Starsbourg. Qu’est-ce c’est XML. XML « e X tended M arkup L anguage » XML est une spécification proposée par le W3C en 1998 XML est un langage de balises comme HTML
E N D
Introduction au XML Choopan Rattanapoka (choopan@icps.u-strasbg.fr) Université Louis-Pasteur, Starsbourg
Qu’est-ce c’est XML • XML « eXtended Markup Language » • XML est une spécification proposée par le W3C en 1998 • XML est un langage de balises comme HTML • XML a été conçu pour décrire des données • Des étiquettes de XML ne sont pas prédéfinies. Vous devez définir vos propres étiquettes
XML VS HTML XML a été conçu pour porter des données. XML n’est pas un remplacement pour le HTML • XML été conçu pour décrire des données et pour se concentrer sur ce que sont les données. • HTML a été conçu pour montrer des données et pour se concentrer sur à quoi les données ressemblent • HTML est au sujet de montrer l'information, alors que XML est au sujet de décrire l'information
XML ne fait rien XML a été conçu pour ne rien faire • XML a été créé pour structurer, stocker et envoyer l'information <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
Pourquoi XML ? • XML peut séparer des données de HTML • XML est utilisé pour échanger des données • XML peut être utilisé pour partager des données • XML peut être utilisé pour stocker des données • XML peut être utilisé pour créer des nouvel langages • WAP, WML sont créés en utilisant XML
Document bien formé • Un document XML est dit "bien formé" (well-formed) s'il est constitué d'un prologue et d'un élément racine (noeud racine). • Le prologue : Il s'agit de la ligne d'introduction d'un document XML. • <?xml version="1.0"encoding="iso-8859-1“?> • L’élément racine : <?xml version="1.0"encoding="iso-8859-1“?> <note> …. </note> • S’il y a une balise ouvrant, il faut toujours avoir une balise fermant
Exemple : XML <?xml version="1.0" encoding="iso-8859-1"?> <librairie> <livre> <titre>CSS 2</titre> <auteur>Daniel GLAZMAN</auteur> <editeur>Eyrolles</editeur> </livre> <livre> <titre>Formation à... XML</titre> <auteur>Michael J. YOUNG</auteur> <editeur>Microsoft Press</editeur> </livre> <livre> <titre>ASP.Net – To the .Point</titre> <auteur>Grégory RENARD</auteur> <editeur>ASP-PHP.net</editeur> </livre> </librairie>
DTD : Document Valide • Un document XML est dit valide s’il est bien formé et il possède une DTD (Document Type Definition) • L’utilisation d’une DTDest facultative mais nécessaire si l’on souhaite valider un document XML • La DTD permet de définir un ensemble de règles pour la structure d’un document XML et la hiérarchisation des données
Structure d’une DTD • Il y a 2 types de DTD • DTD externe • DTD interne • DTD externe • Doit être enregistrée dans un fichier texte portant l’extension .dtd • La déclaration de l’utilisation d’une DTD externe doit se faire avant l’élément racine et après le prologue • <!DOCTYPE noeudracine SYSTEM "URI DTD externe">
Structure d’une DTD • DTD interne • Doit être déclarée avant l’élément racine et après le prologue • Elle est introduite par l’instruction DOCTYPE immédiatement suivie par le nom que porte l’élément racine • Exemple <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE nœudracine [ instructions de la DTD ]> <nœudracine> …. </nœudracine> • Chaque instruction de la DTD commence par <!
Déclarations utilisées dans la syntaxe d’une DTD • !ATTLIST : Définit les listes d’attributs • !ELEMENT : Définit les listed d’éléments • !ENTITY : Définit les entités • !DOCTYPE : Définit une DTD externe ou interne • !NOTATION : Définit les entités non XML
La spécification de contenu d’éléments d’une DTD • ANY :Indique que l’élément défini peut avoir tout type de contenu légal • <!ELEMENT nom_element ANY> • EMPTY : Indique que l’élément défini ne peut pas avoir de contenu • <!ELEMENT nom_element EMPTY> • (#PCDATA) : Indique que l’élément défini peut contenir une chaîne de caractères. • <!ELEMENT nom_element (#PCDATA)>
La spécification de contenu d’éléments d’une DTD • ( …, … ) :Délimite une liste de contenu en précisant le nom et l’ordre des nœuds enfants • <!ELEMENT nom_elmt_parent (noeud1, noeud2)> • , : Opérateur de liaison ET. Indique que les nœuds enfants déclarés (dans une liste) sont tous obligatoires et dans l’ordre de leur déclaration • <!ELEMENT nom_elmt_parent (noeud1, noeud2)> • |: Opérateur de liaison OU. Indique qu’un seul des nœuds enfants déclarés peut être utilisé • <!ELEMENT nom_elmt_parent (noeud1 | noead2)>
La spécification de contenu d’éléments d’une DTD • ? :Indique que le nœud enfant est optionnel; Il peut être utilisé 0 ou 1 fois. • <!ELEMENT nom_elmt_parent (noeud1?, noeud2)> • + : Indique que le nœud enfant peut être utilisé une ou plusieurs fois • <!ELEMENT nom_elmt_parent (noeud1+, noeud2)> • * : Indique que le nœud enfant est optionnel. Il peut être utilisé 0, 1 ou plusieurs fois • <!ELEMENT nom_elmt_parent (noeud1 | noead2*)>
La spécification de contenu d’éléments d’une DTD • Si ?, +, * est placé après les parenthèses d’une liste de contenu, il s’applique à tout le contenu • <!ELEMENT nom_elmt_parent (#PCDATA | noeud1 | noeud2)*> • <!ELEMENT nom_elmt_parent (noeud1, noeud2, noeud3)+>
Exemple : DTD • Supposons, La description des livres d’une librairie • Stocké des informations sur titre, auteur, éditeur, prix • C’est possible d’avoir plusieurs auteur pour un livre • Le prix est optionnel • Le prix seront classés par catégorie • cat1 pour les livres dont le prix est inférieur à 20€ • cat2 pour les livres dont le prix est entre 20€ et 40€ • cat3 pour les livres dont le prix est supérieur à 40€ Définir en <cat1></cat1>, <cat2></cat2>, <cat3></cat3>
Exemple : DTD • Nœud racine est librairie <!DOCTYPE librairie [ .. Instructions .. ]>
Exemple : DTD • Dans notre librairie peut avoir 0 ou plusieur livres <!DOCTYPE librairie [ <!ELEMENT librairie (livre*)> ….. ]>
Exemple : DTD • L’information d’un livre « titre, auteur, éditeur, prix » <!DOCTYPE librairie [ <!ELEMENT librairie (livre*)> <!ELEMENT livre (titre, auteur, éditeur, prix)> ]>
Exemple : DTD • Un livre peut avoir 1 ou plusieurs auteur <!DOCTYPE librairie [ <!ELEMENT librairie (livre*)> <!ELEMENT livre (titre, auteur+, éditeur, prix)> ]>
Exemple : DTD • Le prix d’un livre est optionnel <!DOCTYPE librairie [ <!ELEMENT librairie (livre*)> <!ELEMENT livre (titre, auteur+, éditeur, prix?)> ]>
Exemple : DTD • titre, auteur, éditeur sont stockés comme chaîne de caractères <!DOCTYPE librairie [ <!ELEMENT librairie (livre*)> <!ELEMENT livre (titre, auteur+, éditeur, prix?)> <!ELEMENT titre (#PCDATA)> <!ELEMENT auteur (#PCDATA)> <!ELEMENT éditeur (#PCDATA)> ]>
Exemple : DTD • prix sont stockés soit cat1, cat2 ou cat3 <!DOCTYPE librairie [ <!ELEMENT librairie (livre*)> <!ELEMENT livre (titre, auteur+, éditeur, prix?)> <!ELEMENT titre (#PCDATA)> <!ELEMENT auteur (#PCDATA)> <!ELEMENT éditeur (#PCDATA)> <!ELEMENT prix (cat1 | cat2 | cat3)> ]>
Exemple : DTD • cat1, cat2 et cat3 sont éléments qui ont non valeur <!DOCTYPE librairie [ <!ELEMENT librairie (livre*)> <!ELEMENT livre (titre, auteur+, éditeur, prix?)> <!ELEMENT titre (#PCDATA)> <!ELEMENT auteur (#PCDATA)> <!ELEMENT éditeur (#PCDATA)> <!ELEMENT prix (cat1 | cat2 | cat3)> <!ELEMENT cat1 EMPTY> <!ELEMENT cat2 EMPTY> <!ELEMENT cat3 EMPTY> ]>
DTD : Définition d’attributs • Les attributs XML ont la même fonction que les attributs HTML • On définit les attributs dans une DTD avec l’instruction <!ATTLIST • La syntaxe générale d’une déclaration d’attribut est la suivante : • <!ATTLIST nom_element nom_attribut TypeAttribut #OptionAttribut>
Liste des valeurs par types • (val1 | val2 | etc ) : Une suite de valeurs séparée par un trait vertical. L’attribut ne pourra prendre qu’une seule de ces valeurs. • <!ATTLIST nom_elmt nom_attrib (v1 | v2)> • NOTATION (val1 | val2 | etc) : Une suite de noms de notation séparé par un trait vertical. Chaque nom doit correspondre exactement à un nom de notation déclaré dans la DTD. • CDATA : Accept n’importe quel chaîne de caractères • <!ATTLIST nom_elmt nom_attrib CDATA> • ENTITY : Définit comme valeur d’attribut une entité non parsée déclarée dans une DTD. • <!ATTLIST nom_elmt nom_attrib ENTITY #option> • ENTITIES : Définit comme valeur d’attribut plusieurs entités non parsées déclarées dans une DTD • <!ATTLIST nom_elmt nom_attrib ENTITIES #option>
Liste des valeurs par types • ID : Indique que l’attribut possède une valeur unique pour chaque élément. La valeur peut contenir une ou plusieurs lettres, des chiffres, des points, des tiret haut ou bas, et un double point • <!ATTLIST nom_elmt nom_attrib ID #option> • IDREF : Indique que la valeur de l’attribut se réfère à un ID d’un autre attribut • <!ATTLIST nom_elmt nom_attrib IDREF #option> • IDREFS : Indique à IDREF excepté que la valeur de l’attribut peut se référer à plusieurss ID • <!ATTLIST nom_elmt nom_attrib IDREFS #option>
Liste des valeurs par types • NMTOKEN : Indique que la valeur de l’attribut est une chaîne de caractères pouvant contenir une ou plusieurs lettre, des chiffres, des point, des tirets hauts ou bas, et un double point. • <!ATTLIST nom_elmt nom_attrib NMTOKEN #option> • NMTOKENS : Identique à NMTOKEN excepté que l’attribut peut avoir plusieurs valeurs séparées par des espaces • <!ATTLIST nom_elmt nom_attrib NMTOKENS #option>
Liste des options • "valdefault": Définit, pour l’attribut, une valeur par défaut. Si la valeur est omise, le parser utilisera la valeur par défaut indiquée. Mais il est possible d’affecter une autre valeur issue de la liste des valeurs déclarées • <!ATTLIST nom_elmt nom_attrib (val1|val2) "val_defaut"> • #FIXED "valdefaut" : Définit, pour l’attribut, une valeur par défaut. Si la valeur est omise, le parser utilisera la valeur par défaut indiquée. Aucune autre valeur n’est admise. • <!ATTLIST nom_elmt nom_attrib CDATA #FIXED "val_defaut">
Liste des options • #IMPIED: Indique que la valeur d’attribut est optionnelle et que le parser ne fera aucun remplacement si la valeur est omise • <!ATTLIST nom_elmt nom_attrib (val1|val2) #IMPIED> • #REQUIRED : Indique qu’une valeur d’attribut est obligatoire • <!ATTLIST nom_elmt nom_attrib (val1|val2) #REQUIRED>
Exemple : DTD avec l’attribut • Supposons, La description des livres d’une librairie • Stocké des informations sur titre, auteur, éditeur, prix • C’est possible d’avoir plusieurs auteur pour un livre • Le prix est optionnel. Et c’est l’attribut de l’élément livre • On ajoute un attribut ISBN, obligatoire de type NMTOKEN, pour l’élément livre • On ajoute un attribut stock pour l’élément titre avec une valeur par défaut « non »
Exemple : DTD avec l’attribut • Nœud racine est librairie <!DOCTYPE librairie [ .. Instructions .. ]>
Exemple : DTD avec l’attribut • Dans notre librairie peut avoir 0 ou plusieur livres <!DOCTYPE librairie [ <!ELEMENT librairie (livre*)> ….. ]>
Exemple : DTD avec l’attribut • L’information d’un livre « titre, auteur, éditeur » <!DOCTYPE librairie [ <!ELEMENT librairie (livre*)> <!ELEMENT livre (titre, auteur, éditeur)> ]>
Exemple : DTD avec l’attribut • Un livre peut avoir 1 ou plusieurs auteur <!DOCTYPE librairie [ <!ELEMENT librairie (livre*)> <!ELEMENT livre (titre, auteur+, éditeur)> ]>
Exemple : DTD avec l’attribut • Le prix d’un livre est optionnel et c’est l’attribut de l’élément livre qui a des valeur soit cat1, cat2 ou cat3. <!DOCTYPE librairie [ <!ELEMENT librairie (livre*)> <!ELEMENT livre (titre, auteur+, éditeur)> <!ATTLIST livre prix (cat1|cat2|cat3) #IMPIED> ]>
Exemple : DTD avec l’attribut • L’ISBN d’un livre est obligatoire et c’est l’attribut de l’élément livre <!DOCTYPE librairie [ <!ELEMENT librairie (livre*)> <!ELEMENT livre (titre, auteur+, éditeur)> <!ATTLIST livre prix (cat1|cat2|cat3) #IMPIED> <!ATTLIST livre ISBN NMTOKEN #REQUIRED> ]>
Exemple : DTD avec l’attribut • Le titre est stocké comme la chaîne de caractères <!DOCTYPE librairie [ <!ELEMENT librairie (livre*)> <!ELEMENT livre (titre, auteur+, éditeur)> <!ATTLIST livre prix (cat1|cat2|cat3) #IMPIED> <!ATTLIST livre ISBN NMTOKEN #REQUIRED> <!ELEMENT titre (#PCDATA)> ]>
Exemple : DTD avec l’attribut • Le stock est l’attribut de l’élément titre avec « non » comme la valeur par défaut <!DOCTYPE librairie [ <!ELEMENT librairie (livre*)> <!ELEMENT livre (titre, auteur+, éditeur)> <!ATTLIST livre prix (cat1|cat2|cat3) #IMPIED> <!ATTLIST livre ISBN NMTOKEN #REQUIRED> <!ELEMENT titre (#PCDATA)> <!ATTLIST titre stock (oui|non) "non"> ]>
Exemple : DTD avec l’attribut • auteur et éditeur sont stockés comme la chaîne de caractères <!DOCTYPE librairie [ <!ELEMENT librairie (livre*)> <!ELEMENT livre (titre, auteur+, éditeur)> <!ATTLIST livre prix (cat1|cat2|cat3) #IMPIED> <!ATTLIST livre ISBN NMTOKEN #REQUIRED> <!ELEMENT titre (#PCDATA)> <!ATTLIST titre stock (oui|non) "non"> <!ELEMENT auteur (#PCDATA)> <!ELEMENT éditeur (#PCDATA)> ]>
Exemple1 : XML + DTD <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE exemple1 SYSTEM "exemple1.dtd"> <exemple1> <note> <subjet>C'est bon</subjet> <from>Moi</from> <to>M.A <to>M.B <to>M.C </to> <content>Est-ce que c'est bien formé</content> </note> </exemple1> Est-ce que ce XML est bien formé ?
Exemple1 : XML + DTD <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE exemple1 SYSTEM "exemple1.dtd"> <exemple1> <note> <subjet>C'est bon</subjet> <from>Moi</from> <to>M.A <to>M.B <to>M.C </to> <content>Est-ce que c'est bien formé</content> </note> </exemple1> Est-ce que ce XML est bien formé ? NON
Exemple1 : XML + DTD <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE exemple1 SYSTEM "exemple1.dtd"> <exemple1> <note> <subjet>C'est bon</subjet> <from>Moi</from> <to>M.A</to> <to>M.B</to> <to>M.C</to> <content>Est-ce que c'est bien formé</content> </note> </exemple1>
Exemple1 : XML + DTD <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE exemple1 SYSTEM "exemple1.dtd"> <exemple1> <note> <subjet>C'est bon</subjet> <from>Moi</from> <to>M.A</to> <to>M.B</to> <to>M.C</to> <content>Est-ce que c'est bien formé</content> </note> </exemple1> Est-ce que ce XML est valide ? NON exemple1.dtd <!ELEMENT exemple1 (note+)> <!ELEMENT note (subjet, from, to, content)> <!ELEMENT subjet (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT to (#PCDATA)> <!ELEMENT content (#PCDATA)>
Exemple2 : XML + DTD <?xml version="1.0" encoding="iso-8859-1"?> <employee uid="U001" poste="ingénieur"> <nom>HYBRID</nom> <prénom>Kintaro</prénom> <age>25</age> </employee> <employee poste="rien"> <nom>LEBOIS</nom> <prénom>Robin</prénom> </employee> <employee uid="U002" poste="secrétaire"> <nom>DE-FRANCE</nom> <prénom>Muller</prénom> <age>30</age> </employee> Est-ce que ce XML est bien formé ? NON
Exemple2 : XML + DTD <?xml version="1.0" encoding="iso-8859-1"?> <listemployee> <employee uid="U001" poste="ingénieur"> <nom>HYBRID</nom> <prénom>Kintaro</prénom> <age>25</age> </employee> <employee poste="rien"> <nom>LEBOIS</nom> <prénom>Robin</prénom> </employee> <employee uid="U002" poste="secrétaire"> <nom>DE-FRANCE</nom> <prénom>Muller</prénom> <age>30</age> </employee> </listemployee>
Exemple2 : XML + DTD <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE listemployee SYSTEM "employee.dtd"> <listemployee> <employee uid="U001" poste="ingénieur"> <nom>HYBRID</nom> <prénom>Kintaro</prénom> <age>25</age> </employee> <employee poste="rien"> <nom>LEBOIS</nom> <prénom>Robin</prénom> </employee> <employee uid="U002" poste="secrétaire"> <nom>DE-FRANCE</nom> <prénom>Muller</prénom> <age>30</age> </employee> </listemployee> employee.dtd <!ELEMENT listemployee (employee+)> <!ELEMENT employee (nom, prénom, age?)> <!ATTLIST employee uid ID #REQUIRED> <!ATTLIST employee poste (ingénieur|rien) "rien"> <!ELEMENT nom (#PCDATA)> <!ELEMENT prénom (#PCDATA)> <!ELEMENT age (#PCDATA)> Est-ce que ce XML est valide ?
Exemple2 : XML + DTD <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE listemployee SYSTEM "employee.dtd"> <listemployee> <employee uid="U001" poste="ingénieur"> <nom>HYBRID</nom> <prénom>Kintaro</prénom> <age>25</age> </employee> <employee poste="rien"> manque uid <nom>LEBOIS</nom> <prénom>Robin</prénom> </employee> <employee uid="U002" poste="secrétaire"> <nom>DE-FRANCE</nom> <prénom>Muller</prénom> <age>30</age> </employee> </listemployee> employee.dtd <!ELEMENT listemployee (employee+)> <!ELEMENT employee (nom, prénom, age?)> <!ATTLIST employee uid ID #REQUIRED> <!ATTLIST employee poste (ingénieur|rien) "rien"> <!ELEMENT nom (#PCDATA)> <!ELEMENT prénom (#PCDATA)> <!ELEMENT age (#PCDATA)> Est-ce que ce XML est valide ? NON