Tutoriel : ajouter un nouveau domaine
    
    Comprendre comment ajouter un nouveau domaine à un document-type
        existant.
 
        Durée : 75 mn 
    
        Objectifs : 
            
                - Comprendre comment ajouter un domaine.
- Comprendre comment créer les éléments d'un domaine.
Contenus : 
            Dans ce tutoriel, on va créer un domaine "
cuisine" dans lequel on
                spécialisera un élément 
ph (phrase) en un élément 
ustensil, pour
                coder des phrases de type
                
<p>Prendre une <ustensil>louche</ustensil> et prélever une partie du bouillon pour le faire réduire.</p>
            
        Ajouter un domaine
        
            
                - 
                    Trois interventions 
                        - 
                            Déclaration des entités du domaine 
                                - 
                                    Par exemple les nouvelles « phrases » du domaine « software » : 
- 
                                    <!ENTITY % sw-d-ph "filepath | msgph |
                                            systemoutput | userinput"> 
- 
                                    Dans un fichier externe (softwareDomain.ent) 
 
- 
                            Assemblage des entités du domaine par surcharge d’entités 
- 
                            Gérer les modules du topic 
- 
                            Création du module déclarant les éléments du domaine 
 
- 
                            Rappel DTD  - 
                            Toute entité utilisée doit être déclarée au préalable 
- 
                            Si une entité est déclarée plusieurs fois, c’est sa première déclaration rencontrée qui prime 
 
 
     
    
        Mode opératoire
        
            
                - 
                    Pour ajouter un domaine, il faut créer deux nouveaux fichiers 
                        - 
                            cuisineDomain.ent 
- 
                            cuisineDomain.mod 
 
- 
                            Puis faire prendre en compte ce domaine par tous les types de
                        document concernés  
 
     
    
        Création d’un nouvel élément
        
     
    
        Syntaxe de la spécialisation
        
     
    
    
        Création d'un domaine "cuisine"
        
            Le module se dénomme 
cuisine. Les noms de fichier utiliseront la
                racine 
cuisineDomain et toute abréviation commencera par 
cuis.
                    
Dans ce tutoriel, il faudra créer deux fichiers cuisineDomain.ent et
                        cuisineDomain.mod puis les faire prendre en compte par le DITA-OT
                    et ensuite les intégrer à notre type de document concept.
Procédure : 
                Organisation des répertoires et du catalogue
                - 
                    Dans le répertoire doctypes créez un répertoire
                            cuisineDomain puis un répertoire dtd.
                
- 
                    Dans cuisineDomain/dtd, créez les fichiers
                            cuisineDomain.mod et cuisineDomain.ent :
                    
                        - 
                            Dans Oxygen, créez un nouveau document
                        
- 
                            Dans la fenêtre, choisir le type "document type
                                    definition"  
- 
                            Enregistrez le premier fichier et répétez l'opération pour le
                                second.
                        
 
- 
                    Comme dans le précédent tutoriel, dans cuisineDomain, créez un
                        catalogue (catalog.xml).
                
- 
                    Ajoutez une entrée dans le catalogue de la racine du plugin.
                
- 
                    Dans le catalogue du domaine, ajoutez deux entrées pour identifier les
                        fichiers du domaine :
                    
                        - 
                            <public
                                    publicId="urn:pubid:fr:masociete.doctypes:cuisineDomain.entites"
                                    uri="./dtd/cuisineDomain.ent"/>
                            
                        
- 
                            <public
                                    publicId="urn:pubid:fr:masociete.doctypes:cuisineDomain.modules"
                                    uri="./dtd/cuisineDomain.mod"/>
                            
                        
 
- 
                    Lancez l'intégrateur.
                
Paramétrage des entités
                - 
                    Ouvrir cuisineDomain.ent. Dans ce fichier, il va falloir créer les
                        entités du domaine, qui seront ensuite utilisées pour l'intégration du
                        domaine.
                
- 
                    Déclarez l'entité de spécialisation de ph : <!ENTITY % cuis-d-ph
                            "ustensil " > .
                
- 
                    Déclarez l'entité de définition du nouveau domaine (vocabulaire) :
                            <!ENTITY cuis-d-att "(topic cuis-d)" >.
                    On notera que cette entité est générale et sera utilisée au moment
                        du parsing des documents, pas des modèles. Une erreur fréquente
                        consiste à taper juste après la déclaration <!ENTITY un signe
                            %, alors que l'on cherche une entité générale. 
