To support extensibility and pluggability, DITA requires that an XML schema implementation of structural and domain specialization modules conform to well-defined design patterns.
<xs:group name="concept-info-types"> <xs:choice> <xs:group ref="concept"minOccurs="0"/> <xs:group ref="info-types" minOccurs="0"/> </xs:choice> </xs:group>
The module schema document defines every specialized element used as substructure within the structural type. The specialized elements must follow the rules of the architecture in defining content models and attributes. The naming convention for content models must use the root structural element name and.class
<xs:complexType name="concept.class"> <xs:sequence> <xs:group ref="title"/> <xs:group ref="titlealts" minOccurs="0"/> <xs:choice minOccurs="0"> <xs:group ref="shortdesc" /> <xs:group ref="abstract" /> </xs:choice> <xs:group ref="prolog" minOccurs="0"/> <xs:group ref="conbody" minOccurs="0"/> <xs:group ref="related-links" minOccurs="0"/> <xs:group ref="concept-info-types" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> .... </xs:complexType>
These attributes give processes a reliable way to check the architecture version and look up the list of domains available in the document type.
<xs:attribute name="id" type="xs:ID" use="required"/> <xs:attribute ref="ditaarch:DITAArchVersion" />
<xs:group name="concept"> <xs:sequence> <xs:element ref="concept"/> </xs:sequence> </xs:group>
The model group schema document defines model groups for each new specialized element in a structural type. Each structural type and domain must have a model group schema document . The model group schema document is an essential part of the specialization.
The class attribute must include the value of the class attribute of the base element and append the element name qualified by the root structural element name or domain name with at least one leading and trailing space. The class attribute starts with a ″-″ if it is declared in a structural module, or a ″+″ if it is declared in a domain module.
This attribute provides a mapping between the element’s current name and its more general equivalents. It must be bound the elements declaration, and not in the complexType referenced by the element. To see an example, look at the reference.xsd schema document.
<xs:element name="reference"> <xs:complexType> <xs:complexContent> <xs:extension base="reference.class"> <xs:attribute ref="class" default="- topic/topic reference/reference "/> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element>
A domain type schema document with a name consisting of the domain name and the Domain.xsd extension.
As in a structural module, the domain module must define each specialized element, its attributes and its model groups. As with any specialization, the domain element must restrict the base element. The class attribute of the domain element must start with a plus sign but, otherwise, follows the same rules as the class attribute for an element introduced by a topic specialization.
For each element extended by one or more domains, the domain type schema document defines a model group for the base element to a list of alternatives including the literal name of the element and the element extension entity from each domain that is providing specializations.
<xs:group name="ui-d-ph"> <xs:choice> <xs:element ref="uicontrol" /> <xs:element ref="menucascade" /> </xs:choice> </xs:group>
<xs:group name="info-types"> <xs:sequence/> </xs:group>
<xs:redefine schemaLocation="topicMod.xsd" > <xs:complexType name="topic.class"> <xs:complexContent> <xs:extension base="topic.class"> <xs:attribute name="domains" type="xs:string" default="(topic ui-d) (topic hi-d) (topic sw-d) (topic pr-d) (topic ut-d) (topic indexing-d)"/> </xs:extension> </xs:complexContent> </xs:complexType> </xs:redefine>
<xs:group name="pre"> <xs:choice> <xs:group ref="pre" /> <xs:group ref="pr-d-pre" /> <xs:group ref="ui-d-pre" /> <xs:group ref="sw-d-pre" /> </xs:choice> </xs:group>
<xs:group name="pre"> <xs:choice> <xs:group ref="pre"/> <xs:group ref="pr-d-pre" /> <xs:group ref="domainName-d-element"/> </xs:choice> </xs:group>
<xs:attributeGroup name="props-attribute-extensions"> <xs:attributeGroup ref="props-attribute-extensions"/> <xs:attributeGroup ref="newAtt-d-attribute"/> <xs:attributeGroup ref="othernewAtt-d-attribute"/> </xs:attributeGroup> <xs:attributeGroup name="base-attribute-extensions"> <xs:attributeGroup ref="base-attribute-extensions"/> <xs:attributeGroup ref="newfrombaseAtt-d-attribute"/> <xs:attributeGroup ref="othernewfrombaseAtt-d-attribute"/> </xs:attributeGroup>
The attribute domain pattern is a special case of the domain specialization pattern, which allows the creation of new attributes specialized from the props or base attribute.
Create one module entity file per attribute, for example newAttDomain.xsd. Each module should contain the following:
<xs:attributeGroup name="newAtt-d-attribute"> <xs:attribute name="new" type="xs:string"/> </xs:attributeGroup>
<xs:attribute name="domains" type="xs:string" default="... a(props new)"/>
Return to main page.
OASIS DITA Architectural Specification v1.1 -- Committee Draft 13 February 2007
Copyright © OASIS Open 2005, 2007. All Rights Reserved.