Skip to main content
Version: 2.x (upcoming)

RDA maDMP JSON Transformer — Semantics Reference

The RDA JSON file transformer exports plans and their assets to JSON files that conform to the RDA DMP Common Standard v1.2.

At export time the transformer walks the plan and every asset attached to it. For each RDA output field, it looks up the first field whose semantic tag matches the expected value and writes that field's value to the JSON. If no matching field is found, the transformer falls back to a platform default where possible, or leaves the RDA field out.

To populate an RDA JSON field, assign the semantic listed below to the blueprint or asset-template field that holds the value.

info

Assigning a semantic to a field does not change how the platform stores or validates that field. It tells plugins, such as this transformer, how to interpret the field. See the Semantics admin guide for how to assign semantics.

How the transformer resolves fields​

The transformer reads values from two places:

  • Plan blueprint fields contribute to top-level dmp.* properties. The transformer scans all blueprint sections and picks the first field whose semantics contains the expected value.
  • Asset template fields contribute to entries in dmp.dataset[] and can also augment top-level dmp.* properties (for example, assets may supply additional alternate_identifier, cost, related_identifier, contributor, project, affiliation, or ethical_issues_* entries on the DMP).

Grouped RDA structures (dmp.project.funding, dmp.dataset.distribution, dmp.dataset.creator, dmp.dataset.contributor, dmp.dataset.metadata, dmp.dataset.distribution.host, and others) are built from answers. Which answers make up one object depends on the objects set on sections and questions:

  • Without an object, each answer to a question (each item of a repeating question) produces its own RDA entry.
  • In a section described as an object (for example rda.dataset.distribution), all the section's questions about that object produce one entry together. The outermost section that describes the object counts.
  • In a question described as an object (for example rda.dataset.distribution.license), each answer produces one entry inside the object around it.

Answer options that stand for key values are read as if inputs with those keys had been answered; an input answered explicitly wins over the option. An option marked Exports nothing leaves the object out.

Example: a distribution from a few plain questions​

A "Data sharing" section described as rda.dataset.distribution contains:

QuestionObjectInput semantics
Where will the data be deposited?rda.dataset.distribution.hostA radio input whose options stand for …host.title, …host.url, and …host.pid_system
Who can access the data?—rda.dataset.distribution.data_access
Which licences apply? (repeating)rda.dataset.distribution.license…license.license_ref, …license.start_date

The export writes one distribution with its host, its access level, and one licence per answer to the licence question.

Organisation settings​

Organisation administrators set these on the transformer's Settings tab (see Plugins). An empty setting uses the default.

SettingGroupWhat it doesDefault
GrantsReference typesThe reference type whose references are exported as the plan's grants.grants
FundersReference typesThe reference type whose references are exported as the plan's funders.funders
ProjectsReference typesThe reference type whose references are exported as the plan's projects.projects
ResearchersReference typesThe reference type whose references are exported as the plan's contributors.researchers
Repository of the plan identifierIdentifiersOnce the plan is deposited there, the DOI from this repository becomes the plan's identifier. Use the repository's id as listed on the Plugins page, for example zenodo (case does not matter).Zenodo

The installation sets the reference type defaults with the RDA_FILE_TRANSFORMER_GRANTS_CODE, RDA_FILE_TRANSFORMER_FUNDERS_CODE, RDA_FILE_TRANSFORMER_PROJECTS_CODE, and RDA_FILE_TRANSFORMER_RESEARCHERS_CODE environment variables.

dmp — top-level plan metadata​

Assign these semantics to fields in the plan blueprint.

Identity and timestamps​