Déclaration de ustensil
                - 
                    Ouvrir cuisineDomain.mod
                
- 
                    Déclarez une entité de définition de l'élément que vous ajoutez :
                            <!ENTITY % ustensil "ustensil" >. Cette entité sert à des
                        redéfinitions ultérieures (voir les explications d'E. Kimber sur le
                            sujet). 
                
- 
                    Déclarez l'élément 
                    
                        - 
                            Déclaration d'une entité paramètre pour le contenu :
                                    <!ENTITY % ustensil.content "(#PCDATA |
                                    %text;)*">
                            
                            Avec cette déclaratrion, on pourra saisir du texte mixé à tous les
                                éléments accessibles via l'entité paramètre text. 
- 
                            Déclaration d'une entité paramètre pour les attributs :
                                    <!ENTITY % ustensil.attributes "keyref CDATA #IMPLIED
                                    %univ-atts; outputclass CDATA #IMPLIED" > 
                        
- 
                            Déclaration de l'élément : <!ELEMENT ustensils
                                    %ustensil.content;>
                        
- 
                            Déclaration des attributs : <!ATTLIST ustensils
                                    %ustensil.attributes;>
                        
 Cette structure imposée par le standard permet, par la suite, de
                        spécialiser les attributs ou le contenu de ustensil.  
- 
                    Déclarez l'héritage de l'élément : <!ATTLIST ustensil %global-atts;
                            class CDATA "+ topic/ph cuis-d/ustensil " > 
                    
                        
                            - 
                                @class :  le caractère + indique que l'on est dans une
                                spécialisation de domaine (- pour les structures de contenus) 
- les espaces avant et après cuis-d/ustensil sont utiles pour
                                les chemins XPATH définis par comparaison de chaîne de caractères. 
- 
                                %global-atts; ajoute des attributs de "debug" :
                                    xtrf (xml-trace-filename) et xtrc
                                (xml-trace-counter). 
 La structure fnale est donc : <!ENTITY % ustensil.content "(#PCDATA | %text;)*">
<!ENTITY % ustensil.attributes
             "keyref  CDATA  #IMPLIED
              %univ-atts; 
              outputclass  CDATA #IMPLIED"
>
<!ELEMENT ustensil    %ustensil.content;>
<!ATTLIST ustensil    %ustensil.attributes;>
<!ATTLIST ustensil %global-atts;  class CDATA "+ topic/ph cuis-d/ustensil "  >
 
Intégration du domaine de cuisine dans le topic
                    concept
                - 
                    Rouvrir concept.dtd, puis, dans l'ordre :
                
- 
                    Intégrez le jeu d'entités cuisineDomain.ent en utilisant son nom
                        public.
                    
                        <!ENTITY % cuis-d-dec     
  PUBLIC "urn:pubid:fr:masociete.doctypes:cuisineDomain.entites" 
         "../../cuisineDomain/dtd/Domain.ent"                                              
>%cuis-d-dec;
 
- 
                    Redéfinissez l'entité paramètre %ph;
                    
                        <!ENTITY % ph "ph | %hi-d-ph; | %cuis-d-ph; | %sw-d-ph; | %ui-d-ph; "> 
 
- 
                    Ajoutez la déclaration du domaine
                    
                        <!ENTITY included-domains "
&concept-att; &hi-d-att; &ut-d-att; &indexing-d-att; 
&hazard-d-att; &abbrev-d-att; &sw-d-att; &ui-d-att; 
&cuis-d-att; " 
> 
 Note : comme précédemment, on intègre ici via une entité générale. 
- 
                    Intégrez la définition des éléments (cuisineDomain.mod) en
                        utilisant son nom public.
                    
                        <!ENTITY % cuis-d-def     
  PUBLIC "urn:pubid:fr:masociete.doctypes:cuisineDomain.modules" 
         "cuisineDomain.mod"
>%cuis-d-def;
 La DTD doit maintenant être valide. 
- 
                    Testez l'intégration en ajoutant un élément ustensil dans un
                        paragraphe p.
                    Ceci doit être possible et le document résultant doit être valide. 
Résultat : 
                
                    - Tout prochain ajout d'un élément au domaine sera automatiquement pris en
                        compte dans concept.dtd, si tant est que, dans la DTD, l'entité
                        paramètre de prise en compte est bien redéfinie (%ph; ou
                            %pre; ou %keyword; ...).
- Dans l'état actuel de la technologie (utilisation de DTD), ceci est à
                        refaire pour tous les document type shell utilisant le domaine
                            cuisine.