Vous êtes sur la page 1sur 12

Pilar Alonso Suela

1ER DAMEL
Tâche 4
Langage de marque

DTD
ET
XML
SCH
EMA
1

Pilar Alonso Suela


Tâche 4 du langage de la marque
1er Damel

1 Une entreprise utilise des fichiers XML pour inventorier, entre autres, les
imprimantes. Pour chaque imprimante, vous devez enregistrer son numéro de série, sa
marque, son modèle, son poids, les formats de papier qu'elle peut utiliser, la cartouche
qu'elle utilise, le type, l'année d'achat et si elle est en réseau ou non.

Voici un exemple de fichiers de ce type :

<imprimeurs>.
<printer numSeries="i245" type="laser" purchase="2010">
<brand>Epson</brand>.
<modèle>EPL300</modèle>.
<weight>4.52</weight>.
<size>A4</size>.
<size>A5</size>.
</cartouche>C-123BV</cartouche>.
<réseau/>
</printer>.
<printer numSerie="i246" type="dot matrix">
<brand>HP</brand>.
<modèle>LaserJet 2410</modèle>.
<weight>3.2</weight>.
<size>A4</size>.
</cartouche>C-456P</cartouche>.
</printer>.
</printers>.
Rédigez un schéma XML pour ces fichiers, en choisissant les types de données les plus
appropriés et en gardant à l'esprit ce qui suit :

• Le poids est un nombre positif et ne peut avoir plus de deux décimales.


• Il peut y avoir plus d'une taille.
• L'attribut type ne peut prendre que les valeurs "matrix", "laser" et "ink". Elle est
obligatoire.
• L'attribut numSeries est obligatoire et sert d'identifiant.
• Le cartouche est composé d'un C majuscule, d'un trait d'union, de trois chiffres et
d'une ou deux lettres majuscules.
• Tous les éléments sont obligatoires, à l'exception de enred.
• L'élément enred est facultatif. S'il est présent, il s'agit d'un élément vide.
• L'attribut facultatif purchase enregistre l'année d'achat. Il s'agit d'un nombre
entier positif.
• Chaque fichier contient des données pour une ou plusieurs imprimantes.
2

SCHEMA XML

L'élément parent est <xs:schema> et doit contenir des déclarations pour tous les
éléments trouvés dans le xml.

L'élément enfant est <xs:element>.

Dans le schéma XML, nous n'avons aucun moyen de définir l'élément racine
d'une manière spéciale, nous l'indiquerons avec <xs:element name="root"> , que
nous définirons comme un type complexe s'il a plus d'éléments à l'intérieur et la
balise xs:sequence pour ajouter les différents éléments qui le forment et ses
restrictions. Nous nous retrouvons donc avec un schéma xml imbriqué.

Les attributs doivent être déclarés après la balise de séquence qui définit les
éléments racines.

Le schéma XML nous permettra d'effectuer des validations avancées.

Il s'agit du XMl validé par rapport à document1.xsd :

<?xml version="1.0" encoding="UTF-8"?>

<printer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Document1.xsd"> <!--link with relative path
to validate against xsd-->
3

<printer numSeries="i245" type="laser" purchase="2010">

<brand>Epson</brand>.

<modèle>EPL300</modèle>.

<weight>4.52</weight>.

<size>A4</size>.

<size>A5</size>.

</cartouche>C-123BV</cartouche>.

<réseau/>

</printer>.

<printer numSerie="i246" type="dot matrix">

<brand>HP</brand>.

<modèle>LaserJet 2410</modèle>.

<weight>3.2</weight>.

<size>A4</size>.

</cartouche>C-456P</cartouche>.

</printer>.

</printers>.

Maintenant le schéma XML appelé document1 :


4

J'ai ajouté des commentaires comme celui-ci:< ! > Bien que les commentaires
formulés de cette manière soient préférables car ils peuvent être structurés et faire
l'objet d'une action :

<xs:annotation>
<xs:documentation>
Définir une liste d'imprimantes Pilar Alonso Suela Tâche 04.1 DAMEL
</xs:documentation>
</xs:annotation>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">

<xs:element name="printers">

<xs:complexType>

<xs:sequence>

