code: public void register(XAttribute attribute) {
  		if(keyMap.containsKey(attribute.getKey()) == false) {
  			// create new attribute prototype
  			XAttribute prototype = XAttributeUtils.derivePrototype(attribute);
  			// add to main map
  			keyMap.put(attribute.getKey(), prototype);
  			// initialize frequency
  			frequencies.put(attribute.getKey(), 1);
  			// register with type map
  			Set<XAttribute> typeSet = typeMap.get(XAttributeUtils.getType(prototype));
  			if(typeSet == null) {
  				typeSet = new HashSet<XAttribute>();
  				typeMap.put(XAttributeUtils.getType(prototype), typeSet);
  			}
  			typeSet.add(prototype);
  			// register with extension map
  			if(attribute.getExtension() == null) {
  				// non-extension attribute
  				noExtensionSet.add(prototype);
  			} else {
  				// register with extension map
  				Set<XAttribute> extensionSet = extensionMap.get(attribute.getExtension());
  				if(extensionSet == null) {
  					extensionSet = new HashSet<XAttribute>();
  					extensionMap.put(attribute.getExtension(), extensionSet);
  				}
  				extensionSet.add(prototype);
  			}
  		} else {
  			// adjust frequency
  			frequencies.put(attribute.getKey(), frequencies.get(attribute.getKey()) + 1);
  		}
  		// adjust total frequency
  		totalFrequency++;
  	}
docs: Registers a concrete attribute with this registry.
  
  @param attribute Attribute to be registered.