Converts JSON to RDF
>>> from json2rdf.json2rdf import j2r
>>> j = {'id':0, 'list': [1,2,3], 'nesting': {'id':1, 'property': 'abc' }}
>>> print(j2r(j))
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix id: <urn:example:id:>
prefix prefix: <urn:example:prefix:>
prefix meta: <urn:example:meta:>
id:0 prefix:id 0.
id:0 prefix:list _:2432178001088.
id:0 prefix:nesting id:1.
id:1 prefix:id 1.
id:1 prefix:property "abc".
_:2432178001088 rdf:_0 1.
_:2432178001088 rdf:_1 2.
_:2432178001088 rdf:_2 3.
Motivation: This was developed as part of BIM2RDF where the main implementation language is Python and the data sizes from Speckle are not small.
- Prior implementation is in java.
- Don't want to use JSON-LD (mentioned in above documentation ). Furthermore, the Python JSON-LD implementation was found to be too slow.
Traversing the (nested) JSON, a conversion is applied to 'expand' data containers, lists and mappings, as triples.
is 'entity-driven': data containers must have identifiers. When no identifier is given, an anoymous/blank node is used. This is close to the 'spirit' of the semantic web.
However, this makes the conversion non-deterministic. Reprecussions must be handled by the user.
TODO: list vs arrays.
Optional:
- 'meta triples' as RDF-star:
<<{data triple}>> {meta} <<{meta triple}>>
- Numerical Arrays: Numerical lists can be represented as numpy-encoded strings. (This was motivated by the storage of geometry data from 3D design programs).
- KISS: It should only address converting (given) JSON to RDF. Converting array data (above) is a special case. Therefore, the code is expected to be feature complete (without need for adding more 'features').
- Minimal dependencies: follows from above. Zero dependencies is possible and ideal. (This would make it easier for a compiled Python version to be created for more performance.)
- List representation shall not be a linked list.