Académique Documents
Professionnel Documents
Culture Documents
Dans une DTD interne les règles sont spécifiées entre les crochets. Dans une dtd externe les règles
sont spécifiées directement dans le fichier .dtd.
1. Déclaration d'éléments :
Pour déclarer un élément dans une DTD :
<!ELEMENT Nom_Elément (Type_Elément)>
<produit>
<nom>Stylo</nom>
<prix>3</prix>
<fournisseur>
<code>C1</code>
<raisonsociale>Atlas</raisonsociale>
</fournisseur>
<fournisseur>
<code>C2</code>
<raisonsociale>Amical</raisonsociale>
</fournisseur>
</produit>
Règle correspondante :
<!ELEMENT fournisseur (code,raisonsociale)>
<!ELEMENT code (#PCDATA)>
<!ELEMENT raisonsociale (#PCDATA)>
o Un élément vide : Veut dire que l'élément ne contient ni du texte ni des sous-éléments mais il
peut contenir ou nom des attributs.
<!ELEMENT Nom_Elément EMPTY >
<transport type="x"/>
Règles correspondantes :
<!ELEMENT br EMPTY>
o Un élément quelconque : C'est un élément qui peut contenir n'importe quoi (vide, des sous-
éléments, du texte,…) (très déconseillé parce qu'il va à l'encontre du principe de la DTD).
<!ENTITY % Nom_Entité "Valeur_Représentée">
Pour utiliser une entité paramétrique, il suffit d'indiquer son nom précédé par le symbole %
.
% Nom_Entité ;
Exemple
<!ENTITY % Reference "nom|designation|titre"
o Les autres entités : Ce sont des symboles pouvant être définis dans une DTD et utilisés dans
un document XML comme raccourcis d'écriture ou pour représenter des caractères qui ne
sont pas représentables dans l'alphabet utilisé, qui ne sont pas disponibles au clavier ou qui,
utilisés tel quel, risquent de créer des conflits avec d'autres caractères. La définition complète
du symbole est entièrement incluse dans la DTD.
<!ENTITY Nom_Entité "valeur">
<!ENTITY Nom_Entité "&#xNombreAC;">
<!ENTITY Nom_Entité "Fragment HTML">
<!ENTITY nom SYSTEM "Fichier">
Remarque
Une entité peut être utilisée à n'importe quel endroit dans le fichier XML même en tant que valeur
d'attribut.
Exemple
<!ENTITY Euro "€">
<!ENTITY MCD "Modèle Conceptuel de Données">
Remarque
Ce type d'entités peut être utilisé dans la DTD et dans le fichier XML.
<type>Chaine de &car;</type>
Une entité peut désigner un fragment de document contenu dans un autre fichier :
<!ENTITY Nom_Entité SYSTEM "Fichier.xml">
Exemple
<!ENTITY ch1 SYSTEM "Chapitre1.xml">
<!ENTITY ch2 SYSTEM "Chapitre2.xml">
<livre>
&ch1;
&ch2;
</livre>
L'attribut xmlns:xs détermine l'espace de noms par défaut pour le schéma XML. Un espace de noms
détermine d'où sont issues les règles de validation et le vocabulaire. L'espace de noms des schémas
XML est identifié par l'URI "http://www.w3.org/2001/XMLSchema".
Remarque
On peut utiliser le prefixe xsd ou xs.
Le schéma XSD peut être fourni dans le même fichier XML et peut être externe.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- déclarations d'éléments, d'attributs et de types ici -->
</xsd:schema>
<Balise_Racine>
…
</ Balise_Racine>
Le schéma XSD peut être fourni dans un fichier .XSD externe. Pour associer un schéma à un fichier
XML :
Chaque élément est déclaré avec un type qui peut être, soit un des types prédéfinis, soit un nouveau type
défini dans le schéma. Le type spécifie quels sont les contenus valides de l'élément ainsi que ses attributs.
Un élément est soit de type simple s'il contient des données soit de type complexe s'il contient des attributs
et/ou des sous-éléments (éléments enfants).
Ou
<xsd:element name="Nom_Elément" Type="Nom_Type"/>
Avec Nom_Type peut prendre le nom d'un type de base (sous la forme xsd:Type_Donnée) ou le
nom d'un type simple déclaré dans le schéma.
Type_Donnée peut prendre une des valeurs exprimées dans le schéma ci-après tiré de Wikipédia
:
En plus des types de base, il est possible de créer des types simples qui offrent des conditions
supplémentaires sur les types de base :
o Listes : Les types listes sont des suites de types simples (ou atomiques) :
<xsd:simpleType name="Nom_Type">
<xsd:list itemType="xsd:Type_Donnée" />
</xsd:simpleType>
Exemple
<xsd:simpleType name="Tel">
<xsd:list itemType="xsd:positiveInteger" />
</xsd:simpleType>
…
Pour l’utiliser
<xsd:element name="NumTel" Type="Tel"/>
Instances valides
01 44 27 60 11
o Unions : Pour faire en sorte qu'un type autorise un mélange entre plusieurs types, il est
possible de le faire à l'aide d'une déclaration d'union.
<xsd:simpleType name="NomTypeSimple">
<xsd:union memberTypes="TypeSimple1 TypeSimple2 …" />
</xsd:simpleType>
Exemple
<xsd:simpleType name="Test">
<xsd:union memberTypes="xsd:positiveInteger xsd:string" />
</xsd:simpleType>
…
Pour l’utiliser
<xsd:element name="MonElement" Type=" Test "/>
Instances valides
<MonElement>18</MonElement>
< MonElement >Pompiers </ MonElement >
Il est également possible d'indiquer des contraintes plus fortes sur les types simples ; ces contraintes
s'appellent des "facettes". Elles permettent par exemple de limiter la longueur de notre numéro de
téléphone à 10 nombres.
o Facette maxExclusive : Pour indiquer une valeur maximale
<xsd:simpleType name="Nom_Type">
<xsd:restriction base="Nom-Type">
<xsd:maxExclusive value="Valeur" />
</xsd:restriction>
</xsd:simpleType>
2. Déclaration d'attributs :
Pour déclarer un attribut :
<xsd:attribute name="Nom_Attribut" Type="xsd:Type_Données"
use="required|optional|prohibited" default="ValeurParDéfaut"
fixed="Valeur"/>
Les types de données utilisés pour les attributs sont les mêmes types que pour les éléments de
type simple.
</xsd:sequence>
</xsd:complexType>
o Une liste de choix : Une liste d'éléments au choix. Un seul élément doit apparaitre
<xsd:complexType>
<xsd:choice>
<!-- déclaration d'une liste d'éléments. Un seul doit être choisi-->
</xsd:choice>
</xsd:complexType>
o Un élément all : Indique que les éléments enfants doivent apparaître une fois (ou pas du
tout), et dans n'importe quel ordre.
<xsd:complexType>
<xsd:all>
<!-- déclaration d'une liste d'éléments qui peuvent apparaitre 0 ou
une fois dans n'importe quel ordre-->
</xsd:all>
</xsd:complexType>
Remarque
Cet élément xsd:all doit être un enfant direct de l'élément xsd:complexType.
Remarque :
Pour indiquer qu’un élémet XML est non renseigné (null) on utilise xsi:null au niveau de
l’élément dans le fichier XML.
Remarque
Il est possible de scinder un schémas XSD trop long en plusieurs parties. Pour inclure un schéma
:
<xsd:include schemaLocation="Chemin.xsd" />
Exemple :
Soit la DTD suivante :
Méthode 1 :
</xs:sequence>
<xs:attribute name="type" type="ListeTypes" use="optional" default="Théorique"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="ListeTypes">
<xs:restriction base="xs:string">
<xs:enumeration value="Théorique"/>
<xs:enumeration value="Pratique"/>
<xs:enumeration value=" Autre"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
Méthode 2