Map Specialization XSD Step 1: Define faq-map Map Type
To define the 
                        
                        <faq-map> map type, do the following:
                           - Create the directory faq-map/xsd.
- Create the directory faq-mapDomain/xsd.
- Create the file faq-mapDomain/xsd/faq-mapDomain.xsd with this
                                 content:<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="urn:oasis:names:tc:dita:xsd:xml.xsd:1.2"/> </xs:schema>This file acts as the stub for the FAQ-map map domain, which we will define in Step 2. 
- Find the file basemap.xsd from the standard DITA schema distribution, copy it into the faq-map/xsd directory, and rename it to faq-map.xsd.
- Create test document faq-map/faq-map-test-xsd-01.ditamap with this content:<?xml version="1.0" encoding="UTF-8"?> <faq-map xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/faq-map.xsd"> <title>FAQ Map Test 01</title> <topicmeta></topicmeta> <keydef keys="foo"/> <faq-question-set> <faq-question/> </faq-question-set> </faq-map>Validate the document. It should complain that the element type <faq-map>is not declared.
- Edit faq-map.xsd.
- Replace the header comment with one reflecting your ownership:<!-- ============================================================= FAQ Map document type shell Copyright (c) 2011 Your Name Here ============================================================= --> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:ditaarch="http://dita.oasis-open.org/architecture/2005/"> <!-- ======= INCLUDE ======= --> ... </xs:schema>
- Find the reference to mapMod.xsd and add an inclusion to
                                 faq-mapMod.xsd after
                                 it:... <xs:include schemaLocation="urn:oasis:names:tc:dita:xsd:mapMod.xsd:1.2" /> <xs:include schemaLocation="faq-mapMod.xsd" /> ... 
- Find the declaration for the "domains-att" attribute group and add "(map faq-map
                                    faq-map-d) " to the @domainsattribute value:<xs:attributeGroup name="domains-att"> <xs:attribute name="domains" type="xs:string" default="(map faq-map faq-map-d) (map mapgroup-d) (topic indexing-d) (topic delay-d)"/> </xs:attributeGroup>
- Create the file faq-map/xsd/faq-mapMod.xsd with this content:<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:ditaarch="http://dita.oasis-open.org/architecture/2005/"> </xs:schema> 
- Add a header comment as for the faq-map.xsd file.
- Edit mapMod.xsd from the standard DITA schema distribution. Find the
                                 comment "Import - XML Attributes and Namespaces" and copy it and the two
                                 imports following it into
                                 faq-mapMod.xsd:<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:ditaarch="http://dita.oasis-open.org/architecture/2005/"> <!-- ======= IMPORT - XML attributes and namespace ======= --> <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="urn:oasis:names:tc:dita:xsd:xml.xsd:1.2"/> <xs:import namespace="http://dita.oasis-open.org/architecture/2005/" schemaLocation="urn:oasis:names:tc:dita:xsd:ditaarch.xsd:1.2"/> ... </xs:schema> 
- Find the <xs:redefine>element for mapGrp.xsd and add an include of faq-mapDomain.xsd immediately before it:... <xs:include schemaLocation="../../faq-mapDomain/xsd/faq-mapDomain.xsd"/> <xs:redefine schemaLocation="urn:oasis:names:tc:dita:xsd:mapGrp.xsd:1.2"> ... 
- In mapMod.xsd find the declarations for the <map>element type (they should all be together in the file) and copy them into faq-mapMod.xsd.
- Change "map" to "faq-map" everywhere except in the default value of the
                                 @classattribute:<xs:element name="faq-map"> <xs:annotation> <xs:documentation> The <<keyword>faq-map</keyword>> element represents an FAQ publication. </xs:documentation> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="faq-map.class"> <xs:attribute ref="class" default="- map/map " /> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:complexType name="faq-map.class" > <xs:sequence> <xs:group ref="faq-map.content"/> </xs:sequence> <xs:attributeGroup ref="faq-map.attributes"/> </xs:complexType> <xs:group name="faq-map.content"> <xs:sequence> <xs:sequence> <xs:group ref="title" minOccurs="0" /> <xs:group ref="topicmeta" minOccurs="0" /> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:group ref="navref" /> <xs:group ref="anchor" /> <xs:group ref="topicref" /> <xs:group ref="reltable" /> <xs:group ref="data.elements.incl" /> </xs:choice> </xs:sequence> </xs:sequence> </xs:group> <xs:attributeGroup name="faq-map.attributes"> <xs:attribute name="title" type="xs:string" /> <xs:attribute name="id" type="xs:ID" /> <xs:attributeGroup ref="conref-atts" /> <xs:attribute name="anchorref" type="xs:string" /> <xs:attribute name="outputclass" type="xs:string" /> <xs:attributeGroup ref="domains-att"/> <xs:attributeGroup ref="topicref-atts" /> <xs:attributeGroup ref="select-atts" /> <xs:attributeGroup ref="localization-atts"/> <xs:attribute ref="ditaarch:DITAArchVersion"/> <xs:attributeGroup ref="global-atts" /> </xs:attributeGroup>
- Set the default value of the @classattribute to "- map/map faq-map/faq-map ":<xs:element name="faq-map"> <xs:annotation> <xs:documentation> The <<keyword>faq-map</keyword>> element represents an FAQ publication. </xs:documentation> </xs:annotation> <xs:complexType> <xs:complexContent> <xs:extension base="faq-map.class"> <xs:attribute ref="class" default="- map/map faq-map/faq-map " /> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element>
- Modify the content model defined in the faq-map.content group to:<xs:group name="faq-map.content"> <xs:sequence> <xs:sequence> <xs:group ref="title" minOccurs="0" /> <xs:group ref="topicmeta" minOccurs="0" /> <xs:group ref="keydef" minOccurs="0" maxOccurs="unbounded"/> <xs:group ref="faq-question-set" minOccurs="1" maxOccurs="1"/> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:group ref="reltable" /> </xs:choice> </xs:sequence> </xs:sequence> </xs:group>
- Validate the test document. You should get a message to the effect that the group named "faq-question-set" cannot be resolved.
At this point the FAQ-map map type document type shell and module are complete. Now we just need to define the FAQ-map map domain.