An enumeration of controlled values can be defined with hierarchical levels by nesting
subject definitions. This affects how processors perform filtering and flagging.
The following algorithm applies when processors apply filtering and
flagging rules to attribute values that are defined as a hierarchy of controlled values and
bound to an enumeration:
- If an attribute specifies a value in the taxonomy, and a DITAVAL or other categorization
tool is configured with that value, the rule matches.
- Otherwise, if the parent value in the taxonomy has a rule, that matches.
- Otherwise, continue up the chain in the taxonomy until a matching rule is found.
The following behavior is expected of processors:
- Processors SHOULD be aware of the
hierarchies of attribute values that are defined in subject scheme maps for purposes of filtering, flagging, or other metadata-based
categorization.
- Processors SHOULD validate that the
values of attributes that are bound to controlled values contain only valid values from
those sets. (The list of controlled values is not validated
by basic XML parsers.) If the controlled values are part of a named key
scope, the scope name is ignored for the purpose of validating the controlled
values.
- Processors SHOULD check that all
values listed for an attribute in a DITAVAL file are bound to the attribute by the subject
scheme before filtering or flagging. If a processor encounters values that are not included
in the subject scheme, it SHOULD issue
a warning.
Example: A hierarchy of controlled values and conditional processing
The following example illustrates a set of controlled values that contains a hierarchy.
<subjectScheme>
<subjectdef keys="users">
<subjectdef keys="therapist">
<subjectdef keys="novice-therapist"/>
<subjectdef keys="expert-therapist"/>
</subjectdef>
<subjectdef keys="oncologist"/>
<subjectdef keys="physicist"/>
<subjectdef keys="radiologist"/>
</subjectdef>
<enumerationdef>
<attributedef name="audience"/>
<subjectdef keyref="users"/>
</enumerationdef>
</subjectScheme>
Processors that are aware of the hierarchy that is defined in the subject scheme map will
handle filtering and flagging in the following ways:
- If "therapist" is excluded, both "novice-therapist" and
"expert-therapist" are by default excluded (unless they are explicitly set to be
included).
- If "therapist" is flagged and "novice-therapist" is not explicitly flagged, processors
automatically should flag "novice►-therapist◄" since it is a type
of therapist.