summaryrefslogtreecommitdiff
path: root/rdflib/serializer.py
blob: 064232b5ae8492859fb47a98ae8c2e7adcc4d999 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
"""
Serializer plugin interface.

This module is useful for those wanting to write a serializer that can
plugin to rdflib. If you are wanting to invoke a serializer you likely
want to do so through the Graph class serialize method.

TODO: info for how to write a serializer that can plugin to rdflib.
See also rdflib.plugin

"""

from typing import IO, TYPE_CHECKING, Optional

from rdflib.term import URIRef

if TYPE_CHECKING:
    from rdflib.graph import Graph

__all__ = ["Serializer"]


class Serializer:
    def __init__(self, store: "Graph"):
        self.store: "Graph" = store
        self.encoding: str = "utf-8"
        self.base: Optional[str] = None

    def serialize(
        self,
        stream: IO[bytes],
        base: Optional[str] = None,
        encoding: Optional[str] = None,
        **args,
    ) -> None:
        """Abstract method"""

    def relativize(self, uri: str):
        base = self.base
        if base is not None and uri.startswith(base):
            uri = URIRef(uri.replace(base, "", 1))
        return uri