RDA JSON fieldSemanticSource / fallback
dmp.dmp_id.identifierrda.dmp.dmp_id or rda.dmp.dmp_id.identifierThe DOI the plan received from the repository set in Repository of the plan identifier (Zenodo by default) comes first. Otherwise the answered identifier is used, and without one the plan's internal UUID.
dmp.dmp_id.typerda.dmp.dmp_id.typedoi for a deposited DOI. An answered type is used with rda.dmp.dmp_id.identifier. With rda.dmp.dmp_id, or without an answered type, the type is inferred: doi for a DOI (bare, doi:, or doi.org), url for another web address, otherwise other. The internal UUID is typed other.
dmp.titlerda.dmp.titleFalls back to the plan's title.
dmp.descriptionrda.dmp.descriptionFalls back to the plan's description.
dmp.createdrda.dmp.createdAn ISO date-time, or a date read as midnight UTC. Falls back to the date the plan was created.
dmp.modifiedrda.dmp.modifiedAn ISO date-time, or a date read as midnight UTC. Falls back to the date the plan was last changed.
dmp.languagerda.dmp.languageA two-letter code, mapped to ISO 639-3 through the transformer's language map; a code the map does not hold is skipped. Falls back to the plan's language, then to eng.

Contact​

RDA JSON fieldSemanticNotes
dmp.contact.namerda.dmp.contact.nameFalls back to the first and last name of the first contact in the blueprint's built-in Contact field, then to the plan creator's name.
dmp.contact.mboxrda.dmp.contact.mboxSame fallback: the Contact field, then the plan creator.
dmp.contact.contact_id.identifierrda.dmp.contact.contact_id.identifierFalls back to an internal id of the plan creator's email address.
dmp.contact.contact_id.typerda.dmp.contact.contact_id.typeWhen no type is answered, it is inferred from the identifier: orcid for an ORCID (bare or as an orcid.org address), url for another web address, otherwise other.
dmp.contact.affiliation[].namerda.dmp.contact.affiliation.name
dmp.contact.affiliation[].affiliation_id.identifierrda.dmp.contact.affiliation.affiliation_id.identifier
dmp.contact.affiliation[].affiliation_id.typerda.dmp.contact.affiliation.affiliation_id.type

The contact's affiliation is written only when its identifier or identifier type is answered. When the plan has no creator, its first owner with an email address stands in for the creator.

Contributors​

dmp.contributor[] is built from:

  • Plan references of the type set in Researchers (researchers by default). Each reference gives a contributor with the reference's label as name, the reference type's name as role, the reference's primaryEmail field as mbox, and a contributor_id from the reference's value: an orcid: value becomes an https://orcid.org/ address typed orcid, another ORCID is typed orcid, another web address url, and anything else other. A reference picked in several blueprint fields is exported once.
  • The plan's members, one contributor per user, with the user id as contributor_id.identifier (typed other), the user's name, their email (if any), and their plan roles (for example Owner) as role. Members without a name are left out.
  • Blueprint fields carrying the rda.dmp.contributor.* semantics listed under Additions to dmp.* from asset templates, which asset templates can use as well. A contributor already listed under the same identifier is not added again; a contributor without an identifier is always added.

Ethical issues​

RDA JSON fieldSemantic
dmp.ethical_issues_existrda.dmp.ethical_issues_exist
dmp.ethical_issues_descriptionrda.dmp.ethical_issues_description
dmp.ethical_issues_reportrda.dmp.ethical_issues_report

dmp.ethical_issues_exist takes yes, no, or unknown; other answers are dropped. Without a valid blueprint answer it is unknown, and asset-template fields with the same semantics can then change it (see Additional ethical-issues values). A Yes/No input carrying this semantic (or rda.dataset.personal_data, rda.dataset.sensitive_data, or rda.dataset.distribution.host.support_versioning) is exported as yes or no.

Project and funding​

dmp.project[] is built from plan references first, of the types set in Projects, Grants, and Funders:

  • Each project reference becomes a project, with the reference's label as title and its description as description. start and end come from the reference's startDate and endDate fields.
  • When the plan has exactly one project, it gets the funding: with one funder, one funding entry per grant under that funder; otherwise one funding entry per funder, without grants. Several projects get no funding from references.
  • Without a project reference but with exactly one funder, each grant becomes a project named after the grant, funded by that funder and grant.
  • A funder's funder_id is the reference's value typed fundref, and a grant's grant_id is the reference's value typed other. A reference without a value uses its internal id, typed other.
  • A reference picked in several blueprint fields is exported once.

