metastore2

General purpose metadata repository and schema registry service.

https://github.com/kit-data-manager/metastore2

Science Score: 75.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 3 DOI reference(s) in README
  • Academic publication links
    Links to: zenodo.org
  • Academic email domains
  • Institutional organization owner
    Organization kit-data-manager has institutional domain (www.scc.kit.edu)
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (11.7%) to scientific vocabulary

Keywords

java json restful-api schema spring-boot xml
Last synced: 4 months ago · JSON representation ·

Repository

General purpose metadata repository and schema registry service.

Basic Info
  • Host: GitHub
  • Owner: kit-data-manager
  • License: apache-2.0
  • Language: Java
  • Default Branch: main
  • Homepage:
  • Size: 7.96 MB
Statistics
  • Stars: 7
  • Watchers: 5
  • Forks: 12
  • Open Issues: 23
  • Releases: 26
Topics
java json restful-api schema spring-boot xml
Created over 5 years ago · Last pushed 4 months ago
Metadata Files
Readme Changelog License Citation

README.md

MetaStore 2 repository

DOI Build Status Codecov CodeQL License ![docker] ![currentVersion] size

[docker]: [currentVersion]:

MetaStore is a research data repository software for storing metadata documents and schemas. Quality and consistency are ensured by associating and validating each document against a schema. It supports JSON and XML.

It allows you to - register an (XML/JSON) schema - update an (XML/JSON) schema - add metadata linked with a registered schema - validate metadata against a registered schema - update added metadata

Installation

There are three ways to install metaStore2 as a microservice: - Using the image available via GitHub Packages (recommended) - Building docker image locally - Building and running locally

Installation via GitHub Packages

Prerequisites

In order to run this microservice via docker you'll need:

Installation

Typically, there is no need for locally building images as all version are accessible via GitHub Packages. Have a look of available images and their tags here Just follow instructions below.

Build docker container locally

Prerequisites

In order to run this microservice via docker you'll need:

Installation

Clone repository

First of all you'll have to clone this repository: user@localhost:/home/user/$ git clone https://github.com/kit-data-manager/metastore2.git Clone to 'metastore2' [...] user@localhost:/home/user/$ cd metastore2 user@localhost:/home/user/metastore2$

Create image

Now you'll have to create an image containing the microservice. This can be done via a script. On default the created images will be tagged as follows:

'latest tag'-'actual date(yyyy-mm-dd)' (e.g.: 1.2.0-2023-06-27)

```

user@localhost:/home/user/metastore2$ bash docker/buildDocker.sh

Build docker container ghcr.io/kit-data-manager/metastore2:1.2.0-2023-06-27

[...]

Now you can create and start the container by calling ...

user@localhost:/home/user/metastore2$ ```

Build docker container

After building image you have to create (and start) a container for executing microservice: ```

If you want to use a specific image you may list all possible tags first.

user@localhost:/home/user/metastore2$ docker images ghcr.io/kit-data-manager/metastore2 --format {{.Tag}} 1.2.0-2023-06-27 user@localhost:/home/user/metastore2$ docker run -d -p8040:8040 --name metastore4docker ghcr.io/kit-data-manager/metastore2:1.2.0-2023-06-27 57c973e7092bfc3778569f90632d60775dfecd12352f13a4fd2fdf4270865286 user@localhost:/home/user/metastore2$ ```

Customize settings

If you want to overwrite default configuration of your docker container you have to 'mount' a config directory containing 'application.properties' with your adapted settings. Therefor you have to provide an additional flag to the command mentioned before: ```

Overwriting default settings

Create config folder

user@localhost:/home/user/metastore2$ mkdir config

Place your own 'application.properties' inside the config directory

Create/run container

user@localhost:/home/user/metastore2$ docker run -d -p8040:8040 -v pwd/config:/spring/metastore2/config --name metastore4docker ghcr.io/kit-data-manager/metastore2:1.2.0-2023-06-27 57c973e7092bfc3778569f90632d60775dfecd12352f13a4fd2fdf4270865286 user@localhost:/home/user/metastore2$ ```

Stop docker container

If you want to stop container just type user@localhost:/home/user/metastore2$ docker stop metastore4docker

(Re)start docker container

If you want to (re)start container just type user@localhost:/home/user/metastore2$ docker start metastore4docker

Build and run locally

Prerequisites

In order to run this microservice via docker you'll need:

Installation

Clone repository

