vendredi 28 décembre 2012

Exercice : DTD vers les schémas XSD


Objectif: Les schémas permettent de décrire les modèles de données de façon plus précise.
Transposez la DTD Livres.dtd en un schéma XSD avec les caractéristiques suivantes :

    •Une année est une chaîne de 4 caractères compris dans l'espace 0...9
    •Un livre contient exactement un titre, un prix, une année et au moins un auteur. De plus, on
       associe à des éléments de ce type l'attribut "edition" qui précise si il s'agit d'un paperback
       ou d'une édition reliée.
    •Un prix est un type complexe, on lui associe deux attributs: "valeur" et "monnaie" ("monnaie" a
       un type qui dérive de "string", son champs de valeur se limite aux chaînes "USD" et "EUR")

Livres.dtd
    <!ELEMENT livres (livre*)>
    <!ELEMENT livre (titre, auteur+, année, prix)>
    <!ATTLIST livre edition CDATA #REQUIRED>
    <!ELEMENT titre (#PCDATA)>
    <!ELEMENT auteur (prenom, nom, laboratoire?, pays)>
    <!ELEMENT nom (#PCDATA)>
    <!ELEMENT prenom (#PCDATA)>
    <!ELEMENT année (#PCDATA)>
   <!ELEMENT laboratoire (#PCDATA)>
    <!ELEMENT prix EMPTY>
    <!ATTLIST prix
       monnaie CDATA #REQUIRED
       valeur CDATA #REQUIRED>
    <!ELEMENT pays (#PCDATA)>

Solution :
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="livres">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="livre" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:element name="livre" type="livreType"/>
<xsd:element name="titre" type="xsd:string"/>
<xsd:element name="auteur" type="auteurType"/>

<xsd:element name="annee">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9]{4}"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>

<xsd:element name="prix" type="prixType"/>
<xsd:element name="prenom" type="xsd:string"/>
<xsd:element name="nom" type="xsd:string"/>
<xsd:element name="laboratoire" type="xsd:string"/>
<xsd:element name="pays" type="xsd:string"/>

<xsd:complexType name="livreType">
<xsd:sequence>
<xsd:element ref="titre"/>
<xsd:element ref="auteur" minOccurs="1" maxOccurs="unbounded"/>
<xsd:element ref="annee"/>
<xsd:element ref="prix"/>
</xsd:sequence>
<xsd:attribute name="edition" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="paperback"/>
<xsd:enumeration value="relie"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
  
<xsd:complexType name="auteurType">
<xsd:sequence>
<xsd:element ref="prenom"/>
<xsd:element ref="nom"/>
<xsd:element ref="laboratoire" minOccurs="0"/>
<xsd:element ref="pays"/>
</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="prixType">
<xsd:attribute name="valeur" type="xsd:decimal" use="required"/>
<xsd:attribute name="monnaie" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="USD"/>
<xsd:enumeration value="EUR"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>

</xsd:schema>

Aucun commentaire:

Enregistrer un commentaire