Step 2-3. Create New .mod File and Integrate Into Shell

Find the file "concept.mod" in the regular DITA DTD distribution and copy it to "faq-question.mod" in your faq-questions/dtd directory.

Edit this file as follows:
Now edit the faq-question.dtd file (the document type shell DTD) and integrate the module as follows:
  1. Find the declaration for the %concept-typemod; entity declaration.
  2. After this declaration, add this declaration and reference to the faq-question topic type module:
    <!ENTITY % faq-question-typemod 
      SYSTEM "faq-question.mod"                                                        
     >                                                     
    %faq-question-typemod; 
The topic element integration section of the faq-question.dtd shell should now look like this:
<!-- ============================================================= -->
<!--                    TOPIC ELEMENT INTEGRATION                  -->
<!-- ============================================================= -->

<!--                    Embed topic to get generic elements        -->
<!ENTITY % topic-type   PUBLIC 
"-//OASIS//ELEMENTS DITA Topic//EN" 
"topic.mod"                                                          >
%topic-type;


<!--                    Embed concept to get specific elements     -->
<!ENTITY % concept-typemod 
                        PUBLIC 
"-//OASIS//ELEMENTS DITA Concept//EN" 
"concept.mod"                                                        >                                                     
%concept-typemod;

<!ENTITY % faq-question-typemod 
  SYSTEM "faq-question.mod"                                                        
 >                                                     
%faq-question-typemod;

Note also that I didn't bother to define either a public identifer or a URN for the %faq-question-typemod; parameter entity. This is to keep things simple, as with our test document. Later, once we've got everything working, we can replace the relative URL with a URN and set up the necessary catalog mappings.

Trying validating your test document again. Now you should get errors to the effect that the "concept" element type is declared multiple times, as well as the same messages about the FAQ-specific element types not being declared. This indicates that we've got the module integrated with the shell correctly.

Note: You may be now be thinking that I'm going about this in the wrong order—shouldn't I declare the element types for the module first and then integrate them? The method in this madness is that by starting from the back and working forward, we know both what isn't done yet (by the failures reported when we validate our test) and we'll know for sure when we're done (by the fact that the failures will go away) and, most important, we'll know that when the failures do go away, it's because everything really is hooked up correctly and not for some other hard-to-debug reason, like we forgot to hook in a particular module or something. Essentially we start with where we want to end up and then work backwards until we get there. If you see what I mean.