import io from typing import Iterator, Union from pyoxigraph import Triple, Quad from .pyoxigraph import serialize as pyserialize def serialize( input: Iterator[Union[Triple, Quad]], output: Union[io.RawIOBase, io.BufferedIOBase, str], mime_type: str, ): """Serializes an RDF graph or dataset. It currently supports the following formats: * `N-Triples `_ (``application/n-triples``) * `N-Quads `_ (``application/n-quads``) * `Turtle `_ (``text/turtle``) * `TriG `_ (``application/trig``) * `RDF/XML `_ (``application/rdf+xml``) It supports also some MIME type aliases. For example, ``application/turtle`` could also be used for `Turtle `_ and ``application/xml`` for `RDF/XML `_. :param input: the RDF triples and quads to serialize. :param output: The binary I/O object or file path to write to. For example, it could be a file path as a string or a file writer opened in binary mode with ``open('my_file.ttl', 'wb')``. :param mime_type: the MIME type of the RDF serialization. :raises ValueError: if the MIME type is not supported. :raises TypeError: if a triple is given during a quad format serialization or reverse. >>> output = io.BytesIO() >>> serialize([Triple(NamedNode('http://example.com'), NamedNode('http://example.com/p'), Literal('1'))], output, "text/turtle") >>> output.getvalue() b' "1" .\n' """ return pyserialize(input, output, mime_type)