You can extend a subject scheme by creating another subject scheme map and referencing
the original map using a <schemeref>
element. This enables information
architects to add new relationships to existing subjects and extend enumerations of controlled
values.
A company uses a common subject scheme map (baseOS.ditamap) to set the
values for the @platform
attribute.
<subjectScheme>
<subjectdef keys="os" navtitle="Operating system">
<subjectdef keys="linux" navtitle="Linux">
<subjectdef keys="redhat" navtitle="RedHat Linux"/>
<subjectdef keys="suse" navtitle="SuSE Linux"/>
</subjectdef>
<subjectdef keys="windows" navtitle="Windows"/>
<subjectdef keys="zos" navtitle="z/OS"/>
</subjectdef>
<enumerationdef>
<attributedef name="platform"/>
<subjectdef keyref="os"/>
</enumerationdef>
</subjectScheme>
The following subject scheme map extends the enumeration defined in baseOS.ditamap. It adds "macos" as a child of the existing "os" subject; it also adds special versions of Windows as children of the existing "windows" subject:
<subjectScheme>
<schemeref href="baseOS.ditamap"/>
<subjectdef keyref="os">
<subjectdef keys="macos" navtitle="Macintosh"/>
<subjectdef keyref="windows">
<subjectdef keys="winxp" navtitle="Windows XP"/>
<subjectdef keys="winvis" navtitle="Windows Vista"/>
</subjectdef>
</subjectdef>
</subjectScheme>
Note that the references to the subjects that are defined in
baseOS.ditamap use the @keyref
attribute. This avoids
duplicate definitions of the keys and ensures that the new subjects are added to the base
enumeration.
The effective result is the same as the following subject scheme map:
<subjectScheme>
<subjectdef keys="os" navtitle="Operating system">
<subjectdef keys="linux" navtitle="Linux">
<subjectdef keys="redhat" navtitle="RedHat Linux"/>
<subjectdef keys="suse" navtitle="SuSE Linux"/>
</subjectdef>
<subjectdef keys="macos" navtitle="Macintosh"/>
<subjectdef keys="windows" navtitle="Windows">
<subjectdef keys="winxp" navtitle="Windows XP"/>
<subjectdef keys="winvis" navtitle="Windows Vista"/>
</subjectdef>
<subjectdef keys="zos" navtitle="z/OS"/>
</subjectdef>
<enumerationdef>
<attributedef name="platform"/>
<subjectdef keyref="os"/>
</enumerationdef>
</subjectScheme>