Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/rdflib/plugins/serializers/nt.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
| author | shellac |
|---|---|
| date | Mon, 01 Jun 2020 08:59:25 -0400 |
| parents | 79f47841a781 |
| children |
comparison
equal
deleted
inserted
replaced
| 4:79f47841a781 | 5:9b1c78e6ba9c |
|---|---|
| 1 """ | |
| 2 N-Triples RDF graph serializer for RDFLib. | |
| 3 See <http://www.w3.org/TR/rdf-testcases/#ntriples> for details about the | |
| 4 format. | |
| 5 """ | |
| 6 from rdflib.term import Literal | |
| 7 from rdflib.serializer import Serializer | |
| 8 from rdflib.py3compat import b | |
| 9 | |
| 10 import warnings | |
| 11 import codecs | |
| 12 | |
| 13 __all__ = ['NTSerializer'] | |
| 14 | |
| 15 | |
| 16 class NTSerializer(Serializer): | |
| 17 """ | |
| 18 Serializes RDF graphs to NTriples format. | |
| 19 """ | |
| 20 | |
| 21 def __init__(self, store): | |
| 22 Serializer.__init__(self, store) | |
| 23 self.encoding = 'ascii' # n-triples are ascii encoded | |
| 24 | |
| 25 def serialize(self, stream, base=None, encoding=None, **args): | |
| 26 if base is not None: | |
| 27 warnings.warn("NTSerializer does not support base.") | |
| 28 if encoding is not None: | |
| 29 warnings.warn("NTSerializer does not use custom encoding.") | |
| 30 encoding = self.encoding | |
| 31 for triple in self.store: | |
| 32 stream.write(_nt_row(triple).encode(self.encoding, "_rdflib_nt_escape")) | |
| 33 stream.write(b("\n")) | |
| 34 | |
| 35 | |
| 36 class NT11Serializer(NTSerializer): | |
| 37 """ | |
| 38 Serializes RDF graphs to RDF 1.1 NTriples format. | |
| 39 | |
| 40 Exactly like nt - only utf8 encoded. | |
| 41 """ | |
| 42 | |
| 43 def __init__(self, store): | |
| 44 Serializer.__init__(self, store) # default to utf-8 | |
| 45 | |
| 46 | |
| 47 def _nt_row(triple): | |
| 48 if isinstance(triple[2], Literal): | |
| 49 return "%s %s %s .\n" % ( | |
| 50 triple[0].n3(), | |
| 51 triple[1].n3(), | |
| 52 _quoteLiteral(triple[2])) | |
| 53 else: | |
| 54 return "%s %s %s .\n" % (triple[0].n3(), | |
| 55 triple[1].n3(), | |
| 56 triple[2].n3()) | |
| 57 | |
| 58 | |
| 59 def _quoteLiteral(l): | |
| 60 ''' | |
| 61 a simpler version of term.Literal.n3() | |
| 62 ''' | |
| 63 | |
| 64 encoded = _quote_encode(l) | |
| 65 | |
| 66 if l.language: | |
| 67 if l.datatype: | |
| 68 raise Exception("Literal has datatype AND language!") | |
| 69 return '%s@%s' % (encoded, l.language) | |
| 70 elif l.datatype: | |
| 71 return '%s^^<%s>' % (encoded, l.datatype) | |
| 72 else: | |
| 73 return '%s' % encoded | |
| 74 | |
| 75 | |
| 76 def _quote_encode(l): | |
| 77 return '"%s"' % l.replace('\\', '\\\\')\ | |
| 78 .replace('\n', '\\n')\ | |
| 79 .replace('"', '\\"')\ | |
| 80 .replace('\r', '\\r') | |
| 81 | |
| 82 def _nt_unicode_error_resolver(err): | |
| 83 | |
| 84 """ | |
| 85 Do unicode char replaces as defined in https://www.w3.org/TR/2004/REC-rdf-testcases-20040210/#ntrip_strings | |
| 86 """ | |
| 87 | |
| 88 def _replace_single(c): | |
| 89 c = ord(c) | |
| 90 fmt = '\\u%04X' if c <= 0xFFFF else '\\U%08X' | |
| 91 return fmt % c | |
| 92 | |
| 93 string = err.object[err.start:err.end] | |
| 94 return ( "".join( _replace_single(c) for c in string ), err.end ) | |
| 95 | |
| 96 codecs.register_error('_rdflib_nt_escape', _nt_unicode_error_resolver) |
