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