380 likes | 530 Views
XML eXtensible Markup Language. Benjamin SACLIER (MFI) Sources : Georges Gardarin, Jean-Pierre Fournier. XML est issu de la Gestion de Documents (GED) Séparation du fond de la forme . Forme = présentation à partir de la structure (style) Fond = structure + données (contenu)
E N D
XMLeXtensible Markup Language Benjamin SACLIER (MFI) Sources : Georges Gardarin, Jean-Pierre Fournier
XML est issu de la Gestion de Documents (GED) • Séparation du fond de la forme. • Forme = présentation à partir de la structure (style) • Fond = structure + données (contenu) • Langage à balises • encadrement des champs par des balises début et fin • Multiples précurseurs dont les plus connues : • SGML pour la structuration • HTML pour la présentation
XML= un nouveau langage d'échange basé sur le balisage • XML= plus simple que SGML • XML= plus ouvert que HTML • XML = développé par XML Working Group dirigé par le W3C (depuis 1996) • XML 1.0 = recommandation officielle du W3C depuis le 10 février 1998
XML • Langage portable, échangeable, universel • lisible • présentable (navigateurs Web) • Avec garantie possible de cohérence des données • sans SGBD mais compatible avec tous les SGBD (import-export)
XML standardise la manière dont l'information est: • échangée • présentée • archivée • retrouvée • transformée • cryptée • ...
XML c’est quoi ? • un langage de balises, héritier de html, sgml… • un métalangage : l’utilisateur définit lui-même ses balises exemple xml : <coucou>Un texte</coucou>
XML exemple simple <?xml version="1.0" encoding="UTF-8"?> <listePersonnes> <personne statut ="etudiant" > <nom>Dupont</nom> <prenom>Arthur</prenom> <adresse pays="France"> <numero>10</numero> <rue>rue des Alouettes</rue> <codePostal>91400</codePostal> <ville>Orsay</ville> </adresse> </personne> </listePersonnes> Encodage par défaut Balises ouvrantes et fermantes Balise avec attributs
Modèle arborescent @Type Français *** @Catégorie Nom Le Moulin de Mougin Restaurant Manager Dupuis 7 No Des Vignes Adresse Rue Ville Mougin
Au point où nous en sommes • Au point où nous en sommes :un document XML est identique à un fichier textuel, mais : • il est un peu plus portable (indication de l’encodage employé) • chaque information est associée à une « étiquette », sa balise, donc plus facilement identifiable et contrôlable • la qualité de sa structure est facile à vérifier • pour l’instant, la cohérence de ses informations n’est pas garantie…
Incohérences sémantique • Exemple d’un fichier XML de structure correcte avec des incohérences sémantiques: <?xml version="1.0" encoding="UTF-8"?> <!-- commentaire xml --> <listePersonnes> <personne statut="etudiant"> <nom>Dupont</nom> <prenom>12342</prenom> <numero>10</numero> <adresse pays="France"> <rue>rue des Alouettes</rue> <codePostal>Le Guichet</codePostal> <ville>Orsay</ville> </adresse> </personne> </listePersonnes> Prénom numérique numéro mal placé, adresse incomplète…
Contrôle du xml • XML n’est vraiment puissant que si la cohérence est contrôlée pour cela, deux technologies au choix: • le DTD • rudimentaire mais suffisant dans la plupart des cas • syntaxe différente • le XML-Schéma • puissant (données plus fortement typées) • syntaxe de style xml • DTD ou/et schéma permettent de définir son propre langage basé sur XML • Vocabulaire (balises) • Grammaire (imbrications) • les données de contrôle peuvent être dans le fichier xml lui-même, dans un fichier annexe, sur le Web
DTD • Une DTD décrit les balises autorisées dans un document xml, l’ordre dans lequel elles doivent être imbriquées, leurs éventuels attributs, les types des informations qu’elles encapsulent <!ELEMENT listePersonnes (personne+) > <!ELEMENT personne (nom, prenom?, adresse)> <!ATTLIST personne statut CDATA #REQUIRED > <!ELEMENT nom (#PCDATA) > <!ELEMENT prenom (#PCDATA) > <!ELEMENT adresse (numero?, rue, codePostal, ville)> <!ATTLIST adresse pays NMTOKENS #IMPLIED> <!ELEMENT numero (#PCDATA) > <!ELEMENT rue (#PCDATA) > <!ELEMENT codePostal (#PCDATA) > <!ELEMENT ville (#PCDATA) >
Lien xml DTD séparée <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE listePersonnes SYSTEM 'listePersonnes.dtd' > <listePersonnes> <personne statut ="etudiant" > <nom>Dupont</nom> <prenom>12342</prenom> <adresse pays="France"> <numero>10</numero> <rue>rue des Alouettes</rue> <codePostal>Le Guichet</codePostal> <ville>Orsay</ville> </adresse> </personne> </listePersonnes>
XML / DTD 1 seul fichier <?xml version="1.0" encoding="iso-8859-1" standalone="yes"?> <!DOCTYPE listePersonnes [ <!ELEMENT listePersonnes (personne+) > <!ELEMENT personne (nom, prenom?, adresse)> <!ATTLIST personne statut CDATA #REQUIRED > <!ELEMENT nom (#PCDATA) > <!ELEMENT prenom (#PCDATA) > <!ELEMENT adresse (numero?, rue, codePostal, ville)> <!ATTLIST adresse pays NMTOKENS #IMPLIED> <!ELEMENT numero (#PCDATA) > <!ELEMENT rue (#PCDATA) > <!ELEMENT codePostal (#PCDATA) > <!ELEMENT ville (#PCDATA) >]> <listePersonnes> <personne> <statut libellé="etudiant" /> <nom>Dupont</nom> <prenom>12342</prenom> <adresse pays="France"> <numero>10</numero> <rue>rue des Alouettes</rue> <codePostal>Le Guichet</codePostal> <ville>Orsay</ville> </adresse> </personne> </listePersonnes>
Lien DTD web <?xml version="1.0" encoding="iso-8859-1" standalone="no"?> <!DO'ChTtYtPpE: /l/ilsotceaPlehrossotn/nleisstSeYPSeTrEsMo nnes.dtd' > <listePersonnes> <personne statut ="etudiant" > <nom>Dupont</nom> <prenom>12342</prenom> <adresse pays="France"> <numero>10</numero> <rue>rue des Alouettes</rue> <codePostal>Le Guichet</codePostal> <ville>Orsay</ville> </adresse> </personne> </listePersonnes>
Déclaration d'élément simple • <! ELEMENT balise (définition) > • Le paramètre définition représente soit un type de donnée prédéfini, soit un élément de données composé, constitué lui même d'éléments • Types prédéfinis • ANY : L'élément peut contenir tout type de donnée • EMPTY : L'élément ne contient pas de données spécifiques • #PCDATA : L'élément doit contenir une chaîne de caractère
Déclaration d'élément composé • Définit une séquence ou un choix d'éléments • Syntaxe spécifique avec opérateurs de composition d'éléments : <! ELEMENT balise (composition) >
Déclaration d’attributs • <! ATTLIST balise Attribut Type Mode > • balise spécifie l'élément auquel est attaché l'attribut • Attribut est le nom de l'attribut déclaré • Type définit le type de donnée de l'attribut choisi parmi: • CDATA • Chaînes de caractères entre guillemets ("aa") non analysées • Enumération • Liste de valeurs séparées par | • <! ATTLIST balise Attribut (Valeur1 | Valeur2 | ... ) > • ID et IDREF • Clé et référence à clé • Mode précise le caractère obligatoire ou non de l'attribut • #REQUIRED, #IMPLIED ou #FIXED
Exemple d’une DTD <!ELEMENT listePersonnes (personne+) > <!ELEMENT personne (nom, prenom?, adresse)> <!ATTLIST personne statut CDATA #REQUIRED > <!ELEMENT nom (#PCDATA) > <!ELEMENT prenom (#PCDATA) > • une balise « listePersonnes » contient au moins 1 balise personne • une balise « personne » contient une balise nom, une éventuelle balise prenom, une balise adresse, le tout dans l’ordre indiqué • la balise « personne » contient un attribut « statut » obligatoire • + signifie « au moins une » • * signifie « au moins zéro » • ? signifie « 0 ou 1 » • xxx | yyy signifie une de ces deux balises au choix • #PCDATA « parsed character data » • #REQUIRED = obligatoire, #IMPLIED = facultatif
XML Schéma • Limite des DTD • Description limitée dans des documents structurés • Problème de typage (PCDATA) • Exprimé dans un langage autre que XML • Pas les mêmes parseurs • Objectif de XML Schéma • Amélioration du typage • Amélioration de la structure • Nombre borné d’éléments inclus … • Remplace de plus en plus la DTD car exprimé en syntaxe XML et extensible
XML Schéma • Comme une DTD, le Schéma (xsd) permet de garantir la cohérence des données xml, mais : • sa syntaxe est de style xml • le niveau de précision est beaucoup plus élevé • Dans le document xml : <listePersonnes xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:noNamespaceSchemaLocation="listePersonnes.xsd">
XML Schéma • Déclaration des éléments et attributs • Nom • Typage similaire à l'objet • Spécification de types simples • Grande variété de types • Génération de types complexes • Séquence (Sequence) • Choix (Choice) • Tas (All)
Les types simples • string • Confirm this is electric • byte • -1, 126 • hexBinary • 0FB7 • boolean • true, false 1, 0 • time • 13:20:00.000, 13:20:00.000-05:00 • dateTime • 1999-05-31T13:20:00.000-05:00 • duration • P1Y2M3DT10H30M12.3S • float • -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN • integer • -126789, -1, 0, 1, 126789 • positiveInteger • 1, 126789 • negativeInteger • -126789, -1 • nonNegativeInteger • 0, 1, 126789 • nonPositiveInteger • -126789, -1, 0 • int • -1, 126789675 • unsignedInt • 0, 1267896754 • anyURI • http://www.example.com/,
Les types complexes • Définition d'objets complexes • <sequence> : collection ordonnée d'éléments typés • <all> : collection non ordonnée d'éléments typés • <choice>: choix entre éléments typés • Exemple <xsd:complexType name="AddresseFR"> <xsd:sequence> <xsd:element name="nom" type="xsd:string"/> <xsd:element name="rue" type="xsd:string"/> <xsd:element name="ville" type="xsd:string"/> <xsd:element name="codep" type="xsd:decimal"/> </xsd:sequence> <xsd:attribute name="pays" type="xsd:NMTOKEN" fixed="FR"/> </xsd:complexType>
Les Patterns • Contraintes sur type simple prédéfini • Utilisation d'expression régulières • Similaires à celles de Perl • Exemple <xsd:simpleType name="NumItem"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{3}-[A-Z]{2}"/> </xsd:restriction> </xsd:simpleType>
XML Schema:exemple (1) <xsd:schema xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <xsd:element name="commande" type="CommandeType"/> <xsd:element name="commentaire" type="xsd:string"/> <xsd:complexType name="CommandeType"> <xsd:sequence> <xsd:element name="livrer" type="Adresse"/> <xsd:element name="facturer" type="Adresse"/> <xsd:element ref="commentaire" minOccurs="0"/> <xsd:element name="produits" type="ProduitType"/> </xsd:sequence> <xsd:attribute name="date_com" type="xsd:date"/> </xsd:complexType>
XML Schema : exemple (2) <xsd:complexType name="ProduitType"> <xsd:sequence> <xsd:element name="produit" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="nom_prod" type="xsd:string"/> <xsd:element name="quantite"> <xsd:simpleType> <xsd:restriction base="xsd:positiveInteger"> <xsd:maxExclusive value="100"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="prix" type="xsd:decimal"/> <xsd:element ref="commentaire" minOccurs="0"/> <xsd:element name="date_livraison" type="xsd:date" minOccurs="0"/> </xsd:sequence> <xsd:attribute name="num_prod" type="xsd:positiveInteger" use="required"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:schema>
Feuille de style • La représentation de cette lettre en XML ne comporte aucune indication sur sa mise en page • Les aspects graphiques ou typographiques sont absents du source XML • Ces aspects seront définis par l’intermédiaire d’une feuille de style • Une feuille de style est un ensemble de règles pour spécifier la réalisation concrète d’un document sur un média particulier • On ajoute dans le début du fichier xml un lien vers la feuille de style, fichier xsl • <?xml-stylesheet type="text/xsl« href="transformateur.xsl"?> • Ce fichier peut être local ou accédé via une URL
Conception de DTD/Schéma • Possible à partir d’une modélisation ULM
Exemple DTD • Convertisseur TAC vers XML (metaf2xml) <!ENTITY % cloudType 'AC|ACC|ACSL|AS|CB|CBMAM|CC|CCSL|CI|CS|CU|CF|CUFRA|NS|SAC|SC|SCSL|ST|SF|STFRA|TCU'> <!ENTITY % colourCodes 'BLUplus|BLU|WHT|GRN|YLO|YLO1|YLO2|AMB|RED|FCSTCANCEL'> <!ENTITY % cloudCover 'FEW|SCT|BKN|OVC'> <!ENTITY % cloudFamily '0|1|2|3|4|5|6|7|8|9'> <!ENTITY % phenomDescr 'isFrequent|isOccasional|isIntermittent|isContinuous|isThick|isPrettyThick|isVeryThick|isThin|isPrettyThin|isVeryThin|isFeeble|isPrettyFeeble|isVeryFeeble|isLight|isPrettyLight|isVeryLight|isModerate|isLow|isLower|isIsolated|isConvective|isDissipated|inPastHour|baseBelowStation|isAloft|isAround|isFreezing|isPatchy'> <!ENTITY % unitRadiation 'kJmm|Jcmcm'> <!ENTITY % unitSpeed 'KT|MPS|KMH'> <!ENTITY % period '1d|24h|1h|n'> <!ENTITY % compassDir 'N|NNE|NE|ENE|E|ESE|SE|SSE|S|SSW|SW|WSW|W|WNW|NW|NNW'>
Exemple DTD <!ELEMENT taf (ERROR?, WARNING?, obsStation?, issueTime?, fcstPeriod?, reportModifier?, fcstNotAvbl?, sfcWind?, (CAVOK | (visPrev?, weatherList?, cloudList?, visVert?)), (turbulence | icing | windShearLvl | QNH)*, trendList?, (tempAt | tempMaxAt | tempMinAt | correctedAt | amendedAt | limMetwatch | autoMetwatch | amendment)*, tafRemarkList?)> <!ATTLIST taf s CDATA #REQUIRED>
Exemple xml <precipInd s="1"> <precipIndVal v="1" /> </precipInd> <wxInd s="1"> <wxIndVal v="1" /> </wxInd> <baseLowestCloud s="4"> <from v="300" u="M" /> <to v="600" u="M" /> </baseLowestCloud> <visPrev s="59"> <distance v="9" u="KM" /> </visPrev> <totalCloudCover s="3"> <oktas v="3" /> </totalCloudCover> <sfcWind s="0714"> <wind> <dir v="70" /> <speed v="14" u="KT" /> </wind> </sfcWind> <temperature s="10147 20136"> <air> <temp v="14.7" u="C" /></air> <?xml version="1.0" encoding="UTF-8"?> <data> <options><format v="xml" /> <lang v="en" /> <mode v="latest" /> <msg_metaf v="" /> <msg_synop v="AAXX 09004 08495 11459 30714 10147 20136 30151 40159 58005 60001 70511 83500 92350 " /> <src_metaf v="noaa" /> <src_synop v="nws_land" /> <type_metaf v="metar" /> <type_synop v="synop" /> </options> <reports> <synop s="AAXX 09004 08495 11459 30714 10147 20136 30151 40159 58005 60001 70511 83500 92350"> <obsStationType s="AAXX"> <stationType v="AAXX" /> </obsStationType> <obsTime s="0900"> <day v="09" /> <hour v="00" /> <minute v="00" /> </obsTime> <windIndicator s="4"><windUnit v="KT" /> </windIndicator> <stationId s="08495"> <id v="08495" /> <region v="VI" />