site de Fabien Torre, université de Lille


Source de bd.xsd

<?xml version="1.0" ?>
<xs:schema >
<!-- Les types utiles pour les bandes dessinées -->
<xs:simpleType name="name">
<xs:restriction base="xs:string">
<xs:minLength value="3" />
<xs:maxLength value="25" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="titrebd">
<xs:restriction base="xs:string">
<xs:minLength value="5" />
<xs:maxLength value="40" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="numerobd">
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="1" />
<xs:maxInclusive value="100" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="idstring">
<xs:restriction base="xs:string">
<xs:minLength value="1" />
<xs:maxLength value="10" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="filename">
<xs:restriction base="xs:string">
<xs:minLength value="5" />
<xs:maxLength value="20" />
<xs:pattern value="\w+\.\w{3}" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="montypedate">
<xs:restriction base="xs:string">
<xs:pattern value="\d{4}|\d{4}-\d{2}" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="individu">
<xs:sequence>
<xs:element name="nom" type="name" />
<xs:element name="prenom" type="name" minOccurs="0" />
</xs:sequence>
<xs:attribute name="id" type="idstring" use="required" />
</xs:complexType>
<xs:complexType name="refindividu">
<xs:attribute name="ref" type="idstring" use="required" />
</xs:complexType>
<!-- une bande dessinée -->
<xs:complexType name="description_bd">
<xs:sequence>
<xs:element name="titre" type="titrebd" />
<xs:element name="auteur" type="refindividu" minOccurs="1" maxOccurs="unbounded" />
<xs:element name="illustrateur" type="refindividu" minOccurs="1" maxOccurs="unbounded" />
<xs:element name="sortie" type="montypedate" />
<xs:element name="resume">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="perso" type="name" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="illustration" type="filename" use="optional" />
</xs:complexType>
<!-- une collection de bande dessinées -->
<xs:element name="collection">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="bd" type="description_bd" />
<xs:element name="serie">
<xs:complexType>
<xs:sequence>
<xs:element name="titreserie" type="titrebd" />
<xs:element name="bd" minOccurs="2" maxOccurs="unbounded">
<xs:complexType>
<xs:complexContent>
<xs:extension base="description_bd">
<xs:attribute name="numero" type="numerobd" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<!-- unicité des numéros de bd dans une série -->
<xs:unique name="uniquenumerobd">
<xs:selector xpath="bd" />
<xs:field xpath="@numero" />
</xs:unique>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
<!-- la bdthèque : des auteurs/illustrateurs et une collection -->
<xs:element name="bdtheque">
<xs:complexType>
<xs:sequence>
<xs:element name="personnes">
<xs:complexType>
<xs:sequence>
<xs:element name="personne" type="individu" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element ref="collection" />
</xs:sequence>
</xs:complexType>
<!-- clefs étrangères et primaires pour les individus -->
<xs:key name="clefpersonne">
<xs:selector xpath="personnes/personne" />
<xs:field xpath="@id" />
</xs:key>
<xs:keyref name="refclefpersonne" refer="clefpersonne">
<xs:selector xpath="//auteur|//illustrateur" />
<xs:field xpath="@ref" />
</xs:keyref>
</xs:element>
</xs:schema>
Fabien Torre Valid HTML5! Valid CSS!
site de Fabien Torre, université de Lille