Blueprint fields and asset templates can then contribute further projects through the rda.dmp.project.* semantics listed under Additional projects on the DMP. A project is not added twice: two projects are the same when they share a project identifier, or have the same title and the same grants. Describe a blueprint section as rda.dmp.project so that its title, dates, and funding questions make up one project instead of one project each.

Cost​

RDA JSON fieldSemanticNotes
dmp.cost[].titlerda.dmp.cost.title
dmp.cost[].descriptionrda.dmp.cost.description
dmp.cost[].valuerda.dmp.cost.valueA number; other answers are dropped.
dmp.cost[].currency_coderda.dmp.cost.currency_codeAn ISO 4217 currency code; other answers are dropped.

A cost is written when any of its values is answered. Asset templates can add further cost entries with the same semantics (see the additional-costs table below).

RDA JSON fieldSemantic
dmp.related_identifier[].identifierrda.dmp.related_identifier.identifier
dmp.related_identifier[].metadata_schemerda.dmp.related_identifier.metadata_scheme
dmp.related_identifier[].relation_typerda.dmp.related_identifier.relation_type
dmp.related_identifier[].resource_typerda.dmp.related_identifier.resource_type
dmp.related_identifier[].scheme_typerda.dmp.related_identifier.scheme_type
dmp.related_identifier[].scheme_urirda.dmp.related_identifier.scheme_uri
dmp.related_identifier[].typerda.dmp.related_identifier.type
dmp.alternate_identifier[].identifierrda.dmp.alternate_identifier.identifier
dmp.alternate_identifier[].typerda.dmp.alternate_identifier.type

A related or alternate identifier is written when any of its values is answered. scheme_uri must be a valid URI; other answers are dropped.

Affiliations​

RDA JSON fieldSemantic
dmp.affiliation[].namerda.dmp.affiliation.name
dmp.affiliation[].affiliation_id.identifierrda.dmp.affiliation.affiliation_id or rda.dmp.affiliation.affiliation_id.identifier
dmp.affiliation[].affiliation_id.typerda.dmp.affiliation.affiliation_id.type

The RDA DMP Common Standard v1.2 has no affiliation on the DMP itself; the export adds it as an extra property. An affiliation is written when any of its values is answered. The plain rda.dmp.affiliation.affiliation_id key is read only from a question that also carries one of the other affiliation keys. Asset templates can add further affiliations with the same semantics.

dmp.dataset[] — asset-level metadata​

Each plan asset produces one entry in dmp.dataset[]. Assign these semantics to fields in the asset templates used by those assets.

Identity​

RDA JSON fieldSemanticNotes
dataset.titlerda.dataset.titleFalls back to the asset's title.
dataset.descriptionrda.dataset.descriptionFalls back to the asset's description.
dataset.languagerda.dataset.languageAn ISO 639-3 code; other answers are dropped. Falls back to the template's language (mapped through the language map), then to the plan's language.
dataset.typerda.dataset.typeDefaults to DMP Dataset.
dataset.issuedrda.dataset.issuedWritten as answered; a date input gives YYYY-MM-DD.
dataset.rightsrda.dataset.rightsWritten only when answered.
dataset.is_reusedrda.dataset.is_reusedtrue or yes is true and false or no is false, in any case, so Yes/No inputs, text, and Yes/No options all work. Other answers leave it out.
dataset.personal_datarda.dataset.personal_datayes, no, or unknown; other answers are dropped. Defaults to unknown.
dataset.sensitive_datarda.dataset.sensitive_datayes, no, or unknown; other answers are dropped. Defaults to unknown.
dataset.keywordrda.dataset.keywordEvery value of every answer, without repeats. Without any, the transformer falls back to the asset's tags.
dataset.preservation_statementrda.dataset.preservation_statement
dataset.data_quality_assurancerda.dataset.data_quality_assuranceEvery value of every answer; text-list fields contribute each entry.
dataset.dataset_id.identifierrda.dataset.dataset_id or rda.dataset.dataset_id.identifierThe simple rda.dataset.dataset_id form wins if answered (text, external identifier, or reference). Falls back to the asset's UUID.
dataset.dataset_id.typerda.dataset.dataset_id.typeUsed with rda.dataset.dataset_id.identifier. With rda.dataset.dataset_id, or when no type is answered, the type is inferred from the identifier: doi for a DOI, url for another web address, otherwise other. The asset's UUID is typed other.

