<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="1.0" > 
    
    <xsd:complexType name="Classe_UML_Detenu">
        <xsd:sequence>
            <!-- 'minOccurs="1"' et 'maxOccurs="1"' sont les valeurs par défaut : -->
            <xsd:element name="n_ecrou" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
            <xsd:element name="prenom" type="xsd:string"/> 
            <!-- Etc. -->
            <xsd:element name="date_incarceration" type="xsd:date"/>
        </xsd:sequence>
    </xsd:complexType> 

    <xsd:complexType name="Classe_UML_Decision">
        <xsd:sequence>
            <xsd:element name="n_type_decision"> 
                <xsd:simpleType> 
                    <xsd:restriction base="xsd:positiveInteger">
                        <xsd:minInclusive value="1"/>
                        <xsd:maxInclusive value="3"/>
                    </xsd:restriction>
                </xsd:simpleType>
            </xsd:element>
            <xsd:element name="n_ecrou" type="xsd:string"/> 
            <xsd:element name="date_decision" type="xsd:date"/>
            <!-- Propriétés des sous-classes au sens de l'héritage UML : --> 
            <xsd:element name="duree" type="xsd:positiveInteger" minOccurs="0" maxOccurs="0"/>
        </xsd:sequence>
    </xsd:complexType> 
    
    <xsd:complexType name="Classe_UML_Condamnation">
        <xsd:complexContent>
            <!-- C'est '<xsd:extension>' *OU* '<xsd:restriction>' et non les 2 à la fois : --> 
            <!--<xsd:extension base="Classe_UML_Decision">-->
            <!--'<xsd:all>' : n'importe quel ordre :--> 
            <!--<xsd:all>-->
            <!--<xsd:element name="duree" type="xsd:positiveInteger"/>-->
            <!--</xsd:all>-->
            <!--</xsd:extension>-->
            <xsd:restriction base="Classe_UML_Decision">
                <xsd:sequence>
                    <xsd:element name="n_type_decision"> 
                        <xsd:simpleType> 
                            <xsd:restriction base="xsd:positiveInteger">
                                <xsd:minInclusive value="1"/>
                                <xsd:maxInclusive value="1"/>
                            </xsd:restriction>
                        </xsd:simpleType>
                    </xsd:element>
                    <xsd:element name="n_ecrou" type="xsd:string"/> 
                    <xsd:element name="date_decision" type="xsd:date"/>
                    <!-- Propriétés des sous-classes au sens de l'héritage UML : --> 
                    <xsd:element name="duree" type="xsd:positiveInteger" minOccurs="1" maxOccurs="1"/>
                </xsd:sequence>
            </xsd:restriction>
        </xsd:complexContent>
    </xsd:complexType>
    
    <xsd:element name="Prison_de_Nantes">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Detenu" type="Classe_UML_Detenu" maxOccurs="unbounded"/>
                <xsd:element name="Condamnation" type="Classe_UML_Condamnation" maxOccurs="unbounded"/>
            </xsd:sequence>
            <xsd:attribute name="author" default="Franck Barbier" type="xsd:string"/>
            <xsd:attribute name="URL" default="https://franckbarbier.com/Enterprise_Architect/Prison_de_Nantes/Prison_de_Nantes.html" type="xsd:anyURI"/>
            <xsd:attribute name="version" type="xsd:string" fixed="1.0"/>
        </xsd:complexType>

        <!-- Contraintes d'intégrité référentielle -->
        <xsd:key name="Detenu_key">
            <xsd:selector xpath="./Detenu" />
            <xsd:field xpath="./n_ecrou" />
        </xsd:key>
        <!-- Pénible car la contrainte doit aussi être posée sur les autres sous-types : -->
        <xsd:key name="Condamnation_key">
            <xsd:selector xpath="Condamnation"/>
            <xsd:field xpath="n_type_decision"/>
            <xsd:field xpath="n_ecrou"/>
            <xsd:field xpath="date_decision"/>
        </xsd:key>
        
        <xsd:keyref name="Condamnation_fk" refer="Detenu_key">
            <xsd:selector xpath="Condamnation" />
            <xsd:field xpath="n_ecrou" />
        </xsd:keyref>
        <!-- Fin des contraintes d'intégrité référentielle -->
        
    </xsd:element> 
</xsd:schema>
