<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">


<!-- Les types -->

<xs:simpleType name="nompersonne">
  <xs:restriction base="xs:string">
    <xs:minLength value="5" />
    <xs:maxLength value="25" />
  </xs:restriction>
</xs:simpleType>

<xs:simpleType name="idstring">
  <xs:restriction base="xs:string">
    <xs:maxLength value="8" />
  </xs:restriction>
</xs:simpleType>


<xs:simpleType name="adresseweb">
  <xs:restriction base="xs:string">
    <xs:pattern value="http://.+" />
  </xs:restriction>
</xs:simpleType>


<xs:simpleType name="nomfichier">
  <xs:restriction base="xs:string">
    <xs:pattern value="\w+\.\w{3}" />
  </xs:restriction>
</xs:simpleType>


<xs:simpleType name="montypedate">
  <xs:restriction base="xs:string">
    <xs:pattern value="\d\d? \w+ \d{4}" />
  </xs:restriction>
</xs:simpleType>


<xs:simpleType name="mot">
  <xs:restriction base="xs:string">
    <xs:pattern value="\S+" />
  </xs:restriction>
</xs:simpleType>



<!-- Les éléments -->

<xs:element name="annee" type="xs:gYear" />

<xs:element name="realisateur" type="nompersonne" />

<xs:element name="nom" type="nompersonne" />

<xs:element name="prenom" type="nompersonne" />

<xs:element name="naissance" type="montypedate" />

<xs:element name="nationalite" type="mot" />


<xs:element name="film">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:maxLength value="30" />
    </xs:restriction>
  </xs:simpleType>
</xs:element>

<xs:element name="refacteur">
 <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="nompersonne">
        <xs:attribute name="code" type="idstring" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>


<xs:element name="p">
  <xs:complexType mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="refacteur" />
      <xs:element ref="film" />
      <xs:element ref="realisateur" />
      <xs:element ref="annee" />
    </xs:choice>
  </xs:complexType>
</xs:element>

<xs:element name="biographie">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="p" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="site">
  <xs:complexType>
    <xs:attribute name="url" type="adresseweb" />
  </xs:complexType>
</xs:element>

<xs:element name="photo">
  <xs:complexType>
    <xs:attribute name="source" type="nomfichier" />
    <xs:attribute name="alt" type="xs:string" />
  </xs:complexType>
</xs:element>



<xs:element name="acteur">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="prenom" />
      <xs:element ref="nom" />
      <xs:element ref="naissance" />
      <xs:element ref="nationalite" />
      <xs:element ref="photo"      minOccurs="0" />
      <xs:element ref="site"       minOccurs="0" />
      <xs:element ref="biographie" minOccurs="0" />
    </xs:sequence>
    <xs:attribute name="id" type="idstring" />
  </xs:complexType>

</xs:element>



<!-- le document et les contraintes de clef -->

<xs:element name="liste_acteurs">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="acteur" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>

  <xs:key name="clefacteur">
    <xs:selector xpath="acteur" />
    <xs:field xpath="@id" />
  </xs:key>

  <xs:keyref name="refclefacteur" refer="clefacteur">
    <xs:selector xpath="acteur/biographie/p/refacteur"/>
    <xs:field xpath="@code"/>
  </xs:keyref>

</xs:element>



</xs:schema>