Alternate identifiers​

RDA JSON fieldSemantic
dataset.alternate_identifier[].identifierrda.dataset.alternate_identifier.identifier
dataset.alternate_identifier[].typerda.dataset.alternate_identifier.type

An entry is written when either value is answered. Every dataset also gets the alternate identifier opencdmp_<asset id>, typed internal, which the import uses to recognise the asset.

Creators​

Assign these to the inputs of a single question (field set) in the asset template. One creator is produced per answer to the question (field-set item); an item with no answered creator value is not written. When no creator_id.type is answered, it is inferred from the identifier: orcid for an ORCID, url for another web address, otherwise other.

RDA JSON fieldSemantic
dataset.creator[].namerda.dataset.creator.name
dataset.creator[].mboxrda.dataset.creator.mbox
dataset.creator[].creator_id.identifierrda.dataset.creator.creator_id.identifier
dataset.creator[].creator_id.typerda.dataset.creator.creator_id.type
dataset.creator[].affiliation[].namerda.dataset.creator.affiliation.name
dataset.creator[].affiliation[].affiliation_id.identifierrda.dataset.creator.affiliation.affiliation_id.identifier
dataset.creator[].affiliation[].affiliation_id.typerda.dataset.creator.affiliation.affiliation_id.type
RDA JSON fieldSemantic
dataset.related_identifier[].identifierrda.dataset.related_identifier.identifier
dataset.related_identifier[].metadata_schemerda.dataset.related_identifier.metadata_scheme
dataset.related_identifier[].relation_typerda.dataset.related_identifier.relation_type
dataset.related_identifier[].resource_typerda.dataset.related_identifier.resource_type
dataset.related_identifier[].scheme_typerda.dataset.related_identifier.scheme_type
dataset.related_identifier[].scheme_urirda.dataset.related_identifier.scheme_uri
dataset.related_identifier[].typerda.dataset.related_identifier.type

Technical resources​

RDA JSON fieldSemantic
dataset.technical_resource[].namerda.dataset.technical_resource.name
dataset.technical_resource[].descriptionrda.dataset.technical_resource.description
dataset.technical_resource[].technical_resource_id[].identifierrda.dataset.technical_resource.id.identifier
dataset.technical_resource[].technical_resource_id[].typerda.dataset.technical_resource.id.type

The identifier keys are read only from a question that also carries rda.dataset.technical_resource.name or rda.dataset.technical_resource.description.

Security and privacy​

RDA JSON fieldSemantic
dataset.security_and_privacy[].titlerda.dataset.security_and_privacy.title
dataset.security_and_privacy[].descriptionrda.dataset.security_and_privacy.description

Metadata standards​

RDA JSON fieldSemantic
dataset.metadata[].languagerda.dataset.metadata.language
dataset.metadata[].descriptionrda.dataset.metadata.description
dataset.metadata[].metadata_standard_id[].identifierrda.dataset.metadata.metadata_standard_id or rda.dataset.metadata.metadata_standard_id.identifier
dataset.metadata[].metadata_standard_id[].typerda.dataset.metadata.metadata_standard_id.type

