/// <summary>Outputs the RDF dataset found in the given JSON-LD object.</summary>
        /// <remarks>Outputs the RDF dataset found in the given JSON-LD object.</remarks>
        /// <param name="input">the JSON-LD input.</param>
        /// <param name="callback"></param>
        /// <param name="options"></param>
        /// <exception cref="JsonLdError"></exception>
        public static async Task <object> ToRdfAsync(JToken input,
                                                     IJsonLdTripleCallback callback,
                                                     JsonLdOptions options)
        {
            JToken expandedInput = await ExpandAsync(input, options);

            var api = await JsonLdApi.CreateAsync(expandedInput, options);

            var dataset = api.ToRdf();

            // generate namespaces from context
            if (options.useNamespaces)
            {
                JArray _input;
                if (input is JArray array)
                {
                    _input = array;
                }
                else
                {
                    _input = new JArray();
                    _input.Add((JObject)input);
                }

                foreach (var e in _input)
                {
                    if (((JObject)e).ContainsKey("@context"))
                    {
                        dataset.ParseContext((JObject)e["@context"]);
                    }
                }
            }

            if (callback != null)
            {
                return(callback.Call(dataset));
            }
            if (options.format != null)
            {
                if ("application/nquads".Equals(options.format))
                {
                    return(new NQuadTripleCallback().Call(dataset));
                }
                else
                {
                    if ("text/turtle".Equals(options.format))
                    {
                        return(new TurtleTripleCallback().Call(dataset));
                    }
                    throw new JsonLdError(JsonLdError.Error.UnknownFormat, options.format);
                }
            }

            return(dataset);
        }
 /// <exception cref="JsonLdError"></exception>
 public static Task <object> ToRdfAsync(JToken input, IJsonLdTripleCallback callback)
 {
     return(ToRdfAsync(input, callback, new JsonLdOptions(string.Empty)));
 }