XML : Extensible Markup Language SGML Une introduction (1) http://kiwi.emse.fr/3a/dn.html Ph. Jaillon / J.J. Girardot J.J. GIRARDOT - EMSE 10/2004 1 Standard Generalized Markup Language Norme ISO-8879 (1986) Caractéristiques Langage à balises, permettant la création de nouveaux formats description des formats par des dtd, document type definition, (ex : DocBook) Syntaxe complexe délimiteurs de balises, entités, etc. "Simple" à saisir appels abrégés, fermeture automatique J.J. GIRARDOT - EMSE 10/2004 3 Qu'est-ce que XML? Les initiales de extended Mark-up Language Un langage de description de documents Un successeur de SGML qui tient compte : Des leçons de SGML et d'html De l'existence du Web, de Java Une recommandation du W3C (World Wide Web Consortium) Un format d'échange de stockage Exemple de document SGML <!DOCTYPE document SYSTEM "document.dtd"> <DOCUMENT> <head> <title>le titre</title> <author> Vincent Zoonekynd <date>avril 2000</date> <body> <abstract> <p> Le contenu de l'abstract </abstract> <toc><sect> <stitle>un sous-titre</stitle> Un paragraphe <p> Un second avec du TeX : <verb lang=tex>\newcommand{\noun}[1] {\textsc{#1}}</verb> </sect> J.J. GIRARDOT - EMSE 10/2004 2 <sect> <stitle>un autre sous-titre <sect1> <stitle>un titre de sous-section</stitle> <p> Un autre paragraphe </p> </sect1> <sect1> <stitle>autre sous-section</stitle> <p> Encore un <em>paragraphe</em> </p> </sect1> </body> </document> J.J. GIRARDOT - EMSE 10/2004 4
Le DTD correspondant <!ENTITY % text "#PCDATA img ref label a link itemize enum descrip verb perl tt em html latex"> <!ENTITY % simpletext "#PCDATA tt em"> <!ELEMENT document - - (head,body)> <!ELEMENT head O O (title, author?, date?)> <!ELEMENT title - O (#PCDATA)> <!ELEMENT author - O (#PCDATA)> <!ELEMENT date - O (#PCDATA)> <!ELEMENT body O O (abstract?,toc?,sect*)> <!ELEMENT abstract - O (p+)> <!ELEMENT toc - O EMPTY> <!ELEMENT sect - O (stitle, (p sect1)+)> <!ELEMENT sect1 - O (stitle, (p sect2)+)> <!ELEMENT sect2 - O (stitle, p+)> <!ELEMENT stitle O O (%simpletext)+> <!ELEMENT p O O (%text)+> <!ELEMENT tt - - (#PCDATA)> <!ELEMENT em - - (#PCDATA)> <!ELEMENT html - O EMPTY> <!ATTLIST html src CDATA #REQUIRED> <!ELEMENT latex - O EMPTY> <!ATTLIST latex src CDATA #REQUIRED> <!ELEMENT img - O EMPTY> <!ATTLIST img src CDATA #REQUIRED> <!ELEMENT a - - (%simpletext)+> <!ATTLIST a href CDATA #REQUIRED> <!ELEMENT link - - (linktext, href+)> <!ELEMENT href - - (#PCDATA)> <!ELEMENT linktext - - (%simpletext)+> <!ATTLIST sect id ID #IMPLIED> <!ATTLIST sect1 id ID #IMPLIED> <!ATTLIST sect2 id ID #IMPLIED> <!ELEMENT label - O EMPTY> <!ATTLIST label id ID #REQUIRED> <!ELEMENT ref - O EMPTY> <!ATTLIST ref id IDREF #REQUIRED> <!ELEMENT itemize - - (item+)> <!ELEMENT enum - - (item+)> <!ELEMENT item - O (p+)> <!ELEMENT descrip - - (tag,p+)+> <!ELEMENT tag - - (%simpletext)+> <!ELEMENT verb - - (#PCDATA)> <!ATTLIST verb lang (tex perl shell) tex> <!ENTITY LaTeX "LaTeX"> <!ENTITY latex "LaTeX"> <!ENTITY TeX "TeX"> <!ENTITY tex "TeX"> <!ENTITY lt "<"> <!ENTITY gt ">"> <!ENTITY amp "&"> <!ENTITY dollar "$"> <!ENTITY oe "oe"> <!ENTITY OE "OE"> J.J. GIRARDOT - EMSE 10/2004 5 Inconvénients de SGML Très grande complexité de la syntaxe Macros, abréviations, raccourcis, omissions... Ambiguïté de certaines notations Processeurs complexes à écrire Aucun processeur complet Non compatibilité entre processeurs Rigueur et laxisme des descriptions Nécessité de disposer d'un DTD Laxisme possible dans l'écriture des documents Nécessités d'évolution du langage Orienté «document» plus que «données» Types de données manquants, adaptation au Web... J.J. GIRARDOT - EMSE 10/2004 6 HTML HTML est un langage à balises adapté à la description et à la présentation de documents hypertexte et multimédia Ensemble fixe de balises prédéfinies C'est un langage pouvant être décrit par SGML http://www.w3.org/tr/html4/strict.dtd Introduit par Tim Berners Lee et Robert Caillau au CERN en 1991. Plusieurs évolutions, de 1.0 à 4.0 HTML met en oeuvre deux grandes idées : l hypertexte (1945) les langages à balises (1970) J.J. GIRARDOT - EMSE 10/2004 7 Inconvénients de HTML HTML décrit une structure (simpliste) de documents <html> <head><title> </title></head> <body> </body> </html> Il constitue également un langage (trop simple) de formatage et de présentation. Texte en <b>gras</b> et en <i>italique</i>. Mélange fréquent des genres (structuration et présentation) J.J. GIRARDOT - EMSE 10/2004 8
Une évolution nécessaire Nécessité de disposer d un formalisme général pour : Structurer les documents, mais aussi des données Les diffuser et les présenter sur le web Les traiter informatiquement Plus encore SGML : bon candidat, mais vieux et trop complexe à mettre en oeuvre Une complexité destinée à simplifier la création manuelle de documents Il fallait privilégier la rigueur et l automatisation des traitements J.J. GIRARDOT - EMSE 10/2004 9 XML : Objectifs initiaux Utilisation simple à travers l'internet Support d'une grande variété d'applications. Compatibilité avec SGML. Simplicité d'écriture d'outils de manipulation de documents. Nombre de caractéristiques optionnelles réduit au strict minimum. Lecture possible (et aisée) des documents par les individus. Conception rapide de la norme. Conception formelle et concise de la norme. Simplicité de création des documents XML. La taille prise par les balises dans un document était sans importance. J.J. GIRARDOT - EMSE 10/2004 10 XML : état actuel XML est une boite à outil pour décrire des langages à balises Il n existe pas de balisages prédéfinis Chacun peut définir un balisage adapté à ses propres besoins Chaque description de langage XML est dédiée à un domaine d application Ces langages peuvent partager de nombreux aspects On dispose d outils génériques et standards pour traiter les documents XML : Les normes Gérées par le W3 Consortium http://www.w3.org/ XML : la norme de base http://www.w3.org/xml/ Normalisation de certaines extensions : Namespaces, XInclude, XML Base, Xlink, XPointer, XPath, DTD, XML Schema, XSLT, XQuery, DOM, SAX, RDF, SOAP, SMIL, SVG, Math ML J.J. GIRARDOT - EMSE 10/2004 11 J.J. GIRARDOT - EMSE 10/2004 12
titre Carottes au beurre Vue conceptuelle de XML recette id="rf200-153b" categorie="plat-principal" ingredient Carottes nouvelles qt 800 g ingredients ingredient Beurre qt... 50 g Un document XML est un arbre ordonné et étiqueté: Les feuilles contiennent des données sous forme de chaînes de caractères Chaque élément (un noeud de l'arbre) porte un label (Tag) et a un ensemble d attributs Un attribut a un nom et une valeur.... Ces noeuds peuvent avoir des fils J.J. GIRARDOT - EMSE 10/2004 13 Le document XML sous forme textuelle <recette id="rf200-153b" categorie="plat-principal"> <titre> Carottes au beurre </titre> <ingredients> <ingredient>carottes nouvelles <qt>800 g</qt></ingredient> <ingredient>beurre <qt>50 g</qt></ingredient>... </ingredients> <preparation>... </preparation> </recette> J.J. GIRARDOT - EMSE 10/2004 14 Vision concrète de XML Un fichier texte (Unicode) avec un balisage et des méta-informations. balise d'ouverture, de nom foo...<foo attr="val"...>...</foo> Notation abrégée pour les éléments vides :...<fooattr="val".../>... contenu de l'élément un attribut, de nom attr et de valeur val balise de fermeture XML : Noms de balises Name ::= (Letter '_' ':') (NameChar)* NameChar ::= Letter Digit '.' '-' '_' ':' CombiningChar Extender Le caractère ':' dans les noms XML est réservé à l'usage des Namespaces. L'usage du nom 'xml' (quelle qu en soit la casse) est réservé. Attention : majuscules et minuscules ne sont pas équivalentes dans les identificateurs. J.J. GIRARDOT - EMSE 10/2004 15 J.J. GIRARDOT - EMSE 10/2004 16
Document XML bien formé Un texte est un document XML bien formé ssi: il s'agit d'un "document". il respecte toutes les contraintes de la spécification. les éléments analysés qui le composent sont bien formés Document ::= prolog element Misc* Respecter la définition de "document" implique: il contient un ou plusieurs éléments. il y a exactement un élément (racine) et les autres éléments sont correctement imbriqués XML : syntaxe Prologue prolog ::= XMLDecl? Misc* (doctypedecl Misc*)? XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?> <?xml version="1.0"?> Commentaires <!--declarations for <head> & <body> --> J.J. GIRARDOT - EMSE 10/2004 17 J.J. GIRARDOT - EMSE 10/2004 18 XML : syntaxe Les balises element ::= EmptyElemTag STag content ETag STag ::= '<' Name (S Attribute)* S? '> ETag ::= '</' Name S? '> content ::= (element CharData Reference CDSect PI Comment)* EmptyElemTag ::= '<' Name (S Attribute)* S? '/> XML : syntaxe Attributs Attribute ::= Name Eq AttValue Eq ::= S? '=' S? AttValue ::= '"' ([^<&"] Reference)* '"' "'" ([^<&'] Reference)* "'" Références : Reference ::= EntityRef CharRef EntityRef ::= '&' Name ';' CharRef::= '&#' [0-9]+ ';' '&#x' [0-9a-fA-F]+ ';' J.J. GIRARDOT - EMSE 10/2004 19 J.J. GIRARDOT - EMSE 10/2004 20
Contenu textuel Texte compris entre une balise ouvrante et la balise fermante correspondante Caractères "<", "&" et séquence "]]>" interdits Utiliser <, & ou > Construction spécifique CDATA Sections <![CDATA[<greeting>Hello, world!</greeting> ]]> XML : codage des données Spécification du codage des documents Par défaut il s'agit de UTF8. C'est une erreur que d'utiliser un autre encodage sans le spécifier Exemples : <?xmlversion="1.0" encoding='utf-8'?> <?xmlversion="1.0" encoding='iso-8859-1'?> Remarque : l'ascii est un sous ensemble commun de l'utf8 et de l'iso-8859 Document XML valide J.J. GIRARDOT - EMSE 10/2004 21 Un document XML est valide si : Il est «bien formé» Il respecte une certaine grammaire, qui indique : les caractéristiques de la racine du document les balises autorisées dans le document les contenus autorisés de chaque balise (texte, balises) les noms et caractéristiques des attributs autorisés pour chaque balise Cette grammaire d'un document peut s'exprimer, pour XML, au travers de deux formalismes : les DTD (Document Type Definition) les XML Schema J.J. GIRARDOT - EMSE 10/2004 23 DTD et XMLSchemas J.J. GIRARDOT - EMSE 10/2004 22 DTD : version historique apparue avec SGML Syntaxe inspirée de SGML, mais non compatible Permet de décrire balises, attributs et contenus Grammaire surtout adaptée à des documents textuels XMLSchema Syntaxe XML Offre plus de possibilités que les DTD contraintes sur les types de données manipulées contraintes sur les enchaînements et nombre des contenus possibilité de «mélanger» des schémas J.J. GIRARDOT - EMSE 10/2004 24
XML Document défini par un DTD Définition de la racine du document et déclaration du document type par : <!DOCTYPE root-element [ doctype-declaration... ]> Précise où est définie la DTD : Dans le document lui-même elle se place entre crochets À un autre emplacement, qui peut être privé (mot-clef SYSTEM, identification de fichier) public (mot-clef PUBLIC, URL de document) Exemples (1) Référence à un DTD public : <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd"> <!DOCTYPE doc PUBLIC "-//Henry S. Thompson//DTD Simple XML Document//EN" "" > Référence à un DTD local : <!DOCTYPE praat-textgrid SYSTEM "praat-textgrid.dtd"> <!DOCTYPE report SYSTEM "report.dtd"> J.J. GIRARDOT - EMSE 10/2004 25 J.J. GIRARDOT - EMSE 10/2004 26 Exemples (2) Document contenant son DTD <!DOCTYPE test [ <!ELEMENT test (greeting)> <!ELEMENT greeting #PCDATA> ]> <test> <greeting>hello, World!</greeting> </test> J.J. GIRARDOT - EMSE 10/2004 27 Exemple (3) <!DOCTYPE cardbook [ -- Déclaration locale -- <!ELEMENT cardbook (card*)> <!ELEMENT card (name, email, photo)> <!ELEMENT name (#PCDATA)> <!ELEMENT email (#PCDATA)> <!ELEMENT photo EMPTY> <!ATTLIST...> ]> <cardbook> <card> <name>fabienne DURANT</name> <email>fdurant@messel.emse.fr</email> <photo img="http://messel.emse.fr/local/photos/2019/fdurant.jpeg"/> </card> <card> <name>paul DUPON</name> <email>pdupon@messel.emse.fr</email> <photo img="http://messel.emse.fr/local/photos/2019/pdupon.jpeg"/> </card> <cardbook> J.J. GIRARDOT - EMSE 10/2004 28
Définition d'un élément Déclaration d'élément : Définit les caractéristiques (contenu, attribut) de tout élément qui porte ce nom. <!ELEMENT element-name content-model> Le nom respecte la syntaxe des identificateurs Le contenu décrit ce qui est autorisé dans la balise rien texte autres balises, et leur ordre éventuel mélanges de texte et d'autres balises Élément : modèle de contenu EMPTY : pas de contenu ANY : n importe quel contenu (#PCDATA element-name...) : «mélange» : chaînes de caractères et éléments listés «Expression régulière» d éléments : choix: (.........), séquence: (...,...,...) facteur de répétition : optionnel :?, zéro ou plus : *, un ou plus : + DTD : Attributs J.J. GIRARDOT - EMSE 10/2004 29 <!ATTLIST element-name attr-name attr-type attr-default...> attr-name Nom de l'attribut attr-type Type de l attribut : CDATA: n importe quelle valeur (par défaut) (value...) : énumération des valeurs possibles ID, IDREF, IDREFS : ID la valeur de cet attribut doit être unique ("element identity"), IDREF la valeur de cet attribut doit correspondre à un ID (référence à un élément) attr-default Contrainte sur l'attribut : #REQUIRED : l attribut doit être explicitement renseigné #IMPLIED : l attribut est optionnel, pas de valeur par défaut «value»: si aucune valeur n est fournie, cette valeur est insérée par défaut #FIXED «value» : comme précédemment, mais seule cette valeur est autorisée J.J. GIRARDOT - EMSE 10/2004 31 Exemples J.J. GIRARDOT - EMSE 10/2004 30 <!ATTLIST AUTHOR role (author techwriter) "author"> <!ATTLIST praat-textgrid version CDATA #REQUIRED type CDATA #REQUIRED class NMTOKEN #FIXED "TextGrid" xmin CDATA #REQUIRED xmax CDATA #REQUIRED tiers (exists none) #REQUIRED size CDATA #REQUIRED > <!ATTLIST acm name CDATA #IMPLIED code CDATA #IMPLIED > <!ATTLIST PUBLICATION format (html pdf ps)#required> <!ATTLIST style id ID #REQUIRED> <!ATTLIST bibitem type CDATA #REQUIRED label ID #REQUIRED> J.J. GIRARDOT - EMSE 10/2004 32
DTD : entités Une entité est une macro-définition définie dans la DTD ou le document lui-même pouvant être insérée dans le document Syntaxe de définition <!ENTITY emse "École Nationale Supérieure des Mines de Saint- Étienne"> Syntaxe d'utilisation &emse; Note J.J. GIRARDOT - EMSE 10/2004 33 Un document peut utiliser un DTD existant en le modifiant ou en ajoutant des déclarations : <!DOCTYPE books PUBLIC "-//LBIN//DTD IEEE Magazines//EN" "xmlarticle.dtd" [ <!ENTITY A1003 SYSTEM "a1003.xml"> <!ENTITY A1004 SYSTEM "a1004.xml"> <!ENTITY A1005 SYSTEM "a1005.xml"> <!ENTITY A1010 SYSTEM "a1010.xml"> <!ENTITY A1017 SYSTEM "a1017.xml"> <!ENTITY A1025 SYSTEM "a1025.xml"> <!ENTITY A1045 SYSTEM "a1045.xml"> <!ENTITY A1051 SYSTEM "a1051.xml"> <!ENTITY A1067 SYSTEM "a1067.xml"> <!ENTITY A1079 SYSTEM "a1079.xml"> ]> J.J. GIRARDOT - EMSE 10/2004 35 DTD : Exemple <!ELEMENT collection (description,recipe*)> <!ELEMENT description ANY> <!ELEMENT recipe (title,ingredient*,preparation,comment?,nutrition)> <!ELEMENT title (#PCDATA)> <!ELEMENT ingredient EMPTY> <!ATTLIST ingredient name CDATA #REQUIRED amount CDATA #IMPLIED unit CDATA #IMPLIED> <!ELEMENT preparation (step*)> <!ELEMENT step (#PCDATA)> <!ELEMENT comment (#PCDATA)> <!ELEMENT nutrition EMPTY> <!ATTLIST nutrition protein CDATA #REQUIRED carbohydrates CDATA #REQUIRED fat CDATA #REQUIRED calories CDATA #REQUIRED alcohol CDATA #IMPLIED> Limites des DTD J.J. GIRARDOT - EMSE 10/2004 34 Syntaxe spécifique Typage Pas de possibilité de typer les contenus Typage faible des valeurs d attributs (orienté document plutôt que XML-Data) Pas de modélisation partielle : la modélisation doit être complète Pas d intégration des espaces de noms J.J. GIRARDOT - EMSE 10/2004 36
Namespace : conflits de noms Le mélange des langages XML peut provoquer des conflits de noms. <envelope> <body> <documentation> <html> <head><title>soap 1.1</TITLE></head> <body> <h1>simple Object Access Protocol </body> </html> </documentation> </body> </envelope> J.J. GIRARDOT - EMSE 10/2004 37 Namespace : qualifier les espaces de noms Un namespace se déclare en utilisant : l attribut xmlns (namespace par défaut) En préfixant un nom par xmlns: La valeur de cet attribut est une URI : le «namespace name» Se doit d avoir des propriétés d unicité et de persistance Un namespace est défini pour l élément et tout son contenu Un élément préfixé par un namespace est un «qualified name» J.J. GIRARDOT - EMSE 10/2004 38 Namespace : exemple <?xmlversion="1.0"?> <!--initially, thedefaultnamespaceis "books" --> <bookxmlns='urn:loc.gov:books' xmlns:isbn='urn:isbn:0-395-36341-6 > <title>cheaperbythedozen</title> <isbn:number>1568491379</isbn:number> <notes> <pxmlns='urn:w3-org-ns:html'> Thisisa <i>funny</i> book! </p> </notes> </book> J.J. GIRARDOT - EMSE 10/2004 39 XML schema Syntaxe XML (il existe un Schema for Schemas) Utilisation et support des Namespaces Déclarations orientées objet (héritage, types abstraits ) Définition de types global (=top-level) et local (=inlined) Modularité (inclusion de schema et redéfinitions) Structure auto-documentée Expression de la cardinalité des sous-éléments Valeurs nulles (absence de contenus) Attributs et éléments par défaut Any-element, any-attribute Unicité des contraintes et ID/IDREF attribute scope Expressions régulières pour specifier des chardata et des attributs valides Nombreux types de données prédéfinis pour les contenus et les attributs J.J. GIRARDOT - EMSE 10/2004 40
XML Schema : exemple <schema xmlns="http://www.w3.org/2001/xmlschema" xmlns:b="http://businesscard.org" targetnamespace="http://businesscard.org"> <card xmlns="http://businesscard.org"> <name>john Doe</name> <title>ceo, Widget Inc.</title> <email>john.doe@widget.com</email> <phone>(202) 456-1414</phone> <logo url="widget.gif"/> </card> <element name="card" type="b:card_type"/> <element name="name" type="string"/> <element name="title" type="string"/> <element name="email" type="string"/> <element name="phone" type="string"/> <element name="logo" type="b:logo_type"/> <complextype name="card_type"> <sequence> <element ref="b:name"/> <element ref="b:title"/> <element ref="b:email"/> <element ref="b:phone" minoccurs="0"/> <element ref="b:logo" minoccurs="0"/> </sequence> </complextype> <complextype name="logo_type"> <attribute name="url" type="anyuri"/> </complextype> </schema> J.J. GIRARDOT - EMSE 10/2004 41 Influence de XML sur HTML HTML est un type de document à structure figée HTML devrait être un «langage XML» Compatibilité syntaxique pour les outils informatiques XHTML offre une vision XML de HTML : <?xml version="1.0" encoding="utf-8"?> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head><title>hello world!</title></head> <body><p>foobar</p></body> </html> J.J. GIRARDOT - EMSE 10/2004 42 Les langages de description Il existe des DTD ou des schémas pour de nombreux usages Graphique SVG Html XHTML Les outils Librairies libxml et libxslt de D. Veillard Xmllint et xsltproc Librairies JAVA XT et XP de James Clark Xerces et Xalan du projet Apache J.J. GIRARDOT - EMSE 10/2004 43 J.J. GIRARDOT - EMSE 10/2004 44
Programmation Standardisation des api de programmation SAX : vision événementielle d un flot XML DOM : Accès standard à la représentation mémoire Des bibliothèques existent pour de nombreux langages : C, JAVA, PERL, PHP SAX SAX est la norme pour les analyseurs à évènements : peu gourmands en mémoire, ils fonctionnent sur un système de "callback". Événements SAX startdocument startelement endelement Characters Exemples : XML::Parser, XP,... J.J. GIRARDOT - EMSE 10/2004 45 J.J. GIRARDOT - EMSE 10/2004 46 DOM Classes représentant le document XML en mémoire class Node appendchild, insertbefore, getattributes, getnodevalue, getchildnodes, getfirstchild, getlastchild, getparentnode, hasattributes, haschildnodes class Element extends Node getattribute, getattributenode, getelementsbytagname, gettagname class CharacterData extends Node getdata, setdata class Attr extends Node getname, getownerelement, getspecified, setvalue J.J. GIRARDOT - EMSE 10/2004 47