language takes an ISO 639-3 code; other answers are dropped. An answer to rda.dataset.metadata.metadata_standard_id becomes the standard identifier, typed other, and the other two standard keys are skipped. Without an answered type, the standard identifier is typed other.

Distributions​

Without an object, each answer to a question with these semantics is one distribution. The following semantics may be placed on its inputs.

RDA JSON fieldSemantic
dataset.distribution[].titlerda.dataset.distribution.title
dataset.distribution[].descriptionrda.dataset.distribution.description
dataset.distribution[].formatrda.dataset.distribution.format
dataset.distribution[].access_urlrda.dataset.distribution.access_url
dataset.distribution[].download_urlrda.dataset.distribution.download_url
dataset.distribution[].byte_sizerda.dataset.distribution.byte_size
dataset.distribution[].data_accessrda.dataset.distribution.data_access
dataset.distribution[].available_untilrda.dataset.distribution.available_until
dataset.distribution[].issuedrda.dataset.distribution.issued
dataset.distribution[] (whole object)rda.dataset.distribution on a reference input

The export does not read rda.dataset.distribution.exists. On import, a Yes/No input carrying it is answered Yes when the dataset has a distribution.

  • Title: when no title is answered, the distribution takes its host's title.
  • Picked references: a reference input carrying rda.dataset.distribution fills a whole distribution from the picked reference. Each value comes from the reference field carrying the matching key (for example rda.dataset.distribution.title), the title falls back to the reference's label, and the host and licence are filled from the same reference. Answered inputs of the same object override these values.
  • One distribution per repository: when a reference input for the host (or the whole distribution) holds several picked references, each produces its own distribution.
  • Empty distributions are not written.
  • Formats: format takes every value of the answer. issued and available_until must be dates (YYYY-MM-DD). access_url and download_url must be valid URIs. data_access takes open, shared, or closed. byte_size must be a whole number of bytes; a value such as 2 GB is dropped. Values in the wrong format are dropped.

License​

RDA JSON fieldSemanticNotes
dataset.distribution[].license[].license_refrda.dataset.distribution.license.license_refMust be a valid URI; other answers are dropped.
dataset.distribution[].license[].start_daterda.dataset.distribution.license.start_dateWritten as answered; a date input gives YYYY-MM-DD.
dataset.distribution[].license[] (whole object)rda.dataset.distribution.license on a reference inputEach picked reference produces one licence. license_ref and start_date come from the reference fields carrying rda.dataset.distribution.license.license_ref and rda.dataset.distribution.license.start_date.

A licence with neither a license_ref nor a start_date is not written.

Host​

RDA JSON fieldSemantic
dataset.distribution[].host.titlerda.dataset.distribution.host.title
dataset.distribution[].host.urlrda.dataset.distribution.host.url
dataset.distribution[].host.descriptionrda.dataset.distribution.host.description
dataset.distribution[].host.storage_typerda.dataset.distribution.host.storage_type
dataset.distribution[].host.backup_typerda.dataset.distribution.host.backup_type
dataset.distribution[].host.backup_frequencyrda.dataset.distribution.host.backup_frequency
dataset.distribution[].host.availabilityrda.dataset.distribution.host.availability
dataset.distribution[].host.geo_locationrda.dataset.distribution.host.geo_location
dataset.distribution[].host.support_versioningrda.dataset.distribution.host.support_versioning
dataset.distribution[].host.certified_withrda.dataset.distribution.host.certified_with
dataset.distribution[].host.pid_systemrda.dataset.distribution.host.pid_system
dataset.distribution[].host.host_id.identifierrda.dataset.distribution.host.host_id.identifier
dataset.distribution[].host.host_id.typerda.dataset.distribution.host.host_id.type
dataset.distribution[].host (whole object)rda.dataset.distribution.host on a reference input
  • Picked repository: a reference input carrying rda.dataset.distribution.host fills the host from the picked reference. Each value comes from the reference field carrying the matching key; the title falls back to the reference's label, the description to the reference's description, and host_id to the reference's value. Answered inputs of the same object override these values.
  • Identifier type: when no host_id.type is answered, it is inferred from the identifier: doi for a DOI, url for another web address, otherwise other.
  • Accepted values: geo_location takes a country code, support_versioning takes yes, no, or unknown, and certified_with and pid_system take the values of the RDA standard; other values are skipped. For example, options such as "None" or "I don't know" on an input tagged rda.dataset.distribution.host.certified_with are dropped from the export; the editor's checks flag option values that a key does not accept. url must be a valid URI.
  • PID system: only the first value of an answer to pid_system is written.

