Map Specialization Step 1: Design the Map Element Types

A typical FAQ consists of one or more groups of questions, where each group has a descriptive title. There may be some introductory material that is not itself FAQ questions.

That suggests that an FAQ map needs the following components:

The metadata requirement is handled by the generic metadata for topicrefs and maps (at least for the purpose of this exercise). References to generic topics can be done using unspecialized <topicref>.

That just leaves two element types to be defined for the FAQ map domain:
<faq-question>
Represents the use of a single FAQ question topic. Would normally be used with faq-question topics. Because we've defined the <faq-question> topic type to require short descriptions, it is probably appropriate to set the default value for the @type attribute to "faq-question" so that users are warned if they point to other topic types. Because FAQ questions are explicitly atomic, <faq-question> does not allow subordinate topicrefs.
<faq-question-set>
Creates a group of related FAQ questions. May have an initial generic topic or may itself refer to a non-FAQ-question topic to act as an introduction or to satisfy the need for title-only topics in some processing environments.
The content model is:
(topicmeta?, 
 topicref?, 
 faq-question*)
.
For the FAQ map type we need the following element types:
<faq-map>
Specializes from <map> and serves as the root of an FAQ publication. It's content model is:
(title,
 topicmeta?,
 keydef*,
 faq-question-set,
 reltable*) 

By requiring exactly one <faq-question-set> the map clearly establishes the root of the overall FAQ navigation structure.