70 likes | 145 Vues
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>
E N D
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> <article> <numéro.produit>248</numéro.produit> <description>champagne,millésimé,1994</description> <quantité>3</quantité> <prix_unitaire>75</prix_unitaire> </article> <article> <numéro.produit>163</numéro.produit> <description>fromage,tartare</description> <quantité>2</quantité> <prix_unitaire>10.30</prix_unitaire> </article> </article> </achat.ordre>
DTD : interne ou externe d’un document • Les DTD sont une spécification de structure de document réutilisable • La composition d’une DTD en répartissant les déclarations entre une section « interne » et une ou plusieurs sections « 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-->
Structure et hiérarchie des éléments (structure arbre) (I) Structure Hiérarchie Fichierrapport.dtd <rapport> <!ELEMENT rapport (titre,auteur+,chapitre+,toc,index,)> <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 em renvoi tableau )*> </chapitre> <!ATTLIST p target ID #IMPLIED> </rapport> <!ELEMENT em (#PCDATA)> <!ELEMENT renvoi EMPTY> <!ATTLIST renvoi ref IDREF #REQUIRED> <!ELEMENT toc ANY> <!ELEMENT index ANY> <!ENTITY %tab SYSTEM ‘./tableau.dtd’ > %tab;
Structure et hiérarchie des éléments (structure arbre) (II) Fichier tableau .dtd <!ELEMENT tableau (legende,lig,lig+) > <!-- un tableau doit avoire au moins deux lignes--> <!ELEMENT legende (#PCDATA)> <! ATTLIST legende no CDATA #IMPLIED> <! ATTLIST legende target ID #IMPLIED> <!ELEMENT lig (cell,cell+)> <!--une ligne doit avoire au moins deux cellules donc un tableau aura au moins deux colonnes--> <! ATTLIST lig n1 CDATA #IMPLIED > <!ELEMENT cell (#PCDATA)> <! ATTLIST cell colspan CDATA #IMPLIED > 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>
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>
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 % bib SYSTEM ’http://xyz.org/Xml-bib/biblio.dtd’> <!ENTITY % ad SYSTEM ’http://local/xml/adresses.dtd’> <!ENTITY % math SYSTEM ’http://www.w3.org/TR/REC-MathML/MathML.dtd’> %dc; %basic; %bib; %ad; %math; ] <rapport> .................. <fn> <apply> <int/> <bvar><ci>x</ci></bvar> <lowlimit><cn>0</cn></lowlimit> <uplimit><cn>1</cn></uplimit> </apply> </fn> <fn id=‘note21‘>quelque commentaire</fn> </rapport>
RESOUDRE CEPROBLÈ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:apply> <math:int/> <math:bvar><math:ci>x</math:ci></math:bvar> <math:lowlimit><math:cn>0</math:cn></math:lowlimit> <math:uplimit><math:cn>1</math:cn></math:uplimit> </math:apply> </math:fn> <bt:fn bt:id=‘note21‘>commentaire</bt:fn> .................. </rapport>