From a621aa2801fec3f5da7537f0095c40b6b2a47963 Mon Sep 17 00:00:00 2001 From: Gunnar Aastrand Grimnes Date: Thu, 2 Feb 2017 13:04:02 +0100 Subject: fixed support for datatyped literals in SPARQL json results the old version was many years outdated, `typed-literal` was last seen in the working group note from 2006: https://www.w3.org/TR/2006/NOTE-rdf-sparql-json-res-20061004/ --- rdflib/plugins/sparql/results/jsonresults.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/rdflib/plugins/sparql/results/jsonresults.py b/rdflib/plugins/sparql/results/jsonresults.py index 4bffb515..755cca48 100644 --- a/rdflib/plugins/sparql/results/jsonresults.py +++ b/rdflib/plugins/sparql/results/jsonresults.py @@ -103,9 +103,7 @@ def parseJsonTerm(d): if t == 'uri': return URIRef(d['value']) elif t == 'literal': - if 'xml:lang' in d: - return Literal(d['value'], lang=d['xml:lang']) - return Literal(d['value']) + return Literal(d['value'], datatype=d.get('datatype'), lang=d.get('xml:lang')) elif t == 'typed-literal': return Literal(d['value'], datatype=URIRef(d['datatype'])) elif t == 'bnode': @@ -118,16 +116,14 @@ def termToJSON(self, term): if isinstance(term, URIRef): return {'type': 'uri', 'value': text_type(term)} elif isinstance(term, Literal): + r = {'type': 'literal', + 'value': text_type(term)} + if term.datatype is not None: - return {'type': 'typed-literal', - 'value': text_type(term), - 'datatype': text_type(term.datatype)} - else: - r = {'type': 'literal', - 'value': text_type(term)} - if term.language is not None: - r['xml:lang'] = term.language - return r + r['datatype'] = text_type(term.datatype) + if term.language is not None: + r['xml:lang'] = term.language + return r elif isinstance(term, BNode): return {'type': 'bnode', 'value': str(term)} -- cgit v1.2.1