Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/neo4j/graph-schema-json-js-utils
Utility library to work with the Graph Schema JSON representation
https://github.com/neo4j/graph-schema-json-js-utils
graph-database json-schema property-graph schema
Last synced: 3 months ago
JSON representation
Utility library to work with the Graph Schema JSON representation
- Host: GitHub
- URL: https://github.com/neo4j/graph-schema-json-js-utils
- Owner: neo4j
- License: apache-2.0
- Created: 2022-09-04T20:28:51.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-09-09T12:07:13.000Z (4 months ago)
- Last Synced: 2024-09-27T21:41:10.139Z (3 months ago)
- Topics: graph-database, json-schema, property-graph, schema
- Language: TypeScript
- Homepage:
- Size: 459 KB
- Stars: 5
- Watchers: 8
- Forks: 8
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Graph Schema JSON utility library
## Install
```
npm install @neo4j/graph-schema-utils
```## How to consume
There are two parts to this repo:
1. A JSON schema that describes how a graph schema should be expressed in JSON.
2. Utility functions that help the consumers to validate and work with a graph schema.### JSON-schema
The JSON that describes the shape of a graph schema is available in the source code (`packages/json-schema/json-schema.json`) and published on: https://dist.neo4j.org/json-graph-schema/ (to be published, not in place yet)
### Validate
This function is needed to perform a validation on a graph schema. The validateSchema function compares the output against the JSON schema.
```js
import { validateSchema } from "@neo4j/graph-schema-utils";validateSchema(jsonSchema, graphSchema);
```### Parse
Since the references in the JSON document are references by id:s, there's a parser utility that hydrates the references and makes it easy to work with the schema.
```js
import { formatters } from "@neo4j/graph-schema-utils";const parsed = formatters.json.fromJson(graphSchemaJsonString);
```### Model
You can also create a schema model programatically.
Example:```js
import { model } from "@neo4j/graph-schema-utils";const labels = [
new model.NodeLabel("l1", "Person"),
new model.NodeLabel("l1", "Movie"),
];const relationshipTypes = [new model.RelationshipType("rt1", "ACTED_IN")];
const properties = [
new model.Property("name", new model.PropertyBaseType("string"), true),
new model.Property("title", new model.PropertyBaseType("string"), true),
new model.Property(
"roles",
new model.PropertyArrayType(new model.PropertyBaseType("string")),
false
),
];const nodeObjectTypes = [
new model.NodeObjectType("n1", [labels[0]], [properties[0]]), // (:Person {name}) node type
new model.NodeObjectType("n2", [labels[1]], [properties[1]]), // (:Movie {title}) node type
];const relationshipObjectTypes = [
// (:Person {name})-[:ACTED_IN {roles}]->(:Movie {title})
new model.RelationshipObjectType(
"r1",
relationshipTypes[0],
nodeObjectTypes[0],
nodeObjectTypes[1],
[properties[2]]
),
];const graphSchema = new model.GraphSchema(
nodeObjectTypes,
relationshipObjectTypes
);
```### Serialize
If you need to transport or persist the schema, you can serialize the model into the JSON represenation.
```js
import { formatters } from "@neo4j/graph-schema-utils";const serialized = formatters.json.toJson(graphSchema);
```## Contribute
We welcome contributions to this repo. Fork this repo and open a PR!
### Run test
To run a single test run:
```bash
npm run test
```To watch for changes and run tests on change:
```bash
npm run test:watch
```### Build
To build the TypeScript:
```bash
npm run build
```