Additions to dmp.* from asset templates​

These semantics live on asset-template fields but feed the top-level dmp object, not the dataset. Each asset contributes entries. A contributor already listed under the same identifier and a project already listed are not added again; alternate identifiers, related identifiers, costs, and affiliations are added as answered.

Additional alternate identifiers on the DMP​

RDA JSON fieldSemantic
dmp.alternate_identifier[].identifierrda.dmp.alternate_identifier.identifier
dmp.alternate_identifier[].typerda.dmp.alternate_identifier.type
RDA JSON fieldSemantic
dmp.related_identifier[].identifierrda.dmp.related_identifier.identifier
dmp.related_identifier[].metadata_schemerda.dmp.related_identifier.metadata_scheme
dmp.related_identifier[].relation_typerda.dmp.related_identifier.relation_type
dmp.related_identifier[].resource_typerda.dmp.related_identifier.resource_type
dmp.related_identifier[].scheme_typerda.dmp.related_identifier.scheme_type
dmp.related_identifier[].scheme_urirda.dmp.related_identifier.scheme_uri
dmp.related_identifier[].typerda.dmp.related_identifier.type

Additional costs on the DMP​

RDA JSON fieldSemantic
dmp.cost[].titlerda.dmp.cost.title
dmp.cost[].descriptionrda.dmp.cost.description
dmp.cost[].valuerda.dmp.cost.value
dmp.cost[].currency_coderda.dmp.cost.currency_code

Additional contributors on the DMP​

RDA JSON fieldSemanticNotes
dmp.contributor[]rda.dmp.contributorWhen a field tagged with this semantic holds a reference, every referenced entity produces a contributor (same logic as researcher references).
dmp.contributor[].namerda.dmp.contributor.name
dmp.contributor[].mboxrda.dmp.contributor.mbox
dmp.contributor[].rolerda.dmp.contributor.roleEvery value of the answer.
dmp.contributor[].contributor_id.identifierrda.dmp.contributor.contributor_id.identifier
dmp.contributor[].contributor_id.typerda.dmp.contributor.contributor_id.typeWhen no type is answered, it is inferred from the identifier: orcid for an ORCID, url for another web address, otherwise other.
dmp.contributor[].affiliation[].namerda.dmp.contributor.affiliation.name
dmp.contributor[].affiliation[].affiliation_id.identifierrda.dmp.contributor.affiliation.affiliation_id.identifier
dmp.contributor[].affiliation[].affiliation_id.typerda.dmp.contributor.affiliation.affiliation_id.type

Additional affiliations on the DMP​

RDA JSON fieldSemantic
dmp.affiliation[].namerda.dmp.affiliation.name
dmp.affiliation[].affiliation_id.identifierrda.dmp.affiliation.affiliation_id or rda.dmp.affiliation.affiliation_id.identifier
dmp.affiliation[].affiliation_id.typerda.dmp.affiliation.affiliation_id.type

Additional ethical-issues values​

Values from asset-template fields with rda.dmp.ethical_issues_exist, rda.dmp.ethical_issues_description, and rda.dmp.ethical_issues_report add to the DMP-level values computed from the blueprint:

  • An asset's yes or no for ethical_issues_exist replaces the value so far, so the last asset that answers it decides. unknown changes nothing.
  • ethical_issues_description and ethical_issues_report are taken from the first asset that answers them, and only when the blueprint left them empty.

