XML et DTD - Partie (3)

. 8/12/2011
  • Agregar a Technorati
  • Agregar a Del.icio.us
  • Agregar a DiggIt!
  • Agregar a Yahoo!
  • Agregar a Google
  • Agregar a Meneame
  • Agregar a Furl
  • Agregar a Reddit
  • Agregar a Magnolia
  • Agregar a Blinklist
  • Agregar a Blogmarks


DTD : ATTRIBUTS (Déclaration d'attributs)

* Syntaxe
     < !ATTLIST élément attribut spécification>
Spécification : TYPE OPTIONS VALEUR_PAR_DEFAUT

* Exemples de type d'attributs
  - Chaîne
       < !ATTLIST SECTION NUMERO CDATA #IMPLIED>
  - Énumératif
       < !ATTLIST PHOTO FORMAT (GIF | JPEG) "GIF">

DTD : ATTRIBUTS (Déclaration d'attributs : Types) ...


* CDATA : Ce type est le plus général. Il n'impose aucune contrainte à la valeur de l'attribut. Celle-ci peut être une chaîne quelconque de caractères.

* (value1 | value2 | ... | valueN) : La valeur de l'attribut doit être un des jetons value1, value2, … valueN. Comme ces valeurs sont des jetons, celles-ci ne sont pas délimitées par des apostrophes ''' ou des guillemets '"'.

* ID : La valeur de l'attribut est un nom XML. Un élément peut avoir un seul attribut de ce type

* IDREF : La valeur de l'attribut est une référence à un élément identifié par la valeur de son attribut de type ID.

* IDREFS : La valeur de l'attribut est une liste de références séparées par des espaces.

DTD : ATTRIBUTS (Déclaration d'attributs : OPTIONS)

* #IMPLIED:
  - L'attribut est optionnel et il n'a pas de valeur par défaut. Si l'attribut est absent, il n'a pas de valeur.

* #REQUIRED:
  - L'attribut est obligatoire et il n'a pas de valeur par défaut.

* #FIXED "value":
  - La valeur value est une chaîne quelconque de caractères délimitée par des apostrophes. La valeur de l'attribut est fixée à la valeur value donnée.
  - Si l'attribut est absent, sa valeur est implicitement value.
  - Si l'attribut est présent, sa valeur doit être value pour que le document soit valide.

DTD : ATTRIBUTS (Déclaration d'attributs : Exemples)

<bibliographie>

    <livres>
        <livre cle="Michard01" langue="fr">
            <titre>XML langage et appplications</titre>
            <auteur>Alain Michard</auteur>
            <annee>2001</annee>
            <publie par="id2680397"/>
        </livre>
         ...
   </livres>
   <editeurs>
       <editeur id="id2680397">
           <nom>Eyrolles</nom>
           <addresse>Paris</addresse>
       </editeur>
       <editeur id="id268343">
           <nom>Ellipses</nom>
           <addresse>Casablanca</addresse>
       </editeur>
   </editeurs>

</bibliographie>

-------------------------

<!ELEMENT bibliographie(livre*, editeur*)>
< !ATTLIST livre (titre, auteur, annee, publie) >

< !ATTLIST editeur (nom, adresse) >
< !ATTLIST editeur id IDREF #REQUIRED>
< !ATTLIST livre publie IDREF #REQUIRED>


DTD : ENTITES (Déclarations des entités)

* Syntaxe :

       <!ENTITY nom "chaîne">

* Exemple :


      <!ENTITY fsts "Faculté Sciences Techniques de Settat">

* Utilisation dans le fichier XML
   <PARA>
         Les professeurs de la &fsts; sont heureux de vous souhaiter la bienvenue
   </PARA>

* Interne :
    <!ENTITY nom "chaîne">


* Externe:
<?xml version="1.0" encoding="utf-8"?>
< !DOCTYPE book [
    <!-- Entités externes -->
    <!ENTITY chapter1 SYSTEM "chapter1.xml">
    <!ENTITY chapter2 SYSTEM "chapter2.xml">
]>

< book>
   <!-- Inclusion du fichier chapter1.xml -->
     &chapter1;
   <!-- Inclusion du fichier chapter2.xml -->
     &chapter2;
< /book>


* Entités Externes: 

  - Les entités externes peuvent êtres utilisées pour scinder un document en plusieurs fichiers.
  - Le fichier principal inclut les différentes parties en définissant une entit externe pour chacune de ces parties.
  - Les entités sont alors utilisées pour réaliser l'inclusion comme dans l'exemple ci-dessous.

DTD : TYPES DE CONTENU (PCDATA (Parsed Character DATA))

* Contenu Textuel

* Il s'agit de données textuelles (chaînes de caractères) qui correspondent au texte qui se trouve entre les balises d'un élément XML.

* Les données de type PCDATA vont être traitées par l'application (parser).
  - les balises vont être identifiées;
  - les entités vont être traduites.
  - le texte va être interprété comme une chaîne de caractères;

DTD : TYPES DE CONTENU (Déclaration de PCDATA)

* Syntaxe
    <!ELEMENT nom (#PCDATA)>

* L'élément contient des données textuelles

* Exemple :      <!ELEMENT TITRE(#PCDATA)>
     <!ELEMENT AUTEUR(#PCDATA)>

Note: Le symbole # empêche PCDATA d'être interprété comme un nom d'élément.

* Exemple :

<?xml version="1.0" encoding="iso-8859-1"?>
< !DOCTYPE book [
  <!ELEMENT book (#PCDATA | em | cite)*>
  <!ELEMENT em(#PCDATA)>
  <!ELEMENT cite (#PCDATA)>
]>

< book>
    Du <em>texte</em>, une <cite>citation</cite> et encore du <em>texte</em>.
< /book>

DTD : TYPES DE CONTENU (CDATA (Character DATA)

* CDATA signifie « Character Data ».

* Les données de type CDATA sont du texte qui ne sera pas interprété par l'application.

* Les données CDATA peuvent se trouver à n'importe quel endroit acceptable pour des données textuelles ; elles sont employées pour déguiser des blocs de texte contenant des caractères qui seraient autrement identifiés comme balisage.

DTD : TYPES DE CONTENU (Déclaration de CDATA : Attribut)

* Syntaxe :

       <!ATTLIST nomÉlement nomAttribut CDATA …>

* Exemple :
       <!ATTLIST prix CanCDATA #REQUIRED>

DTD : TYPES DE CONTENU (Utilisation de CDATA : Données textuelles)

* Syntaxe :

       <![CDATA[chaîne de caractères]]>

* Exemple :
<![CDATA[
    <script language=JavaScript>document.write("Bonjour!")</script>
]]>

<script language=JavaScript>document.write("Bonjour!")</script>   - est reconnu comme données textuelles, et non comme balisage :

DTD : TYPES DE CONTENU (Exemple de l'élément prix)

* Exemple :


<!ELEMENT prix EMPTY>
<!ATTLIST prix
                 CanCDATA #REQUIRED>

  - « prix » est vide.
  - « prix » a un attribut « Can » de type CDATA.
  - « Can » est obligatoire.

DTD : TYPES DE CONTENU (Contenu libre)

* Exemple :

<!ELEMENT prix ANY>
  - « prix » peut etre n’importe quoi.