Set the VALUE for KEY predicate in the Metadata Graph

        :param key: Predicate to be set (eg. DCT.creator)
        :param value: Value to be stored (eg. "Cicero")
        :param lang: [Optional] Language of the value (eg. "la")

def set(self, key: URIRef, value: Union[Literal, BNode, URIRef, str, int], lang: Optional[str]=None):
        """ Set the VALUE for KEY predicate in the Metadata Graph

        :param key: Predicate to be set (eg. DCT.creator)
        :param value: Value to be stored (eg. "Cicero")
        :param lang: [Optional] Language of the value (eg. "la")
        """
        if not isinstance(value, Literal) and lang is not None:
            value = Literal(value, lang=lang)
        elif not isinstance(value, (BNode, URIRef)):
            value, _type = term._castPythonToLiteral(value)
            if _type is None:
                value = Literal(value)
            else:
                value = Literal(value, datatype=_type)
        self.graph.set((self.asNode(), key, value))