Additional projects on the DMP​

Blueprint and asset-template questions whose inputs carry the project semantics below contribute further entries to dmp.project[] (including their funding and project identifiers). Each answer is one project with at most one funding entry.

RDA JSON fieldSemantic
dmp.project[].titlerda.dmp.project.title
dmp.project[].descriptionrda.dmp.project.description
dmp.project[].startrda.dmp.project.start
dmp.project[].endrda.dmp.project.end
dmp.project[].project_id[].identifierrda.dmp.project.project_id.identifier
dmp.project[].project_id[].typerda.dmp.project.project_id.type
dmp.project[].funding[].funder_id.identifierrda.dmp.project.funding.funder_id or rda.dmp.project.funding.funder_id.identifier
dmp.project[].funding[].funder_id.typerda.dmp.project.funding.funder_id.type
dmp.project[].funding[].grant_id.identifierrda.dmp.project.funding.grant_id or rda.dmp.project.funding.grant_id.identifier
dmp.project[].funding[].grant_id.typerda.dmp.project.funding.grant_id.type
dmp.project[].funding[].funding_statusrda.dmp.project.funding.funding_status
  • Funder and grant identifiers: on a reference input, the identifier is the picked reference's value; on any other input, the answer. A funder from rda.dmp.project.funding.funder_id is typed other, and one from rda.dmp.project.funding.funder_id.identifier is typed fundref. A grant is typed other either way. An answered .type overrides the type; a type without an identifier is ignored.
  • Dates: start and end are written as YYYY-MM-DD; answers that are not dates are dropped.
  • Funding status takes planned, applied, granted, or rejected; other answers are dropped.
  • Project identifier: a project_id entry is written when its identifier or type is answered.

Import​

The transformer also imports RDA maDMP JSON files into a plan, using the same semantics in the other direction. It accepts the files published with the RDA DMP Common Standard, including properties given as a single object where the schema expects a list (for example a single contact_id).

  • Each RDA value is written to the first input carrying its semantic. Plan-level objects such as the contact and the projects are placed once, and each contributor gets its own answer.
  • For a select or radio input whose options stand for key values, the option whose key values all match the file is selected. When several match, the one matching the most values wins. Keys answered by other inputs of the object are left out of the comparison.
  • When a dataset has no distribution, an option marked Exports nothing on a distribution question is selected.
  • A question that takes a single answer keeps the first matching object; for example, a non-repeating project question keeps the first of two projects.
  • dmp_id is written back to the inputs carrying the rda.dmp.dmp_id semantics, unless it is a UUID typed other, which is the id OpenCDMP exports for a plan without a DOI. An imported plan is a new plan and gets its own id.

Some values are not read back on import. The editors mark those keys, using the plugin's semantics manifest.

Semantics manifest​

The transformer publishes a semantics manifest with its configuration: every key it reads, the RDA field it fills, the objects the keys make up, the value format and accepted values, and what it writes when a key is not answered. The blueprint and asset template editors use the manifest for suggestions, coverage, and checks.

The manifest marks as needed:

  • rda.dataset.dataset_id, rda.dataset.personal_data, and rda.dataset.sensitive_data for asset templates, and rda.dmp.contact.contact_id.identifier and rda.dmp.ethical_issues_exist for blueprints. The export writes only a placeholder (unknown or an internal id) without them. Asset templates can also supply rda.dmp.ethical_issues_exist, but it is not needed there.
  • Every value RDA requires inside an object when the transformer has nothing to put in its place, for example rda.dataset.metadata.language, rda.dataset.related_identifier.type, rda.dataset.distribution.data_access, and rda.dataset.distribution.host.url. An exported object without such a value fails the RDA schema. The editors expect these values only when the structure uses the object.

Every other key is marked can use. Values with a fallback show it, for example the distribution title (the host's title) and inferred identifier types (doi, orcid, url, or other).