First of all you'll have to clone this repository: user@localhost:/home/user/$ git clone https://github.com/kit-data-manager/metastore2.git Clone to 'metastore2' [...] user@localhost:/home/user/$ cd metastore2 user@localhost:/home/user/metastore2$

Build service

To build service just execute the build.sh script: ```

user@localhost:/home/user/metastore2$bash build.sh /PATH/TO/EMPTY/INSTALLATION/DIRECTORY

Build microservice of metastore2 at /PATH/TO/EMPTY/INSTALLATION/DIRECTORY

[...]

Now you can start the service by calling /PATH/TO/EMPTY/INSTALLATION/DIRECTORY/run.sh

user@localhost:/home/user/metastore2$ ```

Customize settings

If you want to overwrite default configuration of your docker container you have to add a file named 'application.properties' to the 'config' directory inside your installation path (/PATH/TO/EMPTY/INSTALLATION/DIRECTORY)selected before. The added file should only contain your adapted settings. e.g. in case you want to change only the port to '1234' your 'application.properties' should look like this: ```

Overwriting default settings from ../application.properties

Server settings

server.port: 1234 ```

Build framework using docker

Prerequisites

In order to run this framework via docker you'll need: * Docker

Preparation

You have to add the following line to your /etc/hosts file: 127.0.0.1 metastore.docker yaml Note for Windows users: You have to add the line to your C:\Windows\System32\drivers\etc\hosts file. Based on Docker Compose, the entire framework, including elasticsearch and the UI, can now be installed with a single command. user@localhost:/home/user/metastore2$ docker compose up -d As soon all services are running you can browse to http://metastore.docker/index.html

yaml Note: The framework is only for testing purposes and not intended for production use. If you want to use the framework in production mode you have to modify your configuration (application.properties) and setup a database (e.g. postgres).

First steps using framework

If you want to use the (external) web frontend please visit:

https://kit-data-manager.github.io/webpage/metastore/documentation/frontend/index.html

A small documentation guiding you through the first steps of using the RESTful API you can find at

https://kit-data-manager.github.io/webpage/metastore/documentation/REST/index.html

If you want to use a script for doing so please refer to

http://metastore.docker:8040/metastore/swagger-ui.html

in order to see available RESTful endpoints and their documentation. Furthermore, you can use this Web interface to test single API calls in order to get familiar with the service.

Managing framework using docker

To stop and start all services do the following: user@localhost:/home/user/metastore2$ docker compose stop [+] Running 6/6 ⠿ Container frontend.docker Stopped 1.5s ⠿ Container metastore.docker St... 13.1s ⠿ Container indexing.docker Stopped 0.3s ⠿ Container metastore2-dps-1 Stopped 13.2s ⠿ Container rabbitmq.docker S... 6.5s ⠿ Container elastic.docker St... 0.8s user@localhost:/home/user/metastore2$ docker compose start [+] Running 6/6 ⠿ Container frontend.docker Started 0.3s ⠿ Container metastore2-dps-1 Started 10.5s ⠿ Container elastic.docker Started 0.2s ⠿ Container rabbitmq.docker Started 0.2s ⠿ Container metastore.docker Started 0.2s ⠿ Container indexing.docker Started 0.2s user@localhost:/home/user/metastore2$

First steps using MetaStore standalone

If you're using MetaStore without the whole framework the service is reachable via http://localhost:8040/metastore/....

Setup for production mode

:WARNING: If you want to use the service in production mode you have modify your configuration (application.properties).

  1. Don't open port to public (as long as AAI is not implemented)
  2. Use a productive database (e.g. postgres)
  3. Setup directories for schemata and metadata to a reliable disc. (metastore.schema.schemaFolder, metastore.metadata.metadataFolder)
  4. Check all settings in application.properties. (e.g. CSRF)

:information_source: If MetaStore should be used standalone (without KIT Data Manager) you have to install a database before. (See 'Installation PostgreSQL')

Setup MetaStore2

Before you are able to start the repository microservice, you have to modify the file 'application.properties' according to your local setup. Therefor, copy the file 'settings/application-example.properties' to your project folder, rename it to 'application.properties' and customize it. Special attentioned should be payed to the database setup (spring.datasource.*), and the paths of schemata (metastore.schema.schemaFolder) / metadata (metastore.schema.metadataFolder). to the repository base path. Also, the property 'repo.messaging.enabled' should be changed to 'true' in case you want to use the messaging feature of the repository.

Setup database

See setup database and setup for MetaStore2.

Start MetaStore2

