start a tools/json folder with molecule schema and README

This commit is contained in:
Axel Kohlmeyer
2025-05-22 21:42:33 -04:00
parent 7b5b6f19b7
commit 0df77ef7ca
2 changed files with 179 additions and 0 deletions

45
tools/json/README.md Normal file
View File

@ -0,0 +1,45 @@
This folder contains files and tools for creating, modifying, and validating
files in JSON format. This is work in progress while we are adding JSON
support
# JSON file format validation.
## JSON-Schema files
We provide schema files for the file formats that LAMMPS supports following
the specifications available on [JSON-Schema](https://json-schema.org) webpage.
The following files are currently available.
- `molecule-schema.json` Schema file for the JSON format molecule files.
These files provide a concise description of the hierarchy and supported fields
in JSON file formats. Thus they provide a detailed documentation and can also
be used for validating JSON files.
## Validation of JSON files
There are multiple tools for JSON file validation available. Here are instructions
for how to use a tool called `check-jsonschema` which is available via
[PyPi](https://pypi.org/).
``` bash
# Installation into a virtual environment.
# Once installed only the activation should be needed
python3 -m venv validate-json
source validata-json/bin/activate
pip install --upgrade pip
pip install check-jsonschema
# Validation of two molecule files "rxn1.json" and "twomols.json" with "molecule-schema.json"
check-jsonschema --schemafile molecule-schema.json rxn1.json twomols.json
```
If the files are conforming there should be the output:
```
ok -- validation done
```
Otherwise details about the non-conforming fields are given.
-------
updated by Axel Kohlmeyer, 2025-05-22

View File

@ -0,0 +1,134 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://download.lammps.org/json/molecule-schema.json",
"type": "object",
"properties": {
"application": { "enum": ["LAMMPS"]},
"format": {"enum": ["molecule"]},
"revision": {
"type": "integer",
"minimum": 1,
"maximum": 1
},
"title": {"type": "string"},
"docs": {"type": "string"},
"schema": {"type": "string"},
"com": {"type": "array",
"prefixItems": [
{"type": "number"},
{"type": "number"},
{"type": "number"}
],
"items": false
},
"masstotal": {"type": "number"},
"body": {"type": "array",
"prefixItems": [
{"type": "integer"},
{"type": "integer"}
],
"items": false
},
"inertia": {"type": "array",
"prefixItems": [
{"type": "number"},
{"type": "number"},
{"type": "number"},
{"type": "number"},
{"type": "number"},
{"type": "number"}
],
"items": false
},
"coords": {
"type": "object",
"properties": {
"format": {
"type": "array",
"prefixItems": [
{"enum": ["atom-id"]},
{"enum": ["x"]},
{"enum": ["y"]},
{"enum": ["z"]}
],
"items": false
},
"data": {
"type": "array",
"items": {
"type": "array",
"prefixItems": [
{"type": "integer"},
{"type": "number"},
{"type": "number"},
{"type": "number"}
],
"items": false
}
}
}
},
"types": {
"type": "object",
"properties": {
"format": {
"type": "array",
"items": {
"type": "string"
}
},
"data": {
"type": "array",
"items": {
"type": "array",
"prefixItems": [
{"type": "number"},
{"type": ["number", "string"]}
],
"items": false
}
}
}
},
"molecules": {
"type": "object",
"properties": {
"format": {
"type": "array",
"items": {
"type": "string"
}
},
"data": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "number"
}
}
}
}
},
"charges": {
"type": "object",
"properties": {
"format": {
"type": "array",
"items": {
"type": "string"
}
},
"data": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "number"
}
}
}
}
}
}
}