<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE PLM [

<!-- Au moins 1 (1-N) '<Article ... />' et 0-N '<Poste_de_charge ... />' : -->
<!ELEMENT PLM (Article+,Lien_de_nomenclature+,Poste_de_charge*,Gamme_de_fabrication*)>
<!ATTLIST PLM author CDATA #FIXED "Franck Barbier" version CDATA #FIXED "1.0">

<!-- 'EMPTY' => '<Article/>' et *NON* '<Article></Article>' : -->
<!ELEMENT Article EMPTY>
<!-- 'ID' signifie "primary key" : -->
<!-- '#REQUIRED' signifie "obligatoire" : -->
<!ATTLIST Article reference ID #REQUIRED>
<!-- Bien que 'designation' soit unique, 'ID' est peu clair car sous-entend "primary key" : -->
<!ATTLIST Article designation CDATA #REQUIRED>
<!ATTLIST Article type_fabrication_achat CDATA #REQUIRED>
<!ATTLIST Article unite_achat_stock CDATA #REQUIRED>
<!ATTLIST Article delai_en_semaine CDATA #REQUIRED>
<!-- '#IMPLIED' signifie "optionel" : -->
<!ATTLIST Article prix_standard CDATA #IMPLIED>
<!ATTLIST Article lot_de_reapprovisionnement CDATA #IMPLIED>
<!ATTLIST Article stock_mini CDATA #IMPLIED>
<!ATTLIST Article stock_maxi CDATA #IMPLIED>
<!ATTLIST Article pourcentage_de_perte CDATA #IMPLIED>
<!ATTLIST Article inventaire CDATA #IMPLIED>
<!-- Type énuméré ('#REQUIRED' est automatique) avec valeur par défaut : -->
<!ATTLIST Article PF_ou_MP_ou_Piece_ou_SE (PF|MP|Pi|SE) "PF">

<!-- Note : pas de possibilité de clef composée, i.e., 'constraint Lien_de_nomenclature_pk primary key(compose,composant)' -->
<!ELEMENT Lien_de_nomenclature EMPTY>
<!-- 'IDREF' signifie "foreign key" : -->
<!ATTLIST Lien_de_nomenclature compose IDREF #REQUIRED>
<!ATTLIST Lien_de_nomenclature composant IDREF #REQUIRED>
<!ATTLIST Lien_de_nomenclature quantite_de_composition CDATA #REQUIRED>

<!ELEMENT Poste_de_charge EMPTY>
<!ATTLIST Poste_de_charge numero_section ID #REQUIRED> <!-- Les valeurs de type 'ID' ne peuvent pas être des chiffres ! -->
<!ATTLIST Poste_de_charge numero_sous_section CDATA #REQUIRED> <!-- 'ID' impossible ici car utilisé juste avant ! -->

<!ELEMENT Gamme_de_fabrication (Operation+)>
<!ATTLIST Gamme_de_fabrication article IDREF #REQUIRED>

<!ELEMENT Operation EMPTY>
<!ATTLIST Operation numero_section IDREF #REQUIRED>
<!ATTLIST Operation numero_sous_section IDREF #REQUIRED> <!-- Impossible d'exploiter 'IDREF' -->

]>

<PLM >
    <Article reference="CD100"
             designation="Camion déménagement bleu"
             type_fabrication_achat="fabr. par lot"
             unite_achat_stock="unite"
             delai_en_semaine="2"
             lot_de_reapprovisionnement="200"
             stock_maxi="600"
             PF_ou_MP_ou_Piece_ou_SE="PF"/>
    <Article reference="CH005"
             designation="Châssis monté"
             type_fabrication_achat="fabr. par lot"
             unite_achat_stock="unite"
             delai_en_semaine="1"
             lot_de_reapprovisionnement="300"
             stock_maxi="900"
             PF_ou_MP_ou_Piece_ou_SE="SE"/>
    <Lien_de_nomenclature compose="CD100"
                          composant="CH005"
                          quantite_de_composition="1"/>
    <Poste_de_charge numero_section="x600" numero_sous_section="x930"/> <!-- 'x600' au lieu de '600' -->
    <Gamme_de_fabrication article="CD100">
        <!-- An element with the identifier "x930" must appear in the document: --> 
        <Operation numero_section="x600" numero_sous_section="x930"/> <!-- 'x600' au lieu de '600' -->
    </Gamme_de_fabrication>
</PLM>