code: protected void addMapping(
          CmsXmlContentDefinition contentDefinition,
          String elementName,
          String mapping,
          String useDefault)
      throws CmsXmlException {
  
          if (contentDefinition.getSchemaType(elementName) == null) {
              throw new CmsXmlException(
                  Messages.get().container(Messages.ERR_XMLCONTENT_INVALID_ELEM_MAPPING_1, elementName));
          }
  
          // store mappings as xpath to allow better control about what is mapped
          String xpath = CmsXmlUtils.createXpath(elementName, 1);
          // since 7.0.2 multiple mappings are possible, so the mappings are stored in an array
          List<String> values = m_elementMappings.get(xpath);
          if (values == null) {
              // there should not really be THAT much multiple mappings per value...
              values = new ArrayList<String>(4);
              m_elementMappings.put(xpath, values);
          }
          if (Boolean.parseBoolean(useDefault)) {
              m_mappingsUsingDefault.add(xpath + ":" + mapping);
          }
          values.add(mapping);
          if (mapping.startsWith(MAPTO_PROPERTY) && mapping.endsWith(":" + CmsPropertyDefinition.PROPERTY_TITLE)) {
              // this is a title mapping
              m_titleMappings.add(xpath);
          }
      }
docs: Adds an element mapping.<p>
  
  @param contentDefinition the XML content definition this XML content handler belongs to
  @param elementName the element name to map
  @param mapping the mapping to use
  @param useDefault the 'useDefault' attribute
  
  @throws CmsXmlException in case an unknown element name is used