docs: def update(self, data):
          """ Update metadata, handle virtual hierarchy """
          # Nothing to do if no data
          if data is None:
              return
          for key, value in sorted(data.items()):
              # Handle child attributes
              if key.startswith('/'):
                  name = key.lstrip('/')
                  # Handle deeper nesting (e.g. keys like /one/two/three) by
                  # extracting only the first level of the hierarchy as name
                  match = re.search("([^/]+)(/.*)", name)
                  if match:
                      name = match.groups()[0]
                      value = {match.groups()[1]: value}
                  # Update existing child or create a new one
                  self.child(name, value)
              # Update regular attributes
              else:
                  self.data[key] = value
          log.debug("Data for '{0}' updated.".format(self))
          log.data(pretty(self.data))