As soon as you finished modifying 'application.properties', you may start the repository microservice by executing the following command inside the installation folder: user@localhost:/home/user/metastore2$bash /PATH/TO/EMPTY/INSTALLATION/DIRECTORY/run.sh

More Information

License

The MetaStore2 is licensed under the Apache License, Version 2.0.

Acknowledgements

This work has been supported by the research program ‘Engineering Digital Futures’ of the Helmholtz Association of German Research Centers and the Helmholtz Metadata Collaboration Platform (HMC), with additional support by NFDI4ING (DFG project number 442146713) and NFDI-MatWerk (DFG project number 460247524).

Owner

  • Name: KIT Data Manager
  • Login: kit-data-manager
  • Kind: organization
  • Email: webmaster@datamanger.kit.edu
  • Location: Karlsruhe, Germany

Generic software and recommendations for FAIR research data management by DEM.

Citation (CITATION.cff)

cff-version: 1.2.0
message: "If you use this software, please cite it as below."
authors:
- family-names: "Hartmann"
  given-names: "Volker"
  affiliation: Karlsruhe Institute of Technology
  email: volker.hartmann@kit.edu
  orcid: "https://orcid.org/0000-0001-6383-5214"
- family-names: "Jejkal"
  given-names: "Thomas"
  affiliation: Karlsruhe Institute of Technology
  email: thomas.jejkal@kit.edu
  orcid: "https://orcid.org/0000-0003-2804-688X"
- family-names: "Chelbi"
  given-names: "Sabrine"
  affiliation: Karlsruhe Institute of Technology
  email: sabrine.chelbi@kit.edu
  orcid: "https://orcid.org/0000-0002-4480-6116"
title: "MetaStore"
type: software
abstract: MetaStore is a research data repository software for storing metadata documents and schemas. Quality and consistency are ensured by associating and validating each document against a schema. It supports JSON and XML.
version: 2.1.0
date-released: 2025-06-17
doi: 10.5281/zenodo.7685007
url: "https://github.com/kit-data-manager/metastore2"
repository-code:  "https://github.com/kit-data-manager/metastore2"
license: Apache-2.0

GitHub Events

Total
  • Create event: 144
  • Release event: 5
  • Issues event: 25
  • Watch event: 2
  • Delete event: 155
  • Issue comment event: 31
  • Push event: 248
  • Pull request review event: 2
  • Pull request review comment event: 2
  • Pull request event: 303
  • Fork event: 2
Last Year
  • Create event: 144
  • Release event: 5
  • Issues event: 25
  • Watch event: 2
  • Delete event: 155
  • Issue comment event: 31
  • Push event: 248
  • Pull request review event: 2
  • Pull request review comment event: 2
  • Pull request event: 303
  • Fork event: 2

Issues and Pull Requests

Last synced: 4 months ago

All Time
  • Total issues: 85
  • Total pull requests: 426
  • Average time to close issues: 4 months
  • Average time to close pull requests: 10 days
  • Total issue authors: 10
  • Total pull request authors: 8
  • Average comments per issue: 1.02
  • Average comments per pull request: 0.32
  • Merged pull requests: 324
  • Bot issues: 1
  • Bot pull requests: 346
Past Year
  • Issues: 14
  • Pull requests: 270
  • Average time to close issues: 21 days
  • Average time to close pull requests: 8 days
  • Issue authors: 3
  • Pull request authors: 4
  • Average comments per issue: 0.36
  • Average comments per pull request: 0.08
  • Merged pull requests: 204
  • Bot issues: 0
  • Bot pull requests: 245
Top Authors
Issue Authors
  • VolkerHartmann (58)
  • sabrineChe (9)
  • tegx (6)
  • ThomasJejkal (6)
  • lucaskulla (1)
  • ghost (1)
  • rossellaaversa (1)
  • dependabot[bot] (1)
  • geyslein (1)
  • nicolasblumenroehr (1)
Pull Request Authors
  • renovate[bot] (224)
  • dependabot[bot] (95)
  • VolkerHartmann (74)
  • github-actions[bot] (27)
  • ThomasJejkal (3)
  • tegx (1)
  • georoen (1)
  • ghost (1)
Top Labels
Issue Labels
enhancement (22) bug (18) discussion (5) dependencies (3) invalid (2) question (2) documentation (1) good first issue (1) java (1)
Pull Request Labels
dependencies (322) java (93) bug (9) enhancement (8) github_actions (2) discussion (1)

Dependencies

