The Enhanced Laboratory Metadata Organizer (ELMO) is based on a student cooperation project between the University of Applied Sciences Potsdam and the GeoForschungsZentrum Potsdam. The editor saves metadata for research datasets in valid XML files according to the DataCite and ISO schema.
- Main Features
- Installation
- Dependencies
- Settings
- API-Dokumentation
- Formularfelder
- Data validation
- Data Mapping and Occurences
- Database structure
- Contributing
- Testing
- Simple mapping of entered data using XSLT.
- Modular, customizable front end.
- Multilingualism through the use of language files. Add your own language file and ELMO will detect it automatically.
- Always up-to-date controlled vocabularies through regular automatic updates.
- Easy input of authors and contributors using ORCID preload.
- Submitting of metadata directly to data curators.
- Authors can be sorted by drag & drop and marked as contact person with a toggle switch button.
- Submission of data descriptions files and link to data is possible.
- Optional input fields with form groups that can be hidden.
- Autosave functionality
The installation of ELMO is possible on operating systems such as recent Windows versions (e.g. Windows 10/11) and the most common Linux distributions (e.g. Ubuntu, Debian). Following conditions are required for installation:
- PHP ≥ 8.2 and ≤ 8.4
- incl. a webserver able to perform PHP operations (such as Apache or Nginx)
- extensions needed: XSL, ZIP
- MySQL (for further requirements, see: MySQL Documentation) or MariaDB
- Ensure a development environment with PHP >8.2 and a MySQL or MariaDB server.
- The XSL and ZIP extensions for PHP must be installed and enabled.
- Don't forget to start Apache and MySQL.
- Create a new empty sql database in (e.g. using phpMyAdmin) and copy the name of the database.
- Copy the content of the file
sample_settings.phpinto a new filesettings.phpand adjust the settings for the database connection. - For the automatically generated time zone selection, create a free API key at timezonedb.com and enter it into the newly created
settings.php. - Create a Google Maps JS API key and paste it into the
settings.phpfile as well. - Copy all files from this repository into the
htdocsorwwwfolder of your web server. - In this folder run
npm installvia bash. - There you run
composer install. - Access
install.htmlvia the browser and choose to install with or without test datasets. The database tables will be created in your database, as well as 3 test datasets, if you chose that first option. - Delete
install.phpandinstall.htmlafter successfully creating the database. - The metadata editor is now accessible in the browser via
localhost/directoryname. - Adjust settings in
settings.php(see Settings Section).
- Install Docker.
- Clone the repository.
- Run
docker compose buildin the cloned project folder via bash. - Run
docker compose up -dto start the container. - This directory contains .env_sample that you will need to rename to .env. Please feel free to change the credentials in it.
Please mind that:
- Environment variables for database setup only apply on first container startup. If volumes persist, old configs stay alive.
- Use
docker-compose down -vto reset the database when updating credentials.
- To recreate the database structure, a special variable 'DB_INIT_MODE' is introduced. Setting it to 'keep_data' will mean that the db is reset only if no tables are found. 'drop_data' will ensure an actual database structure (see install.php), but will lose data. Setting to 'skip' skips the procedure.
- Docker Environment Setup 🐳
This section outlines the automatic processes handled by the Docker environment for ELMO. While not strictly necessary for basic usage, understanding these steps is crucial for modifying behavior or troubleshooting.
1. docker-compose.yaml
- Configures and orchestrates two primary services:
db: Built from a MariaDB image.web: Built from theDockerfile.
2. Dockerfile
- Base Image: Installs
php 8.4-apacheand essential dependencies, including the database client. - Project Copy: Copies the entire project directory into the container's root (
/var/www/html), setting appropriate ownership for the standard Apache user (www-data). I fyou don't want something to be copied into container, include it into .dockerignore (performance might be affected) - Entrypoint: Executes the
docker-entrypoint.shscript.
3. docker-entrypoint.sh
- Database Setup: Responsible for initializing the database structure by running
install.php. - Idempotency: Utilizes a
FLAG_FILEto ensure the database setup runs only once. If this file exists, the installation process is skipped. - Installation Options for
install.php:basic(default): Creates only the database structure and inserts lookup data.complete: Creates the database structure, inserts lookup data, and populates the database with exemplar (test) data. This is controlled by theINSTALL_ACTIONenvironment variable (e.g.,INSTALL_ACTION=complete).
Important Notes for Developers:
- Full Reset for Dockerfile/Entrypoint Changes:
To apply changes made to
Dockerfileordocker-entrypoint.sh, a full reset of the Docker containers is required:docker-compose down -v docker-compose build --no-cache
- Applying Other Changes:
For changes to project files (which are copied, not mounted as volumes), you need to rebuild the service:
This rebuilds the
docker-compose up --build
webservice (and any other services specified indocker-compose.yamlthat depend on the build context), ensuring your updated project files are included in the new container image.
If you encounter problems with the installation, feel free to leave an entry in the feedback form or in our issue board on GitHub!
The installation of ELMO is possible on operating systems such as recent Windows versions (e.g. Windows 10/11) and the most common Linux distributions (e.g. Ubuntu, Debian). Following conditions are required for installation:
- PHP ≥ 8.2 and ≤ 8.4
- incl. a webserver able to perform PHP operations (such as Apache or Nginx)
- extensions needed: XSL, ZIP
- MySQL (for further requirements, see: MySQL Documentation) or MariaDB
- Ensure a development environment with PHP >8.2 and a MySQL or MariaDB server.
- The XSL and ZIP extensions for PHP must be installed and enabled.
- Don't forget to start Apache and MySQL.
- Create a new empty sql database in (e.g. using phpMyAdmin) and copy the name of the database.
- Copy the content of the file
sample_settings.phpinto a new filesettings.phpand adjust the settings for the database connection. - For the automatically generated time zone selection, create a free API key at timezonedb.com and enter it into the newly created
settings.php. - Create a Google Maps JS API key and paste it into the
settings.phpfile as well. - Copy all files from this repository into the
htdocsorwwwfolder of your web server. - Access
install.phpvia the browser. The database tables will be created automatically in your database. - The metadata editor is now accessible in the browser via
localhost/directoryname. - Adjust settings in
settings.php(see Settings Section).
If you encounter problems with the installation, feel free to leave an entry in the feedback form or in our issue board on GitHub!
This section will further explain the installation of the metadata editor with the help of a more detailed step-by-step guide on how to install the metadata editor on Windows 10/11 using PHP and MySQL. For a local development environment, localhost-based access to the server is usually sufficient.
- Download and run the installer from the official PHP website (PHP > 8.2).
- Install MySQL or MariaDB.
- Install and enable the XSL and ZIP extensions for PHP. In order to do that, open the
php.inifile and uncomment the line for the required extensions.
- If you're using an all-in-one solutions such as XAMPP or WampServer, you can start Apache directly from the XAMPP or WampServer control panel.
- Alternatively, you can manually start Apache by navigating to the
bindirectory of Apache (e.g.,C:\xampp\apache\bin) and runninghttpd.exe.
- Using phpMyAdmin: If you're using XAMPP or WampServer, phpMyAdmin is already installed. You can access it by going to
http://localhost/phpmyadminin your browser. - Create a new database and remember the name of it, as you'll need it later in the next step.
- Alternatively, using the Windows PowerShell:
- Start MySQL in the Shell while being in your SQL directory:
mysql -u root -p - Create a database:
CREATE DATABASE your_database; - Create a new MySQL-user for the installation:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password'; - Granting rights to this user:
GRANT CREATE ON your_database.* TO 'username'@'localhost';and save withFLUSH PRIVILEGES; - Optional: confirm the creation of the database while being logged in as the new user:
SHOW DATABASES;
- Start MySQL in the Shell while being in your SQL directory:
- Download all files from this repository into the
htdocsorwwwfolder of your webserver. - Create
settings.php:- Copy the entire contents of
sample_settings.phpwhich is located in the first level of the ELMO repository and save it assettings.phpin the same directory.
- Copy the entire contents of
- Adjust the database connection:
- Open the
settings.phpfile with a text editor and modify the database connection settings according to your database name, user, password and host. The default MySQL user ist 'root'. Change this to the MySQL-user you just created in step 3. The host value typically remains as 'localhost'.
- Open the
- Access the installation script in your browser as follows:
http://localhost/your_directory/install.html. This script will automatically create the required tables in the database you specified in step 3. In addition, three test datasets are installed throughinstall.htmlif you chose this option.
- Please delete
install.phpandinstall.htmlafter successfully creating the database.
- Sign up for a free API key at timezonedb.com. After registration, you should receive an email with your account data including your API key.
- Insert your API key in
settings.phpin the according line.
- Get a Google Maps JS API key via the Google Cloud Console. To do this, create a project, enable the Google Maps JavaScript API and get your API key.
- Insert your Google Maps API key in the corresponding line in the
settings.phpfile.
- After the installation is complete, you should be able to access the metadata editor in your browser at
http://localhost/your_directory. - Settings may be modified in
settings.php.
Dependencies can be installed using the following terminal commands: 1. `composer install` 2. `npm install` Prequisite for that is composer. If you don't have it consider brew install composer or other options
The following third-party dependencies are included in header.php and footer.html:
- Bootstrap 5
For the design, responsiveness and dark mode. - Bootstrap Icons 1
For the icons used. - jQuery 3
For the event handlers in JavaScript and to simplify the JavaScript code. - jQuery UI 1
Extends jQuery with the autocomplete function that we currently use for the affiliation fields. - Tagify 4
Is used for the Thesaurus Keywords field, the entry of multiple affiliations and free keywords. - jsTree 3
Is used to display the thesauri as a hierarchical tree structure. - Swagger UI 5
For displaying the dynamic and interactive API documentation in accordance with OpenAPI standard 3.1.
To install them: npm install
In addition to the access data for the database, other settings can also be adjusted in the settings.php file:
$host: Database host.$username: Username of the user with access to the given database.$password: Password of database user.$database: Name of the database created.$maxTitles: Defines the maximum number of titles that users can enter in the editor.$apiKeyElmo: A self-defined security key to connect cron jobs with api calls to/update/for refreshing the vocabularies.$mslLabsUrl: URL to the JSON file with the current list of laboratories.$showFeedbackLink: true-> feedback function switched on, false-> feedback function switched off$smtpHost: URL to the SMTP mail server$smtpPort: Port of the mail server$smtpUser: User name of the mailbox for sending the mails$smtpPassword: Password of the mailbox$smtpSender: Name of the sender in the feedback mails$feedbackAddress: Email Address to which the feedback is sent$xmlSubmitAddress: Email Address to which the finished XML file is sent. When deploying the three frontend variants viadocker-compose.prod.yml, configure this via the environment variablesXML_SUBMIT_ADDRESS,XML_SUBMIT_ADDRESS_MSL, andXML_SUBMIT_ADDRESS_GEMfor the standard, MSL, and GEM variants respectively.$showContributorPersons: Specifies whether the form group Contributor Persons should be displayed (true/false).$showContributorInstitutions: Specifies whether the form group Contributor Institutions should be displayed (true/false).$showMslLabs: Specifies whether the form group Originating Laboratory should be displayed (true/false).$showMslVocabs: Specifies whether the form group EPOS Multi-Scale Laboratories Keywords should be displayed (true/false).$showGcmdThesauri: Specifies whether the form group GCMD Thesauri should be displayed (true/false).$showFreeKeywords: Specifies whether the form group Free Keywords should be displayed (true/false).$showSpatialTemporalCoverage: Specifies whether the form group Spatial and Temporal Coverages should be displayed (true/false).$showRelatedWork: Specifies whether the form group Related Work should be displayed (true/false).$showFundingReference: Specifies whether the form group Funding Reference should be displayed (true/false).$showGGMsProperties: specific for implementation for the ICGEM platform. Specifies whether ICGEM form groups (GGMs Properties and Characteristics of the model) should be displayed (true/false).
-
This field contains the DOI (Digital Object Identifier) that identifies the resource.
- Data type: String
- Occurrence: 0-1
- The corresponding field in the database where the value is stored is called:
doiin the tableResource - Restrictions: Must be in “prefix/suffix” format
- DataCite documentation
- Example values:
10.5880/GFZ.3.1.2024.002,10.5880/pik.2024.001 - Mapping: is mapped to
<identifier>in the DataCite scheme and to<gmd:fileIdentifier>as well as<gmd:identifier> <gmd:MD_Identifier> <gmd:code>and<gmd:distributionInfo> <gmd:MD_Distribution> <gmd:transferOptions> <gmd:MD_DigitalTransferOptions> <gmd:onLine> <gmd:CI_OnlineResource>in the ISO scheme
-
Publication Year
This field contains the publication year of the resource.
- Data type: Year
- Occurrence: 1
- The corresponding field in the database where the value is saved is called:
yearin the tableyear - Restrictions: A year in four-digit format. Values allowed in four-digit format: 1901 to 2155 (due to data type YEAR)
- DataCite documentation
- Example values:
1998,2018 - Mapping: is mapped to
<publicationYear>in the DataCite scheme
-
Resource Type
This field contains the type of resource.
- Data type: String
- Occurrence: 1
- The corresponding field in the database where the value is saved is called:
resource_type_generalin the tableResource_Type - Restrictions: must be selected from controlled list
- DataCite documentation
- Example values:
Dataset,Audiovisual,Book - Mapping: mapped to
<resourceType resourceTypeGeneral="XX">in the DataCite scheme
-
Version
This field contains the version number of the resource.
- Data type: Float
- Occurrence: 0-1
- The corresponding field in the database where the value is saved is called:
versionin the tableResource - Restrictions: None
- DataCite documentation
- Example values:
1.02.13.5 - Mapping: mapped to
<version>in DataCite scheme
-
Language of Dataset
This field contains the language of the dataset
- Data type: String
- Occurence: 1
- The corresponding field in the database where the value is saved is called:
namein the tableLanguage - Restrictions: must be selected from controlled list
- DataCite documentation
- Beispielwerte:
Englisch,German,French - Mapping: mapped to
<language>element in DataCite scheme and to<gmd:language>in ISO scheme
-
Title
This field contains the title of the resource.
- Data type: String
- Occurrence: 1-n, with n=$maxTitles specified in the settings.php
- The corresponding field in the database where the value is stored is called:
textin the tabletitle - Restrictions: None
- DataCite documentation
- Example values:
Drone based photogrammetry data at the Geysir - Mapping: mapped to
<titles> <title>in DataCite scheme and<identificationInfo> <MD_DataIdentification> <citation> <CI_Citation> <title>or...<alternateTitledepending on the title type
-
Title Type
This field contains the type of title (other than the main title).
- Data type: String
- Occurrence: 1, if the corresponding title is not the main title
- The corresponding field in the database where the value is stored is called:
namein the tableTitle_Type - Restrictions: must be selected from controlled list
- DataCite documentation
- Example values:
Translated Title - Mapping: mapped to
<title titleType="TranslatedTitle">in the datacite scheme
-
Rights Title
The content of this field is mapped to
<rights>in the DataCite scheme and to<resourceConstraints> <gmd:MD_Constraints> <gmd:useLimitation>as well as<gmd:resourceConstraints> <gmd:MD_LegalConstraints>in the ISO scheme.This field contains the title of the license with its abbreviation.
- Data type: String
- Occurrence: 1
- The corresponding fields in the database where the value is stored is called:
textandrightsIdentifierin the tableRights - Restrictions: Mandatory field. Must be selected from controlled list
- DataCite documentation
- Example value:
Creative Commons Attribution 4.0 International (CC-BY-4.0)
-
Saved in backend (not visible to user): rightsURI
This field contains the URI of the License.
- Data Type: String
- Occurence: 1
- The corresponding fields in the database where the value is stored is called:
rightsURIin the tableRights - Restrictions: Mandatory field. Must be selected from controlled list
- DataCite documentation
- Example values:
https://creativecommons.org/licenses/by/4.0/legalcode
-
Saved in backend (not visible to user): forSoftware
This field specifies if the license is used for software (forSoftware=1) or not (forSoftware=0). The controlled list changes for users based on this parameter when resource type Software is chosen.
Author information mapped to <creator> element in the datacite scheme and to <citedResponsibleParty> in the ISO scheme.
Occurrence is: 1-n
-
Last Name
This field contains the author's surname.
- Data type: String
- Occurrence: 1
- The corresponding field in the database where the value is stored is called:
familynamein the tableauthor - Restrictions: mandatory field, only letters allowed
- DataCite documentation
- Example values:
Jemison,Smith
-
First Name
This field contains the author's first name.
- Data type: String
- Occurrence: 1
- The corresponding field in the database where the value is stored is called:
givennamein the tableauthor - Restrictions: mandatory field, only letters allowed
- DataCite documentation
- Example values:
Lisa,Elisa
-
This field contains the author's ORCID (Open Researcher and Contributor ID).
- Data type: String
- Occurrence: 0-1
- The corresponding field in the database where the value is stored is called:
orcidin the tableauthor - Restrictions: Must be in the format “xxxx-xxxx-xxxx-xxxx-xxxx”.
- DataCite documentation
- Example values:
0000-0001-5727-2427,0000-0003-4816-5915
-
This field contains the author's affiliation.
- Data type: String
- Occurrence: 0-n
- The corresponding field in the database where the value is stored is called:
namein the tableaffiliation - Restrictions: None, can be chosen from the dropdown menu or given as free text
- DataCite documentation
- Example values:
Technische Universität Berlin,Helmholtz Centre Potsdam - GFZ German Research Centre for Geosciences
-
Saved in backend (not visible to user): rorId
If an affiliation is chosen from the dropdown menu, which contains the entry from the Research Organization Registry (ROR), the assiciated ROR-ID is saved.
- Occurrence: 0-n
- The corresponding field in the database where the value is stored is called:
rorIdin the tableaffiliation - Restrictions: is automatically saved when an affiliation is chosen
- DataCite documentation
- Example values:
03v4gjf40,04z8jg394
Author Institution has the same role as Author as a person. Here, the institution is entered as the author of the data set, for example: Helmholtz Centre Potsdam - GFZ German Research Centre for Geosciences Occurrence is: 0-n
-
Institution Name
This field contains the Name of the Institution(author).
- Data type: String
- Occurrence: 0-n
- The corresponding field in the database where the value is stored is called:
institutionnamein the tableAuthor\_institution - Restrictions: Optional field, but may become mandatory in certain cases.
- DataCite documentation
- Example values:
California Digital Library,Helmholtz Centre Potsdam - GFZ German Research Centre for Geosciences
-
This field contains the author's affiliation.
- Data type: String
- Occurrence: 0-n
- The corresponding field in the database where the value is stored is called:
namein the tableaffiliation - Restrictions: None, can be chosen from the dropdown menu or given as free text
- DataCite documentation
- Example values:
Technische Universität Berlin,Helmholtz Centre Potsdam - GFZ German Research Centre for Geosciences
-
Saved in backend (not visible to user): rorId
If an affiliation is chosen from the dropdown menu, which contains the entry from the Research Organization Registry (ROR), the assiciated ROR-ID is saved.
- Occurrence: 0-n
- The corresponding field in the database where the value is stored is called:
rorIdin the tableaffiliation - Restrictions: is automatically saved when an affiliation is chosen
- DataCite documentation
- Example values:
03v4gjf40,04z8jg394
A Contact Person is saved as a "Contributor" with the role "Contact Person" in the DataCite scheme (version 4.5) and as a "Point of Contact" in the ISO scheme (Version 2012-07-13). Authors can be labelled as a contact person with the help of a toggle switch button which adds the additional fields required for contact (Email address, Website).
-
Last Name
This field contains the surname of the person.
- Data type: String
- Occurrence: 1
- The corresponding field in the database where the value is stored is called: familyname in the Contact_Person table
- Restrictions: Mandatory
- Example values:
Jemison,Smith
-
First Name
This field contains the first name of the person.
- Data type: String
- Occurrence: 1
- The corresponding field in the database where the value is stored is called: givenname in the table Contact_Person
- Restrictions: Mandatory
- Example values:
John,Jane
-
Email address
This field contains the email address of the person or organisation.
- Data type: String
- Occurrence: 1
- The corresponding field in the database where the value is stored is called: email in the Contact_Person table
- Restrictions: Mandatory
- Example values:
ali.mohammed@gfz.de,holger.ehrmann@gfz.de
-
Website
This field contains the organisation's website.
- Data type: String
- Occurrence: 0-1
- The corresponding field in the database where the value is stored is called: website in the Contact_Person table
- Restrictions: Optional
- Example values:
gfz.de,fh-potsdam.de
-
Affiliation
This field contains the affiliation of the person.
- Data type: String
- Occurrence: 0-n
- The corresponding field in the database where the value is saved is called: name in the Affiliation table.
- Restrictions: Optional
- Example values:
Technische Universität Berlin,GFZ, Helmholtz-Zentrum Potsdam - Deutsches GeoForschungsZentrum GFZ - Note: As in all affiliation fields the ROR ID is saved, when an affiliation is chosen from the list
The controlled list is provided and maintained by Utrecht University (MSL Laboratories) and can be updated via API call (see API documentation).
-
Laboratory Name This field contains the laboratory, where the research data came from. Its content is mapped to
<contributor contributorType="HostingInstitution"><contributorName>in the DataCite scheme.- Data Type: String
- Occurence: 0-n
- The corresponding field in the database is called:
laboratorynamein the tableoriginating_laboratory - Restrictions: Controlled list
- DataCite documentation
- Example values:
Fragmentation Lab (Ludwig-Maximilians-University Munich, Germany),TecMOD - GRmodel (CNRS-Rennes 1 University, France)
-
Saved in backend (not visible to user): LabId, laboratoryAffiliation, laboratoryRorId The purpose of these fields is to clearly identify the originating laboratory. The contents are mapped to
<nameIdentifier nameIdentifierScheme="labid">and<affiliation>in the DataCite scheme.- Data type: String
- Occurence: 1
- The corresponding field in the database where the values are saved are called:
labIdin the tableoriginating_laboratoryandnameandrorIdin the tableaffiliation - Restrictions: Fields are filled automatically with data provided by the vocabulary provider and maintainer
- Example values:
LabID
9cd562c216daa82792972a074a222c52, laboratoryAffiliationLudwig-Maximilians-University Munich, Munich, GermanylaboratoryRorIdhttps://ror.org/02e2c7k09
Contributor fields are optional. Only when one of the fields is filled the fields "Last Name", "First Name" and "Role" become mandatory . The contents of the fields are mapped to <contributor contributorType="ROLE"> with <contributorName nameType="Personal"> in the DataCite scheme.
-
This field contains the ORCID of the contributor (Open Researcher and Contributor ID).
- Data type: String
- Occurrence: 0-1
- The corresponding field in the database where the value is stored is called:
orcidin theContributor_Persontable - Restrictions: Must be in the format “xxxx-xxxx-xxxx-xxxx-xxxx”
- DataCite documentation
- Example values:
1452-9875-4521-7893,0082-4781-1312-884x
-
Last Name
This field contains the contributpr's surname.
- Data type: String
- Occurrence: 1, if a contributor person is specified
- The corresponding field in the database where the value is stored is called:
familynamein the tableContributor_Person - Restrictions: Only letters are allowed.
- DataCite documentation
- Example values:
Jemison,Smith
-
First Name
This field contains the contributpr's surname.
- Data type: String
- Occurrence: 1, if a contributor person is specified
- The corresponding field in the database where the value is stored is called:
givennamein the tableContributor_Person - Restrictions: Only letters are allowed
- DataCite documentation
- Example values:
John,Jane
-
Role
This field contains the role(s) of the contributor(s).
- Data type: String
- Occurrence: 1-10, if a contributor person is specified
- The corresponding field in the database where the value is stored is called:
namein theRoletable - Restrictions: must be selcted from controlled list
- DataCite documentation
- Example values:
Data Manager,Project Manager
-
This field contains the affiliation of the contributor(s).
- Data type: String
- Occurrence: 0-n
- The corresponding field in the database where the value is stored is called:
namein the tableAffiliation - Restrictions: None, can be selected from list
- DataCite documentation
- Example values:
Technische Universität Berlin,GFZ, Helmholtz-Zentrum Potsdam - Deutsches GeoForschungsZentrum GFZ- Note: As in all affiliation fields the ROR ID is saved, when an affiliation is chosen from the list
Contributor fields are optional. Only when one of the fields is filled the fields "Organisation Name" and "Role" become mandatory. The contents of the fields are mapped to <contributor contributorType="ROLE"> in the DataCite scheme with <contributorName nameType="Organizational">
-
Organisation Name
This field contains the name of the institution.
- Data type: String
- Occurrence: 1, if contributing organisation is specified
- The corresponding field in the database where the value is saved is called:
namein the tablecontributor_institution - Restrictions: None
- DataCite documentation
- Example values:
University of Applied Sciences Potsdam,Helmholtz Centre Potsdam - GFZ German Research Centre for Geosciences
-
Role
This field contains the role/roles of the institution.
- Data type: String
- Occurrence: 1-10
- The corresponding field in the database where the value is stored is called:
namein the tableRole - Restrictions: must be selected from controlled list
- DataCite documentation
- Example values:
Data Collector,Data Curator.
-
This field contains the affiliation of the contributing institution.
- Data type: String
- Occurrence: 0-n
- The corresponding field in the database where the value is stored is called:
namein theAffiliationtable - Restrictions: None, can be selected from list
- DataCite documentation
- Example values:
Education and Science Workers' Union,Institute of Science and Ethics - Note: As in all affiliation fields the ROR ID is saved, when an affiliation is chosen from the list
-
Abstract This field contains the abstract of the dataset. It is mapped to
<descriptions><description descriptionType="Abstract">in the DataCite scheme and to<identificationInfo><MD_DataIdentification><abstract>in the ISO scheme- Data type: String
- Occurence: 1
- The corresponding field in the database where the value is saved is called:
descriptionin the tabledescriptionwithtype=Abstract - Restrictions: None
- DataCite documentation
- Example value:
The dataset contains a subset of an airborne hyperspectral HyMap image over the Cabo de Gata-Nίjar Natural Park in Spain from 15.06.2005, and soil wet chemistry data based on in-situ soil sampling. The Cabo de Gata-Nίjar Natural Park is a semi-arid mediterranean area in Southern Spain, sparsely populated and with a range of landscape patterns.
-
Methods This field contains the The methodology employed for the study or research. It is mapped to
<descriptions><description descriptionType="Methods">in the DataCite scheme.- Data type: String
- Occurence: 0-1
- The corresponding field in the database where the value is saved is called:
descriptionin the tabledescriptionwithtype = Methods - Restrictions: None
- DataCite documentation
- Example value:
Graphical representation of the steps used to reconstruct sequence alignments of the Nudix superfamily, as described in the Materials and Methods section. (A) The pipeline to build the 78-PDB structure guided sequence alignment. (B) The pipeline to build the 324-core sequence alignment guided by the 78-PDB sequence alignment. (C) The pipeline to build the alignment of the complete Nudix clan (38,950 sequences). (D) Illustration of how to combine two alignment into one guided by a scaffold alignment.
-
TechnicalInfo This field contains detailed information that may be associated with design, implementation, operation, use, and/or maintenance of a process, system, or instrument. It is mapped to
<descriptions><description descriptionType="TechnicalInfo">in the DataCite scheme.- Data type: String
- Occurence: 0-1
- The corresponding field in the database where the value is saved is called:
descriptionin the tabledescriptionwithtype = Technical Information - Restrictions: None
- DataCite documentation
- Example value:
Scripts written and run using Wolfram Mathematica (confirmed with versions 10.2 to 11.1). Assumes raw data matches format produced by a LTQ Orbitrap Velos mass spectrometer and exported by the proprietary software (Xcalibur) to a comma-separated values (.csv) file. The .csv files are the expected input into the Mathematica scripts.
-
Other Other description information that does not fit into an existing category. Content of the field is mapped to
<descriptions><description descriptionType="Other">in the DataCite scheme.- Data type: String
- Occurence: 0-1
- The corresponding field in the database where the value is saved is called:
descriptionin the tabledescriptionwithtype = Other - Restrictions: None
- DataCite documentation
- Example value:
This is the description of a data set that does not fit into the categories of abstract, methods or technical information, but is nevertheless extremely necessary.
Contents from the keyword fields "EPOS Multi-Scale Laboratories Keywords", "GCMD Science Keywords" and "Free Keywords" are mapped to <subject> in the DataCite 4.5 scheme and to <descriptiveKeywords> <MD_Keywords> <keyword> in the ISO scheme.
Keywords from the EPOS Multi-Scale Laboratories vocabularies are provided by Utrecht University on GitHub. Vocabulary can be updated from the repository via API (see API Documentation).
-
EPOS Multi-Scale Laboratories Keyword
This field contains keywords to describe the content of the resource.
- Data type: String
- Occurrence: 0-n
- The corresponding field in the database is called:
keywordin the tablethesaurus_keywords - Restrictions: Controlled vocabulary
- DataCite documentation
- Example values:
Material > minerals > chemical elements > selenium,Geochemistry > measured property > selenium
-
Saved in backend (not visible to user): scheme, schemeURI, valueURI und language
The purpose of these fields is to clearly identify the keyword.
- Data type: String
- Occurence: 1 for controlled (thesaurus) keywords
- The corresponding field in the database where the value is saved is called:
scheme,schemeURI,valueURIandlanguagein the tablethesaurus_keywords - Restrictions: fields are filled automatically with data provided by the vocabulary provider and maintainer
- DataCite documentation
- Example values:
scheme
https://epos-msl.uu.nl/voc/materials/1.3/, schemeURIhttps://epos-msl.uu.nl/voc/materials/1.3/, valueURIhttps://epos-msl.uu.nl/voc/materials/1.3/minerals-chemical_elements-selenium, languageen
Keywords from the GCMD vocabulary. GCMD Science Keywords, GCMD Platforms, and GCMD Instruments are available for selection. Can be updated from NASA's GCMD repository via API (see API documentation)
-
GCMD Science Keyword
This field contains keywords to describe the content of the resource.
- Data type: String
- Occurrence: 0-n
- The corresponding field in the database is called:
keywordin the tablethesaurus_keywords - Restrictions: Terms can be selected from controlled list
- DataCite documentation
- Example Values:
Science Keywords > EARTH SCIENCE > OCEANS > SEA ICE > SEA ICE VOLUME,Science Keywords > EARTH SCIENCE > TERRESTRIAL HYDROSPHERE > WATER QUALITY/WATER CHEMISTRY > CONTAMINANTS > SELENIUM
-
Saved in backend (not visible to user): scheme, schemeURI, valueURI, language
The purpose of these fields is to clearly identify the keyword.
- Data type: String
- Occurence: 1 for controlled (thesaurus) keywords
- The corresponding field in the database where the value is saved is called:
scheme,schemeURI,valueURIandlanguagein the tablethesaurus_keywords - Restrictions: fields are filled automatically with data provided by the vocabulary provider and maintainer
- DataCite documentation
- Example values:
scheme
NASA/GCMD Earth Science Keywords, schemeURIhttps://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/sciencekeywords", valueURIhttps://gcmd.earthdata.nasa.gov/kms/concept/b2318fb3-788c-4f36-a1d1-36670d2da747", languageen
-
GCMD Platforms
This field contains keywords to describe the content of the resource.
- Data type: String
- Occurrence: 0-n
- The corresponding field in the database is called:
keywordin the tablethesaurus_keywords - Restrictions: Terms can be selected from controlled list
- DataCite documentation
- Example Values:
Platforms > Air-based Platforms > Dropwindsondes > DROPWINDSONDES
-
Saved in backend (not visible to user): scheme, schemeURI, valueURI, language
The purpose of these fields is to clearly identify the keyword.
- Data type: String
- Occurence: 1 for controlled (thesaurus) keywords
- The corresponding field in the database where the value is saved is called:
scheme,schemeURI,valueURIandlanguagein the tablethesaurus_keywords - Restrictions: fields are filled automatically with data provided by the vocabulary provider and maintainer
- DataCite documentation
- Example values:
scheme
NASA/GCMD Platforms Keywords, schemeURIhttps://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/platforms, valueURIhttps://gcmd.earthdata.nasa.gov/kms/concept/fa514134-ff56-47d1-bc02-6b8568ad21e7, languageen
-
GCMD Instruments
This field contains keywords to describe the content of the resource.
- Data type: String
- Occurrence: 0-n
- The corresponding field in the database is called:
keywordin the tablethesaurus_keywords - Restrictions: Terms can be selected from controlled list
- DataCite documentation
- Example Values:
Instruments > Solar/Space Observing Instruments > Photon/Optical Detectors > Charged Coupled Devices > K-LINE CCD/SOLAR OSCILLATIONS
-
Saved in backend (not visible to user): scheme, schemeURI, valueURI, language
The purpose of these fields is to clearly identify the keyword.
- Data type: String
- Occurence: 1 for controlled (thesaurus) keywords
- The corresponding field in the database where the value is saved is called:
scheme,schemeURI,valueURIandlanguagein the tablethesaurus_keywords - Restrictions: fields are filled automatically with data provided by the vocabulary provider and maintainer
- DataCite documentation
- Example values:
scheme
NASA/GCMD Instruments, schemeURIhttps://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/instruments, valueURIhttps://gcmd.earthdata.nasa.gov/kms/concept/657ac23c-4ee8-400c-bd41-165dfd3845f5, languageen
- Free Keyword
This field contains free keywords that are not part of a thesaurus.
- Data type: String
- Occurrence: 0-n
- The corresponding field in the database where the value is saved is called:
free_keywordin the tablefree_keywords - Restrictions: Dublicates are not allowed
- DataCite documentation
- Example values:
Seismic tremor,Acoustic Emission
In the DataCite scheme: All field data are mapped to <dates>, with dateType dateType="Available"> for the Embargo and dateType="Created" for the Date created.
In the ISO scheme: The data from Date created are mapped to <date>, while Embargo until are mapped to <gml:endPosition>.
-
Date created
This field contains the date the resource itself was put together; this could refer to a timeframe in ancient history, a date range, or a single date for a final component, e.g., the finalized file with all the data.
- Data type: Date
- Occurrence: 1
- The corresponding field in the database where the value is stored is called:
dateCreatedin theresourcetable - Restrictions: This field must be a valid calendar date
- DataCite documentation
- Example values:
2024-06-051999-04-07
-
Embargo until
This field contains the date the resource is made publicly available, marking the end of an embargo period.
- Data typ: Date
- Occurrence: 0-1
- The corresponding field in the database where the value is stored is called:
dateEmbargoUntilin theresourcetable - Restrictions: This field must be a valid calendar date
- DataCite documentation
- Example values:
2024-06-152000-12-31
Spatial and temporal coverage specifies the geographic region and time frame that the dataset encompasses, providing essential context for its relevance and applicability.
In the DataCite scheme: The data from Latitude, Longitude and Description are mapped to <geoLocations>, while Start Date/Time and End Date/Time are mapped to <date dateType="Collected">.
In the ISO scheme: All field data are mapped to <EX_Extent>. Spatial data (coordinates) are mapped to <EX_GeographicBoundingBox>, while temporal data (dates/times) are mapped to <EX_TemporalExtent><gml:TimePeriod> with a valid gml:id attribute (format: timePeriod-{id}). Occurency of spatial and temporal coverage is 0-n.
-
Latitude Min
This field contains the geographic latitude of a single coordinate or the smaller geographic latitude of a rectangle.
- Data type: Floating-point number
- Occurrence: 0-1
- The corresponding field in the database where the value is stored is called: latitudeMin in the spatial_temporal_coverage table
- Restrictions: Only positive and negative numbers in the value range from -90 to +90
- DataCite documentation
- Example values:
52.0317983498743-3.234
-
Latitude Max
This field contains the larger geographic latitude of a rectangle.
- Data type: Floating-point number
- Occurrence: 0-1, becomes mandatory if Longitude Max is filled
- The corresponding field in the database where the value is stored is called: latitudeMax in the spatial_temporal_coverage table
- Restrictions: Only positive and negative numbers in the value range from -90 to +90
- DataCite documentation
- Example values:
49.72437624376-32.82438824398
-
Longitude Min
This field contains the geographic longitude of a single coordinate or the smaller geographic longitude of a rectangle.
- Data type: Floating-point number
- Occurrence: 0-1
- The corresponding field in the database where the value is stored is called: longitudeMin in the spatial_temporal_coverage table
- Restrictions: Only positive and negative numbers in the value range from -180 to +180
- DataCite documentation
- Example values:
108.0317983498743-3.04
-
Longitude Max
This field contains the larger geographic longitude of a rectangle.
- Data type: Floating-point number
- Occurrence: 0-1, becomes mandatory if Latitude Max is filled
- The corresponding field in the database where the value is stored is called: longitudeMax in the spatial_temporal_coverage table
- Restrictions: Only positive and negative numbers in the value range from -180 to +180
- DataCite documentation
- Example values:
99.037543735498743-6.4
-
Description
This field contains a free-text explanation of the geographic and temporal context.
- Data type: Free text
- Occurrence: 0-1
- The corresponding field in the database where the value is stored is called: description in the spatial_temporal_coverage table
- Restrictions: none
- DataCite documentation
- Example values:
Several boreholes at regular intervals distributed over the entire surface.
-
Start Date
This field contains the starting date of the temporal classification of the dataset.
- Data type: DATE
- Occurrence: 0-1
- The corresponding field in the database where the value is stored is called: dateStart in the spatial_temporal_coverage table
- Restrictions: YYYY-MM-DD
- DataCite documentation
- Example values:
2024-01-021999-08-07
-
Start Time
This field contains the starting time.
- Data type: TIME
- Occurrence: 0-1, optional. If provided, both Start Time and End Time as well as Timezone become mandatory.
- The corresponding field in the database where the value is stored is called: timeStart in the spatial_temporal_coverage table
- Restrictions: hh:mm:ss
- DataCite documentation
- Example values:
10:43:5004:00:00
-
End Date
This field contains the ending date of the temporal classification of the dataset.
- Data type: DATE
- Occurrence: 0-1
- The corresponding field in the database where the value is stored is called: dateEnd in the spatial_temporal_coverage table
- Restrictions: YYYY-MM-DD
- DataCite documentation
- Example values:
1998-01-022001-07-08
-
End Time
This field contains the ending time.
- Data type: TIME
- Occurrence: 0-1, optional. If provided, both Start Time and End Time as well as Timezone become mandatory.
- The corresponding field in the database where the value is stored is called: timeEnd in the spatial_temporal_coverage table
- Restrictions: hh:mm:ss
- DataCite documentation
- Example values:
11:34:5609:00:00
-
Timezone
This field contains the timezone of the start and end times specified. All possible timezones are regularly updated via the API using the getTimezones method if a CronJob is configured on the server. Important: The API key for timezonedb.com must be specified in the settings to enable automatic updates!
- Data type: String
- Occurrence: 0-1, mandatory only when Start Time or End Time is provided.
- The corresponding field in the database where the value is stored is called: timezone in the spatial_temporal_coverage table
- Restrictions: Only values from the list are permitted
- ISO documentation
- Example values:
+02:00-08:00
This is mapped to <relatedIdentifier> in the DataCite scheme and to <gmd:aggregationInfo> in the ISO scheme (not yet implemented). The element is optional in both schemes.
-
Relation
This field contains the type of relation.
- Data type: String
- Occurrence: 1, if relatedIdentifier is <0
- The corresponding field in the database where the value is saved is called:
relation_fkin theRelated_Worktable - Restrictions: A relation type must be selected, if related work is specified
- Relations can be chosen from a controlled List: DataCite documentation
- Example values:
IsCitedByIsSupplementToIsContinuedBy
-
Identifier
- This field contains the identifier
- Data type: String
- Occurrence: 1, if relatedIdentifier is <0
- The corresponding field in the database where the value is stored is called:
Identifierin theRelated_Worktable - Restrictions: Must be specified, if related work specified
- DataCite documentation
- Example values:
13030/tqb3kh97gh8w,0706.0001,10.26022/IEDA/112263
-
Identifier Type
- This field contains the type of the relatedIdentifier.
- Data type: String
- Occurrence: 0-1
- The corresponding field in the database where the value is stored is called:
identifier_type_fkin theRelated_Worktable - if possible, the Identifier Type is automatically selected based on the structure of Identifier (see
function updateIdentifierType) - Restrictions: Must be selected, if related work is specified
- must be chosen from a controlled List: DataCite documentation
- Example values:
ARKarXivEAN13
This element is optional in the DataCite scheme. However, it is a best practice to supply funding information when financial support has been received.
-
Funder
Name of the funding provider.
- Data type: String
- Occurence: 0-1, if Funding Reference is specified, then funderName is mandatory.
- The corresponding field in the database where the value is stored is called:
funderin theFunding_Referencetable - Restrictions: Selection from CrossRef funders list is possible, as well as free text
- DataCite documentation
- Example values:
Gordon and Betty Moore Foundation,Ford Foundation
-
Saved in backend (not visible to user): funderId
Uniquely identifies a funding entity, using Crossrefs' Funder Registry
- Data type: String
- Occurence: 0-1
- The corresponding field in the database where the value is stored is called:
funderidin theFunding_Referencetable - Restrictions: is automatically saved, if a funder is selected from the dropdown list
- DataCite documentation
- Example values:
http://dx.doi.org/10.13039/100001214
-
Saved in backend (not visible to user): funderidtyp
The type of the funderIdentifier. Is either NULL or "Crossref Funder ID"
- Data type: String
- Occurence: 0-1
- The corresponding field in the database where the value is stored is called:
funderidtypin theFunding_Referencetable - Restrictions: can only be "Crossref Funder ID" (if a funder is selected from the dropdown list) or null
- DataCite documentation
- Value:
Crossref Funder ID
-
Grant Number
The code assigned by the funder to a sponsored award (grant).
- Data type: String
- Occurence: 0-1
- The corresponding field in the database where the value is stored is called:
grantnumberin theFunding_Referencetable - Restrictions: None
- DataCite documentation
- Example values:
GBMF3859.01GBMF3859.22
-
Grant Name
The human readable title or name of the award (grant).
- Data type: String
- Occurence: 0-1
- The corresponding field in the database where the value is stored is called:
grantnamein theFunding_Referencetable - Restrictions: None
- DataCite documentation
- Example values:
Socioenvironmental Monitoring of the Amazon Basin and Xingu,Grantmaking at a glance
-
Award URI
A resolvable link to information about the award or grant.
- Data type: String
- Occurence: 0-1
- The corresponding field in the database where the value is stored is called:
awarduriin theFunding_Referencetable - Restrictions: None
- DataCite documentation
- Example values:
https://www.moore.org/grants/list/GBMF3859.01,[Grantmaking at a glance](https://doi.org/10.35802/221400)
Viable for the implementation for the ICGEM platform. This form group collects the essential characteristics of a Global Geopotential Model (GGM). Essential are understood as one formgroup containing the most general information about a model being published. This formgroup is the first of multiple groups. These formgroups are developed as an adaptation of ELMO for publications of the Global Gravitational Models. Hence, if any field in this group is filled, all the fields become required.
-
Model Type
The type of gravity field model being described.
- Data type: String
- Occurrence: 1
- The corresponding field in the database is described in the dedicated
Model_Typetable with id, name and description - Restrictions: Must be selected from a controlled list
- Example values:
Static,Temporal - Mapping: mapped to
<modelType>in the XML export
-
Mathematical Representation
The set of functions used to express the gravitational potential, which are solutions of Laplace’s equation in a given coordinate system. The coordi-nate system determines the type of harmonics — spherical or ellipsoidal — and thus defines the mathematical form of the model.
- Data type: String
- Occurrence: 1
- The corresponding field in the database is described in the dedicated
Mathematical_Representationtable with id, name and description - Restrictions: Must be selected from a controlled list
- Example values:
Spherical harmonics,Ellipsoidal harmonics - Mapping: mapped to
<mathematicalRepresentation>in the XML export
-
Celestial Body
The planetary body for which the gravity field model is computed.
- Data type: String
- Occurrence: 0-1
- The corresponding field in the database is called:
Celestial_Bodyin theGGM_Propertiestable - Restrictions: Must be selected from a controlled list
- Example values:
Earth,Moon of the Earth,Mars,Ceres,Venus,Other - Mapping: mapped to
<celestialBody>in the XML export
-
File Format
The file format following ICGEM standards, that is used for the model data.
- Data type: String
- Occurrence: 0-1
- The corresponding field in the database is described in the dedicated
File_Formattable with id, name and description - Restrictions: Must be selected from a controlled list (populated from the ICGEM format database)
- Example values:
icgem1.0,icgem2.0 - Mapping: mapped to
<fileFormat>in the XML export
-
Model Name
The unique identifier for the gravity field model.
- Data type: String
- Occurrence: 1
- The corresponding field in the database is called:
Model_Namein theGGM_Propertiestable - Restrictions: No spaces allowed; must be unique
- Example values:
EIGEN-6C4,GOCO06s,GGM05G - Mapping: mapped to
<modelName>in the XML export
-
Product Type
Specifies the type of gravity field product.
- Data type: String
- Occurrence: 0-1
- The corresponding field in the database is called:
Product_Typein theGGM_Propertiestable - Restrictions: Must be selected from a controlled list
- Example values:
Gravity Field,Topographic Gravity Field - Mapping: mapped to
<productType>in the XML export
The following table gives a quick overview on the occurences of the form fields in comparison to the occurences of the corresponding DataCite metadata as described in the [DataCite 4.5 documentation](https://datacite-metadata-schema.readthedocs.io/en/4.5/properties/). Input fields visable to the user are marked **bold** in the table whereas hidden fields are in *italics*.
| Form group | Input Field | Occurence in ELMO | Occurence in DataCite metadata scheme | Mapped to in DataCite |
|---|---|---|---|---|
| Resource Information | ||||
| DOI | 0-1 | 1 | <identifier> with <identifier identifierType="DOI"> |
|
| Publication Year | 1 | 1 | <publicationYear> |
|
| Resource Type | 1 | 1 | <resourceType> as well as <resourceTypeGeneral> |
|
| Version | 0-1 | 0-1 | <version> |
|
| Language of Dataset | 1 | 0-1 | <language> |
|
| Title | 1-n (n=$maxTitles in settings.php) | 1-n | <title> |
|
| Title Type | 1 (if corresponding title ≠ main title) | 0-1 | <titleType> |
|
| Licenses & Rights | ||||
| Rights Title | 1 | 0-n | <rights> |
|
| rightsURI | 1 | 0-1 | <rights rightsURI="..."> |
|
| Author(s) | 1-n | 1-n | <creators> |
|
| Last Name | 1 | 1 | <creator><creatorName><familyName> |
|
| First Name | 1 | 1 | <creator><creatorName><givenName> |
|
| Author ORCID | 0-1 | 0-n | <nameIdentifier schemeURI="https://orcid.org/" nameIdentifierScheme="ORCID"> |
|
| Affiliation | 0-n | 0-n | <creator><creatorName><affiliation> |
|
| rorID | 0-1 | 0-1 | <creator><creatorName><affiliation> long: <affiliation affiliationIdentifier="https://ror.org/XXXXXXXXX" affiliationIdentifierScheme="ROR" schemeURI="https://ror.org"> |
|
| Contact Person(s) | 0-n | 0-n | <contributor contributorType="Contact Person"> |
|
| Last Name | 1 | 0-1 | <contributorName><familyName> |
|
| First Name | 1 | 0-1 | <contributorName><givenName> |
|
| Position | 0-1 | -- | -- | |
| Email adress | 1 | -- | -- | |
| Website | 0-1 | -- | -- | |
| Affiliation | 0-n | 0-n | <contributor><affiliation> |
|
| rorID | 0-1 | 0-1 | <contributor><contributorName><affiliation> |
|
| Originating Laboratory | 0-n | 0-n | <contributor contributorType="HostingInstitution"><contributorName> |
|
| LabID | 1 | 1 | <nameIdentifier nameIdentifierScheme="labid"> |
|
| laboratoryAffiliation | 1 | 0-n | <affiliation> |
|
| Contributors (Person) | 0-n | 0-n | <contributor nameType="Personal"> |
|
| ORCID | 0-1 | 1 | <nameIdentifier> |
|
| Last Name | 1 | 0-1 | <familyName> |
|
| First Name | 1 | 0-1 | <givenName> |
|
| Role | 1-10 | 1 | <contributorType> |
|
| Affiliation | 0-n | 0-n | <affiliation> |
|
| rorID | 0-1 | 0-1 | <affiliation affiliationIdentifierScheme="ROR" schemeURI="https://ror.org" affiliationIdentifier="https://ror.org/*rorID*"> |
|
| Contributors (Institution) | 0-n | 0-n | <contributor nameType="Organizational"> |
|
| Organisation Name | 1 | 1 | <contributorName> |
|
| Role | 1-10 | 1 | <contributorType> |
|
| Affiliation | 0-n | 0-n | <affiliation> |
|
| rorID | 0-1 | 0-1 | <contributor><contributorName><affiliation> |
|
| Descriptions | <descriptions> |
|||
| Abstract | 1 | 0-n | <description descriptionType="Abstract"> |
|
| Methods | 0-1 | 0-n | <description descriptionType="Methods"> |
|
| TechnicalInfo | 0-1 | 0-n | <description descriptionType="TechnicalInfo"> |
|
| Other | 0-1 | 0-n | <description descriptionType="Other"> |
|
| Keywords | <subjects> |
|||
| EPOS Multi-Scale Laboratories Keyword | 0-n | 0-n | <subject> |
|
| scheme | 1 | 0-1 | <subject subjectScheme="https://epos-msl.uu.nl/voc/paleomagnetism/1.3/"> |
|
| schemeURI | 1 | 0-1 | <subject schemeURI="https://epos-msl.uu.nl/voc/paleomagnetism/1.3/"> |
|
| valueURI | 1 | 0-1 | <subject valueURI="..."> |
|
| language | 1 | -- | <subject xml:lang="en"> |
|
| GCMD Science Keywords | 0-n | 0-n | <subject> |
|
| scheme | 1 | 0-1 | <subjectScheme="NASA/GCMD Earth Science Keywords"> |
|
| schemeURI | 1 | 0-1 | <subject schemeURI="https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/sciencekeywords"> |
|
| valueURI | 1 | 0-1 | <subject valueURI="..."> |
|
| language | 1 | -- | <subject xml:lang> |
|
| Free Keyword | 0-n | 0-n | <subject> |
|
| Dates | <date> |
|||
| Date created | 1 | 0-n | <date dateType="Created"> |
|
| Embargo until | 0-1 | 0-n | <date dateType="Available"> |
|
| Spatial Coverage | 0-n | 0-n | <geoLocation><geoLocationPoint> or <geoLocation><geoLocationBox> |
|
| Latitude Min | 1 | 1 | <pointLatitude> |
|
| Longitude Min | 1 | 1 | <pointLongitude> |
|
| Latitude Min | 1 | 1 | <southBoundLatitude> |
|
| Latitude Max | 1 | 1 | <northBoundLatitude> |
|
| Longitude Min | 1 | 1 | <westBoundLongitude> |
|
| Longitude Max | 1 | 1 | <eastBoundLongitudens> |
|
| Description | 1 | 1 | <geoLocationPlace> |
|
| Temporal Coverage | 0-n | 0-n | <date> |
|
| Start Date | 1 | 1 | <date dateType="Collected"> |
|
| Start Time | 0-1 | 1 | <date dateType "Collected"> |
|
| End Date | 1 | 1 | <date dateType="Collected"> |
|
| End Time | 0-1 | 1 | <date dateType="Collected"> |
|
| Timezone | 0-1 | 1 | <date dateType="Collected"> |
|
| Related Work | 0-n | 0-n | ||
| Relation | 1 | 1 | <relationType> |
|
| Identifier | 1 | 0-n | <relatedIdentifier> |
|
| Identifier Type | 1 | 1 | <relatedIdentifier relatedIdentifiertype> |
|
| Funding Reference | 0-n | 0-n | <fundingReferences> |
|
| Funder | 1 | 0-n | <funderName> |
|
| funderId | 0-1 | 0-1 | <funderIdentifier> |
|
| funderidtyp | 0-1 | 1 | <funderIdentifier funderIdentifierType> |
|
| schemeURI | 0-1 | 0-1 | <funderIdentifier schemeURI> |
|
| Grant Number | 0-1 | 0-1 | <awardNumber> |
|
| Grant Name | 0-1 | 0-1 | <awardTitle> |
|
| Award URI | 0-1 | 0-1 | <awardNumber awardURI="..."> |
|
| GGMs Properties (Essential) | 1 | 0 | not mapped | |
| Model Type | 1 | 0 | not mapped | |
| Mathematical Representation | 1 | 0 | not mapped | |
| Celestial Body | 0-1 | 0 | not mapped | |
| File Format | 0-1 | 0 | not mapped | |
| Model Name | 1 | 0 | not mapped | |
| Product Type | 0-1 | 0 | not mapped |
The metadata editor has some mandatory fields which are necessary for the submission of data. These include the following fields:
- Publication Year, Resource Type, Language of dataset, Title, Title Type(not for the first (main) title!), Author Lastname, Author Firstname,Contact Person Lastname, Contact Person Firstname, Contact Person Email address, Descriptions Abstract, Date created, Min Latitude, Min Longitude, STC Description, STC Date Start, STC Date End und STC Timezone.❗
The other fields are optional and are used to further enrich the data set with metadata. The following fields are optional:
- DOI, Version, Rights, Author ORCID, Author Affiliation, Contact Person Website, Contact Person Affiliation, Contributor ORCID, Contributor Role, Contributor Lastname, Contributor Firstname, Contributor Affiliation, Contributor Organisation Name, Contributor Organisation Role, Contributor Organisation Affiliation, Description Methods, Description TechnicalInfo, Description Other, Thesaurus Keywords, MSL Keywords, Free Keywords, STC Max Latitude, STC Max Longitude, STC Time Start, STC Time End, Related work all fields and Funding Reference all fields.✅
In certain cases, some subfields within a formgroup become mandatory. This affects the following fields:
Formgroup Contributors:
- Contributor Role, Contributor Lastname and Contributor Firstname become mandatory, if one of the Contributor Person fields is filled in
- Contributor Organisation Name and Contributor Organisation Role become mandatory, if one of the Contributor Organisation fields is filled in (this includes Contributor Organisation Affiliation)
Formgroup Spatial and Temporal Coverages:
- Per default, no specification of any fields is required here when leaving all fields empty. Filling in any of the optional fields results in a change of mandatory fields.
- Min Latitude, Min Longitude, Description, Date Start, Date End and Timezone will become mandatory, if only one field of the formgroup gets filled in
- Max Latitude becomes mandatory, if Max Longitude is filled in and vice versa
- Time Start becomes mandatory, if Time End is filled in and vice versa
Formgroup Related works:
- Related work all Fields becomes mandatory fields, if one of the fields is filled in Formgroup Funding Reference:
- Funder becomes mandatory, if Grant Number or Grant Name are specified
As for the ICGEM implementation, more required variables are added to ensure a full description of a Global Gravitational Model:
- Model Type, Mathematical Representation, Model Name
Meanwhile these variables from required list are not required to publish a GGM:
- Resource Type (can be mapped to Model), Spatio-temporal Coverage (can be mapped to global coverage)
The following ER diagram shows the relationships and structures of the tables in the database.
We appreciate every contribution to this project! You can use the feedback back form on the test server [link], create an issue on github or contribute directly: If you have an idea, improvement, or bug fix, please create a new branch and open a pull request (PR). We have prepared a pull request template (only available in german right now!), so we kindly ask you to use it when submitting your changes. This helps ensure we have all the necessary information to review and merge your contribution smoothly.
Note
In order to run the tests, the dependencies must first be loaded via composer install and npm install.
ELMO's test suite uses a two-tier database user setup:
- Bootstrap (root): Creates the test database and grants privileges
- Execution (elmo user): All tests run with the unprivileged
elmouser
ELMO's test suite uses different database user credentials depending on the execution environment (local Docker or CI/CD):
- Local Development (Docker): Uses
rootuser to set up the test database, then switches to theelmouser for actual test execution. - CI/CD Environment (GitHub Actions/GitLab): Uses a pre-configured
test_useraccount with restricted privileges.
This two-tier approach ensures:
- Test isolation: Each test suite gets a fresh database schema
- User privilege separation: Tests always run with limited user permissions (not root)
- CI/CD compatibility: Different environments can have different user setup strategies
When running tests locally in Docker, the tests/DatabaseTestCase.php base class handles the following:
1. Environment Variable Loading
- The
.envfile is automatically parsed and loaded at test startup - This ensures database credentials (
DB_USER,DB_PASSWORD,DB_HOST,ROOT_PASSWORD) are available viagetenv()
2. Root Connection (Bootstrapping Only) Root user connects → Creates test database → Grants privileges to elmo user (or whichever credentials are included into you .env) → Closes root connection
In GitHub Actions or GitLab CI, the tests/DatabaseTestCase.php detects the CI or GITHUB_ACTIONS environment variable and uses a different strategy:
1. Pre-configured Test User
- Username:
test_user(hardcoded in test code) - Password:
test_password(hardcoded in test code) - Host:
127.0.0.1(local CI runner) - This user is configured in the CI environment and already has all necessary privileges
2. Database Creation
- The test user can directly create databases and select them
- No root user interaction required
Enter the Docker container and run tests:
docker exec -it web bash
composer test -- --filter SaveAuthorsTest
- `composer run test` runs the tests in `tests/`
- `npm test` runs the JavaScript tests in `tests/js/`