<Ici, nous faisons référence à l'élément printer, les références sont un moyen
de rendre le schéma XML plus lisible, il y aura des données pour une ou plusieurs
imprimantes.

<xs:element ref="printer" minOccurs="1"


maxOccurs="unbounded"/>

</xs:sequence>
5

</xs:complexType>

</xs:element>

<xs:element name="printer">

<xs:complexType>

<xs:séquence>

<xs:element name="brand" type="xs:string" minOccurs="1"


maxOccurs="unbounded"/>

<xs:element name="model" type="xs:string" minOccurs="1"


maxOccurs="unbounded"/>

<xs:element name="weight" minOccurs="1" maxOccurs="unbounded">

<!--le poids doit être un nombre positif avec deux décimales au maximum
et doit être déclaré à l'intérieur de xs:restriction-->

<xs:simpleType> <!--nous définissons la valeur du type simple-->.

<xs:restriction base="xs:decimal"><!--base indique le type de données à


partir duquel la restriction est faite, dans ce cas il doit être décimal-->>.

<xs:fractionDigits value="2"/> <!--J'utilise fractionDigits pour spécifier le


nombre de décimales, puisque le nombre total de chiffres, bien qu'il puisse être
appliqué en décimales, spécifie le nombre total de chiffres-->

<xs:minInclusive value="1"/>

</xs:restriction>

</xs:simpleType>

</xs:element> <!--il peut y avoir plus d'une taille-->

<xs:element name="size" type="xs:string" minOccurs="1"


maxOccurs="unbounded"/><!--nous définissons un nombre maximal illimité de
tailles, avec une occurrence minimale de 1-->.

<xs:element name="cartouche" minOccurs="1" maxOccurs="unbounded"


>

<xs:simpleType>

<xs:restriction base="xs:string">
6

<xs:pattern value="[C][\-][0-9][0-9][0-9][A-Z]{1,2}"/>

</xs:restriction>

</xs:simpleType>

</xs:element>

<xs:element name="enred" type="xs:string" default="" minOccurs="0" />

</xs:sequence>

<!--attributs -->

<L'attribut du numéro de série doit être obligatoire et servir également


d'identifiant de l'imprimante.

<xs:attribute name="numSeries" use="required">

<xs:simpleType>

<xs:restriction base="xs:ID"><!--Fixons la restriction ID-->

</xs:restriction>

</xs:simpleType>

</xs:attribute>

<L'attribut type doit être obligatoire et ne doit contenir que les valeurs : dot
matrix, laser et ink-->.

<xs:attribute name="type" use="required">

<xs:simpleType><!--nous définissons le type simple-->.

<xs:restriction base="xs:string"><!--le type de données auquel la restriction


s'applique-->

<xs:enumeration value="matrix"/> <!--à l'intérieur d'une énumération nous


mettrons les différentes valeurs--> <!--à l'intérieur d'une énumération nous
mettrons les différentes valeurs--> <!--à l'intérieur d'une énumération nous
mettrons les différentes valeurs--> <!--à l'intérieur d'une énumération nous
mettrons les différentes valeurs--> < !

<xs:enumeration value="laser"/>
7

<xs:enumeration value="ink"/>

</xs:restriction>

</xs:simpleType>

</xs:attribute>

<xs:attribute name="purchase" type="xs:positiveInteger" use="optional"/><!--


l'attribut purchase est facultatif et est un entier positif, par défaut si rien n'est
spécifié l'attribut sera facultatif, bien que j'ai préféré le spécifier-->.

</xs:complexType>

</xs:element>

</xs:schema>

2 - Une association de joueurs de mus utilise des fichiers XML pour stocker les
informations des tournois qu'elle organise. Pour chaque tournoi, vous souhaitez
enregistrer l'année au cours de laquelle le tournoi s'est déroulé, le vainqueur précédent
(son identifiant) et les informations relatives aux participants. Pour les participants, nous
voulons stocker leur identifiant, l'identifiant de leur partenaire, leur nom complet, leur
âge, leur pays, ainsi que le fait qu'ils aient été sélectionnés ou non.

Voici un exemple de fichiers de ce type :

<tournoi édition="1998" vainqueur précédent="j01">


<participant idP="j01" couple="j02">
<first name>Manuel Pérez</first name>.
<Âge>23</âge>.
<pays> Espagne</pays>.

