Package: esse
ESSEEssential Source of Schemas and Examples (ESSE) contains data formats and associated examples specifically designed for digital materials science (see refs.1, 2below).InstallationESSE can be used as a Node.js or Python package on the server side.PythonESSE is compatible with Python 3.6+.  It can be installed as a Python package either via PyPI or the repository as below.PyPIpipinstallesseRepositoryvirtualenv.venvsource.venv/bin/activate
pipinstall-ePATH_TO_ESSE_REPOSITORYNodeESSE can be installed as a Node.js package either via NPM or the repository as below.NPMnpminstall@exabyte-io/esse.jsRepositoryAdd"esse-js": "file:PATH_TO_ESSE_REPOSITORY"topackage.json.UsageESSE contains separate but equivalent interfaces for Python and Javascript.
The package providesESSEclass that can be initialized and used as below.PythonfromesseimportESSEes=ESSE()schema=es.get_schema_by_id("material")Nodeimport{ESSE}from"esse-js";constes=newESSE();constschema=es.getSchemaById("material");StructureESSE contains 3 main directories,schema,exampleandsrcoutlined below.SchemaThe schema directory contains the schemas specifying the rules to structure data. A set of core schemas, outlined below, are defined to facilitate the schema modularity.PrimitivePrimitivedirectory contains a set of custom primitives that extends default standard primitive types allowed by schema, such as String and Number.
Primitives are solely defined by the default primitives and can not be re-constructed from each other.AbstractAbstractdirectory contains unit-less schemas that are constructed from default and custom primitives.ReusableReusabledirectory contains the schemas that are widely used in other schemas to avoid duplication, constructed from the abstract and primitive schemas.ReferenceReferencedirectory contains the schemas defining the rules to structure the references to data sources.ExampleThis directory contains the examples formed according to the schemas and implements the same directory structure as the schema directory.srcThis directory contains Python and Javascript interfaces implementing the functionality to access and validate schemas and examples.Generative vs Non-generative keysGenerative keys are the fields which allow for user input prior to calculation of the final property values. A flag is included in the schema comments on the fields inproperty schemas:isGenerative:truemarks which fields to use as subschemas in the generation of a user input schema.On properties allowing user inputs, additional fields may be tagged, as inthefile_contentpropertyTestsExecute the following command from the root directory of this repository to run the tests. The script will run both Javascript and Python tests in which examples are validated against the corresponding schemas.bashrun-tests.shThe script has been tested with node.js v12.16.3 and v8.17.0 as well as Python version 2.7 (up to version 2.3.0) and 3.6+ (for version 2020.10.19 and later).ContributionThis repository is anopen-sourcework-in-progress and we welcome contributions. We suggest forking this repository and introducing the adjustments there, the changes in the fork can further be considered for merging into this repository as it is commonly done on Github (see3below).Best PracticesUse unique IDs for schemas. One can runsh refactor.shto automatically set the IDs and reformat examples.Do not use circular references in the schemas, instead leave the type as object and add explanation to description.Links1:Data-centric online ecosystem for digital materials science2:CateCom: A Practical Data-Centric Approach to Categorization of Computational Models3:GitHub Standard Fork & Pull Request Workflow