<?xml version="1.0"?>
<!-- Espace de nom 'xsd' doit etre utilise dans la def. du schema ! -->
<!-- Default name space: 'xmlns:BDi="https://barbierdarnal.com"' -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
            targetNamespace="https://barbierdarnal.com" xmlns:BDi="https://barbierdarnal.com" version="1.0">
    
    <!-- Type deporte pour element 'Article' -->
    <xsd:complexType name="Type_article">
        <xsd:sequence>
            <xsd:element name="designation" type="xsd:string" default="designation non definie"/> 
            <xsd:element name="type_fabrication_achat" type="xsd:string"/> 
            <xsd:element name="unite_achat_stock" type="xsd:string"/> 
            <xsd:element name="delai_en_semaine"> 
                <xsd:simpleType> 
                    <xsd:restriction base="xsd:positiveInteger">
                        <xsd:minInclusive value="1"/>
                        <xsd:maxInclusive value="6"/>
                    </xsd:restriction>
                </xsd:simpleType>
            </xsd:element>
            <!-- "optionel" ('maxOccurs="1"' par defaut) : -->
            <xsd:element name="prix_standard" type="xsd:decimal" minOccurs="0"/> 
            <xsd:element name="lot_de_reapprovisionnement" type="xsd:positiveInteger" minOccurs="0"/> 
            <xsd:element name="stock_mini" type="xsd:positiveInteger" minOccurs="0"/> 
            <xsd:element name="stock_maxi" type="xsd:positiveInteger" minOccurs="0"/> 
            <xsd:element name="pourcentage_de_perte" type="xsd:unsignedLong" minOccurs="0"/> 
            <xsd:element name="inventaire" type="xsd:positiveInteger" minOccurs="0"/> 
            <xsd:element name="PF_ou_MP_ou_Piece_ou_SE"> 
                <xsd:complexType>
                    <xsd:choice>
                        <xsd:element name="PF" type="xsd:string"/>
                        <xsd:element name="MP" type="xsd:string"/>
                        <xsd:element name="Pi" type="xsd:string"/>
                        <xsd:element name="SE" type="xsd:string"/>
                    </xsd:choice>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="reference" type="xsd:string" use="required"/>
        <xsd:attribute name="author" default="Franck Barbier" type="xsd:string"/>
    </xsd:complexType> 

    <!-- Type deporte pour element 'Lien_de_nomenclature' -->
    <xsd:complexType name="Type_lien_de_nomenclature">
        <xsd:sequence>
            <xsd:element name="compose" type="xsd:string"/>
            <xsd:element name="composant" type="xsd:string"/>
            <xsd:element name="quantite_de_composition" type="xsd:positiveInteger"/>
        </xsd:sequence>
    </xsd:complexType> 
    
    <xsd:complexType name="Type_poste_de_charge">
        <xsd:sequence>
            <xsd:element name="num_section" type="xsd:string"/>
            <xsd:element name="num_sous_section" type="xsd:string"/>
        </xsd:sequence>
    </xsd:complexType> 
    
    <xsd:complexType name="Type_operation">
        <xsd:sequence>
            <xsd:element name="num_section" type="xsd:string"/>
            <xsd:element name="num_sous_section" type="xsd:string"/>
        </xsd:sequence>
        <xsd:attribute name="numero" type="xsd:string" use="required"/>
    </xsd:complexType> 
    
    <xsd:complexType name="Type_gamme_de_fabrication">
        <xsd:all>
            <xsd:element name="Operation" type="BDi:Type_operation"/> 
        </xsd:all>
        <xsd:attribute name="article" type="xsd:string" use="required"/>
    </xsd:complexType> 
    
    <xsd:element name="PLM">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Article" type="BDi:Type_article" maxOccurs="unbounded"/>
                <xsd:element name="Lien_de_nomenclature" type="BDi:Type_lien_de_nomenclature" maxOccurs="unbounded"/>
                <xsd:element name="Poste_de_charge" type="BDi:Type_poste_de_charge" maxOccurs="unbounded"/>
                <xsd:element name="Gamme_de_fabrication" type="BDi:Type_gamme_de_fabrication" maxOccurs="unbounded"/>
            </xsd:sequence>
            <xsd:attribute name="author" type="xsd:string" fixed="Franck Barbier"/> 
            <xsd:attribute name="URL" type="xsd:anyURI" fixed="https://BarbierDarnal.com/PLM_XML.html"/> 
            <xsd:attribute name="version" type="xsd:string" fixed="1.0"/>
        </xsd:complexType>

        <!-- Contraintes d'integrite referentielle -->
        <xsd:key name="Article_pk">
            <xsd:selector xpath="BDi:Article"/>
            <!-- Le champ est relatif dans le scope, i.e., attribut de 'BDi:Article' : -->
            <xsd:field xpath="@reference"/>
        </xsd:key>
        
        <xsd:unique name="Article_unique">
            <xsd:selector xpath="./BDi:Article"/>
            <xsd:field xpath="BDi:designation"/>
        </xsd:unique>
        
        <xsd:key name="Lien_de_nomenclature_pk">
            <xsd:selector xpath="BDi:Lien_de_nomenclature"/>
            <xsd:field xpath="BDi:compose"/>
            <xsd:field xpath="BDi:composant"/>
        </xsd:key>
        
        <xsd:keyref name="Lien_de_nomenclature_fk_1" refer="BDi:Article_pk">
            <xsd:selector xpath="./BDi:Lien_de_nomenclature"/>
            <xsd:field xpath="BDi:compose"/>
        </xsd:keyref>
        
        <xsd:keyref name="Lien_de_nomenclature_fk_2" refer="BDi:Article_pk">
            <xsd:selector xpath="./BDi:Lien_de_nomenclature"/>
            <xsd:field xpath="BDi:composant"/>
        </xsd:keyref>
        
        <xsd:key name="Poste_de_charge_pk">
            <xsd:selector xpath="BDi:Poste_de_charge"/>
            <xsd:field xpath="BDi:num_section"/>
            <xsd:field xpath="BDi:num_sous_section"/>
        </xsd:key>
        
        <xsd:key name="Gamme_de_fabrication_pk">
            <xsd:selector xpath="BDi:Gamme_de_fabrication"/>
            <xsd:field xpath="@article"/>
        </xsd:key>
        
        <xsd:keyref name="Gamme_de_fabrication_fk" refer="BDi:Article_pk">
            <xsd:selector xpath="./BDi:Gamme_de_fabrication"/>
            <xsd:field xpath="@article"/>
        </xsd:keyref>
        
        <xsd:keyref name="Operation_fk" refer="BDi:Poste_de_charge_pk">
            <xsd:selector xpath="BDi:Gamme_de_fabrication/BDi:Operation"/>
            <xsd:field xpath="BDi:num_section"/>
            <xsd:field xpath="BDi:num_sous_section"/>
        </xsd:keyref>
    </xsd:element> 
</xsd:schema>
