code: def set_metadata_from_collection(self, text_metadata: CtsTextMetadata):
          
          edition, work, textgroup = tuple(([text_metadata] + text_metadata.parents)[:3])
  
          for node in textgroup.metadata.get(RDF_NAMESPACES.CTS.groupname):
              lang = node.language
              self.metadata.add(RDF_NAMESPACES.CTS.groupname, lang=lang, value=str(node))
              self.set_creator(str(node), lang)
  
          for node in work.metadata.get(RDF_NAMESPACES.CTS.title):
              lang = node.language
              self.metadata.add(RDF_NAMESPACES.CTS.title, lang=lang, value=str(node))
              self.set_title(str(node), lang)
  
          for node in edition.metadata.get(RDF_NAMESPACES.CTS.label):
              lang = node.language
              self.metadata.add(RDF_NAMESPACES.CTS.label, lang=lang, value=str(node))
              self.set_subject(str(node), lang)
  
          for node in edition.metadata.get(RDF_NAMESPACES.CTS.description):
              lang = node.language
              self.metadata.add(RDF_NAMESPACES.CTS.description, lang=lang, value=str(node))
              self.set_description(str(node), lang)
  
          if not self.citation.is_set() and edition.citation.is_set():
              self.citation = edition.citation
docs: Set the object metadata using its collections recursively
  
          :param text_metadata: Object representing the current text as a collection
          :type text_metadata: CtsEditionMetadata or CtsTranslationMetadata