Source code for surf.serializer

# Copyright (c) 2009, Digital Enterprise Research Institute (DERI),
# NUI Galway
# All rights reserved.

# author: Cosmin Basca
# email: cosmin.basca@gmail.com

# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#    * Redistributions of source code must retain the above copyright
#      notice, this list of conditions and the following disclaimer.
#    * Redistributions in binary form must reproduce the above copyright
#      notice, this list of conditions and the following disclaimer
#      in the documentation and/or other materials provided with
#      the distribution.
#    * Neither the name of DERI nor the
#      names of its contributors may be used to endorse or promote
#      products derived from this software without specific prior
#      written permission.

# THIS SOFTWARE IS PROVIDED BY DERI ''AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DERI BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
# OF THE POSSIBILITY OF SUCH DAMAGE.

# -*- coding: utf-8 -*-
__author__ = 'Cosmin Basca'

# simplejson dependency is redundant on python2.7, due to the json module
try:
    from json import dumps
except Exception, e:
    from simplejson import dumps

from surf.rdf import BNode, Literal, URIRef

[docs]def to_json(graph): ''' serializes a `rdflib` `Graph` or `ConjunctiveGraph` to **JSON** according to the specification of rdf-json for further details please see the following: http://n2.talis.com/wiki/RDF_JSON_Specification ''' value_types = {URIRef:'uri',Literal:'literal',BNode:'bnode'} json_root = {} subjects = [] # group subjects for s in graph.subjects(): if s not in subjects: subjects.append(s) for s in subjects: json_subjects = {} predicates = [] # group predicates for p in graph.predicates(s): if p not in predicates: predicates.append(p) for p in predicates: json_values = [] for v in graph.objects(s,p): value = {} value['value'] = v value['type'] = value_types[type(v)] if type(v) is Literal and v.language: value['lang'] = unicode(v.language) if type(v) is Literal and v.datatype: value['datatype'] = unicode(v.datatype) json_values.append(value) json_subjects[unicode(p)] = json_values json_root[unicode(s)] = json_subjects return dumps(json_root)