docs: def append(self, val):
          """Connect any new results to the resultset.
  
          This is where all the heavy lifting is done for creating results:
           - We add a datatype here, so that each result can handle
          validation etc independently. This is so that scraper authors
          don't need to worry about creating and passing around datatype objects.
           - As the scraper author yields result objects, we append them to
          a resultset.
           - This is also where we normalize dialects.
          """
          val.resultset = self
          val.dataset = self.dataset
  
          # Check result dimensions against available dimensions for this dataset
          if val.dataset:
              dataset_dimensions = self.dataset.dimensions
              for k, v in val.raw_dimensions.items():
                  if k not in dataset_dimensions:
                      d = Dimension(k)
                  else:
                      d = dataset_dimensions[k]
  
                  # Normalize if we have a datatype and a foreign dialect
                  normalized_value = unicode(v)
                  if d.dialect and d.datatype:
                      if d.dialect in d.datatype.dialects:
                          for av in d.allowed_values:
                              # Not all allowed_value have all dialects
                              if unicode(v) in av.dialects.get(d.dialect, []):
                                  normalized_value = av.value
                                  # Use first match
                                  # We do not support multiple matches
                                  # This is by design.
                                  break
  
                  # Create DimensionValue object
                  if isinstance(v, DimensionValue):
                      dim = v
                      v.value = normalized_value
                  else:
                      if k in dataset_dimensions:
                          dim = DimensionValue(normalized_value, d)
                      else:
                          dim = DimensionValue(normalized_value, Dimension())
  
                  val.dimensionvalues.append(dim)
  
              # Add last list of dimension values to the ResultSet
              # They will usually be the same for each result
              self.dimensionvalues = val.dimensionvalues
  
          super(ResultSet, self).append(val)