Sharing elements across specializations

Specialization enables easy reuse of elements from ancestor specializations. However, it is also possible to reuse elements from non-ancestor specializations, as long as the dependency is properly declared in order to prevent invalid generalization or conref processing.

A structural specialization can incorporate elements from unrelated domains or other structural specializations by referencing them in the content model of a specialized element. The elements included in this manner must be specialized from ancestor content that is valid in the new context. If the reusing and reused specializations share common ancestry, the reused elements must be valid in the reusing context at every level they share in common.

Although a well-designed structural specialization hierarchy with controlled use of domains is still the primary means of sharing and reusing elements in DITA, the ability to also share elements declared elsewhere in the hierarchy allows for situations where relevant markup comes from multiple sources and would otherwise be developed redundantly.

Example: A specialization of <concept> reuses an element from the task module

A specialized concept topic could declare a specialized <process> section that contains the <steps> element that is defined in the task module. This is possible because of the following factors:

  • The <steps> element is specialized from <ol>.
  • The <process> element is specialized from <section>, and the content model of <section> includes <ol>.

The <steps> element in <process> always can be generalized back to <ol> in <section>.

Example: A specialization of <reference> reuses an element from the programming domain

A specialized reference topic could declare a specialized list (<apilist>) in which each <apilistitem> contains an <apiname> element that is borrowed from the programming domain.

Was this helpful?