docs: def _parse_request(self, xml):
          """ Parse a request with metadata information
  
          :param xml: LXML Object
          :type xml: Union[lxml.etree._Element]
          """
          for node in xml.xpath(".//ti:groupname", namespaces=XPATH_NAMESPACES):
              lang = node.get("xml:lang") or CtsText.DEFAULT_LANG
              self.metadata.add(RDF_NAMESPACES.CTS.groupname, lang=lang, value=node.text)
              self.set_creator(node.text, lang)
  
          for node in xml.xpath(".//ti:title", namespaces=XPATH_NAMESPACES):
              lang = node.get("xml:lang") or CtsText.DEFAULT_LANG
              self.metadata.add(RDF_NAMESPACES.CTS.title, lang=lang, value=node.text)
              self.set_title(node.text, lang)
  
          for node in xml.xpath(".//ti:label", namespaces=XPATH_NAMESPACES):
              lang = node.get("xml:lang") or CtsText.DEFAULT_LANG
              self.metadata.add(RDF_NAMESPACES.CTS.label, lang=lang, value=node.text)
              self.set_subject(node.text, lang)
  
          for node in xml.xpath(".//ti:description", namespaces=XPATH_NAMESPACES):
              lang = node.get("xml:lang") or CtsText.DEFAULT_LANG
              self.metadata.add(RDF_NAMESPACES.CTS.description, lang=lang, value=node.text)
              self.set_description(node.text, lang)
  
          # Need to code that p
          if not self.citation.is_set() and xml.xpath("//ti:citation", namespaces=XPATH_NAMESPACES):
              self.citation = CtsCollection.XmlCtsCitation.ingest(
                  xml,
                  xpath=".//ti:citation[not(ancestor::ti:citation)]"
              )