build.gradle maven
  • com.h2database:h2 2.1.212 implementation
  • com.networknt:json-schema-validator 1.0.59 implementation
  • com.nimbusds:nimbus-jose-jwt 9.15.2 implementation
  • commons-configuration:commons-configuration 1.10 implementation
  • commons-io:commons-io 2.11.0 implementation
  • de.codecentric:spring-boot-admin-starter-client 2.1.6 implementation
  • edu.kit.datamanager:repo-core 1.0.2 implementation
  • edu.kit.datamanager:service-base 1.0.3 implementation
  • io.jsonwebtoken:jjwt-api 0.11.2 implementation
  • io.jsonwebtoken:jjwt-impl 0.11.2 implementation
  • io.jsonwebtoken:jjwt-jackson 0.11.2 implementation
  • net.dona.doip:doip-sdk 2.1.0 implementation
  • org.apache.commons:commons-collections4 4.4 implementation
  • org.apache.commons:commons-text 1.9 implementation
  • org.apache.tika:tika-core 1.27 implementation
  • org.javers:javers-core ${javersVersion} implementation
  • org.javers:javers-spring-boot-starter-sql ${javersVersion} implementation
  • org.keycloak:keycloak-spring-boot-starter ${keycloakVersion} implementation
  • org.postgresql:postgresql 42.2.25 implementation
  • org.springdoc:springdoc-openapi-data-rest ${springDocVersion} implementation
  • org.springdoc:springdoc-openapi-ui ${springDocVersion} implementation
  • org.springdoc:springdoc-openapi-webmvc-core ${springDocVersion} implementation
  • org.springframework.boot:spring-boot-starter-actuator * implementation
  • org.springframework.boot:spring-boot-starter-amqp * implementation
  • org.springframework.boot:spring-boot-starter-data-jpa * implementation
  • org.springframework.boot:spring-boot-starter-data-rest * implementation
  • org.springframework.boot:spring-boot-starter-mail * implementation
  • org.springframework.boot:spring-boot-starter-security * implementation
  • org.springframework.boot:spring-boot-starter-thymeleaf * implementation
  • org.springframework.boot:spring-boot-starter-validation * implementation
  • org.springframework.boot:spring-boot-starter-web * implementation
  • org.springframework.cloud:spring-cloud-starter-config 3.0.6 implementation
  • org.springframework.cloud:spring-cloud-starter-netflix-eureka-client 3.0.5 implementation
  • org.springframework.security:spring-security-config 5.5.2 implementation
  • org.springframework.security:spring-security-web 5.5.2 implementation
  • org.springframework:spring-messaging 5.3.9 implementation
  • xerces:xercesImpl 2.12.1 implementation
  • org.apache.httpcomponents:httpclient 4.5.13 runtimeOnly
  • junit:junit 4.13.2 testImplementation
  • org.mockito:mockito-core 3.12.0 testImplementation
  • org.powermock:powermock-api-mockito2 2.0.9 testImplementation
  • org.powermock:powermock-module-junit4 2.0.9 testImplementation
  • org.springframework.boot:spring-boot-starter-test * testImplementation
  • org.springframework.restdocs:spring-restdocs-mockmvc 2.0.5.RELEASE testImplementation
  • org.springframework.security:spring-security-test * testImplementation
  • org.springframework:spring-test * testImplementation
.github/workflows/branch_on_issue.yml actions
  • robvanderleek/create-issue-branch main composite
.github/workflows/codeql-analysis.yml actions
  • actions/checkout v2 composite
  • github/codeql-action/analyze v1 composite
  • github/codeql-action/autobuild v1 composite
  • github/codeql-action/init v1 composite
.github/workflows/docker-publish.yml actions
  • actions/checkout v2 composite
  • crazy-max/ghaction-docker-meta v1 composite
  • docker/build-push-action v2 composite
  • docker/login-action v1 composite
  • docker/setup-buildx-action v1 composite
  • docker/setup-qemu-action v1 composite
.github/workflows/gradle.yml actions
  • actions/checkout v2 composite
  • actions/setup-java v2 composite
  • codecov/codecov-action v1 composite
Dockerfile docker
  • build-env-java latest build
  • eclipse-temurin 17 build
docker-compose.yml docker
  • defreitas/dns-proxy-server latest
  • elasticsearch 7.9.3
  • kitdm/indexing-service v0.1.3
  • kitdm/metastore2 v1.2.1
  • my-apache latest
  • rabbitmq 3-management