Saisie dynamique de XML Geoffroy Vallée et Ani Sedrakian
Les langages de schéma de XML DTD XML Schema
Saisie dynamique de XML Objectifs: Le but de notre projet est de créer un programme permettant la saisie dynamique de XML, suivant un schéma précis. Pour le moment, nous n’utiliserons que des DTD pour décrire ces schémas (XML Schema n’étant pas encore finalisé). Notre programme devra donc permettre à l’utilisateur de choisir une DTD, qui sirvira de supporte pour créer un environnement de saisie convivial et simple, qui simplifira le travail de toute personne souhaitant manipuler du XML (y compris les débutants).
Les DTD
DOCUMENT VALIDE Obéir à une structure type prédéfini Document valide = bien formé + obéir à une structure type définie dans une DTD <?xml version=‘1.0‘standalone=‘no‘?> <!DOCTYPE achat.ordre SYSTEM “ao.dtd“> <achat.ordre> <date>16 novembre 1999</date> <adresse> <nom>Jean</nom> <numéro>8</numéro> <rue>Boulevard de St Germain</rue> <ville>Paris</ville> <pays>FR</pays> <cp>75005</cp> </adresse> <article> <numéro.produit>248</numéro.produit> <description>champagne,millésimé,1994</description> <quantité>3</quantité> <prix_unitaire>75</prix_unitaire> </article> <numéro.produit>163</numéro.produit> <description>fromage,tartare</description> <quantité>2</quantité> <prix_unitaire>10.30</prix_unitaire> </achat.ordre>
DTD : interne ou externe d’un document Les DTD sont une spécification de structure de document réutilisable La déclaration d ’une DTD se compose de sections « internes » ou « externes » Les sections conditionnelles Appel de la DTD dans le document XML DTD interne <?xml version=‘1.0‘ standalone=‘yes‘?> <!DOCTYPE exemple [ <!-- début de la DTD--> <!ELEMENT exemple (#PCDATA)> <!--fin de la DTD--> ] > <!--début de l’instence--> <exemple>test</exemple> <!--fin du document--> DTD externe <?xml version=‘1.0‘ standalone=‘no‘?> <!DOCTYPE exemple SYSTEM”exemple.dtd”> <!-- début del’instence--> <exemple>test</exemple> <!--fin du document--> exemple.dtd <?xml version=‘1.0‘?> <!-- début de la DTD--> <!ELEMENT exemple (#PCDATA)> <!--fin de la DTD-->
CONTENU D’UNE DTD Les déclarations d’entités générales Les déclarations d’entités paramètres Les déclarations de notions Les déclarations d’éléments Les déclarations de listes d’attributs Les commentaires <!DOCTYPE test [ <!ENTITY exemple “Ceci est un exemple”> <!ELEMENT date (#PCDATA)> <!ATTLIST date format (ISO | EN-exp | FR-exp) #REQUIRED)> ] <!--début de l’instance--> <test> <p>&exemple</p> <date format=“ISO“>1999-11-16</date> </test>
Structure et hiérarchie des éléments (structure arbre) (I) Fihier mon_rapport .xml <?xml version=‘1.0’ standalone=‘no‘?> <!DOTYPE rapport SYSTEM ‘/usr/loal/edit/xml/dtd/rapport.dtd’> <rapport> <titre>Test</titre> ………………… <tableau></tableau> </rapport>
Structure et hiérarchie des éléments (structure arbre) (II) 2.dtd XML 1.dtd 3.dtd Hiérarchie Fichier rapport.dtd <rapport> <!ELEMENT rapport (titre,auteur+,chapitre+)> <titre>...</titre> <!ELEMENT titre (#PCDATA)> <auteur> <!ELEMENT auteur (prénom+, nom)> <prénom>...</prénom> <!ELEMENT prénom (#PCDATA)> <nom>...</nom> <!ELEMENT nom (#PCDATA)> </auteur> <!ELEMENT chapitre(tchap, intro?, sec1*)> <auteur> <!ATTLIST chapitre target ID #IMPLIED> <prénom>...</prénom> <!ELEMENT sec1 (tsec,(p | sec2)*)> <nom>...</nom> <!ATTLIST sec1 target ID #IMPLIED> </auteur> <!ELEMENT sec2 (tsec,(p | sec3)*)> <chapitre> <!ATTLIST sec2 target ID #IMPLIED> <tchap>...</tchap> <!ELEMENT tsec (#PCDATA)> <intro>...</intro> <!ELEMENT sec3 (tsec,p)> <sec1>...</sec1> <!ATTLIST sec3 target ID #IMPLIED> ......................... <!ELEMENT p (#PCDATA | renvoi | tableau )*> </chapitre> <!ATTLIST p target ID #IMPLIED> </rapport> <!ELEMENT renvoi EMPTY> <!ATTLIST renvoi ref IDREF #REQUIRED> <!ENTITY %tab SYSTEM ‘./tableau.dtd’ > %tab;
Structure et hiérarchie des éléments (structure arbre) (III) Fichier tableau .dtd <!ELEMENT tableau (ligne) + > <!ELEMENT lingne (cell) + > <! ATTLIST ligne lignbr CDATA #IMPLIED> <!ELEMENT cell (#PCDATA)> <! ATTLIST cell colnbr NMTOKEN #IMPLIED colspan NMTOKEN #IMPLIED>
RÉUTILISATION DES DIVERSES RESSOURCES DISPONIBLES ET LES INCONVÉNIENTS Réalisation des documents complexes est très simples Les conflits de noms sont les seules difficultés Le conflit apparaîtra lorsqu’une application (un navigateur) traitera le document <?xml version’1.0’ standalone=‘no‘?> <!DOCTYPE rapport [ <!ELEMENT rapport ANY> <!ENTITY % dc SYSTEM ’http://pur1.oclc.org/metadata/dublin-core.dtd’> <!ENTITY % basic SYSTEM ’http://foo.bar.org/XML/basic-text.dtd’> <!ENTITY % ad SYSTEM ’http://local/xml/adresses.dtd’> <!ENTITY % math SYSTEM ’http://www.w3.org/TR/REC-MathML/MathML.dtd’> %dc; %basic; %ad; %math; ] <rapport> ............... <fn> <eq/> <apply> <plus /> <power /> <ci> x </ci> <cn> 2 </cn> </apply> <cn> 4 </cn> <cn> 0 </cn> </fn> <fn id=‘note21‘>c ’est la représentation de l ’expression x2+4=0 </fn> </rapport>
RESOUDRE CE PROBLÈME GRACE AUX DOMAINES NOMINAUX Les conflits ne seraient pas apparus, si les auteurs n’importent pas de déclarations dans la DTD sans regarder ce qu’elles contiennent Les domaines nominaux permettent lors de l’édition d’un document d’utiliser des noms garantis uniques La déclaration d’un domaine nominal se fait à l’aide de l’attribut spécial xmlns: <?xml version=“1.0”?> <!DOCTYPE rapport SYSTEM “rapport.dtd”> <rapport xmlns:math=“http://www.w3.org/TR/1998/REC-MathML-19980407.html” xmlns:bt=“http://foo.bar.org/xml/schemas/Basic-text.dtd> .............. <math:fn> <math:eq/> <math : apply> <math : plus/> <math : power/> <math :ci> x </math :ci> <math :cn> 2 </math :cn> </math:apply> <math :cn> 4 </math :cn> <math :cn> 0 </math :cn> </math:fn> <bt:fn bt:id=‘note21‘>commentaire</bt:fn> .................. </rapport>
XML Schema
XML Schema. Introduction. XML Schema est un langage de schéma , au même titre que les DTD sont le langage de schéma de SGML. XML Schema est développé par le W3C, mais n’est pas finalisé. Tout ce qui suit est basé sur la publication du XML Schema Working Group de mai 1999. Des changements pourront donc être apportés par la suite. Rappel du rôle des schémas: Les schémas permettent de décrire la structure des informations. Les schémas permettent d’avoir un mécanisme de validation de texte.
XML Schema. Pourquoi XML Schema? Besoin de documents “structurés”. XML Schema permet donc de définir un ensemble de règles sur la structure et l’ensemble des informations contenues dans une instance d’un document XML Les DTD (Document Type Definition) ne sont pas des documents XML. Les DTD ne gèrent que de façon très limitée les types de données.
XML Schema. Comparaison avec le mécanisme des DTD: les DTD sont des documents SGML, alors que XML Schema sont des documents XML, les DTD sont “figées” par rapport à XML Schema : il est possible avec XML Schema de créer un schéma permettant de définir des éléments optionnels, qui ne seront pris en compte que s’ils sont correctement définis, Syntaxe : les types de base. XML Schema comporte un ensemble de types de données prédéfinis, dont voici les plus importants (qui sont des types XML): string, boolean, real, binary, URI, decimal, integer, date, time, …etc.
XML Schema. Syntaxe : principes de base. Les documents XML Schema sont des documents XML, ils peuvent donc utiliser des éléments et attributs XML pour exprimer la sémantique d’un schéma. Définition d’un type de donnée: <datatype name=“myType”>…</datatype> Référence à un type de donnée: <datatypeRef name=“myType”/> Définition d’un élément: <elementType name=“myElement”>…</elementType>
XML Schema. Référence à un élément: <elementTypeRef name=“myElement” minOccur=“n” maxOccur=“m”> Référence (“heritage”) d’un type de base: Il est possible, pour créer un nouveau type de donnée, de faire appel à un type de base qui servira de modèle. La syntaxe est la suivante: <basetype name=“nameBaseType”/> Définition d’un archétype: Les archétypes permettent de définir des modèles complexes. <archetype name=“myArchetype”>…</archetype> Exemple : définition d’une adresse à l’aide d’un archétype:
XML Schema. <archetype name=“adresse” model=“refinable”> <sequence> <elementTypeRef name=“nom” minOccur=“1” maxOccur=“1”/> <elementTypeRef name=“prénom” minOccur=“1” maxOccur=“1”/> <elementTypeRef name=“rue” minOccur=“1” maxOccur=“2”/> <elementTypeRef name=“ville” minOccur=“1” maxOccur=“1”/> <elementTypeRef name=“code postal” minOccur=“1” maxOccur=“1”/> </sequence> </archetype> On remarquera la possibilité d’exprimer des contraintes très précises (nombre d’occurrences) directement dans le modèle (chose impossible à faire avec les DTD).
XML Schema. Définition de sequence: On a vu dans l’exemple précédent qu’il est possible de définir une suite d’éléments (ceci est équivalent au caractère “,” séparant 2 éléments dans la syntaxe DTD). <sequence>…</sequence> Déclaration des attributs: <attribute name=“myAttribute”>…</attribute> Définition d’un groupe d’attribut: <attrGroup name=“myAttrGroup”> <attribute …>…</attribute> </attrGroup>
XML Schema. Il est également possible d’exprimer des contraintes sur la forme des éléments et des types manipulés: les représentations lexicales : il est possible avec XML Schema de définir plusieurs représentations pour un même élément. On peut, par exemple, définir un types “code postal” qui accépterait les codes postaux composés de 5 digits, et ceux de 5 digits suivis de 4 autres digits. Cela donnerait: <datatype name=“code postal”> <basetype name=“string”> <lexicalRepresentation> <lexical>99999</lexical> <lexical>99999-9999</lexical> </lexicalRepresentation> </datatype>
XML Schema. On peut également définir un type “monnaie”, composé à partir du type “décimal”, mais ne comportant qu’au maximum 8 digits , dont 2 pour la partie décimale: <datatype name=“monnaie”> <basetype name=“decimal”> <precision>8</precision> <scale>2</scale> </datatype> Autre exemple: <datatype name=“i4”> <basetype name=“integer”> <minInclusive>214783648</minInclusive> <maxExclusive>-214783648</maxExclusive>
XML Schema bien plus puissant que les DTD, CONCLUSION. Avantages de XML Schema: XML Schema bien plus puissant que les DTD, offre une grande diversité de types de données (booléens, entiers, réels, dates, …), possiblité de créer de nouveaux types et des agrégats de types (archétypes), des types complexes ou “hérités”, possiblité de réutiliser les schémas existants (la création de nouveaux schémas est alors plus rapide), document XML Schema = document XML. Tous les outils et les techniques XML peuvent donc être utilisés (y compris les DTD),
nécessité de créer des schémas en XML Schema qui existent déjà en DTD. XML Schema offre de grandes perspectives dans toutes les applications utilisant fortement des données structurées prédéfinies (BD, e-commerce,… etc). Les défauts : Pas de réels défauts, mais un certain nombre de faiblesses par rapport aux DTD : les DTD sont très répandues : existent en grand nombre et largement utilisée, les DTD disposent déjà d’un large éventail d’outils (outils SGML très répandus), nécessité de créer des schémas en XML Schema qui existent déjà en DTD.
Ce qui existe déjà
Les logiciels déjà existants. Un certain nombre de logiciels sont déjà disponible et proposent quelques outils. Nous verrons plus particulièrement : Xeena d’IBM, XED, XML Spy d’Unicode,
Xeena Toutes les informations sont disponible à http://www.alphaworks.ibm.com/aw.nsf/tec...BE31A4D650B7AC678825672C001398B La dernière version au 18 octobre 1999 est la version 1.0.3b. Déscription: Xeena est un éditeur de XML graphique, écrit en Java par le laboratoire de rechercher d'IBM de Haifa, pour éditer des documents XML valides suivant une DTD valide. L'éditeur prend une DTD donnée, et construit automatiquement une grille de saisie adéquate. L'utilisateur peut donc créer, modifier ou visualiser une document XML valide sous la forme d'un arbre. Il est à noter que cette visualisation nécessite un apprentissage afin que l'utilisateur saisisse bien son fonctionnement.
Xeena Certaines personnes lui reproche un aspect complexe (arbre).
XED Toutes les informations sont disponible à : http://www.ltg.ed.ac.uk/~ht/xed.html Déscription: Ce programme est un éditeur d'instance de documents XML, crée par Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh. Cet éditeur permet de saisir des documents XML, de vérifier s'ils sont bien formés. Il permet également de lire une DTD, et propose ensuite une structure de saisie facilitant le travail de l'utilisateur. XED est basé sur LT XML toolkit, et utilise Python et Tk afin de permettre une portabilité maximum. XED est disponible pour diverses plateforme de travail: Windows 95/NT, Solaris 2.5, FreeBSD, Linux.
XED Avis personnel: L'utilisation de XED n'est pas a priori la plus intuitive. En particulier, pour se rapprocher de notre projet, la saisie d'un document XML suivant une DTD n'est pas une tâche rendue simple.
XED De plus, il est indispensable de connaître parfaitement XML et les DTD pour utiliser XED. La simplicité d’emploit et la convivialité ne sont donc pas des atouts de XED. Dernier défaut : il permet d’utiliser le schéma d’une DTD, mais aucun test de validité n’est effectué.
XML Spy Ce programme est développé par Unicode. Tous les renseignements sont disponibles à: http://www.wmlspy.com/ Présentation: XML Spy permet de: créer une DTD et de la valider, créer un document XML (sans se baser sur une DTD donnée), en lui créant un schéma propre. XML Spy permet ensuite de vérifier que le document est bien formé et valide.
XML Spy
XML Spy Conclusion: Même si XML Spy est limité (impossible de créer un document suivant une DTD), il offre une gamme d’outils conviviaux et agréables.
eXcelon Object Design offre, dans sa base de donnée objet basée sur le XML, une panoplie d’outils XML. En ce qui concerne la saisie dynamique, un composant appelée “eXcelon studio” permettrait de saisir des documents XML suivant sur un schéma (DTD?), de façon simple et rapide à l’aide d’un outils visuel. Toutes les informations sont disponible sur : http://www.odi.com/excelon/main.htm
Notre proposition
Saisie dynamique de XML Principe de fonctionnement: Choix d’une DTD Analyse de la DTD Formation des éléments de saisie oui Fin de la saisie? non non Document valide? Choix de l’élément à modifier oui Analyse des possibilité de saisie Saisie oui non Saisise valide
Saisie dynamique de XML Remarque : une vérification de la saisie étant effectuée pour chaque élément, il suffira à la fin de vérifier que l’ensemble des éléments ont été saisit. Ce qui est fait: Notre programme se présente sous la forme d’une applet. Pour le moment, seule la lecture d’une DTD simple, avec mise en place des éléments de saisie, a été crée. Prenons l’exemple de la DTD simple suivante: <!ELEMENT lettre (date , nom)> <!ELEMENT date (#PCDATA)> <!ELEMENT nom (#PCDATA)>
Saisie dynamique de XML Cela nous donne:
Saisie dynamique de XML Ce qui sera bientôt fait : validation de la saisie, validation du document, extension des éléments des DTD traités, extension à XML Schema. Pour finir : Toutes les informations et applets sont disponibles sur notre site WEB : http://www.chez.com/xmlmisi Une extension du programme à XML Schema est à l’étude (tandis que la version DTD est laissée de côté pour le moment).