Mercurial > code > home > repos > rdfdb
changeset 68:108260060f2c
serialize n3 files with %g for prettier floating point values
Ignore-this: c12167ab1c5f625eb70faf7cef3b5d51
author | Drew Perttula <drewp@bigasterisk.com> |
---|---|
date | Sat, 01 Jun 2019 20:03:05 +0000 |
parents | 099c0a815bb7 |
children | 6b01e1e5859b |
files | rdfdb/graphfile.py |
diffstat | 1 files changed, 24 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/rdfdb/graphfile.py Sat Jun 01 20:02:47 2019 +0000 +++ b/rdfdb/graphfile.py Sat Jun 01 20:03:05 2019 +0000 @@ -3,19 +3,20 @@ from twisted.internet import reactor from twisted.internet.interfaces import IDelayedCall from twisted.internet.inotify import INotify, humanReadableMask -from rdflib import Graph, RDF, URIRef +from rdflib import Graph, RDF, URIRef, Literal, XSD from rdfdb.patch import Patch from rdfdb.rdflibpatch import inContext from typing import Dict, Optional from typing_extensions import Protocol + log = logging.getLogger('graphfile') iolog = logging.getLogger('io') -def patchN3SerializerToUseLessWhitespace(cutColumn=65): +def patchN3SerializerToUseLessWhitespace(cutColumn=75): # todo: make a n3serializer subclass with whitespace settings - from rdflib.plugins.serializers.turtle import TurtleSerializer, OBJECT + from rdflib.plugins.serializers.turtle import TurtleSerializer, OBJECT, VERB, _GEN_QNAME_FOR_DT originalWrite = TurtleSerializer.write def write(self, s): @@ -67,6 +68,26 @@ TurtleSerializer.predicateList = predicateList # type: ignore TurtleSerializer.objectList = objectList # type: ignore + def custom_literal(node, qname_callback): + if node.datatype == XSD['double']: + num = node.toPython() + return '%g' % num + return node._literal_n3(use_plain=True, qname_callback=qname_callback) + + def label(self, node, position): + if node == RDF.nil: + return '()' + if position is VERB and node in self.keywords: + return self.keywords[node] + if isinstance(node, Literal): + return custom_literal(node, # <- switch to this + qname_callback=lambda dt: self.getQName( + dt, _GEN_QNAME_FOR_DT)) + else: + node = self.relativize(node) + + return self.getQName(node, position == VERB) or node.n3() + TurtleSerializer.label = label # type: ignore patchN3SerializerToUseLessWhitespace()