Example: Scoped key definitions for variable text
The Acme Tractor Company produces two models of tractor: X and Y. Their product manual contains sets of instructions for each model. While most maintenance procedures are different for each model, the instructions for changing the oil are identical for both model X and model Y. The company policies call for including the specific model number in each topic, so a generic topic that could be used for both models is not permitted.
-
The authoring team references the model information in the
changing-the-oil.dita
topic by using the following mark-up:<keyword keyref="model"/>
-
The information architect examines the root map for the manual, and decides how to define key scopes. Originally, the map looked like the following:
<map> <!-- Model X: Maintenance procedures --> <topicref href="model-x-procedures.dita"> <topicref href="model-x/replacing-a-tire.dita"/> <topicref href="model-x/adding-fluid.dita"/> </topicref> <!-- Model Y: Maintenance procedures --> <topicref href="model-y-procedures.dita"> <topicref href="model-y/replacing-a-tire.dita"/> <topicref href="model-y/adding-fluid.dita"/> </topicref> </map>
-
The information architect wraps each set of procedures in a <topicgroup> element and sets the @keyscope attribute.
<map> <!-- Model X: Maintenance procedures --> <topicgroup keyscope="model-x"> <topicref href="model-x-procedures.dita"> <topicref href="model-x/replacing-a-tire.dita"/> <topicref href="model-x/adding-fluid.dita"/> </topicref> </topicgroup> <!-- Model Y: Maintenance procedures --> <topicgroup keyscope="model-y"> <topicref href="model-y-procedures.dita"> <topicref href="model-y/replacing-a-tire.dita"/> <topicref href="model-y/adding-fluid.dita"/> </topicref> </topicgroup> </map>
This defines the key scopes for each set of procedures.
-
The information architect then adds key definitions to each set of procedures, as well as a reference to the
changing-the-oil.dita
topic.<map> <!-- Model X: Maintenance procedures --> <topicgroup keyscope="model-x"> <keydef keys="model"> <topicmeta> <linktext>X</linktext> </topicmeta> </keydef> <topicref href="model-x-procedures.dita"> <topicref href="model-x/replacing-a-tire.dita"/> <topicref href="model-x/adding-fluid.dita"/> <topicref href="common/changing-the-oil.dita"/> </topicref> </topicgroup> <!-- Model Y: Maintenance procedures --> <topicgroup keyscope="model-y"> <keydef keys="model"> <topicmeta> <linktext>Y</linktext> </topicmeta> </keydef> <topicref href="model-y-procedures.dita"> <topicref href="model-y/replacing-a-tire.dita"/> <topicref href="model-y/adding-fluid.dita"/> <topicref href="common/changing-the-oil.dita"/> </topicref> </topicgroup> </map>
When the DITA map is processed, the
changing-the-oil.dita
topic is rendered twice. The model variable is rendered differently in each instance, using the text as specified in the scoped key definition. Without key scopes, the first key definition would win, and "model "X" would be used in all topics.