Skip to main content

PyPI - Status

JSON2RDF

Converts JSON to RDF

>>> from json2rdf.json2rdf import j2r
>>> j = {'id':0, 'list': [1,2,3], 'nesting': {'id':1, 'property': 'abc' }}
>>> print(j2r(j, subject_id_keys=('id',), sort=False, deanon=False ))
prefix rdf:                   <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix id:      <urn:example:id:>
prefix prefix:     <urn:example:prefix:>

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.
Help on function json2rdf in module json2rdf.json2rdf:

json2rdf(
    data: str | dict,
    *,
    sort=True,
    subject_id_keys=('id',),
    deanon: bool = False,
    object_id_keys={'idref', 'refid'},
    id_prefix=('id', 'urn:example:id:'),
    key_prefix=('prefix', 'urn:example:prefix:')
)
    sort: the triples
    subject_keys: set of keys to create a uri out of in for the *subject*.
        the first key will be used to create a predicate if one does not exist.
        example: {"id": 1, "key":"abc" } ->
            prefix:1 prefix:key "abc".
            prefix:1 prefix:id prefix:1.
        example: case when no id key in data or no id key is set: {"key: "abc"} ->
            prefix:generated prefix:key "abc".
            prefix:generated prefix:id prefix:generated.
    object_keys: set of keys to interpret as a uri out of as an *object*.
        example: {"id": 1, "refid": 2,} ->
            prefix:1 prefix:refid prefix:2.
    deanon: can be set to True to use id_prefix when no id key is present.
        otherwise, a blank/anon node will be used.


Why?

Motivation: This was developed as part of BIM2RDF where the main implementation language is Python and the data sizes from Speckle are not small.

How?

Traversing the (nested) JSON, a conversion is applied to 'expand' data containers, lists and mappings, as triples.

Behavior

is 'entity-driven': data containers should have identifiers.

But, the default settings make no assumptions about data identifier keys (like 'id'). Instead, a uri will be created with a UUID (prefixed with id_prefix). However, this makes the conversion non-deterministic. Reprecussions must be handled by the user.

When identifier keys are known, it's best to set subject_keys and object_keys, to create a (deterministic) uri from them. Furthermore, sort can be set to True for determinism of the generated RDF (as a whole). deanon can be set to False, to use an anoymous/blank node when no identifier key is found signaling an issue with the data (losing determinism). This is close to the 'spirit' of the semantic web.

Nulls are preserved as it would be the 'least surprising' behviour.

Features

none. zilch. nada.

Development Philosophy

  • KISS: It should only address converting (given) JSON to RDF. 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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

json2rdf-88.tar.gz (6.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

json2rdf-88-py3-none-any.whl (7.8 kB view details)

Uploaded Python 3

File details

Details for the file json2rdf-88.tar.gz.

File metadata

  • Download URL: json2rdf-88.tar.gz
  • Upload date:
  • Size: 6.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for json2rdf-88.tar.gz
Algorithm Hash digest
SHA256 24fddb5a21c02982f1b11f13e2405fe35edaeea5958d4eace76e97a6d728120a
MD5 a45b1264fc46ef4056123c8001a053f6
BLAKE2b-256 66fe0b3a839ec0011e6cf3cea2e9998bb55284afb985648af88b0b2be022f657

See more details on using hashes here.

Provenance

The following attestation bundles were made for json2rdf-88.tar.gz:

Publisher: python-publish.yml on pnnl/json2rdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file json2rdf-88-py3-none-any.whl.

File metadata

  • Download URL: json2rdf-88-py3-none-any.whl
  • Upload date:
  • Size: 7.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for json2rdf-88-py3-none-any.whl
Algorithm Hash digest
SHA256 cf63318928ca2fd287aa87ffdb7469044031e7e738de75d6af9f2385172cb467
MD5 441e5cac99a1a9115d42d27081fd3485
BLAKE2b-256 bcd40a4def3f0ad3be59051671d4d0f47cb6d641dbe691db1ea9ea8c10084d78

See more details on using hashes here.

Provenance

The following attestation bundles were made for json2rdf-88-py3-none-any.whl:

Publisher: python-publish.yml on pnnl/json2rdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

88 This release

2 files

86

2 files

85

2 files

81

2 files

80

2 files

79

2 files

78

2 files

77

2 files

76

2 files

75

2 files

74

2 files

73

2 files

71

2 files

68

2 files

67

2 files

66

2 files

62

2 files

61

2 files

60

2 files

59

2 files

38

2 files

37

2 files

36

2 files

35

2 files

34

2 files

4

2 files

1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page