CHAPITRE 4 DE BD AVANCÉES XML -DTD IUT Dijon IQ S3 2016/2017
1. Introduction 2 XML - Extensible Markup Language est une norme pour représenter et échanger des données est un document texte avec des balises peut être vu comme un modèle de données, i.e. une alternative au modèle relationnel Intérêts d'xml documents XML faciles à créer et compléter, il suffit d'un éditeur texte structure du document flexible standard ouvert, utilisé dans de nombreux domaines : Édition (DocBook), Graphisme (SVG), Mathématiques (MathML), Musique (partition MusicML), etc...
1. Introduction 3 Structure d'un document XML <?xml version="1.0" encoding="utf-8"?> <!--Exemple CM5 sans DTD--> <Bibliotheque> <Livre ISBN="ISBN-2212135602" Prix="32"> <Titre>Les bases de données NoSQL</Titre> <Auteurs> <Auteur> <Prenom>Rudi</Prenom> <Nom>Bruchez</Nom> </Auteur> </Auteurs> </Livre> <Livre ISBN="ISBN-2711786749" Prix="169" Editeur="Vuibert"> <Remarque> Prix liés à la rareté du livre - vendeur professionel </Remarque> <Titre>Ingénierie des systèmes d'information Merise </Titre> <Auteurs> <Auteur> <Prenom>Dominique</Prenom> <Nom>Nanci</Nom> </Auteur> <Auteur> <Prenom>Bernard</Prenom> <Nom>Espinasse</Nom> </Auteur> </Auteurs> </Livre> </Bibliotheque> Un doc. XML est composé de un prologue commentaires ensemble d'éléments imbriqués Éléments (balises) Attributs Texte
1. Introduction 4 Points communs entre XML et HTML 2 langages issus de SGML (StandardizedGeneralisedMarkupLanguage) utilisé pour la gestion électronique des documents Mode texte, indépendant de la plateforme et fonctionnent avec des balises [Markup Language] Différences entre XML et HTML Contrairement à XML, les balises sont prédéfinies et donc figées en HTML XML décrit le contenu des données vs HTML décrit la présentation des données <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!--Exemple CM5 sans DTD--> <Bibliotheque> <Livre ISBN="ISBN-2212135602" Prix="32"> <Titre> Les bases de données NoSQL </Titre> <Auteurs> <Auteur> <Prenom>Rudi</Prenom> <Nom>Bruchez</Nom> </Auteur> </Auteurs> </Livre> </Bibliotheque> <html> <head><title>livres</title></head> <body> <h1> Livre </h1> <em>les bases de données NoSQL</em> <b>rudi Bruchez</b> <br/> </body> </html>
1. Introduction 5 Modèle relationnel vs. XML Lorsqu'on conçoit une application qui gère des données persistantes, on peut choisir d'utiliser une BD relationnelle ou des fichiers XML. Modèle relationnel XML Structure Tables Hiérarchie - Arbre
1. Introduction 6 Modèle relationnel vs. XML Lorsqu'on conçoit une application qui gère des données persistantes, on peut choisir d'utiliser une BD relationnelle ou des fichiers XML. Modèle relationnel XML Structure Tables Hiérarchie - Arbre Schéma Fixé lors de la conception Flexible T_PERSONNE(Nom, Age, Sexe) T_PIZZERIA(Pizzeria, Ville) T_CATEGORIE(CodeCategorie, Categorie) T_PIZZA(Pizza, #CodeCategorie) T_FREQUENTE(#Nom, #Pizzeria) T_MANGE(#Nom, #Pizza) T_SERT(#Pizzeria, #Pizza, Prix) <Book ISBN="ISBN-2212135602" Price="32"> <Author> Bruchez </Author> </Book> <Book ISBN="ISBN-2711786749" Price="169" Editor="Vuibert"> <Remark> Prix liés à la rareté du livre </Remark> <Author> Nanci </Author> <Author> Espinasse </Author> </Book> Livre 2 n'a pas d'attribut Editor Livre 1 n'a pas de balise Remark Livre 2 a deux auteurs
1. Introduction 7 Modèle relationnel vs. XML Lorsqu'on conçoit une application qui gère des données persistantes, on peut choisir d'utiliser une BD relationnelle ou des fichiers XML. Modèle relationnel XML Structure Tables Hiérarchie - Arbre Introduction Schéma Fixé lors de la conception Flexible Requêtes SQL : Simple, puissant, basé sur l algèbre relationnelle XPath, XQuery, etc. : moins efficace et plus complexe à mettre en œuvre
1. Introduction 8 Modèle relationnel vs. XML Lorsqu'on conçoit une application qui gère des données persistantes, on peut choisir d'utiliser une BD relationnelle ou des fichiers XML. Modèle relationnel XML Structure Tables Hiérarchie - Arbre Schéma Fixé lors de la conception Flexible Requêtes Ordre SQL : Simple, puissant, basé sur l algèbre relationnelle Modèle ensembliste : pas d'ordre (même si ~ ORDER BY) XPath, XQuery, etc. : moins efficace et plus complexe à mettre en oeuvre Ordre implicite <Book ISBN="ISBN-2212135602" Price="32"> <Author> Bruchez </Author> </Book> <Book ISBN="ISBN-2711786749" Price="169" Editor="Vuibert"> <Remark> Prix liés à la rareté du livre </Remark> <Author> Nanci </Author> <Author> Espinasse </Author> </Book> L'auteur Nanci arrive avant Espinasse dans le document XML
1. Introduction 9 Modèle relationnel vs. XML Exemple 1 : Vous concevez une BD pour l'iut de Dijon : liste d'étudiants, de cours, notes, enseignants, etc... XML ou modèle relationnel? Structure simple, fixée en avance modèle relagonnel bien adapté Exemple 2 : Vous concevez une BD pour contenir les infos pour le site web de l'iut de Dijon : news, admissions, événements. XML ou modèle relationnel? La BD a une structure complexe, dynamique et imprévisible XML bien adapté Exemple 3 : Vous concevez une BD pour contenir l'arbre généalogique de la famille royale du Royaume-Uni. XML ou modèle relationnel? BD a une structure fixe modèle relagonnel BD a une structure hiérarchique XML.
1. Introduction 10 Affichage d'un document XML Texte brut Utilisation de langages basés sur des règles pour traduire les doc XML en HTML. Cascading StyleSheets(CSS) Ou Extensible StyleSheet Language(XSL) XML XSL / CSS <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!--Exemple CM5 sans DTD--> <Bibliotheque> <Livre ISBN="ISBN-2212135602" Prix="32"> <Titre> Les bases de données NoSQL </Titre> <Auteurs> <Auteur> <Prenom>Rudi</Prenom> <Nom>Bruchez</Nom> </Auteur> </Auteurs> </Livre> </Bibliotheque> Interpréteur XSL / CSS HTML
2.XML bien formé et valide 11 Un document XML est bien formé si : Une seule balise racine Les attributs des balises sont uniques Par exemple <balise attr="val"> Les guillemets sont obligatoires, les attributs ne sont pas répétés dans la balise fermante. Toutes les balises ouvertes doivent être fermées et imbrication correcte. Par exemple <balise>contenu</balise>; ou <balise /> L'ordre de fermeture des balises est important : la première ouverte est toujours la dernière fermée.
2.XML bien formé et valide 12 Un document XML est bien formé si : Une seule balise racine Les attributs des balises sont uniques Toutes les balises ouvertes doivent être fermées et imbrication correcte. Un ParserXML permet de parcourir un doc XML et de vérifier s'il est bien formé. Parser = Parseur = Analyseur syntaxique Document XML Parser XML Parsed XML Doc n est pas bien formé
2.XML bien formé et valide 13 Un document XML est validesi Il est bien formé (structure du document) Il respecte des spécifications sur son contenu Document Type Descriptor(DTD) XML Schema(XSD) DTD ou XSD Document XML Parser XML Parsed XML Doc n est pas valide
3. Document Type Descriptor(DTD) 14 DTD est un langage qui permet de spécifier les balises requises, les attributs des balises, l'imbrication des balises, l'ordre des éléments, le nombre d'occurrence des éléments... des attributs spéciaux : ID et IDRef. <!ELEMENT Bookstore (Book Magazine)*> <!ELEMENT Book (Title, Authors, Remark?)> <!ATTLIST Book ISBN CDATA #REQUIRED Price CDATA #REQUIRED Editor CDATA #IMPLIED> <!ELEMENT Magazine (Title)> <!ATTLIST Magazine Month CDATA #REQUIRED Year CDATA #REQUIRED> <!ELEMENT Title (#PCDATA)> <!ELEMENT Authors (Author+)> <!ELEMENT Remark (#PCDATA)> <!ELEMENT Author (First_Name, Last_Name)> <!ELEMENT First_Name (#PCDATA)> <!ELEMENT Last_Name (#PCDATA)>
3. Document Type Descriptor(DTD) 15 Avantages d'utiliser DTD/XSD Les programmes utilisant le doc XML connaissent la structure du document (plus simple à coder) CSS/XSL connaissent la structure du document (règles plus simples) Peut être utilisé comme une spécification pour échanger des données Avantages de pas utiliser DTD/XSD Flexibilité, plus facile de mettre à jour Un peu laborieux d'écrire DTD/XSD
3. Document Type Descriptor(DTD) 16 Lier un fichier XML à une DTD DTD interne La DTD est inclue au début du fichier XML <?xml version="1.0" encoding="utf-8"?> <!--Exemple de fichier XML avec une DTD interne--> <!DOCTYPE Bookstore [... ]> <Bookstore> <!--... --> </Bookstore> DTD externe On fait référence à un fichier qui contient la DTD dans le fichier XML <?xml version="1.0" encoding="utf-8" standalone="no"?> <!--Exemple de fichier XML avec une DTD externe--> <!DOCTYPE Bookstore SYSTEM "nomfichierdtd.dtd" > <Bookstore> <!--... --> </Bookstore>
3. Document Type Descriptor(DTD) 17 Définition des éléments (balises) et de leurs contenus <!ELEMENT nombalise desccontenu> Le nom des éléments doivent être des noms XML : le premier caractère est une lettre quelconque ou un «_» Balise avec du texte : <!ELEMENT elt0 (#PCDATA)> Balise avec des sous-éléments : <!ELEMENT elt0 (elt1,elt2, elt3)> L'ordre est important <elt0> <elt1> ( ) </elt1> <elt2> ( ) </elt2> <elt3> ( ) </elt3> </elt0> <elt0> <elt1> ( ) </elt1> <elt3> ( ) </elt3> <elt2> ( ) </elt2> </elt0> <elt0> <elt1> ( ) </elt1> <elt2> ( ) </elt2> </elt0> Il est possible de moduler le nombre d'apparitions des sous-éléments avec "?": 0 ou 1 fois ;"*": 0, 1 ou plus ;"+": 1 ou plus. <!ELEMENT elt0 (elt1+)> <!ELEMENT elt0 (elt1+,elt2?,elt3)> Balise avec des alternatives : <!ELEMENT elt0 (elt1 elt2)> <!ELEMENT elt0 (elt1 elt2)*>
3. Document Type Descriptor(DTD) 18 Définition des éléments (balises) et de leurs contenus Exemple <!ELEMENT elt0 (elt1* elt2* elt3*)> <elt0> <elt2> ( ) </elt2> <elt2> ( ) </elt2> </elt0> <elt0> <elt3> ( ) </elt3> <elt2> ( ) </elt2> </elt0> <!ELEMENT elt0 (elt1 elt2 elt3)*> <elt0> <elt2> ( ) </elt2> <elt3> ( ) </elt3> <elt1> ( ) </elt1> </elt0> Balise avec des contenus mixtes : <!ELEMENT elt0 (#PCDATA elt1 elt2)*> Balise sans contenu : <!ELEMENT mabalisevide EMPTY> Balise avec éléments quelconques : <!ELEMENT mabalise ANY> <elt0> Blabla <elt1> Texte </elt1> Blabla <elt2> Texte </elt2> </elt0>
3. Document Type Descriptor(DTD) 19 Définition des attributs <!ATTLIST nom_balise attribut1 CDATA #REQUIRED attribut2 CDATA #IMPLIED > Le nom des attributs doivent être des noms XML : le premier caractère est une lettre quelconque ou un "_" attribut1 est obligatoire (#REQUIRED ) alors que attribut2 est optionnel (#IMPLIED). Les attributs peuvent avoir plusieurs types, le plus courant est CDATA On peut déclarer un attribut avec une valeur par défaut <!ATTLIST elt attr CDATA "valeur"> Exemple <!ATTLIST Book ISBN CDATA #REQUIRED Price CDATA "0" Editor CDATA #IMPLIED>
3. Document Type Descriptor(DTD) 20 Définition des attributs Les types des attributs CDATA : Chaîne de caractères NMTOKEN : un nom XML mais sans restriction sur le premier caractère. Il ne peut pas contenir d'espace. <!ATTLIST ville nom CDATA #REQUIRED code NMTOKEN #REQUIRED> NMTOKENS : Une suite de NMTOKEN, séparés par des espaces Enumération : On peut définir une liste de valeurs possibles pour un attribut <!ATTLIST img format (GIF JPEG PNG) "PNG">
3. Document Type Descriptor(DTD) 21 Définition des attributs Les types des attributs ID :nom XML qui identifie de manière unique l'élément. Notion similaire à une clé primaire dans le modèle relationnel. L'ID ne peut être un nombre car c'est un nom XML. IDREF : Contient un ID. IDREFS : Une suite de IDREF séparée par des espaces. <!ELEMENT book (section)*> <!ELEMENT section (#PCDATA ref)*> <!ATTLIST section att_id ID #IMPLIED> <!ELEMENT ref EMPTY> <!ATTLIST ref att_idref IDREF #REQUIRED> <book> <section att_id="sec0"> Une référence <ref att_idref="sec1"/> à une section </section> <section att_id="sec1"> Du texte sans référence </section> <section att_id="sec2"> Une référence <ref att_idref ="sec2"/></section> </book>
3. Document Type Descriptor(DTD) 22 Exemple de DTD avec le fichier XML correspondant <?xml version="1.0" encoding="utf-8" standalone="no"?> <!--Exemple CM DTD--> <!DOCTYPE Bookstore SYSTEM "Exemple1_CMDTD.dtd" > <Bookstore> <Book ISBN="ISBN-2212135602" Price="32"> <Title> Les bases de données NoSQL </Title> <Authors> <Author> <First_Name>Rudi</First_Name> <Last_Name>Bruchez</Last_Name> </Author> </Authors> </Book> <Book ISBN="ISBN-2711786749" Price="169" Editor="Vuibert"> <Title>Ingénierie des systèmes d'information Merise </Title> <Authors> <Author> <First_Name>Dominique</First_Name> <Last_Name>Nanci</Last_Name> </Author> <Author> <First_Name>Bernard</First_Name> <Last_Name>Espinasse</Last_Name> </Author> </Authors> <Remark> Prix liés à la rareté du livre - vendeur professionel </Remark> </Book> </Bookstore> <!ELEMENT Bookstore (Book)*> <!ELEMENT Book (Title, Authors, Remark?)> <!ATTLIST Book ISBN CDATA #REQUIRED Price CDATA #REQUIRED Editor CDATA #IMPLIED> <!ELEMENT Title (#PCDATA)> <!ELEMENT Authors (Author+)> <!ELEMENT Remark (#PCDATA)> <!ELEMENT Author (First_Name, Last_Name)> <!ELEMENT First_Name (#PCDATA)> <!ELEMENT Last_Name (#PCDATA)> Exemple1_CMDTD.dtd Exemple1_CMDTD.xml
3. Document Type Descriptor(DTD) 23 Exemple de DTD avec utilisation des ID et IDREFs <?xml version="1.0" encoding="utf-8" standalone="no"?> <!--Exemple CM DTD--> <!DOCTYPE Bookstore SYSTEM "ExempleCM5DTD.dtd" > <Bookstore> <Book ISBN="ISBN-2212135602" Price="32" Authors="RB"> <Title>Les bases de données NoSQL</Title> </Book> <Book ISBN="ISBN-2711786749" Price="169" Authors="DN BE" Editor="Vuibert"> <Title>Ingénierie des systèmes d'information Merise</Title> <Remark> Amazon.com says: Buy this book bundled with <BookRef book="isbn-2212135602" /> - a great deal! </Remark> </Book> <Author Ident="RB"> <First_Name>Rudi</First_Name> <Last_Name>Bruchez</Last_Name> </Author> <Author Ident="DN"> <First_Name>Dominique</First_Name> <Last_Name>Nanci</Last_Name> </Author> <Author Ident="BE"> <First_Name>Bernard</First_Name> <Last_Name>Espinasse</Last_Name> </Author> </Bookstore> <!DOCTYPE Bookstore [ <!ELEMENT Bookstore (Book*, Author*)> <!ELEMENT Book (Title, Remark?)> <!ATTLIST Book ISBN ID #REQUIRED Price CDATA #REQUIRED Authors IDREFS #REQUIRED Editor CDATA #IMPLIED> <!ELEMENT Title (#PCDATA)> <!ELEMENT Remark (#PCDATA BookRef)*> <!ELEMENT BookRef EMPTY> <!ATTLIST BookRef book IDREF #REQUIRED> <!ELEMENT Author (First_Name, Last_Name)> <!ATTLIST Author Ident ID #REQUIRED> <!ELEMENT First_Name (#PCDATA)> <!ELEMENT Last_Name (#PCDATA)> ]> Exemple2_CMDTD.dtd Exemple2_CMDTD.xml
3. Document Type Descriptor(DTD) 24 Les entités Définies dans la DTD du document Permettent de définir des alias ou d'utiliser des caractères inaccessibles dans le jeu de caractères sélectionné Les entités générales (ou entités) sont utilisées dans le doc XML <!DOCTYPE elt[ <!ENTITY ADN "Acide désoxyribonucléique"> ]> <elt>l'&adn; est une molécule complexe. </elt> Pour référencer l'entité, on encadre son nom par les caractères &' et ';' Les entités paramétrées sont utilisées dans la DTD. <!ENTITY % heading "H1 H2 H3 H4 H5 H6"> Ici toute occurrence de %heading; doit être remplacée par H1 H2 H3 H4 H5 H6 dans la DTD. Pour référencer l'entité, on encadre son nom par les caractères '%' et ';' <!ENTITY % heading "H1 H2 H3 H4 H5 H6"> <!ELEMENT %heading; (#PCDATA %fontstyle; %phrase; )* >