Serialisation and parsing of infinity by cmaumet · Pull Request #655 · RDFLib/rdflib (original) (raw)
This pull request is a proposed fix for the serialisation of infinite values.
Currently infinity is serialised as inf
(with no data-type) which causes an error if parsed.
from rdflib import Graph, Namespace, URIRef, Literal
PROV = Namespace('http://www.w3.org/ns/prov#')
bob = URIRef("http://example.org/object/Bob")
value = Literal(float("inf"))
# g1 is a simple graph with one attribute having an infinite value
g1 = Graph()
g1.add((bob, PROV.value, value))
# Build g2 out of the deserialisation of g1 serialisation
g2 = Graph()
g2.parse(data=g1.serialize(format='turtle'), format='turtle')
Traceback (most recent call last):
File "test_read_inf.py", line 14, in <module>
g2.parse(data=g1.serialize(format='turtle'), format='turtle')
File "[...]/anaconda/envs/prov_dev/lib/python3.5/site-packages/rdflib-4.2.2.dev0-py3.5.egg/rdflib/graph.py", line 1042, in parse
parser.parse(source, self, **args)
File "[...]/anaconda/envs/prov_dev/lib/python3.5/site-packages/rdflib-4.2.2.dev0-py3.5.egg/rdflib/plugins/parsers/notation3.py", line 1870, in parse
p.loadStream(source.getByteStream())
File "[...]/anaconda/envs/prov_dev/lib/python3.5/site-packages/rdflib-4.2.2.dev0-py3.5.egg/rdflib/plugins/parsers/notation3.py", line 434, in loadStream
return self.loadBuf(stream.read()) # Not ideal
File "[...]/anaconda/envs/prov_dev/lib/python3.5/site-packages/rdflib-4.2.2.dev0-py3.5.egg/rdflib/plugins/parsers/notation3.py", line 440, in loadBuf
self.feed(buf)
File "[...]/anaconda/envs/prov_dev/lib/python3.5/site-packages/rdflib-4.2.2.dev0-py3.5.egg/rdflib/plugins/parsers/notation3.py", line 466, in feed
i = self.directiveOrStatement(s, j)
File "[...]/anaconda/envs/prov_dev/lib/python3.5/site-packages/rdflib-4.2.2.dev0-py3.5.egg/rdflib/plugins/parsers/notation3.py", line 487, in directiveOrStatement
j = self.statement(argstr, i)
File "[...]/anaconda/envs/prov_dev/lib/python3.5/site-packages/rdflib-4.2.2.dev0-py3.5.egg/rdflib/plugins/parsers/notation3.py", line 725, in statement
j = self.property_list(argstr, i, r[0])
File "[...]/anaconda/envs/prov_dev/lib/python3.5/site-packages/rdflib-4.2.2.dev0-py3.5.egg/rdflib/plugins/parsers/notation3.py", line 1089, in property_list
"objectList expected")
File "[...]/anaconda/envs/prov_dev/lib/python3.5/site-packages/rdflib-4.2.2.dev0-py3.5.egg/rdflib/plugins/parsers/notation3.py", line 1615, in BadSyntax
raise BadSyntax(self._thisDoc, self.lines, argstr, i, msg)
rdflib.plugins.parsers.notation3.BadSyntax: at line 7 of <>:
Bad syntax (objectList expected) at ^ in:
"...b'001/XMLSchema#> .\n\n<http://example.org/object/Bob> ns1:value'^b' inf .\n\n'"