Trig RDF graph serializer for RDFLib.
See http://www.w3.org/TR/trig/ for syntax specification.
Classes:
__all__
module-attribute
__all__ = ['TrigSerializer']
TrigSerializer
Bases: TurtleSerializer
TriG RDF graph serializer.
Methods:
Attributes:
Source code in rdflib/plugins/serializers/trig.py
| def __init__(self, store: Union[Graph, ConjunctiveGraph]):
self.default_context: Optional[Node]
if store.context_aware:
if TYPE_CHECKING:
assert isinstance(store, ConjunctiveGraph)
self.contexts = list(store.contexts())
self.default_context = store.default_context.identifier
if store.default_context:
self.contexts.append(store.default_context)
else:
self.contexts = [store]
self.default_context = None
super(TrigSerializer, self).__init__(store)
|
contexts
instance-attribute
contexts = list(contexts())
default_context
instance-attribute
default_context: Optional[Node]
indentString
class-attribute
instance-attribute
short_name
class-attribute
instance-attribute
preprocess
Source code in rdflib/plugins/serializers/trig.py
| def preprocess(self) -> None:
for context in self.contexts:
# do not write unnecessary prefix (ex: for an empty default graph)
if len(context) == 0:
continue
self.store = context
# Don't generate a new prefix for a graph URI if one already exists
self.getQName(context.identifier, False)
self._subjects = {}
for triple in context:
self.preprocessTriple(triple)
for subject in self._subjects.keys():
self._references[subject] += 1
self._contexts[context] = (self.orderSubjects(), self._subjects)
|
reset
Source code in rdflib/plugins/serializers/trig.py
| def reset(self) -> None:
super(TrigSerializer, self).reset()
self._contexts: Dict[
_ContextType,
Tuple[List[_SubjectType], Dict[_SubjectType, bool]],
] = {}
|
serialize
serialize(stream: IO[bytes], base: Optional[str] = None, encoding: Optional[str] = None, spacious: Optional[bool] = None, **kwargs: Any) -> None
Source code in rdflib/plugins/serializers/trig.py
| def serialize(
self,
stream: IO[bytes],
base: Optional[str] = None,
encoding: Optional[str] = None,
spacious: Optional[bool] = None,
**kwargs: Any,
) -> None:
self.reset()
self.stream = stream
# if base is given here, use that, if not and a base is set for the graph use that
if base is not None:
self.base = base
elif self.store.base is not None:
self.base = self.store.base
if spacious is not None:
self._spacious = spacious
self.preprocess()
self.startDocument()
firstTime = True
for store, (ordered_subjects, subjects) in self._contexts.items():
if not ordered_subjects:
continue
self._serialized = {}
self.store = store
self._subjects = subjects
if self.default_context and store.identifier == self.default_context:
self.write(self.indent() + "\n{")
else:
iri: Optional[str]
if isinstance(store.identifier, BNode):
iri = store.identifier.n3()
else:
# Show the full graph URI if a prefix for it doesn't already exist
iri = self.getQName(store.identifier, False)
if iri is None:
iri = store.identifier.n3()
self.write(self.indent() + "\n%s {" % iri)
self.depth += 1
for subject in ordered_subjects:
if self.isDone(subject):
continue
if firstTime:
firstTime = False
if self.statement(subject) and not firstTime:
self.write("\n")
self.depth -= 1
self.write("}\n")
self.endDocument()
stream.write("\n".encode("latin-1"))
|