The @specializations attribute rules and syntax

The @specializations attribute enables processors to determine what attribute specializations are available in a document. The attribute is declared on the root element for each topic or map type. Each attribute domain defines a token to declare the extension. The effective value of the @specializations attribute is composed of these tokens.

Syntax and rules

The @props and @base attributes are the only two core attributes available for specialization.

Each specialization of the @props and @base attributes MUST provide a token for use by the @specializations attribute.

The @specializations token for an attribute specialization begins with either @props or @base followed by a slash, followed by the name of the new attribute:

'@', props-or-base, ('/', attname)+
For example:
  • If @props is specialized to create @myNewProp, this results in the following token: @props/myNewProp
  • If @base is specialized to create @myFirstBase, this results in the following token: @base/myFirstBase
  • If that specialized attribute @myFirstBase is further specialized to create @mySecondBase, this results in the following token: @base/myFirstBase/mySecondBase

Note that the value for the @specializations attribute is not authored. Instead, the value is defaulted based on the modules that are included in the document type shell.

Example: @specializations attribute for a task with multiple domains

In this example, a document-type shell integrates the task structural module and the following domain modules:

Domain Domain short name
User interface ui-d
Software sw-d
@deliveryTarget attribute deliveryTarget
@platform attribute platform
@product attribute product

The value of the @specializations attribute includes one value from each attribute module. The effective value is the following:

specializations="@props/deliveryTarget @props/platform @props/product"

If the document-type shell also used a specialization of the @platform attribute that describes the hardware platform, the new @hardwarePlatform attribute domain would add an additional value to the @specializations attribute:

specializations="@props/deliveryTarget @props/platform @props/platform/hardwarePlatform @props/product"