diff --git a/CHANGES.md b/CHANGES.md
index 88df206..6b0a2ff 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -2,18 +2,34 @@
## Changelog
-| **Version** | **Changes** | **Readiness** |
-|---|---|---|
-| 2.7.17 | [Dump model] aligned the graph dump schema to mirror the changes in the model 1. Added openaccessroute at the level of the instance inside the AccessRight element; 2. Added pid and the alternate identifiers at the level of the instance; 3. Added the bipFinder measures | beta |
-| 2.7.16 | [Graph model] Updated the casing of the following terms (`relation.relClass`): 1. `isRelatedTo -> IsRelatedTo` Added the following `relClass` terms: 1. `IsAmongTopNSimilarDocuments` 2. `HasAmongTopNSimilarDocuments` | beta |
-| 2.7.15 | 1. added support for delegated authorities 2. fixed regex for DOI cleaning | beta |
-| 2.7.14 | [Graph model] Relation types are now inspired by the Datacite definitions https://schema.datacite.org/meta/kernel-4.4/doc/DataCite-MetadataKernel_v4.4.pdf The changes involve the values stored in `relation.subRelType` and `relation.relClass`: Updated the casing of the following terms (`relation.relClass`): 1. `isSupplementTo -> IsSupplementTo` / `isSupplementedBy -> IsSupplementedBy` 2. `isPartOf -> IsPartOf` / `hasPart -> HasPart` 3. `cites -> Cites` / `isCitedBy -> IsCitedBy` 4. `reviews -> Reviews` / `isReviewedBy -> IsReviewedBy` Added the following terms [`subRelType: relClass / relClass (inverse)`]: 1. `relationship: References / IsReferencedBy` 2. `relationship: IsIdenticalTo` 3. `relationship: IsContinuedBy / Continues` 4. `relationship: IsDocumentedBy / Documents` 5. `relationship: Documents / IsDocumentedBy` 6. `relationship: IsCompiledBy / Compiles` 7. `version: IsPreviousVersionOf / IsNewVersionOf` 8. `version: IsSourceOf / IsDerivedFrom` 9. `version: IsVariantFormOf / IsOriginalFormOf` 10. `version: IsObsoletedBy / Obsoletes` 11. `version: IsVersionOf / HasVersion` | beta |
-| 2.6.14 | [Scholexplorer] 1. Added model classes for Scholexplorer, package `eu.dnetlib.dhp.schema.sx` | production |
-| 2.6.13 | 1. `Result.mergeFrom` handles field `dateOfAcceptance` | production |
-| 2.5.12 | 1. delegating the date parsing to https://github.com/sisyphsu/dateparser | production |
-| 2.5.[11-9] | 1. support for more date formats 2. enable the possibility to extend the date formats used to parse `Relation.validationDate` | production |
-| 2.4.8 | 1. added constant for ORCID datasource name | production |
-| 2.4.7 | refactoring | production |
-| 2.3.6 | [Aggregation] 1. introduced MetadataStoreManager (MdSM) model classes| production |
-| 2.2.5 | [Graph model] 1. introduced fields `Instance.pid` and `Instance.alternateIdentifier` 2. `LicenseComparator` renamed as `AccessRightComparator` 3. introduced `AccessRight` model class defining the `OpenAccessRoute` field to keep track of the OpenAccess color at the `Instance` level 4. `ExternalReference` cleanup (removed description, added alternateLabel(s)) 5. added several ModelConstants [Aggregation] 7. introduced MDStore record model classes 8. Introduced ORCID specific model classes | production |
-| 2.2.4 | 1. ORCID specific model classes backported in the version used in PROD 2. added constant for dnet:externalReference_typologies 3. added constant for ORCID datasource name 4. `Result.mergeFrom` handles field `dateOfAcceptance` | production |
+| **Version** | **Changes** | **Readiness** |
+|-------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
+| 2.11.33 | [Scholexplorer]
Moved Scholix API Data model into dhp-schemas
implementation of the compareTo method on Scholix objects and all model properties
Unit Test to verify that compareTo works on different case
| beta |
+| 2.10.31 | [Minor] NPE checks | beta |
+| 2.10.30 | [Minor] added comparator for refereed field instances | beta |
+| 2.10.29 | [Merge Result] merge logics changed to consider invisble in dataInfo | beta |
+| 2.10.28 | [Graph Model] Added APC information at the level of the result | beta |
+| 2.10.27 | [Graph Model] change name and id of OpenAPC datasource | beta |
+| 2.10.26 | [Graph Model] OpenAIRE ids of the delegated authorities and enrichment providers in the identifier creation strategy | beta |
+| 2.10.25 | [Graph model]implemented enrichment on Result specializing in the method mergefrom. | beta |
+| 2.10.24 | [Graph model]added utility method and constants for checking weather is an OafEntity represents an enrichment. | beta |
+| 2.9.24 | [Dump model]change the names of the classes to be able to automatically create the json schema with specific descriptions | beta |
+| 2.9.23 | [Graph model] Added Instance.measures field, allowing to maintain the association between them and the individual result instance[Dump model]added json schemas | beta |
+| 2.8.22 | [Graph model] minor: added serializable to the Measures model class[Dump model]added dedicated BestAccessRight class, used at the result level instead of AccessRight | production |
+| 2.8.21 | [Graph model] added the following relation terms Describes/IsDescribedBy, IsMetadataFor/IsMetadataOf, HasAssociationWith/HasAssociationWith, IsRequiredBy/Requires. All these are used in combination with the relation subRelType "relationship" | production |
+| 2.8.20 | [Graph model] added constants declaring the values used for hierarchical relationships among the organizations IsParentOf / IsChildOf | production |
+| 2.7.18-19 | [Dump model] include validation info in relations [Graph model] added constants declaring vocabulary names for relation fields | production |
+| 2.7.17 | [Dump model] aligned the graph dump schema to mirror the changes in the model 1. Added openaccessroute at the level of the instance inside the AccessRight element; 2. Added pid and the alternate identifiers at the level of the instance; 3. Added the bipFinder measures | production |
+| 2.7.16 | [Graph model] Updated the casing of the following terms (`relation.relClass`): 1. `isRelatedTo -> IsRelatedTo` Added the following `relClass` terms: 1. `IsAmongTopNSimilarDocuments` 2. `HasAmongTopNSimilarDocuments` | production |
+| 2.7.15 | 1. added support for delegated authorities 2. fixed regex for DOI cleaning | production |
+| 2.7.14 | [Graph model] Relation types are now inspired by the Datacite definitions https://schema.datacite.org/meta/kernel-4.4/doc/DataCite-MetadataKernel_v4.4.pdf The changes involve the values stored in `relation.subRelType` and `relation.relClass`: Updated the casing of the following terms (`relation.relClass`): 1. `isSupplementTo -> IsSupplementTo` / `isSupplementedBy -> IsSupplementedBy` 2. `isPartOf -> IsPartOf` / `hasPart -> HasPart` 3. `cites -> Cites` / `isCitedBy -> IsCitedBy` 4. `reviews -> Reviews` / `isReviewedBy -> IsReviewedBy` Added the following terms [`subRelType: relClass / relClass (inverse)`]: 1. `relationship: References / IsReferencedBy` 2. `relationship: IsIdenticalTo` 3. `relationship: IsContinuedBy / Continues` 4. `relationship: IsDocumentedBy / Documents` 5. `relationship: Documents / IsDocumentedBy` 6. `relationship: IsCompiledBy / Compiles` 7. `version: IsPreviousVersionOf / IsNewVersionOf` 8. `version: IsSourceOf / IsDerivedFrom` 9. `version: IsVariantFormOf / IsOriginalFormOf` 10. `version: IsObsoletedBy / Obsoletes` 11. `version: IsVersionOf / HasVersion` | production |
+| 2.6.14 | [Scholexplorer] 1. Added model classes for Scholexplorer, package `eu.dnetlib.dhp.schema.sx` | production |
+| 2.6.13 | 1. `Result.mergeFrom` handles field `dateOfAcceptance` | production |
+| 2.5.12 | 1. delegating the date parsing to https://github.com/sisyphsu/dateparser | production |
+| 2.5.[11-9] | 1. support for more date formats 2. enable the possibility to extend the date formats used to parse `Relation.validationDate` | production |
+| 2.4.8 | 1. added constant for ORCID datasource name | production |
+| 2.4.7 | refactoring | production |
+| 2.3.6 | [Aggregation] 1. introduced MetadataStoreManager (MdSM) model classes | production |
+| 2.2.5 | [Graph model] 1. introduced fields `Instance.pid` and `Instance.alternateIdentifier` 2. `LicenseComparator` renamed as `AccessRightComparator` 3. introduced `AccessRight` model class defining the `OpenAccessRoute` field to keep track of the OpenAccess color at the `Instance` level 4. `ExternalReference` cleanup (removed description, added alternateLabel(s)) 5. added several ModelConstants [Aggregation] 7. introduced MDStore record model classes 8. Introduced ORCID specific model classes | production |
+| 2.2.4 | 1. ORCID specific model classes backported in the version used in PROD 2. added constant for dnet:externalReference_typologies 3. added constant for ORCID datasource name 4. `Result.mergeFrom` handles field `dateOfAcceptance` | production |
+
diff --git a/pom.xml b/pom.xml
index e7d0a81..a69fbfd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,8 @@
eu.dnetlib.dhpdhp-schemasjar
- 2.7.17-SNAPSHOT
+ 2.11.34-SNAPSHOT
+
@@ -20,7 +21,7 @@
Redmine
- https://issue.openaire.research-infrastructures.eu/projects/openaire
+ https://support.openaire.eu/projects/openaire
@@ -32,7 +33,7 @@
scm:git:gitea@code-repo.d4science.org:D-Net/dhp-schemas.gitscm:git:gitea@code-repo.d4science.org:D-Net/dhp-schemas.githttps://code-repo.d4science.org/D-Net/dhp-schemas/
- dhp-schemas-2.6.13
+ dhp-schemas-2.10.30This module contains common schema classes meant to be used across the dnet-hadoop submodules
@@ -137,7 +138,26 @@
maven-dependency-plugin3.0.0
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 3.0.0
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${dhp.jackson.version}
+
+
+
+
+
+
@@ -229,6 +249,19 @@
${scala.version}
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+ true
+ eu.dnetlib.dhp.schema.dump.ExecCreateSchemas
+
+ eu.dnetlib.dhp.schema.dump.oaf.GraphResult;eu.dnetlib.dhp.schema.dump.oaf.graph.Organization;eu.dnetlib.dhp.schema.dump.oaf.graph.Project
+
+
+
+
+
@@ -249,10 +282,16 @@
+
+ me.xuender
+ unidecode
+ ${dhp.unidecode.version}
+
+
org.slf4jjcl-over-slf4j
- 1.7.25
+ ${dhp.slf4j.version}provided
@@ -265,7 +304,7 @@
com.github.sisyphsudateparser
- 1.0.7
+ ${dhp.dateparser.version}
@@ -277,15 +316,16 @@
commons-codeccommons-codec
- 1.9
+ ${dhp.commons.codec.version}commons-iocommons-io
- 2.4
+ ${dhp.commons.io.version}
+
com.fasterxml.jackson.corejackson-databind
@@ -296,34 +336,95 @@
javax.persistencejavax.persistence-api
- 2.2
+ ${dhp.javax.persistence.api.version}provided
+
+ io.swagger
+ swagger-annotations
+ ${dhp.swagger-annotations-version}
+
+
+ io.swagger.core.v3
+ swagger-annotations
+ ${dhp.swagger.annotations.version}
+
+
+
+ javax.validation
+ validation-api
+ ${dhp.validation.api.version}
+
+
+
+ org.junit.jupiter
+ junit-jupiter
+ ${junit-jupiter.version}
+ test
+
+
+
+ org.mockito
+ mockito-core
+ ${mockito-core.version}
+ test
+
+
+
+ org.mockito
+ mockito-junit-jupiter
+ ${mockito-core.version}
+ test
+
+
+
+ com.github.victools
+ jsonschema-generator
+ ${jsonschemagenerator.version}
+
+
+ com.github.imifou
+ jsonschema-module-addon
+ ${dhp.jsonschema.module.addon.version}
+
+
+
+ me.xuender
+ unidecode
+
+
+ io.swagger
+ swagger-annotations
+
+
+
+ io.swagger.core.v3
+ swagger-annotations
+
+
+
+ javax.validation
+ validation-api
+ org.junit.jupiterjunit-jupiter
- ${junit-jupiter.version}
- testorg.mockitomockito-core
- ${mockito-core.version}
- testorg.mockitomockito-junit-jupiter
- ${mockito-core.version}
- test
@@ -360,10 +461,27 @@
javax.persistencejavax.persistence-api
-
+
+ com.github.victools
+ jsonschema-generator
+
+
+ com.github.imifou
+ jsonschema-module-addon
+
+ 1.0.7
+ 1.2.1
+ 2.0.1.Final
+ 2.1.12
+ 2.2
+ 1.9
+ 2.4
+ 1.7.25
+ 0.0.7
+ 1.5.20UTF-8UTF-83.6.0
@@ -377,6 +495,7 @@
2.11.125.6.13.3.3
+ 4.13.0
diff --git a/src/main/java/eu/dnetlib/dhp/schema/common/ModelConstants.java b/src/main/java/eu/dnetlib/dhp/schema/common/ModelConstants.java
index ed9bf48..686945a 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/common/ModelConstants.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/common/ModelConstants.java
@@ -27,6 +27,12 @@ public class ModelConstants {
public static final String OPENORGS_NAME = "OpenOrgs Database";
+ public static final String OPENOCITATIONS_NAME = "OpenCitations";
+ public static final String OPENOCITATIONS_ID = "10|openaire____::c06df618c5de1c786535ccf3f8b7b059";
+
+ public static final String OPEN_APC_NAME = "OpenAPC Global Initiative";
+ public static final String OPEN_APC_ID = "10|apc_________::e2b1600b229fc30663c8a1f662debddf";
+
// VOCABULARY VALUE
public static final String ACCESS_RIGHT_OPEN = "OPEN";
public static final String ACCESS_RIGHT_EMBARGO = "EMBARGO";
@@ -47,6 +53,14 @@ public class ModelConstants {
public static final String DNET_REVIEW_LEVELS = "dnet:review_levels";
public static final String DNET_PROGRAMMING_LANGUAGES = "dnet:programming_languages";
public static final String DNET_EXTERNAL_REFERENCE_TYPE = "dnet:externalReference_typologies";
+ public static final String DNET_RELATION_RELTYPE = "dnet:relation_relType";
+ public static final String DNET_RELATION_SUBRELTYPE = "dnet:relation_subRelType";
+ public static final String DNET_RELATION_RELCLASS = "dnet:relation_relClass";
+
+ public static final String PEER_REVIEWED_CLASSNAME = "nonPeerReviewed";
+ public static final String NON_PEER_REVIEWED_CLASSNAME = "nonPeerReviewed";
+ public static final String PEER_REVIEWED_CLASSID = "0001";
+ public static final String NON_PEER_REVIEWED_CLASSID = "0002";
public static final String SYSIMPORT_CROSSWALK_REPOSITORY = "sysimport:crosswalk:repository";
public static final String SYSIMPORT_CROSSWALK_ENTITYREGISTRY = "sysimport:crosswalk:entityregistry";
@@ -57,6 +71,8 @@ public class ModelConstants {
public static final String HARVESTED = "Harvested";
public static final String PROVENANCE_DEDUP = "sysimport:dedup";
+ public static final String PROVENANCE_ENRICH = "sysimport:enrich";
+
public static final Qualifier PROVENANCE_ACTION_SET_QUALIFIER = qualifier(
SYSIMPORT_ACTIONSET, SYSIMPORT_ACTIONSET, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS);
@@ -96,6 +112,15 @@ public class ModelConstants {
public static final String IS_DERIVED_FROM = "IsDerivedFrom";
public static final String COMPILES = "Compiles";
public static final String IS_COMPILED_BY = "IsCompiledBy";
+ public static final String DESCRIBES = "Describes";
+ public static final String IS_DESCRIBE_DBY = "IsDescribedBy";
+ public static final String IS_METADATA_FOR = "IsMetadataFor";
+ public static final String IS_METADATA_OF = "IsMetadataOf";
+ public static final String HAS_ASSOCIATION_WITH = "HasAssociationWith";
+ public static final String IS_REQUIRED_BY = "IsRequiredBy";
+ public static final String REQUIRES = "Requires";
+
+
public static final String CITATION = "citation"; // subreltype
public static final String CITES = "Cites";
@@ -136,6 +161,8 @@ public class ModelConstants {
public static final String HAS_AUTHOR_INSTITUTION = "hasAuthorInstitution";
public static final String ORG_ORG_RELTYPE = "organizationOrganization"; // relType
+ public static final String IS_PARENT_OF = "IsParentOf";
+ public static final String IS_CHILD_OF = "IsChildOf";
public static final String DEDUP = "dedup"; // subreltype
public static final String MERGES = "merges";
diff --git a/src/main/java/eu/dnetlib/dhp/schema/common/ModelSupport.java b/src/main/java/eu/dnetlib/dhp/schema/common/ModelSupport.java
index 89eddd0..1aa0d8f 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/common/ModelSupport.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/common/ModelSupport.java
@@ -2,6 +2,7 @@
package eu.dnetlib.dhp.schema.common;
import static com.google.common.base.Preconditions.checkArgument;
+import static eu.dnetlib.dhp.schema.common.ModelConstants.*;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
@@ -98,211 +99,104 @@ public class ModelSupport {
public static final Map relationInverseMap = Maps.newHashMap();
static {
- relationInverseMap
- .put(
- "personResult_authorship_isAuthorOf", new RelationInverse()
- .setRelation("isAuthorOf")
- .setInverse("hasAuthor")
- .setRelType("personResult")
- .setSubReltype("authorship"));
- relationInverseMap
- .put(
- "personResult_authorship_hasAuthor", new RelationInverse()
- .setInverse("isAuthorOf")
- .setRelation("hasAuthor")
- .setRelType("personResult")
- .setSubReltype("authorship"));
- relationInverseMap
- .put(
- "projectOrganization_participation_isParticipant", new RelationInverse()
- .setRelation(ModelConstants.IS_PARTICIPANT)
- .setInverse(ModelConstants.HAS_PARTICIPANT)
- .setRelType(ModelConstants.PROJECT_ORGANIZATION)
- .setSubReltype(ModelConstants.PARTICIPATION));
- relationInverseMap
- .put(
- "projectOrganization_participation_hasParticipant", new RelationInverse()
- .setInverse(ModelConstants.IS_PARTICIPANT)
- .setRelation(ModelConstants.HAS_PARTICIPANT)
- .setRelType(ModelConstants.PROJECT_ORGANIZATION)
- .setSubReltype(ModelConstants.PARTICIPATION));
- relationInverseMap
- .put(
- "resultOrganization_affiliation_hasAuthorInstitution", new RelationInverse()
- .setRelation(ModelConstants.HAS_AUTHOR_INSTITUTION)
- .setInverse(ModelConstants.IS_AUTHOR_INSTITUTION_OF)
- .setRelType(ModelConstants.RESULT_ORGANIZATION)
- .setSubReltype(ModelConstants.AFFILIATION));
- relationInverseMap
- .put(
- "resultOrganization_affiliation_isAuthorInstitutionOf", new RelationInverse()
- .setInverse(ModelConstants.HAS_AUTHOR_INSTITUTION)
- .setRelation(ModelConstants.IS_AUTHOR_INSTITUTION_OF)
- .setRelType(ModelConstants.RESULT_ORGANIZATION)
- .setSubReltype(ModelConstants.AFFILIATION));
- relationInverseMap
- .put(
- "organizationOrganization_dedup_merges", new RelationInverse()
- .setRelation(ModelConstants.MERGES)
- .setInverse(ModelConstants.IS_MERGED_IN)
- .setRelType(ModelConstants.ORG_ORG_RELTYPE)
- .setSubReltype(ModelConstants.DEDUP));
- relationInverseMap
- .put(
- "organizationOrganization_dedup_isMergedIn", new RelationInverse()
- .setInverse(ModelConstants.MERGES)
- .setRelation(ModelConstants.IS_MERGED_IN)
- .setRelType(ModelConstants.ORG_ORG_RELTYPE)
- .setSubReltype(ModelConstants.DEDUP));
- relationInverseMap
- .put(
- "organizationOrganization_dedupSimilarity_isSimilarTo", new RelationInverse()
- .setInverse(ModelConstants.IS_SIMILAR_TO)
- .setRelation(ModelConstants.IS_SIMILAR_TO)
- .setRelType(ModelConstants.ORG_ORG_RELTYPE)
- .setSubReltype(ModelConstants.DEDUP));
+ set(relationInverseMap, PROJECT_ORGANIZATION, PARTICIPATION, IS_PARTICIPANT, HAS_PARTICIPANT);
- relationInverseMap
- .put(
- "resultProject_outcome_isProducedBy", new RelationInverse()
- .setRelation(ModelConstants.IS_PRODUCED_BY)
- .setInverse(ModelConstants.PRODUCES)
- .setRelType(ModelConstants.RESULT_PROJECT)
- .setSubReltype(ModelConstants.OUTCOME));
- relationInverseMap
- .put(
- "resultProject_outcome_produces", new RelationInverse()
- .setInverse(ModelConstants.IS_PRODUCED_BY)
- .setRelation(ModelConstants.PRODUCES)
- .setRelType(ModelConstants.RESULT_PROJECT)
- .setSubReltype(ModelConstants.OUTCOME));
- relationInverseMap
- .put(
- "projectPerson_contactPerson_isContact", new RelationInverse()
- .setRelation("isContact")
- .setInverse("hasContact")
- .setRelType("projectPerson")
- .setSubReltype("contactPerson"));
- relationInverseMap
- .put(
- "projectPerson_contactPerson_hasContact", new RelationInverse()
- .setInverse("isContact")
- .setRelation("hasContact")
- .setRelType("personPerson")
- .setSubReltype("coAuthorship"));
- relationInverseMap
- .put(
- "personPerson_coAuthorship_isCoauthorOf", new RelationInverse()
- .setInverse("isCoAuthorOf")
- .setRelation("isCoAuthorOf")
- .setRelType("personPerson")
- .setSubReltype("coAuthorship"));
- relationInverseMap
- .put(
- "personPerson_dedup_merges", new RelationInverse()
- .setInverse(ModelConstants.IS_MERGED_IN)
- .setRelation(ModelConstants.MERGES)
- .setRelType("personPerson")
- .setSubReltype(ModelConstants.DEDUP));
- relationInverseMap
- .put(
- "personPerson_dedup_isMergedIn", new RelationInverse()
- .setInverse(ModelConstants.MERGES)
- .setRelation(ModelConstants.IS_MERGED_IN)
- .setRelType("personPerson")
- .setSubReltype(ModelConstants.DEDUP));
- relationInverseMap
- .put(
- "personPerson_dedupSimilarity_isSimilarTo", new RelationInverse()
- .setInverse(ModelConstants.IS_SIMILAR_TO)
- .setRelation(ModelConstants.IS_SIMILAR_TO)
- .setRelType("personPerson")
- .setSubReltype(ModelConstants.DEDUP));
- relationInverseMap
- .put(
- "datasourceOrganization_provision_isProvidedBy", new RelationInverse()
- .setInverse(ModelConstants.PROVIDES)
- .setRelation(ModelConstants.IS_PROVIDED_BY)
- .setRelType(ModelConstants.DATASOURCE_ORGANIZATION)
- .setSubReltype(ModelConstants.PROVISION));
- relationInverseMap
- .put(
- "datasourceOrganization_provision_provides", new RelationInverse()
- .setInverse(ModelConstants.IS_PROVIDED_BY)
- .setRelation(ModelConstants.PROVIDES)
- .setRelType(ModelConstants.DATASOURCE_ORGANIZATION)
- .setSubReltype(ModelConstants.PROVISION));
- relationInverseMap
- .put(
- "resultResult_similarity_hasAmongTopNSimilarDocuments", new RelationInverse()
- .setInverse("isAmongTopNSimilarDocuments")
- .setRelation("hasAmongTopNSimilarDocuments")
- .setRelType(ModelConstants.RESULT_RESULT)
- .setSubReltype(ModelConstants.SIMILARITY));
- relationInverseMap
- .put(
- "resultResult_similarity_isAmongTopNSimilarDocuments", new RelationInverse()
- .setInverse("hasAmongTopNSimilarDocuments")
- .setRelation("isAmongTopNSimilarDocuments")
- .setRelType(ModelConstants.RESULT_RESULT)
- .setSubReltype(ModelConstants.SIMILARITY));
- relationInverseMap
- .put(
- "resultResult_relationship_isRelatedTo", new RelationInverse()
- .setInverse(ModelConstants.IS_RELATED_TO)
- .setRelation(ModelConstants.IS_RELATED_TO)
- .setRelType(ModelConstants.RESULT_RESULT)
- .setSubReltype(ModelConstants.RELATIONSHIP));
- relationInverseMap
- .put(
- "resultResult_supplement_isSupplementTo", new RelationInverse()
- .setInverse(ModelConstants.IS_SUPPLEMENTED_BY)
- .setRelation(ModelConstants.IS_SUPPLEMENT_TO)
- .setRelType(ModelConstants.RESULT_RESULT)
- .setSubReltype(ModelConstants.SUPPLEMENT));
- relationInverseMap
- .put(
- "resultResult_supplement_isSupplementedBy", new RelationInverse()
- .setInverse(ModelConstants.IS_SUPPLEMENT_TO)
- .setRelation(ModelConstants.IS_SUPPLEMENTED_BY)
- .setRelType(ModelConstants.RESULT_RESULT)
- .setSubReltype(ModelConstants.SUPPLEMENT));
- relationInverseMap
- .put(
- "resultResult_part_isPartOf", new RelationInverse()
- .setInverse(ModelConstants.HAS_PART)
- .setRelation(ModelConstants.IS_PART_OF)
- .setRelType(ModelConstants.RESULT_RESULT)
- .setSubReltype(ModelConstants.PART));
- relationInverseMap
- .put(
- "resultResult_part_hasPart", new RelationInverse()
- .setInverse(ModelConstants.IS_PART_OF)
- .setRelation(ModelConstants.HAS_PART)
- .setRelType(ModelConstants.RESULT_RESULT)
- .setSubReltype(ModelConstants.PART));
- relationInverseMap
- .put(
- "resultResult_dedup_merges", new RelationInverse()
- .setInverse(ModelConstants.IS_MERGED_IN)
- .setRelation(ModelConstants.MERGES)
- .setRelType(ModelConstants.RESULT_RESULT)
- .setSubReltype(ModelConstants.DEDUP));
- relationInverseMap
- .put(
- "resultResult_dedup_isMergedIn", new RelationInverse()
- .setInverse(ModelConstants.MERGES)
- .setRelation(ModelConstants.IS_MERGED_IN)
- .setRelType(ModelConstants.RESULT_RESULT)
- .setSubReltype(ModelConstants.DEDUP));
- relationInverseMap
- .put(
- "resultResult_dedupSimilarity_isSimilarTo", new RelationInverse()
- .setInverse(ModelConstants.IS_SIMILAR_TO)
- .setRelation(ModelConstants.IS_SIMILAR_TO)
- .setRelType(ModelConstants.RESULT_RESULT)
- .setSubReltype(ModelConstants.DEDUP));
+ set(relationInverseMap, RESULT_ORGANIZATION, AFFILIATION, IS_AUTHOR_INSTITUTION_OF, HAS_AUTHOR_INSTITUTION);
+ set(relationInverseMap, ORG_ORG_RELTYPE, DEDUP, IS_MERGED_IN, MERGES);
+ set(relationInverseMap, ORG_ORG_RELTYPE, DEDUP, IS_SIMILAR_TO, IS_SIMILAR_TO);
+
+ set(relationInverseMap, RESULT_PROJECT, OUTCOME, IS_PRODUCED_BY, PRODUCES);
+
+ set(relationInverseMap, DATASOURCE_ORGANIZATION, PROVISION, IS_PROVIDED_BY, PROVIDES);
+
+ set(relationInverseMap, RESULT_RESULT, SIMILARITY, IS_AMONG_TOP_N_SIMILAR_DOCS, HAS_AMONG_TOP_N_SIMILAR_DOCS);
+ set(relationInverseMap, RESULT_RESULT, SUPPLEMENT, IS_SUPPLEMENT_TO, IS_SUPPLEMENTED_BY);
+ set(relationInverseMap, RESULT_RESULT, PART, IS_PART_OF, HAS_PART);
+ set(relationInverseMap, RESULT_RESULT, DEDUP, IS_MERGED_IN, MERGES);
+ set(relationInverseMap, RESULT_RESULT, DEDUP, IS_SIMILAR_TO, IS_SIMILAR_TO);
+ set(relationInverseMap, RESULT_RESULT, CITATION, IS_CITED_BY, CITES);
+
+ set(relationInverseMap, RESULT_RESULT, RELATIONSHIP, IS_IDENTICAL_TO, IS_IDENTICAL_TO);
+ set(relationInverseMap, RESULT_RESULT, RELATIONSHIP, IS_REFERENCED_BY, REFERENCES);
+ set(relationInverseMap, RESULT_RESULT, RELATIONSHIP, IS_CONTINUED_BY, CONTINUES);
+ set(relationInverseMap, RESULT_RESULT, RELATIONSHIP, IS_DOCUMENTED_BY, DOCUMENTS);
+ set(relationInverseMap, RESULT_RESULT, RELATIONSHIP, IS_DERIVED_FROM, IS_SOURCE_OF);
+ set(relationInverseMap, RESULT_RESULT, RELATIONSHIP, IS_RELATED_TO, IS_RELATED_TO);
+ set(relationInverseMap, RESULT_RESULT, RELATIONSHIP, IS_COMPILED_BY, COMPILES);
+
+ set(relationInverseMap, RESULT_RESULT, RELATIONSHIP, IS_DESCRIBE_DBY, DESCRIBES);
+ set(relationInverseMap, RESULT_RESULT, RELATIONSHIP, IS_METADATA_FOR, IS_METADATA_OF);
+ set(relationInverseMap, RESULT_RESULT, RELATIONSHIP, HAS_ASSOCIATION_WITH, HAS_ASSOCIATION_WITH);
+ set(relationInverseMap, RESULT_RESULT, RELATIONSHIP, IS_REQUIRED_BY, REQUIRES);
+
+
+ set(relationInverseMap, RESULT_RESULT, VERSION, IS_PREVIOUS_VERSION_OF, IS_NEW_VERSION_OF);
+ set(relationInverseMap, RESULT_RESULT, VERSION, IS_VARIANT_FORM_OF, IS_ORIGINAL_FORM_OF);
+ set(relationInverseMap, RESULT_RESULT, VERSION, IS_OBSOLETED_BY, OBSOLETES);
+ set(relationInverseMap, RESULT_RESULT, VERSION, IS_VERSION_OF, HAS_VERSION);
+
+ set(relationInverseMap, RESULT_RESULT, REVIEW, IS_REVIEWED_BY, REVIEWS);
+ }
+
+ private static void set(Map relationInverseMap, String relType, String subRelType, String relClass, String inverseRelClass) {
+ relationInverseMap
+ .put(
+ rel(relType, subRelType, relClass), new RelationInverse()
+ .setInverseRelClass(inverseRelClass)
+ .setRelClass(relClass)
+ .setRelType(relType)
+ .setSubReltype(subRelType));
+ if (!relClass.equals(inverseRelClass)) {
+ relationInverseMap
+ .put(
+ rel(relType, subRelType, inverseRelClass), new RelationInverse()
+ .setInverseRelClass(relClass)
+ .setRelClass(inverseRelClass)
+ .setRelType(relType)
+ .setSubReltype(subRelType));
+ }
+ }
+
+ /**
+ * Helper method: lookup relation inverse, given the direct relation encoding (case insensitive)
+ * @param encoding
+ * @return the relation inverse descriptor, throws @IllegalArgumentException when not found.
+ */
+ public static RelationInverse findInverse(String encoding) {
+ return ModelSupport.relationInverseMap
+ .entrySet()
+ .stream()
+ .filter(r -> encoding.equalsIgnoreCase(r.getKey()))
+ .findFirst()
+ .map(r -> r.getValue())
+ .orElseThrow(() -> new IllegalArgumentException("invalid relationship: " + encoding));
+ }
+
+ /**
+ * Helper method: fina a relation filtering by a relation name
+ * @param relationName
+ * @return
+ */
+ public static RelationInverse findRelation(final String relationName) {
+ return relationInverseMap.values()
+ .stream()
+ .filter(r -> relationName.equalsIgnoreCase(r.getRelClass()))
+ .findFirst()
+ .orElse(null);
+
+
+ }
+
+ /**
+ * Helper method: combines the relation attributes
+ * @param relType
+ * @param subRelType
+ * @param relClass
+ * @return
+ */
+ public static String rel(String relType, String subRelType, String relClass) {
+ return String.format("%s_%s_%s", relType, subRelType, relClass);
}
private static final String schemeTemplate = "dnet:%s_%s_relations";
diff --git a/src/main/java/eu/dnetlib/dhp/schema/common/RefereedComparator.java b/src/main/java/eu/dnetlib/dhp/schema/common/RefereedComparator.java
new file mode 100644
index 0000000..86c0d97
--- /dev/null
+++ b/src/main/java/eu/dnetlib/dhp/schema/common/RefereedComparator.java
@@ -0,0 +1,44 @@
+
+package eu.dnetlib.dhp.schema.common;
+
+import java.util.Comparator;
+
+import eu.dnetlib.dhp.schema.oaf.Qualifier;
+
+public class RefereedComparator implements Comparator {
+
+ @Override
+ public int compare(Qualifier left, Qualifier right) {
+
+ if (left == null && right == null)
+ return 0;
+ if (left == null)
+ return 1;
+ if (right == null)
+ return -1;
+
+ String lClass = left.getClassid();
+ String rClass = right.getClassid();
+
+ if (lClass.equals(rClass))
+ return 0;
+
+ if (lClass.equals(ModelConstants.PEER_REVIEWED_CLASSID))
+ return -1;
+ if (rClass.equals(ModelConstants.PEER_REVIEWED_CLASSID))
+ return 1;
+
+ if (lClass.equals(ModelConstants.NON_PEER_REVIEWED_CLASSID))
+ return -1;
+ if (rClass.equals(ModelConstants.NON_PEER_REVIEWED_CLASSID))
+ return 1;
+
+ if (lClass.equals(ModelConstants.UNKNOWN))
+ return -1;
+ if (rClass.equals(ModelConstants.UNKNOWN))
+ return 1;
+
+ // Else (but unlikely), lexicographical ordering will do.
+ return lClass.compareTo(rClass);
+ }
+}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/common/RelationInverse.java b/src/main/java/eu/dnetlib/dhp/schema/common/RelationInverse.java
index 4757c63..2b9ed94 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/common/RelationInverse.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/common/RelationInverse.java
@@ -2,8 +2,8 @@
package eu.dnetlib.dhp.schema.common;
public class RelationInverse {
- private String relation;
- private String inverse;
+ private String relClass;
+ private String inverseRelClass;
private String relType;
private String subReltype;
@@ -25,21 +25,21 @@ public class RelationInverse {
return this;
}
- public String getRelation() {
- return relation;
+ public String getRelClass() {
+ return relClass;
}
- public RelationInverse setRelation(String relation) {
- this.relation = relation;
+ public RelationInverse setRelClass(String relClass) {
+ this.relClass = relClass;
return this;
}
- public String getInverse() {
- return inverse;
+ public String getInverseRelClass() {
+ return inverseRelClass;
}
- public RelationInverse setInverse(String inverse) {
- this.inverse = inverse;
+ public RelationInverse setInverseRelClass(String inverseRelClass) {
+ this.inverseRelClass = inverseRelClass;
return this;
}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/ExecCreateSchemas.java b/src/main/java/eu/dnetlib/dhp/schema/dump/ExecCreateSchemas.java
new file mode 100644
index 0000000..ca520cc
--- /dev/null
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/ExecCreateSchemas.java
@@ -0,0 +1,75 @@
+package eu.dnetlib.dhp.schema.dump;
+
+import java.io.*;
+import java.lang.reflect.Type;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.github.imifou.jsonschema.module.addon.AddonModule;
+import com.github.victools.jsonschema.generator.*;
+
+import eu.dnetlib.dhp.schema.dump.oaf.community.CommunityResult;
+import eu.dnetlib.dhp.schema.dump.oaf.graph.*;
+
+public class ExecCreateSchemas {
+ final static String DIRECTORY = "/eu/dnetlib/dhp/schema/oaf/dump/jsonschemas/";
+ SchemaGenerator generator;
+
+ private void init(){
+
+ AddonModule module = new AddonModule();
+ SchemaGeneratorConfigBuilder configBuilder = new SchemaGeneratorConfigBuilder(
+ new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT),
+ SchemaVersion.DRAFT_7,
+ OptionPreset.PLAIN_JSON)
+ .with(module)
+ .with(Option.SCHEMA_VERSION_INDICATOR)
+ .without(Option.NONPUBLIC_NONSTATIC_FIELDS_WITHOUT_GETTERS);
+ SchemaGeneratorConfig config = configBuilder.build();
+ generator = new SchemaGenerator(config);
+ }
+
+ private void generate(Type targetType, String directory, String filename) throws IOException {
+ JsonNode jsonSchema = generator.generateSchema(targetType);
+
+ String dir = Paths.get(Paths.get(getClass().getResource("/").getPath()).toAbsolutePath() + directory).toString();
+
+ if(!Files.exists(Paths.get(dir))){
+ Files.createDirectories(Paths.get(dir));
+ }
+
+ if(!Files.exists(Paths.get(dir + "/" + filename))) {
+ Files.createFile(Paths.get(dir + "/" + filename));
+ }
+
+ File f = new File(dir + "/" + filename);
+
+ try(PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(f)))) {
+ writer.println(new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(jsonSchema));
+ }
+
+
+ }
+ public static void main(String[] args) throws IOException {
+
+ ExecCreateSchemas ecs = new ExecCreateSchemas();
+ ecs.init();
+ ecs.generate(GraphResult.class, DIRECTORY , "result_schema.json");
+ ecs.generate(ResearchCommunity.class, DIRECTORY , "community_infrastructure_schema.json");
+ ecs.generate(Datasource.class, DIRECTORY , "datasource_schema.json");
+ ecs.generate(Project.class, DIRECTORY , "project_schema.json");
+ ecs.generate(Relation.class, DIRECTORY , "relation_schema.json");
+ ecs.generate(Organization.class, DIRECTORY , "organization_schema.json");
+
+ ecs.generate(CommunityResult.class, DIRECTORY , "community_result_schema.json");
+
+
+
+
+
+ }
+}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/AccessRight.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/AccessRight.java
index b973f5b..195da21 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/AccessRight.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/AccessRight.java
@@ -2,26 +2,15 @@
package eu.dnetlib.dhp.schema.dump.oaf;
/**
- * AccessRight. Used to represent the result access rights. It extends the eu.dnet.lib.dhp.schema.dump.oaf.Qualifier
- * element with a parameter scheme of type String to store the scheme. Values for this element are found against the
- * COAR access right scheme. The classid of the element accessright in eu.dnetlib.dhp.schema.oaf.Result is used to get
- * the COAR corresponding code whose value will be used to set the code parameter. The COAR label corresponding to the
- * COAR code will be used to set the label parameter. The scheme value will always be the one referring to the COAR
- * access right scheme
+ * AccessRight. Used to represent the result access rights. It extends the eu.dnet.lib.dhp.schema.dump.oaf.BestAccessRight
+ * element with value for the openaccess route
*/
-public class AccessRight extends Qualifier {
+public class AccessRight extends BestAccessRight {
+
- private String scheme;
private OpenAccessRoute openAccessRoute ;
- public String getScheme() {
- return scheme;
- }
-
- public void setScheme(String scheme) {
- this.scheme = scheme;
- }
public static AccessRight newInstance(String code, String label, String scheme) {
AccessRight ar = new AccessRight();
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/AlternateIdentifier.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/AlternateIdentifier.java
new file mode 100644
index 0000000..e48a564
--- /dev/null
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/AlternateIdentifier.java
@@ -0,0 +1,40 @@
+package eu.dnetlib.dhp.schema.dump.oaf;
+
+import java.io.Serializable;
+
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
+public class AlternateIdentifier implements Serializable {
+ @JsonSchema(description="The scheme of the identifier. It can be a persistent identifier (i.e. doi). If it is present in the alternate identifiers " +
+ "it means it has not been forged by an authority for that pid. For example we collect metadata from an institutional repository that provides " +
+ "as identifier for the result also the doi")
+ private String scheme;
+
+ @JsonSchema(description="The value expressed in the scheme")
+ private String value;
+
+ public String getScheme() {
+ return scheme;
+ }
+
+ public void setScheme(String scheme) {
+ this.scheme = scheme;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public static AlternateIdentifier newInstance(String scheme, String value) {
+ AlternateIdentifier cf = new AlternateIdentifier();
+
+ cf.setScheme(scheme);
+ cf.setValue(value);
+
+ return cf;
+ }
+}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Author.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Author.java
index ef035a1..3c7710b 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Author.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Author.java
@@ -3,6 +3,8 @@ package eu.dnetlib.dhp.schema.dump.oaf;
import java.io.Serializable;
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
/**
* Used to represent the generic author of the result. It has six parameters: - name of type String to store the given
* name of the author. The value for this parameter corresponds to eu.dnetlib.dhp.schema.oaf.Author name - surname of
@@ -27,7 +29,8 @@ public class Author implements Serializable {
private Integer rank;
- private Pid pid;
+ @JsonSchema(description="The author's persistent identifiers")
+ private AuthorPid pid;
public String getFullname() {
return fullname;
@@ -61,11 +64,11 @@ public class Author implements Serializable {
this.rank = rank;
}
- public Pid getPid() {
+ public AuthorPid getPid() {
return pid;
}
- public void setPid(Pid pid) {
+ public void setPid(AuthorPid pid) {
this.pid = pid;
}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/AuthorPid.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/AuthorPid.java
new file mode 100644
index 0000000..e77a078
--- /dev/null
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/AuthorPid.java
@@ -0,0 +1,54 @@
+
+package eu.dnetlib.dhp.schema.dump.oaf;
+
+import java.io.Serializable;
+
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
+/**
+ * To represent the generic persistent identifier. It has two parameters:
+ * - id of type
+ * eu.dnetlib.dhp.schema.dump.oaf.AuthorPidSchemeValue to store the scheme and value of the Persistent Identifier.
+ * - provenance of type eu.dnetlib.dhp.schema.dump.oaf.Provenance to store the provenance and trust of the information
+ */
+public class AuthorPid implements Serializable {
+
+ private AuthorPidSchemeValue id;
+
+ @JsonSchema(description="The reason why the pid was associated to the author")
+ private Provenance provenance;
+
+ public AuthorPidSchemeValue getId() {
+ return id;
+ }
+
+ public void setId(AuthorPidSchemeValue pid) {
+ this.id = pid;
+ }
+
+ public Provenance getProvenance() {
+ return provenance;
+ }
+
+ public void setProvenance(Provenance provenance) {
+ this.provenance = provenance;
+ }
+
+ public static AuthorPid newInstance(AuthorPidSchemeValue pid, Provenance provenance) {
+ AuthorPid p = new AuthorPid();
+ p.id = pid;
+ p.provenance = provenance;
+
+ return p;
+ }
+
+ public static AuthorPid newInstance(AuthorPidSchemeValue pid) {
+ AuthorPid p = new AuthorPid();
+ p.id = pid;
+
+ return p;
+ }
+
+
+}
+
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/AuthorPidSchemeValue.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/AuthorPidSchemeValue.java
new file mode 100644
index 0000000..3e22c9f
--- /dev/null
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/AuthorPidSchemeValue.java
@@ -0,0 +1,39 @@
+package eu.dnetlib.dhp.schema.dump.oaf;
+
+import java.io.Serializable;
+
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
+public class AuthorPidSchemeValue implements Serializable {
+
+ @JsonSchema(description="The author's pid scheme. OpenAIRE currently supports 'ORCID'")
+ private String scheme;
+
+ @JsonSchema(description="The author's pid value in that scheme (i.e. 0000-1111-2222-3333)")
+ private String value;
+
+ public String getScheme() {
+ return scheme;
+ }
+
+ public void setScheme(String scheme) {
+ this.scheme = scheme;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public static AuthorPidSchemeValue newInstance(String scheme, String value) {
+ AuthorPidSchemeValue cf = new AuthorPidSchemeValue();
+
+ cf.setScheme(scheme);
+ cf.setValue(value);
+
+ return cf;
+ }
+}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/BestAccessRight.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/BestAccessRight.java
new file mode 100644
index 0000000..6ae9b54
--- /dev/null
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/BestAccessRight.java
@@ -0,0 +1,59 @@
+package eu.dnetlib.dhp.schema.dump.oaf;
+
+import java.io.Serializable;
+
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
+/**
+ * BestAccessRight. Used to represent the result best access rights. Values for this element are found against the
+ * COAR access right scheme. The classid of the element accessright in eu.dnetlib.dhp.schema.oaf.Result is used to get
+ * the COAR corresponding code whose value will be used to set the code parameter. The COAR label corresponding to the
+ * COAR code will be used to set the label parameter. The scheme value will always be the one referring to the COAR
+ * access right scheme
+ */
+
+public class BestAccessRight implements Serializable {
+
+ @JsonSchema(description="COAR access mode code: http://vocabularies.coar-repositories.org/documentation/access_rights/")
+ private String code; // the classid in the Qualifier
+
+ @JsonSchema(description="Label for the access mode")
+ private String label; // the classname in the Qualifier
+
+ @JsonSchema(description="Scheme of reference for access right code. Always set to COAR access rights vocabulary: http://vocabularies.coar-repositories.org/documentation/access_rights/")
+ private String scheme;
+
+ public String getScheme() {
+ return scheme;
+ }
+
+ public void setScheme(String scheme) {
+ this.scheme = scheme;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public String getLabel() {
+ return label;
+ }
+
+ public void setLabel(String label) {
+ this.label = label;
+ }
+
+
+ public static BestAccessRight newInstance(String code, String label, String scheme) {
+ BestAccessRight ar = new BestAccessRight();
+ ar.code = code ;
+ ar.label = label;
+ ar.scheme = scheme;
+ return ar;
+ }
+}
+
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Container.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Container.java
index ad9ea48..bef5f74 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Container.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Container.java
@@ -3,6 +3,8 @@ package eu.dnetlib.dhp.schema.dump.oaf;
import java.io.Serializable;
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
/**
* To store information about the conference or journal where the result has been presented or published. It contains
* eleven parameters: - name of type String to store the name of the journal or conference. It corresponds to the
@@ -22,6 +24,7 @@ import java.io.Serializable;
*/
public class Container implements Serializable {
+ @JsonSchema(description="Name of the journal or conference")
private String name;
private String issnPrinted;
@@ -30,14 +33,19 @@ public class Container implements Serializable {
private String issnLinking;
+ @JsonSchema(description="End page")
private String ep;
+ @JsonSchema(description="Journal issue number")
private String iss;
+ @JsonSchema(description="Start page")
private String sp;
+ @JsonSchema(description = "Volume")
private String vol;
+ @JsonSchema(description="Edition of the journal or conference proceeding")
private String edition;
private String conferenceplace;
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/ControlledField.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/ControlledField.java
deleted file mode 100644
index cad7b8b..0000000
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/ControlledField.java
+++ /dev/null
@@ -1,38 +0,0 @@
-
-package eu.dnetlib.dhp.schema.dump.oaf;
-
-import java.io.Serializable;
-
-/**
- * To represent the information described by a scheme and a value in that scheme (i.e. pid). It has two parameters: -
- * scheme of type String to store the scheme - value of type String to store the value in that scheme
- */
-public class ControlledField implements Serializable {
- private String scheme;
- private String value;
-
- public String getScheme() {
- return scheme;
- }
-
- public void setScheme(String scheme) {
- this.scheme = scheme;
- }
-
- public String getValue() {
- return value;
- }
-
- public void setValue(String value) {
- this.value = value;
- }
-
- public static ControlledField newInstance(String scheme, String value) {
- ControlledField cf = new ControlledField();
-
- cf.setScheme(scheme);
- cf.setValue(value);
-
- return cf;
- }
-}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Country.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Country.java
index 3ab4d90..0cf58b3 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Country.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Country.java
@@ -1,8 +1,12 @@
package eu.dnetlib.dhp.schema.dump.oaf;
+import java.io.Serializable;
+
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
/**
- * Represents the country associated to this result. It extends eu.dnetlib.dhp.schema.dump.oaf.Qualifier with a
+ * Represents the country associated to the generic entity. It extends eu.dnetlib.dhp.schema.dump.oaf.Qualifier with a
* provenance parameter of type eu.dnetlib.dhp.schema.dumo.oaf.Provenance. The country in not mapped if its value in the
* result reprensented in the internal format is Unknown. The value for this element correspond to: - code corresponds
* to the classid of eu.dnetlib.dhp.schema.oaf.Country - label corresponds to the classname of
@@ -10,28 +14,36 @@ package eu.dnetlib.dhp.schema.dump.oaf;
* dumped is not null. In this case : - provenance corresponds to dataInfo.provenanceaction.classid (to be modified with
* datainfo.provenanceaction.classname) - trust corresponds to dataInfo.trust
*/
-public class Country extends Qualifier {
+public class Country implements Serializable {
+ @JsonSchema(description="ISO 3166-1 alpha-2 country code (i.e. IT)")
+ private String code; // the classid in the Qualifier
- private Provenance provenance;
+ @JsonSchema(description="The label for that code (i.e. Italy)")
+ private String label; // the classname in the Qualifier
- public Provenance getProvenance() {
- return provenance;
+ public String getCode() {
+ return code;
}
- public void setProvenance(Provenance provenance) {
- this.provenance = provenance;
+ public void setCode(String code) {
+ this.code = code;
}
- public static Country newInstance(String code, String label, Provenance provenance) {
+ public String getLabel() {
+ return label;
+ }
+
+ public void setLabel(String label) {
+ this.label = label;
+ }
+
+ public static Country newInstance(String code, String label) {
Country c = new Country();
- c.setProvenance(provenance);
c.setCode(code);
c.setLabel(label);
return c;
}
- public static Country newInstance(String code, String label, String provenance, String trust) {
- return newInstance(code, label, Provenance.newInstance(provenance, trust));
- }
+
}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Funder.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Funder.java
index 16cab22..674b8b3 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Funder.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Funder.java
@@ -3,11 +3,17 @@ package eu.dnetlib.dhp.schema.dump.oaf;
import java.io.Serializable;
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
public class Funder implements Serializable {
+
+ @JsonSchema(description = "The short name of the funder (EC)")
private String shortName;
+ @JsonSchema(description = "The name of the funder (European Commission)")
private String name;
+ @JsonSchema(description = "Geographical jurisdiction (e.g. for European Commission is EU, for Croatian Science Foundation is HR)")
private String jurisdiction;
public String getJurisdiction() {
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Instance.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Instance.java
index abfcc2c..b8b2fbc 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Instance.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Instance.java
@@ -4,6 +4,11 @@ package eu.dnetlib.dhp.schema.dump.oaf;
import java.io.Serializable;
import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
/**
* Represents the manifestations (i.e. different versions) of the result. For example: the pre-print and the published
* versions are two manifestations of the same research result. It has the following parameters: - license of type
@@ -19,27 +24,41 @@ import java.util.List;
* -pid of type List that is the list of pids associated to the result coming from authoritative sources for that pid
* -alternateIdentifier of type List that is the list of pids associated to the result coming from NON authoritative
* sources for that pid
+ * -measure list to represent the measure computed for this instance (for example the Bip!Finder ones). It corresponds to measures in the model
*/
public class Instance implements Serializable {
- private List pid;
+ @JsonSchema(description = "Measures computed for this instance, for example Bip!Finder ones")
+ private List measures;
- private List alternateIdentifier;
+ private List pid;
+
+ @JsonSchema(description = "All the identifiers other than pids forged by an authorithy for the pid type (i.e. Crossref for DOIs")
+ private List alternateIdentifier;
private String license;
+ @JsonSchema(description = "The accessRights for this materialization of the result")
private AccessRight accessright;
+ @JsonSchema(description = "The specific sub-type of this instance (see https://api.openaire.eu/vocabularies/dnet:result_typologies following the links)")
private String type;
+ @JsonSchema(description = "URLs to the instance. They may link to the actual full-text or to the landing page at the hosting source. ")
private List url;
+ @JsonSchema(description = "The money spent to make this book or article available in Open Access. Source for this information is the OpenAPC initiative.")
private APC articleprocessingcharge;
+ @JsonSchema(description = "Date of the research product")
private String publicationdate;// dateofacceptance;
+ @JsonSchema(description = "If this instance has been peer-reviewed or not. Allowed values are peerReviewed, " +
+ "nonPeerReviewed, UNKNOWN (as defined in https://api.openaire.eu/vocabularies/dnet:review_levels)")
private String refereed; // peer-review status
+
+
public String getLicense() {
return license;
}
@@ -96,19 +115,30 @@ public class Instance implements Serializable {
this.articleprocessingcharge = articleprocessingcharge;
}
- public List getPid() {
+ public List getPid() {
return pid;
}
- public void setPid(List pid) {
+ public void setPid(List pid) {
this.pid = pid;
}
- public List getAlternateIdentifier() {
+ public List getAlternateIdentifier() {
return alternateIdentifier;
}
- public void setAlternateIdentifier(List alternateIdentifier) {
+ public void setAlternateIdentifier(List alternateIdentifier) {
this.alternateIdentifier = alternateIdentifier;
}
+
+ public List getMeasures() {
+ return measures;
+ }
+
+ public void setMeasures(List measures) {
+ this.measures = measures;
+ }
}
+
+
+
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/KeyValue.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/KeyValue.java
deleted file mode 100644
index 849aa4d..0000000
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/KeyValue.java
+++ /dev/null
@@ -1,48 +0,0 @@
-
-package eu.dnetlib.dhp.schema.dump.oaf;
-
-import java.io.Serializable;
-
-import org.apache.commons.lang3.StringUtils;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-
-/**
- * To represent the information described by a key and a value. It has two parameters: - key to store the key (generally
- * the OpenAIRE id for some entity) - value to store the value (generally the OpenAIRE name for the key)
- */
-public class KeyValue implements Serializable {
-
- private String key;
-
- private String value;
-
- public String getKey() {
- return key;
- }
-
- public void setKey(String key) {
- this.key = key;
- }
-
- public String getValue() {
- return value;
- }
-
- public void setValue(String value) {
- this.value = value;
- }
-
- public static KeyValue newInstance(String key, String value) {
- KeyValue inst = new KeyValue();
- inst.key = key;
- inst.value = value;
- return inst;
- }
-
- @JsonIgnore
- public boolean isBlank() {
- return StringUtils.isBlank(key) && StringUtils.isBlank(value);
- }
-
-}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Language.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Language.java
new file mode 100644
index 0000000..6d4de35
--- /dev/null
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Language.java
@@ -0,0 +1,37 @@
+package eu.dnetlib.dhp.schema.dump.oaf;
+
+import java.io.Serializable;
+
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
+public class Language implements Serializable {
+
+ @JsonSchema(description="alpha-3/ISO 639-2 code of the language")
+ private String code; // the classid in the Qualifier
+
+ @JsonSchema(description="Language label in English")
+ private String label; // the classname in the Qualifier
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public String getLabel() {
+ return label;
+ }
+
+ public void setLabel(String label) {
+ this.label = label;
+ }
+
+ public static Language newInstance(String code, String value) {
+ Language qualifier = new Language();
+ qualifier.setCode(code);
+ qualifier.setLabel(value);
+ return qualifier;
+ }
+}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Measure.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Measure.java
new file mode 100644
index 0000000..4c86001
--- /dev/null
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Measure.java
@@ -0,0 +1,45 @@
+package eu.dnetlib.dhp.schema.dump.oaf;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
+public class Measure implements Serializable {
+ @JsonSchema(description = "The measure (i.e. popularity)")
+ private String key;
+
+ @JsonSchema(description = "The value for that measure")
+ private String value;
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public static Measure newInstance(String key, String value) {
+ Measure inst = new Measure();
+ inst.key = key;
+ inst.value = value;
+ return inst;
+ }
+
+ @JsonIgnore
+ public boolean isBlank() {
+ return StringUtils.isBlank(key) && StringUtils.isBlank(value);
+ }
+
+}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Pid.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Pid.java
deleted file mode 100644
index 786ddb1..0000000
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Pid.java
+++ /dev/null
@@ -1,45 +0,0 @@
-
-package eu.dnetlib.dhp.schema.dump.oaf;
-
-import java.io.Serializable;
-
-/**
- * To represent the generic persistent identifier. It has two parameters: - id of type
- * eu.dnetlib.dhp.schema.dump.oaf.ControlledField to store the scheme and value of the Persistent Identifier. -
- * provenance of type eu.dnetlib.dhp.schema.dump.oaf.Provenance to store the provenance and trust of the information
- */
-public class Pid implements Serializable {
- private ControlledField id;
- private Provenance provenance;
-
- public ControlledField getId() {
- return id;
- }
-
- public void setId(ControlledField pid) {
- this.id = pid;
- }
-
- public Provenance getProvenance() {
- return provenance;
- }
-
- public void setProvenance(Provenance provenance) {
- this.provenance = provenance;
- }
-
- public static Pid newInstance(ControlledField pid, Provenance provenance) {
- Pid p = new Pid();
- p.id = pid;
- p.provenance = provenance;
-
- return p;
- }
-
- public static Pid newInstance(ControlledField pid) {
- Pid p = new Pid();
- p.id = pid;
-
- return p;
- }
-}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Project.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Project.java
index 00cd7a0..fc7472b 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Project.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Project.java
@@ -3,6 +3,8 @@ package eu.dnetlib.dhp.schema.dump.oaf;
import java.io.Serializable;
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
/**
* This class to store the common information about the project that will be dumped for community and for the whole
* graph - private String id to store the id of the project (OpenAIRE id) - private String code to store the grant
@@ -10,9 +12,13 @@ import java.io.Serializable;
* the tile of the project
*/
public class Project implements Serializable {
+ @JsonSchema(description = "The OpenAIRE id for the project")
protected String id;// OpenAIRE id
+
+ @JsonSchema(description = "The grant agreement number")
protected String code;
+ @JsonSchema(description = "The acronym of the project")
protected String acronym;
protected String title;
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Provenance.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Provenance.java
index 28fb3aa..2870ba5 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Provenance.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Provenance.java
@@ -3,6 +3,8 @@ package eu.dnetlib.dhp.schema.dump.oaf;
import java.io.Serializable;
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
/**
* Indicates the process that produced (or provided) the information, and the trust associated to the information. It
* has two parameters: - provenance of type String to store the provenance of the information, - trust of type String to
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Qualifier.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Qualifier.java
deleted file mode 100644
index fd21424..0000000
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Qualifier.java
+++ /dev/null
@@ -1,38 +0,0 @@
-
-package eu.dnetlib.dhp.schema.dump.oaf;
-
-import java.io.Serializable;
-
-/**
- * To represent the information described by a code and a value It has two parameters: - code to store the code
- * (generally the classid of the eu.dnetlib.dhp.schema.oaf.Qualifier element) - label to store the label (generally the
- * classname of the eu.dnetlib.dhp.schema.oaf.Qualifier element
- */
-public class Qualifier implements Serializable {
-
- private String code; // the classid in the Qualifier
- private String label; // the classname in the Qualifier
-
- public String getCode() {
- return code;
- }
-
- public void setCode(String code) {
- this.code = code;
- }
-
- public String getLabel() {
- return label;
- }
-
- public void setLabel(String label) {
- this.label = label;
- }
-
- public static Qualifier newInstance(String code, String value) {
- Qualifier qualifier = new Qualifier();
- qualifier.setCode(code);
- qualifier.setLabel(value);
- return qualifier;
- }
-}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Result.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Result.java
index 932df9e..560f74b 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Result.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Result.java
@@ -4,15 +4,21 @@ package eu.dnetlib.dhp.schema.dump.oaf;
import java.io.Serializable;
import java.util.List;
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
/**
* To represent the dumped result. It will be extended in the dump for Research Communities - Research
- * Initiative/Infrastructures. It has the following parameters: - author of type
+ * Initiative/Infrastructures. It has the following parameters:
+ * - author of type
* List to describe the authors of a result. For each author in the result
- * represented in the internal model one author in the esternal model is produced. - type of type String to represent
+ * represented in the internal model one author in the esternal model is produced.
+ * - type of type String to represent
* the category of the result. Possible values are publication, dataset, software, other. It corresponds to
- * resulttype.classname of the dumped result - language of type eu.dnetlib.dhp.schema.dump.oaf.Qualifier to store
+ * resulttype.classname of the dumped result
+ * - language of type eu.dnetlib.dhp.schema.dump.oaf.Language to store
* information about the language of the result. It is dumped as - code corresponds to language.classid - value
- * corresponds to language.classname - country of type List to store the country
+ * corresponds to language.classname
+ * - country of type List to store the country
* list to which the result is associated. For each country in the result respresented in the internal model one country
* in the external model is produces - subjects of type List to store the subjects for
* the result. For each subject in the result represented in the internal model one subject in the external model is
@@ -60,76 +66,101 @@ import java.util.List;
* to store information about the time OpenAIRE collected the record. It corresponds to dateofcollection of the result
* represented in the internal model - lasteupdatetimestamp of type String to store the timestamp of the last update of
* the record. It corresponds to lastupdatetimestamp of the resord represented in the internal model
- * -measure list to represent the measure of beepFinder. It corresponds to measures in the model
+ *
*/
public class Result implements Serializable {
- private List measures;
-
private List author;
// resulttype allows subclassing results into publications | datasets | software
+ @JsonSchema(description = "Type of the result: one of 'publication', 'dataset', 'software', 'other' (see also https://api.openaire.eu/vocabularies/dnet:result_typologies)")
private String type; // resulttype
// common fields
- private Qualifier language;
+ private Language language;
- private List country;
+ @JsonSchema(description="The list of countries associated to this result")
+ private List country;
+ @JsonSchema(description="Keywords associated to the result")
private List subjects;
+ @JsonSchema(description = "A name or title by which a scientific result is known. May be the title of a publication, of a dataset or the name of a piece of software.")
private String maintitle;
+ @JsonSchema(description = "Explanatory or alternative name by which a scientific result is known.")
private String subtitle;
private List description;
+ @JsonSchema(description = "Main date of the research product: typically the publication or issued date. In case of a research result with different versions with different dates, the date of the result is selected as the most frequent well-formatted date. If not available, then the most recent and complete date among those that are well-formatted. For statistics, the year is extracted and the result is counted only among the result of that year. Example: Pre-print date: 2019-02-03, Article date provided by repository: 2020-02, Article date provided by Crossref: 2020, OpenAIRE will set as date 2019-02-03, because it’s the most recent among the complete and well-formed dates. If then the repository updates the metadata and set a complete date (e.g. 2020-02-12), then this will be the new date for the result because it becomes the most recent most complete date. However, if OpenAIRE then collects the pre-print from another repository with date 2019-02-03, then this will be the “winning date” because it becomes the most frequent well-formatted date.")
private String publicationdate; // dateofacceptance;
+ @JsonSchema(description = "The name of the entity that holds, archives, publishes prints, distributes, releases, issues, or produces the resource.")
private String publisher;
+ @JsonSchema(description = "Date when the embargo ends and this result turns Open Access")
private String embargoenddate;
+ @JsonSchema(description = "See definition of Dublin Core field dc:source")
private List source;
private List format;
+ @JsonSchema(description="Contributors for the result")
private List contributor;
private List coverage;
- private AccessRight bestaccessright;
+ @JsonSchema(description="The openest of the access rights of this result.")
+ private BestAccessRight bestaccessright;
+ @JsonSchema(description="Container has information about the conference or journal where the result has been presented or published")
private Container container;// Journal
+ @JsonSchema(description = "Only for results with type 'software': URL to the software documentation")
private List documentationUrl; // software
+ @JsonSchema(description="Only for results with type 'software': the URL to the repository with the source code")
private String codeRepositoryUrl; // software
+ @JsonSchema(description = "Only for results with type 'software': the programming language")
private String programmingLanguage; // software
+ @JsonSchema(description="Only for results with type 'software': Information on the person responsible for providing further information regarding the resource")
private List contactperson; // orp
+ @JsonSchema(description="Only for results with type 'software': Information on the group responsible for providing further information regarding the resource")
private List contactgroup; // orp
+ @JsonSchema(description = "Only for results with type 'other': tool useful for the interpretation and/or re-used of the research product")
private List tool; // orp
+ @JsonSchema(description = "Only for results with type 'dataset': the declared size of the dataset")
private String size; // dataset
+ @JsonSchema(description = "Version of the result")
private String version; // dataset
+ @JsonSchema(description = "Geolocation information")
private List geolocation; // dataset
+ @JsonSchema(description = "The OpenAIRE identifiers for this result")
private String id;
+ @JsonSchema(description = "Identifiers of the record at the original sources")
private List originalId;
- private List pid;
+ @JsonSchema(description = "Persistent identifiers of the result")
+ private List pid;
+ @JsonSchema(description="When OpenAIRE collected the record the last time")
private String dateofcollection;
+ @JsonSchema(description = "Timestamp of last update of the record in OpenAIRE")
private Long lastupdatetimestamp;
+
public Long getLastupdatetimestamp() {
return lastupdatetimestamp;
}
@@ -154,11 +185,11 @@ public class Result implements Serializable {
this.originalId = originalId;
}
- public List getPid() {
+ public List getPid() {
return pid;
}
- public void setPid(List pid) {
+ public void setPid(List pid) {
this.pid = pid;
}
@@ -194,19 +225,19 @@ public class Result implements Serializable {
this.author = author;
}
- public Qualifier getLanguage() {
+ public Language getLanguage() {
return language;
}
- public void setLanguage(Qualifier language) {
+ public void setLanguage(Language language) {
this.language = language;
}
- public List getCountry() {
+ public List getCountry() {
return country;
}
- public void setCountry(List country) {
+ public void setCountry(List country) {
this.country = country;
}
@@ -298,11 +329,11 @@ public class Result implements Serializable {
this.coverage = coverage;
}
- public AccessRight getBestaccessright() {
+ public BestAccessRight getBestaccessright() {
return bestaccessright;
}
- public void setBestaccessright(AccessRight bestaccessright) {
+ public void setBestaccessright(BestAccessRight bestaccessright) {
this.bestaccessright = bestaccessright;
}
@@ -378,11 +409,5 @@ public class Result implements Serializable {
this.geolocation = geolocation;
}
- public List getMeasures() {
- return measures;
- }
- public void setMeasures(List measures) {
- this.measures = measures;
- }
}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/ResultCountry.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/ResultCountry.java
new file mode 100644
index 0000000..df2650b
--- /dev/null
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/ResultCountry.java
@@ -0,0 +1,40 @@
+package eu.dnetlib.dhp.schema.dump.oaf;
+
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
+/**
+ * Represents the country associated to the generic result. It extends eu.dnetlib.dhp.schema.dump.oaf.Country with a
+ * provenance parameter of type eu.dnetlib.dhp.schema.dumo.oaf.Provenance. The country is not mapped if its value in the
+ * result reprensented in the internal format is Unknown. The value for this element correspond to:
+ * - code corresponds to the classid of eu.dnetlib.dhp.schema.oaf.Country
+ * - label corresponds to the classname of eu.dnetlib.dhp.schema.oaf.Country
+ * - provenance set only if the dataInfo associated to the Country of the result to be dumped is not null. In this case:
+ * - provenance corresponds to dataInfo.provenanceaction.classid (to be modified with datainfo.provenanceaction.classname)
+ * - trust corresponds to dataInfo.trust
+ */
+
+public class ResultCountry extends Country {
+
+ @JsonSchema(description="Why this result is associated to the country.")
+ private Provenance provenance;
+
+ public Provenance getProvenance() {
+ return provenance;
+ }
+
+ public void setProvenance(Provenance provenance) {
+ this.provenance = provenance;
+ }
+
+ public static ResultCountry newInstance(String code, String label, Provenance provenance) {
+ ResultCountry c = new ResultCountry();
+ c.setProvenance(provenance);
+ c.setCode(code);
+ c.setLabel(label);
+ return c;
+ }
+
+ public static ResultCountry newInstance(String code, String label, String provenance, String trust) {
+ return newInstance(code, label, Provenance.newInstance(provenance, trust));
+ }
+}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/ResultPid.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/ResultPid.java
new file mode 100644
index 0000000..f95d06e
--- /dev/null
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/ResultPid.java
@@ -0,0 +1,41 @@
+package eu.dnetlib.dhp.schema.dump.oaf;
+
+import java.io.Serializable;
+
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
+public class ResultPid implements Serializable {
+ @JsonSchema(description="The scheme of the persistent identifier for the result (i.e. doi). " +
+ "If the pid is here it means the information for the pid has been collected from an authority for " +
+ "that pid type (i.e. Crossref/Datacite for doi). The set of authoritative pid is: doi when collected from Crossref or Datacite " +
+ "pmid when collected from EuroPubmed, arxiv when collected from arXiv, handle from the repositories")
+ private String scheme;
+
+ @JsonSchema(description="The value expressed in the scheme (i.e. 10.1000/182)")
+ private String value;
+
+ public String getScheme() {
+ return scheme;
+ }
+
+ public void setScheme(String scheme) {
+ this.scheme = scheme;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public static ResultPid newInstance(String scheme, String value) {
+ ResultPid cf = new ResultPid();
+
+ cf.setScheme(scheme);
+ cf.setValue(value);
+
+ return cf;
+ }
+}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Subject.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Subject.java
index 5c4bbef..2edee2f 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Subject.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/Subject.java
@@ -3,23 +3,29 @@ package eu.dnetlib.dhp.schema.dump.oaf;
import java.io.Serializable;
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
/**
- * To represent keywords associated to the result. It has two parameters: - subject of type
- * eu.dnetlib.dhp.schema.dump.oaf.ControlledField to describe the subject. It mapped as: - schema it corresponds to
- * qualifier.classid of the dumped subject - value it corresponds to the subject value - provenance of type
- * eu.dnetlib.dhp.schema.dump.oaf.Provenance to represent the provenance of the subject. It is dumped only if dataInfo
- * is not null. In this case: - provenance corresponds to dataInfo.provenanceaction.classname - trust corresponds to
- * dataInfo.trust
+ * To represent keywords associated to the result. It has two parameters:
+ * - subject of type eu.dnetlib.dhp.schema.dump.oaf.SubjectSchemeValue to describe the subject. It mapped as:
+ * - schema it corresponds to qualifier.classid of the dumped subject
+ * - value it corresponds to the subject value
+ * - provenance of type eu.dnetlib.dhp.schema.dump.oaf.Provenance to represent the provenance of the subject. It is dumped only if dataInfo
+ * is not null. In this case:
+ * - provenance corresponds to dataInfo.provenanceaction.classname
+ * - trust corresponds to dataInfo.trust
*/
public class Subject implements Serializable {
- private ControlledField subject;
+ private SubjectSchemeValue subject;
+
+ @JsonSchema(description = "Why this subject is associated to the result")
private Provenance provenance;
- public ControlledField getSubject() {
+ public SubjectSchemeValue getSubject() {
return subject;
}
- public void setSubject(ControlledField subject) {
+ public void setSubject(SubjectSchemeValue subject) {
this.subject = subject;
}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/SubjectSchemeValue.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/SubjectSchemeValue.java
new file mode 100644
index 0000000..9228088
--- /dev/null
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/SubjectSchemeValue.java
@@ -0,0 +1,39 @@
+package eu.dnetlib.dhp.schema.dump.oaf;
+
+import java.io.Serializable;
+
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
+public class SubjectSchemeValue implements Serializable {
+ @JsonSchema(description="OpenAIRE subject classification scheme (https://api.openaire.eu/vocabularies/dnet:subject_classification_typologies).")
+ private String scheme;
+
+ @JsonSchema(description="The value for the subject in the selected scheme. When the scheme is 'keyword', it means that the subject is free-text (i.e. not a term from a controlled vocabulary).")
+ private String value;
+
+ public String getScheme() {
+ return scheme;
+ }
+
+ public void setScheme(String scheme) {
+ this.scheme = scheme;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public static SubjectSchemeValue newInstance(String scheme, String value) {
+ SubjectSchemeValue cf = new SubjectSchemeValue();
+
+ cf.setScheme(scheme);
+ cf.setValue(value);
+
+ return cf;
+ }
+
+}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/CfHbKeyValue.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/CfHbKeyValue.java
new file mode 100644
index 0000000..68bda2d
--- /dev/null
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/CfHbKeyValue.java
@@ -0,0 +1,46 @@
+package eu.dnetlib.dhp.schema.dump.oaf.community;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
+public class CfHbKeyValue implements Serializable {
+
+ @JsonSchema(description = "the OpenAIRE identifier of the data source")
+ private String key;
+
+ @JsonSchema(description = "the name of the data source")
+ private String value;
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public static CfHbKeyValue newInstance(String key, String value) {
+ CfHbKeyValue inst = new CfHbKeyValue();
+ inst.key = key;
+ inst.value = value;
+ return inst;
+ }
+
+ @JsonIgnore
+ public boolean isBlank() {
+ return StringUtils.isBlank(key) && StringUtils.isBlank(value);
+ }
+
+}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/CommunityInstance.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/CommunityInstance.java
index 6a605d7..5e5a87e 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/CommunityInstance.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/CommunityInstance.java
@@ -1,8 +1,9 @@
package eu.dnetlib.dhp.schema.dump.oaf.community;
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
import eu.dnetlib.dhp.schema.dump.oaf.Instance;
-import eu.dnetlib.dhp.schema.dump.oaf.KeyValue;
/**
* It extends eu.dnetlib.dhp.dump.oaf.Instance with values related to the community dump. In the Result dump this
@@ -15,22 +16,25 @@ import eu.dnetlib.dhp.schema.dump.oaf.KeyValue;
* collectedfrom.key - value corresponds to collectedfrom.value
*/
public class CommunityInstance extends Instance {
- private KeyValue hostedby;
- private KeyValue collectedfrom;
+ @JsonSchema(description = "Information about the source from which the instance can be viewed or downloaded.")
+ private CfHbKeyValue hostedby;
- public KeyValue getHostedby() {
+ @JsonSchema(description = "Information about the source from which the record has been collected")
+ private CfHbKeyValue collectedfrom;
+
+ public CfHbKeyValue getHostedby() {
return hostedby;
}
- public void setHostedby(KeyValue hostedby) {
+ public void setHostedby(CfHbKeyValue hostedby) {
this.hostedby = hostedby;
}
- public KeyValue getCollectedfrom() {
+ public CfHbKeyValue getCollectedfrom() {
return collectedfrom;
}
- public void setCollectedfrom(KeyValue collectedfrom) {
+ public void setCollectedfrom(CfHbKeyValue collectedfrom) {
this.collectedfrom = collectedfrom;
}
}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/CommunityResult.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/CommunityResult.java
index 690a537..9decf82 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/CommunityResult.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/CommunityResult.java
@@ -3,7 +3,8 @@ package eu.dnetlib.dhp.schema.dump.oaf.community;
import java.util.List;
-import eu.dnetlib.dhp.schema.dump.oaf.KeyValue;
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
import eu.dnetlib.dhp.schema.dump.oaf.Result;
/**
@@ -20,12 +21,16 @@ import eu.dnetlib.dhp.schema.dump.oaf.Result;
*/
public class CommunityResult extends Result {
+ @JsonSchema(description = "List of projects (i.e. grants) that (co-)funded the production ofn the research results")
private List projects;
+ @JsonSchema(description = "Reference to a relevant research infrastructure, initiative or community (RI/RC) among those collaborating with OpenAIRE. Please see https://connect.openaire.eu")
private List context;
- protected List collectedfrom;
+ @JsonSchema(description = "Information about the sources from which the record has been collected")
+ protected List collectedfrom;
+ @JsonSchema(description = "Each instance is one specific materialisation or version of the result. For example, you can have one result with three instance: one is the pre-print, one is the post-print, one is te published version")
private List instance;
public List getInstance() {
@@ -36,11 +41,11 @@ public class CommunityResult extends Result {
this.instance = instance;
}
- public List getCollectedfrom() {
+ public List getCollectedfrom() {
return collectedfrom;
}
- public void setCollectedfrom(List collectedfrom) {
+ public void setCollectedfrom(List collectedfrom) {
this.collectedfrom = collectedfrom;
}
@@ -61,3 +66,5 @@ public class CommunityResult extends Result {
}
}
+
+
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/Context.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/Context.java
index d4c1d40..79c1647 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/Context.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/Context.java
@@ -6,8 +6,9 @@ import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
import eu.dnetlib.dhp.schema.dump.oaf.Provenance;
-import eu.dnetlib.dhp.schema.dump.oaf.Qualifier;
/**
* Reference to a relevant research infrastructure, initiative or community (RI/RC) among those collaborating with
@@ -21,7 +22,14 @@ import eu.dnetlib.dhp.schema.dump.oaf.Qualifier;
* instantiated if the element datainfo.provenanceaction is not null. In this case - provenance corresponds to
* dataInfo.provenanceaction.classname - trust corresponds to dataInfo.trust
*/
-public class Context extends Qualifier {
+public class Context {
+ @JsonSchema(description="Code identifying the RI/RC")
+ private String code;
+
+ @JsonSchema(description="Label of the RI/RC")
+ private String label;
+
+ @JsonSchema(description = "Why this result is associated to the RI/RC.")
private List provenance;
public List getProvenance() {
@@ -32,6 +40,23 @@ public class Context extends Qualifier {
this.provenance = provenance;
}
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public String getLabel() {
+ return label;
+ }
+
+ public void setLabel(String label) {
+ this.label = label;
+ }
+
+
@Override
public int hashCode() {
final String p = Optional.ofNullable(getProvenance())
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/Funder.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/Funder.java
index 5ea0d12..5e17e0c 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/Funder.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/Funder.java
@@ -1,6 +1,8 @@
package eu.dnetlib.dhp.schema.dump.oaf.community;
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
/**
* To store information about the funder funding the project related to the result. It has the following parameters: -
* shortName of type String to store the funder short name (e.c. AKA). - name of type String to store the funder name
@@ -9,6 +11,7 @@ package eu.dnetlib.dhp.schema.dump.oaf.community;
*/
public class Funder extends eu.dnetlib.dhp.schema.dump.oaf.Funder {
+ @JsonSchema(description = "Stream of funding (e.g. for European Commission can be H2020 or FP7)")
private String fundingStream;
public String getFundingStream() {
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/Project.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/Project.java
index aadb790..88c5216 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/Project.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/Project.java
@@ -1,6 +1,8 @@
package eu.dnetlib.dhp.schema.dump.oaf.community;
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
import eu.dnetlib.dhp.schema.dump.oaf.Provenance;
/**
@@ -13,10 +15,21 @@ import eu.dnetlib.dhp.schema.dump.oaf.Provenance;
*/
public class Project extends eu.dnetlib.dhp.schema.dump.oaf.Project {
+ @JsonSchema(description = "Information about the funder funding the project")
private Funder funder;
private Provenance provenance;
+ private Validated validated;
+
+ public void setValidated(Validated validated){
+ this.validated = validated;
+ }
+
+ public Validated getValidated(){
+ return validated;
+ }
+
public Provenance getProvenance() {
return provenance;
}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/Validated.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/Validated.java
new file mode 100644
index 0000000..0d136f0
--- /dev/null
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/community/Validated.java
@@ -0,0 +1,39 @@
+
+package eu.dnetlib.dhp.schema.dump.oaf.community;
+
+import java.io.Serializable;
+
+/**
+ * To store information about the funder funding the project related to the result. It has the following parameters: -
+ * shortName of type String to store the funder short name (e.c. AKA). - name of type String to store the funder name
+ * (e.c. Akademy of Finland) - fundingStream of type String to store the funding stream - jurisdiction of type String to
+ * store the jurisdiction of the funder
+ */
+public class Validated implements Serializable {
+
+ private String validationDate;
+ private Boolean validatedByFunder;
+
+ public void setValidationDate(String validationDate){
+ this.validationDate = validationDate;
+ }
+
+ public String getValidationDate(){
+ return validationDate;
+ }
+
+ public void setValidatedByFunder(Boolean validated){
+ this.validatedByFunder = validated;
+ }
+
+ public Boolean getValidatedByFunder(){
+ return validatedByFunder;
+ }
+
+ public static Validated newInstance(Boolean validated, String validationDate){
+ Validated v = new Validated();
+ v.validatedByFunder = validated;
+ v.validationDate = validationDate;
+ return v;
+ }
+}
diff --git a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/graph/Datasource.java b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/graph/Datasource.java
index 62a32a0..3c2a7b3 100644
--- a/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/graph/Datasource.java
+++ b/src/main/java/eu/dnetlib/dhp/schema/dump/oaf/graph/Datasource.java
@@ -4,8 +4,9 @@ package eu.dnetlib.dhp.schema.dump.oaf.graph;
import java.io.Serializable;
import java.util.List;
+import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema;
+
import eu.dnetlib.dhp.schema.dump.oaf.Container;
-import eu.dnetlib.dhp.schema.dump.oaf.ControlledField;
/**
* To store information about the datasource OpenAIRE collects information from. It contains the following parameters: -
@@ -33,70 +34,91 @@ import eu.dnetlib.dhp.schema.dump.oaf.ControlledField;
* datasource. It corresponds to description.value of the datasource represented in the internal model
*/
public class Datasource implements Serializable {
-
+ @JsonSchema(description = "The OpenAIRE id of the data source")
private String id; // string
+ @JsonSchema(description = "Original identifiers for the datasource")
private List originalId; // list string
- private List pid; // list
+ @JsonSchema(description = "Persistent identifiers of the datasource")
+ private List pid; // list
- private ControlledField datasourcetype; // value
+ @JsonSchema(description = "The type of the datasource. See https://api.openaire.eu/vocabularies/dnet:datasource_typologies")
+ private DatasourceSchemeValue datasourcetype; // value
+ @JsonSchema(description = "OpenAIRE guidelines the data source comply with. See also https://guidelines.openaire.eu.")
private String openairecompatibility; // value
+ @JsonSchema(description = "The official name of the datasource")
private String officialname; // string
+ @JsonSchema(description = "The English name of the datasource")
private String englishname; // string
private String websiteurl; // string
private String logourl; // string
+ @JsonSchema(description = "The date of last validation against the OpenAIRE guidelines for the datasource records")
private String dateofvalidation; // string
private String description; // description
+ @JsonSchema(description = "List of subjects associated to the datasource")
private List subjects; // List
// opendoar specific fields (od*)
+ @JsonSchema(description = "The languages present in the data source's content, as defined by OpenDOAR.")
private List languages; // odlanguages List
+ @JsonSchema(description = "Types of content in the data source, as defined by OpenDOAR")
private List contenttypes; // odcontent types List
// re3data fields
+ @JsonSchema(description = "Releasing date of the data source, as defined by re3data.org")
private String releasestartdate; // string
+ @JsonSchema(description = "Date when the data source went offline or stopped ingesting new research data. As defined by re3data.org")
private String releaseenddate; // string
+ @JsonSchema(description = "The URL of a mission statement describing the designated community of the data source. As defined by re3data.org")
private String missionstatementurl; // string
- // {open, restricted or closed}
+ @JsonSchema(description = "Type of access to the data source, as defined by re3data.org. Possible values: " +
+ "{open, restricted, closed}")
private String accessrights; // databaseaccesstype string
// {open, restricted or closed}
+ @JsonSchema(description = "Type of data upload. As defined by re3data.org: one of {open, restricted,closed}")
private String uploadrights; // datauploadtype string
- // {feeRequired, registration, other}
+ @JsonSchema(description = "Access restrinctions to the data source, as defined by re3data.org. One of {feeRequired, registration, other}")
private String databaseaccessrestriction; // string
- // {feeRequired, registration, other}
+ @JsonSchema(description = "Upload restrictions applied by the datasource, as defined by re3data.org. One of {feeRequired, registration, other}")
private String datauploadrestriction; // string
+ @JsonSchema(description = "As defined by redata.org: 'yes' if the data source supports versioning, 'no' otherwise.")
private Boolean versioning; // boolean
+ @JsonSchema(description = "The URL of the data source providing information on how to cite its items. As defined by re3data.org.")
private String citationguidelineurl; // string
// {yes, no, uknown}
-
+ @JsonSchema(description = "The persistent identifier system that is used by the data source. As defined by re3data.org")
private String pidsystems; // string
+ @JsonSchema(description = "The certificate, seal or standard the data source complies with. As defined by re3data.org.")
private String certificates; // string
- private List