RELAX NG coding requirements This section explains how to implement RELAX NG based document-type shells, specializations, and constraints. RELAX NG: Overview of coding requirementsRELAX NG modules are self-integrating, which means that they automatically add to the content models and attribute sets they extend. This means that information architects do not have much work to do when assembling vocabulary modules and constraints into document type shells.RELAX NG: Coding requirements for document-type shellsA document-type shell integrates one or more topic type or map type modules, zero or more domain modules, and zero or more constraint modules.RELAX NG: Coding requirements for element type declarationsStructural and domain vocabulary modules have the same coding requirements for element type declarations. Each RELAX NG vocabulary module consists of a single module file.RELAX NG: Coding requirements for structural modulesA structural vocabulary module defines a new topic or map type as a specialization of a topic or map type.RELAX NG: Coding requirements for element domain modulesVocabulary modules that define element domains must define an extension pattern for each element that is extended by the domain. These patterns are used when including the domain module in a document-type shell.RELAX NG: Coding requirements for attribute domain modulesAn attribute domain vocabulary module declares a new attribute specialized from either the @props or @base attribute. An attribute domain module defines exactly one new attribute type.RELAX NG: Coding requirements for constraint modulesA structural constraint module defines the constraints for a map or topic element type. A domain constraint module defines the constraints for an element or attribute domain.Parent topic: Coding practices for DITA grammar files