pit-service
Typed PID Maker – Create, resolve and modify PIDs with typed constraints, e.g. for FAIR DOs.
Science Score: 65.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 4 DOI reference(s) in README -
○Academic publication links
-
○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 (14.7%) to scientific vocabulary
Keywords
Repository
Typed PID Maker – Create, resolve and modify PIDs with typed constraints, e.g. for FAIR DOs.
Basic Info
- Host: GitHub
- Owner: kit-data-manager
- License: apache-2.0
- Language: Java
- Default Branch: master
- Homepage: https://kit-data-manager.github.io/webpage/typed-pid-maker/index.html
- Size: 55.9 MB
Statistics
- Stars: 3
- Watchers: 5
- Forks: 5
- Open Issues: 26
- Releases: 15
Topics
Metadata Files
README.md
Typed PID Maker
The Typed PID Maker enables the creation, maintenance, and validation of PIDs. It ensures the PID contains typed, machine-actionable information using validation. This is especially helpful in the context of FAIR Digital Objects (FAIR DOs / FDOs). To make this work, our validation strategy requires a reference to a registered Kernel Information Profile within the PID record, as defined by the recommendations of the Research Data Alliance (RDA). In the RDA context, this kind of service is called a "PIT service". We use Handle PIDs, which can be created using a Handle Prefix (not included). For testing or other local purposes, we support sandboxed PIDs, which require no external service.
Go to: Documentation | Configuration details | Features | Build | Run | License
Features
- ✅ Create PIDs containing typed key-value-pairs for easy, fast, and automated decision-making.
- ✅ Maintain the information within these PIDs.
- ✅ Validate PIDs.
- ✅ Resolve PIDs.
- ✅ Store the created PIDs in your database and query them.
- ✅ Pagination support
- ✅ Tabulator.js support
- ✅ Build & use your own search index
- ✅ Search for information stored within PIDs. This includes PIDs you created, updated or resolved at some point.
- ✅ Supports the full elastic DSL (and requires an Elasticsearch 8 instance).
- ✅ Authentication via JWT or KeyCloak
- ✅ Bootstrap with existing PIDs in your PID Prefix (see command line options).
- ✅ Extract all your PIDs to CSV files (see command line options).
- ✅ Make your PIDs distinguishable with a customizable branding-prefix and other customization options.
- ✅ Use the Handle systems redirection feature to redirect browsers directly to the data.
Some of the features are described in more detail in the following sections.
Search example
The search can be executed via the provided swagger interface (default location: http://localhost:8090/swagger-ui.html). For example, with the following request body you will get all record information:
json
{
"query": {
"regexp": {
"pid": {
"value": ".*",
"flags": "ALL",
"case_insensitive": true
}
}
}
}
You can also use other http clients, like CURL. A CURL (which may be provided by swagger) request may look like this:
bash
curl -X 'POST' \
'http://localhost:8090/api/v1/search?page=0&size=20' \
-H 'accept: application/hal+json' \
-H 'Content-Type: application/json' \
-d '{
"query": {
"regexp": {
"pid": {
"value": ".*",
"flags": "ALL",
"case_insensitive": true
}
}
}
}'
The look of a PID (customization)
The detailed configuration documentation has a list of available properties which influence the way PIDs look. There is no functional benefit in PID customization. Some examples for possible PIDs with the Typed PID Maker:
ProjectX--1d6c-152c-c9e0-c136-1509- branding-prefix = ProjectX--
- mode = HexChunk
- num-chunks = 4
- casing = lower
d08a-3c11-8e8a-55f7-76a6- without branding-prefix
AADF-46A0-661F-9CAF-43A2- casing = upper
8d819cba-ba84-4080-b86c-8d2d318c240f- (default configuration)
- mode = UUID4
- casing = lower
If you have an interest in more customization, feel free to contact us.
In general, a PID is built like the following scheme:
PID = prefix + suffix
- The prefix is a string which is prepended to all your PIDs. It can be considered a namespace and is given to you by your PID system (here: the handle system). It usually ends with a slash (
/) as a separator. - The suffix is a random string, generated by the Typed PID Maker. This generation can be customized.
As the suffix is flexible, we can prepend a branding prefix to it, to show some relation to a project or institution. Please note that the branding is then part of the suffix, and therefore part of the whole PID. It can not be changed if the PID has already been registered. Of course, it can be changed for new PIDs. If a branding is applied, the scheme of a PID can be represented like the following:
PID = prefix + (branding + uniquely-generated-string)
^------------- <suffix> -------------^
All other configuration properties affect only the uniquely-generated-string. For example, you may choose a different generation method (UUID (default) or Hex Chunks) enforce casing (lower-case, upper-case).
How to build
Note: Alternatively, you can use the docker image.
Required: Java SE Development Kit 21 (or openjdk 21) or higher
- Building (with tests):
./gradlew clean build - Building (with verbose test output)
./gradlew -Dprofile=verbose clean build - Building (without tests):
./gradlew clean build -x test - Run docker integration tests:
./gradlew clean build(by default, this will reuse the local build)time bash ./docker/test_docker.sh(runs test script)
- Doing a release:
./gradlew clean build release- Will prompt you about version number to use and next version number
- Will make a git tag which can later be used in a GitHub release
- Build documentation:
./gradlew javadoc
On Windows, replace ./gradlew with gradlew.bat.
After a successful build, a jar file containing the entire service is created at build/libs/TypedPIDMaker-$(version).jar.
How to run
Currently, you can either run it via docker or via the compiled JAR file.
Running via docker
Required: Up-to-date Docker (or Docker Desktop) installation
We provide docker images hosted on GitHub.
- Available versions and other details are listed in the package section.
- Configuration / Mount points:
- Containers are being considered "throwaway objects". To update the application, you simply stop the container and create a new one from the updated image. Therefore, you need to persist configuration and database information!
- The configuration file is located within the container at
/app/conf/application-default.properties - For configuration, either use environment variables (e.g. with
docker compose) or mount a customapplication.propertiesinto/app/conf/. - For production, you'll want to configure your own Handle prefix. The required private key is recommended to also be mounted into
/app/conf/, so you'll likely use mount point anyway. - For persisting a database file, consider mounting
/data/. This also means to adjust the configuration accordingly!
- Exposed ports (inner ports of the container)
- These are the exposed ports. To not attempt to change it in the configuration, as the container does not export other ports.
8090: Provides the API, as well as the Swagger documentation.
Running the compiled JAR file
For development purposes, the easiest way to run the service with your configuration file is:
bash
./gradlew run --args="--spring.config.location=config/application-default.properties"
This command will use the default settings, set and documented in the file config/application.properties (see command line options). Changes in this file will require a restart of the Typed PID Maker, in case it is already running. If you change the location of the file or want to use another configuration, you may adjust the path in the command above or use one of the default locations for spring boot configurations.
For production use, the service can also be started directly like this:
bash
./build/libs/TypedPIDMaker-$(version).jar
The start will take a moment, and indicate its readiness with Spring is started! on stdout. As soon as the microservice is started, you can browse to
OpenAPI / Swagger documentation:
http://localhost:8090/swagger-ui.html
in order to see available RESTful endpoints and their documentation. You may have to adapt the port according to your local settings. Furthermore, you can use this web interface to test single API calls in order to get familiar with the service.
Details on the version number and other build information can be found on http://localhost:8090/actuator/info.
Command line options
--spring.config.location=config/application.propertiesset the configuration files location to be used. Not required if the file is in the same directory as the jar file or another default location for spring boot configurations.--spring.profiles.active=$PROFILEto make spring using your adjustedapplication-$PROFILE.propertiesinstead of (or in addition to)application-default.properties. May also take multiple profiles as a comma separated list.bootstrap all-pids-from-prefixstarts the service and bootstraps all PIDs. This means:- store the PIDs as "known PIDs" in the local database (as configured)
- send one message per PID to the message broker (if configured)
- store the PID records in the search index (if configured)
- after the bootstrap, the application will continue to run
bootstrap known-pidssame as above, but:- not using all PIDs from prefix, but only the ones stored in the local database ("known PIDs")
- useful to, for example, re-send PIDs via messaging to notify new services
write-file all-pids-from-prefixwrites all PIDs of the configured PID prefix to a CSV file (one PID per line).write-file known-pidssame as above but:- only with the PIDs stored in the local database ("known PIDs").
License
The license for the KIT Data Manager source code is available within the LICENSE file.
Owner
- Name: KIT Data Manager
- Login: kit-data-manager
- Kind: organization
- Email: webmaster@datamanger.kit.edu
- Location: Karlsruhe, Germany
- Website: https://www.scc.kit.edu/ueberuns/dem.php
- Repositories: 56
- Profile: https://github.com/kit-data-manager
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: "Pfeil" given-names: "Andreas" affiliation: Karlsruhe Institute of Technology email: andreas.pfeil@kit.edu orcid: "https://orcid.org/0000-0001-6575-1022" - family-names: "Jejkal" given-names: "Thomas" affiliation: Karlsruhe Institute of Technology email: thomas.jejkal@kit.edu orcid: "https://orcid.org/0000-0003-2804-688X" title: "Typed PID Maker" type: software abstract: The Typed PID Maker is the entry point to integrate digital resources into the FAIR DO ecosystem. It allows to create PIDs for resources and to provide them with the necessary metadata to ensure that the resources can be found. date-released: 2025-06-12 url: "https://github.com/kit-data-manager/pit-service" repository-code: "https://github.com/kit-data-manager/pit-service" license: Apache-2.0 version: 2.2.1
GitHub Events
Total
- Create event: 79
- Issues event: 24
- Release event: 6
- Delete event: 53
- Issue comment event: 81
- Push event: 168
- Pull request review comment event: 18
- Pull request review event: 49
- Pull request event: 118
- Fork event: 1
Last Year
- Create event: 79
- Issues event: 24
- Release event: 6
- Delete event: 53
- Issue comment event: 81
- Push event: 168
- Pull request review comment event: 18
- Pull request review event: 49
- Pull request event: 118
- Fork event: 1
Issues and Pull Requests
Last synced: 4 months ago
All Time
- Total issues: 38
- Total pull requests: 185
- Average time to close issues: 12 months
- Average time to close pull requests: 10 days
- Total issue authors: 6
- Total pull request authors: 7
- Average comments per issue: 1.71
- Average comments per pull request: 0.49
- Merged pull requests: 150
- Bot issues: 0
- Bot pull requests: 132
Past Year
- Issues: 13
- Pull requests: 101
- Average time to close issues: 17 days
- Average time to close pull requests: 9 days
- Issue authors: 3
- Pull request authors: 4
- Average comments per issue: 0.46
- Average comments per pull request: 0.32
- Merged pull requests: 73
- Bot issues: 0
- Bot pull requests: 78
Top Authors
Issue Authors
- Pfeil (30)
- ThomasJejkal (3)
- maximiliani (2)
- nicolasblumenroehr (2)
- dalito (1)
- VolkerHartmann (1)
Pull Request Authors
- dependabot[bot] (162)
- Pfeil (52)
- renovate[bot] (9)
- akshay4uk (6)
- maximiliani (2)
- pjoKIT (1)
- VolkerHartmann (1)
Top Labels
Issue Labels
Pull Request Labels
Dependencies
- com.github.everit-org.json-schema:org.everit.json.schema 1.14.0 implementation
- com.monitorjbl:spring-json-view 1.1.0 implementation
- edu.kit.datamanager:service-base 0.2.1 implementation
- net.handle:handle-client 9.3.0 implementation
- org.apache.httpcomponents:httpclient 4.5.13 implementation
- org.apache.httpcomponents:httpclient-cache 4.5.13 implementation
- org.springframework.boot:spring-boot-starter-validation * implementation
- org.junit.jupiter:junit-jupiter * testImplementation
- org.junit.jupiter:junit-jupiter-params * testImplementation
- org.springframework.boot:spring-boot-starter-test * testImplementation
- org.springframework.restdocs:spring-restdocs-mockmvc * testImplementation
- org.springframework.security:spring-security-test * testImplementation
- org.springframework:spring-test * testImplementation
- actions/checkout v3 composite
- github/codeql-action/analyze v2 composite
- github/codeql-action/autobuild v2 composite
- github/codeql-action/init v2 composite
- actions/checkout v3 composite
- actions/setup-java v3 composite
- gradle/gradle-build-action v2 composite
- gradle/wrapper-validation-action v1 composite