XSD

The file with context message type definitions (the Additional File tagencontextmessages.xml) must meet this schema:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="ContextMessages">
      <xs:complexType>
          <xs:sequence>
            <xs:element name="ContextMessage" type="ContextMessageType" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
       </xs:complexType>
    </xs:element>
      <xs:complexType name="ContextMessageType">
          <xs:sequence>
            <xs:element ref="MessageIdentifier"/>
            <xs:element ref="MaxSelect"/>
            <xs:element name="Template" type="TemplateType" minOccurs="2" maxOccurs="2"/>
            <xs:element name="AppliesTo" type="AppliesToType"/>
            <xs:element name="Mappings" type="MappingsType" minOccurs="0"/>
            <xs:element ref="IncludeHook" minOccurs="0"/>
            <xs:element ref="DeclarationHook" minOccurs="0"/>
            <xs:element ref="FunctionHook" minOccurs="0"/>
            <xs:element ref="ConditionHook" minOccurs="0"/>
            <xs:element ref="BeforeMappingHook" minOccurs="0"/>
            <xs:element ref="AfterMappingHook" minOccurs="0"/>
          </xs:sequence>
          <xs:attribute name="Id" type="xs:string" use="required"/>
          <xs:attribute name="name" type="xs:string" use="required"/>
      </xs:complexType>
      <xs:complexType name="TemplateType">
          <xs:sequence>
            <xs:element name="_Block_" type="_Block_Type" minOccurs="1" maxOccurs="2"/>
          </xs:sequence>
          <xs:attribute name="condition" use="required">
              <xs:simpleType>
                 <xs:restriction base="xs:string">
                    <xs:enumeration value="gen:data"/>
                    <xs:enumeration value="gen:empty"/>
                 </xs:restriction>
              </xs:simpleType>
          </xs:attribute>
      </xs:complexType>
      <xs:complexType name="_Block_Type">
          <xs:sequence>
             <xs:any minOccurs="0"/>
          </xs:sequence>
          <xs:attribute name="condition">
              <xs:simpleType>
                 <xs:restriction base="xs:string">
                    <xs:enumeration value="gen:noRepeat"/>
                 </xs:restriction>
              </xs:simpleType>
          </xs:attribute>
      </xs:complexType>
      <xs:complexType name="AppliesToType">
          <xs:sequence>
            <xs:element name="Table" type="TableType" maxOccurs="unbounded"/>
          </xs:sequence>
      </xs:complexType>
      <xs:complexType name="TableType">
          <xs:sequence>
            <xs:element ref="Filter" minOccurs="0"/>
            <xs:element name="Domain" type="DomainType" minOccurs="0"/>
          </xs:sequence>
      </xs:complexType>
      <xs:complexType name="DomainType">
          <xs:sequence>
            <xs:element ref="Filter" minOccurs="0"/>
            <xs:element name="TableField" type="TableFieldType" minOccurs="0"/>
          </xs:sequence>
      </xs:complexType>
      <xs:complexType name="TableFieldType">
          <xs:sequence>
            <xs:element ref="Filter" minOccurs="0"/>
          </xs:sequence>
      </xs:complexType>
      <xs:complexType name="MappingsType">
          <xs:sequence>
            <xs:element name="Mapping" type="MappingType" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
      </xs:complexType>
      <xs:complexType name="MappingType">
          <xs:sequence>
            <xs:element ref="Source"/>
            <xs:element ref="Target"/>
          </xs:sequence>
          <xs:attribute name="type" use="required">
              <xs:simpleType>
                 <xs:restriction base="xs:string">
                    <xs:enumeration value="domain"/>
                    <xs:enumeration value="field"/>
                    <xs:enumeration value="function"/>
                    <xs:enumeration value="hook"/>
                 </xs:restriction>
              </xs:simpleType>
          </xs:attribute>
      </xs:complexType>
    <xs:element name="AfterMappingHook" type="xs:string"/>
    <xs:element name="BeforeMappingHook" type="xs:string"/>
    <xs:element name="ConditionHook" type="xs:string"/>
    <xs:element name="DeclarationHook" type="xs:string"/>
    <xs:element name="Filter" type="xs:string"/>
    <xs:element name="FunctionHook" type="xs:string"/>
    <xs:element name="IncludeHook" type="xs:string"/>
    <xs:element name="MaxSelect" type="xs:int"/>
    <xs:element name="MessageIdentifier" type="xs:string"/>
    <xs:element name="Source" type="xs:string"/>
    <xs:element name="Target" type="xs:string"/>
</xs:schema>