<serialHead/>
</participant>.
<participant idP="j02" couple="j01">
<prénom>Manuel Gómez</prénom>.
<âge>25</âge>.
<pays>Espagne</pays>.
</participant>.
<participant idP="j03" couple="j04">
<first name>Ana Puertas</first name>.
<âge>22</âge>.
<country>E5spain</country>.
<serialHead/>
</participant>.
<participant idP="j04" couple="j03">
<first name>Paco Fraile</first name>.
8

<âge>45</âge>.
<pays>Espagne</pays>.
</participant>.
</tournoi>.
Rédiger une DTD appropriée pour ces fichiers, en gardant à l'esprit que :

• Tous les attributs sont obligatoires.


• L'attribut idP sert d'identifiant.
• L'attribut partenaire est l'identifiant d'un autre participant qui doit nécessairement
être présent dans le fichier.
• L'élément serialHead est facultatif, les autres sont obligatoires.
• Chaque fichier contient les données d'un seul tournoi.
• Le tournoi doit avoir des participants.

DTD

Une DTD est un document portant l'extension .dtd et est chargée de veiller à ce que les
données XML respectent les contraintes imposées dans la DTD.

Dans ce cas, je l'ai déclaré en interne dans le fichier xml, mais il est également possible
de le déclarer en externe sous la forme d'un document en texte brut avec une
extension .dtd.

Les éléments terminaux (ne contenant aucun élément) sont déclarés comme suit : <!
ELEMENT nom_du_type_de_données>.

Les éléments non terminaux de cette autre manière : <!ÉLÉMENT A(B,C)>

Dont il faudra définir la cardinalité : ?(facultatif),*(0,1,plusieurs),+(un ou plusieurs)|


(opérateur de choix)

<!ATTLIST pour déclarer des attributs et il en existe plusieurs types :


ID,IDREF,CDATA,MNTOKEN et les modificateurs :
IMPLIED,FIXED,REQUIRED,literal.

Nous créerons également des entités pour travailler avec des valeurs constantes.

EXIGENCES DES TÂCHES

Comme le tournoi doit avoir des participants, nous utilisons > + pour fixer un minimum
de 1 ou plus dans la cardinalité de l'élément du tournoi.

Comme les attributs doivent être obligatoires, nous utiliserons #REQUIRED.


9

Dans l'élément participant, nous constatons que tous les éléments contenus doivent avoir
au moins une occurrence (+) et que l'élément headOfSeries est facultatif ; j'utilise donc >
?

Comme idP doit être un identifiant > nous ajouterons ID pour déclarer l'attribut comme
un identifiant.

L'attribut partenaire doit faire référence à l'IDP d'un autre participant ; à cette fin,
j'utiliserai IDREF.

Il se présenterait comme suit :

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE tournoi [

<!ELEMENT tournoi (participant+)>

<!ATTLIST tournoi CDATA édition #REQUIRED>

<!ATTLIST previous tournamentWinner CDATA #REQUIRED>

<!ELEMENT participant (nom+,âge+,pays+,headOfSeries ?)>

<!ATTLIST participant idP ID #REQUIRED>

<!ATTLIST participant partenaire IDREF #REQUIRED>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT pays (#PCDATA)>

<!ELEMENT headOfSerial (#PCDATA)>

]>

<tournoi édition="1998" vainqueur précédent="j01">

<participant idP="j01" couple="j02">

<first name>Manuel Pérez</first name>.

<Âge>23</âge>.

<pays> Espagne</pays>.
1
0
<serialHead/>

</participant>.

<participant idP="j02" couple="j01">

<prénom>Manuel Gómez</prénom>.

<âge>25</âge>.

<pays>Espagne</pays>.

</participant>.

<participant idP="j03" couple="j04">

<first name>Ana Puertas</first name>.

<âge>22</âge>.

<country>E5spain</country>.

<serialHead/>

</participant>.

<participant idP="j04" couple="j03">

<first name>Paco Fraile</first name>.

<âge>45</âge>.

<pays>Espagne</pays>.

</participant>.

</tournoi>.

Je joins une capture d'écran de Copy Editor et le fichier sera .dtd :


1
1

Vous aimerez peut-être aussi