code: def set(self, name, value, xml_path):
          
  
          xml_type = xml_path.split('/')[-1]
          # check if the desired type is supported
          try:
              property_class = TYPE_CONVERSIONS[xml_type]
          except KeyError:
              raise KeyError('The xml type %s is not supported yet' % xml_type)
  
          try:
              metadata_property = property_class(name, value, xml_path)
              self._properties[name] = metadata_property
              self.set_last_update_to_now()
          except TypeError:
              if self.reading_ancillary_files:
                  # we are parsing files so we want to accept as much as
                  # possible without raising exceptions
                  pass
              else:
                  raise
docs: Create a new metadata property.
  
          The accepted type depends on the property type which is determined
          by the xml_path
  
          :param name: the name of the property
          :type name: str
          :param value: the value of the property
          :type value:
          :param xml_path: the xml path where the property should be stored.
          This is split on / and the last element is used to determine the
          property type
          :type xml_path: str