From 3f6204ddc0800c82e6c3704d67d744a3d3f6a334 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Tue, 31 Jan 2023 14:36:13 +0100 Subject: [PATCH 01/15] WIP: pruning out non necessary fields from the internal model --- README.md | 3 +- pom.xml | 2 +- .../dnetlib/dhp/schema/common/EntityType.java | 4 +- .../dhp/schema/common/ModelConstants.java | 24 +- .../dhp/schema/common/ModelSupport.java | 46 +- .../eu/dnetlib/dhp/schema/oaf/Author.java | 21 +- .../eu/dnetlib/dhp/schema/oaf/AuthorPid.java | 16 + .../eu/dnetlib/dhp/schema/oaf/DataInfo.java | 31 +- .../eu/dnetlib/dhp/schema/oaf/Dataset.java | 69 +- .../eu/dnetlib/dhp/schema/oaf/Datasource.java | 243 +++---- .../oaf/{OafEntity.java => Entity.java} | 93 ++- .../dhp/schema/oaf/EntityDataInfo.java | 44 ++ .../dhp/schema/oaf/ExternalReference.java | 16 +- .../java/eu/dnetlib/dhp/schema/oaf/Field.java | 45 -- .../eu/dnetlib/dhp/schema/oaf/Instance.java | 44 +- .../eu/dnetlib/dhp/schema/oaf/KeyValue.java | 10 - .../eu/dnetlib/dhp/schema/oaf/License.java | 16 + .../java/eu/dnetlib/dhp/schema/oaf/Oaf.java | 104 +-- .../dnetlib/dhp/schema/oaf/Organization.java | 136 ++-- .../dhp/schema/oaf/OtherResearchProduct.java | 36 +- .../eu/dnetlib/dhp/schema/oaf/Project.java | 198 ++--- .../eu/dnetlib/dhp/schema/oaf/Provenance.java | 24 + .../dnetlib/dhp/schema/oaf/Publication.java | 27 +- .../eu/dnetlib/dhp/schema/oaf/Publisher.java | 16 + .../eu/dnetlib/dhp/schema/oaf/Qualifier.java | 33 +- .../eu/dnetlib/dhp/schema/oaf/Relation.java | 27 +- .../eu/dnetlib/dhp/schema/oaf/Result.java | 453 ++---------- .../eu/dnetlib/dhp/schema/oaf/Software.java | 49 +- .../dhp/schema/oaf/StructuredProperty.java | 10 - .../eu/dnetlib/dhp/schema/oaf/Subject.java | 10 + .../schema/oaf/utils/IdentifierFactory.java | 10 +- .../dhp/schema/oaf/utils/PidComparator.java | 4 +- .../oaf/utils/ResultTypeComparator.java | 4 +- .../eu/dnetlib/dhp/schema/sx/OafUtils.scala | 55 +- .../dhp/schema/common/ModelSupportTest.java | 6 +- .../eu/dnetlib/dhp/schema/oaf/MergeTest.java | 682 ------------------ .../dhp/schema/oaf/utils/dataset_1.json | 1 - .../dhp/schema/oaf/utils/dataset_2.json | 1 - .../dhp/schema/oaf/utils/enrichment.json | 12 - .../dhp/schema/oaf/utils/orp-rohub.json | 198 ++++- .../dhp/schema/oaf/utils/publication_1.json | 1 - .../dhp/schema/oaf/utils/publication_2.json | 1 - .../dhp/schema/oaf/utils/publication_apc.json | 2 - .../schema/oaf/utils/publication_apc2.json | 2 - .../dhp/schema/oaf/utils/publications.json | 12 - 45 files changed, 820 insertions(+), 2021 deletions(-) create mode 100644 src/main/java/eu/dnetlib/dhp/schema/oaf/AuthorPid.java rename src/main/java/eu/dnetlib/dhp/schema/oaf/{OafEntity.java => Entity.java} (58%) create mode 100644 src/main/java/eu/dnetlib/dhp/schema/oaf/EntityDataInfo.java delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/oaf/Field.java create mode 100644 src/main/java/eu/dnetlib/dhp/schema/oaf/License.java create mode 100644 src/main/java/eu/dnetlib/dhp/schema/oaf/Provenance.java create mode 100644 src/main/java/eu/dnetlib/dhp/schema/oaf/Publisher.java delete mode 100644 src/test/java/eu/dnetlib/dhp/schema/oaf/MergeTest.java delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/dataset_1.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/dataset_2.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/enrichment.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_1.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_2.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_apc.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_apc2.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publications.json diff --git a/README.md b/README.md index 52fe9a4..f4ec07d 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,8 @@ This project defines **object schemas** of the OpenAIRE main entities and the re Namely it defines the model for - the graph internal representation, defined under the package `eu.dnetlib.dhp.schema.oaf` -- the public graph dump representations, defined under the package `eu.dnetlib.dhp.schema.dump.oaf` - the scholexplorer content representation, defined under the package `eu.dnetlib.dhp.schema.sx` -- the contents acquired from the netadata aggregation subsystem, defined under the package `eu.dnetlib.dhp.schema.mdstore` +- the contents acquired from the metadata aggregation subsystem, defined under the package `eu.dnetlib.dhp.schema.mdstore` - the ORCID common schemas, defined under the package `eu.dnetlib.dhp.schema.orcid` Te serialization of such objects (data store files) are used to pass data between workflow nodes in the processing pipeline. diff --git a/pom.xml b/pom.xml index 5571059..a1fb6c4 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ eu.dnetlib.dhp dhp-schemas jar - 3.15.1-SNAPSHOT + 4.0.0-SNAPSHOT diff --git a/src/main/java/eu/dnetlib/dhp/schema/common/EntityType.java b/src/main/java/eu/dnetlib/dhp/schema/common/EntityType.java index 54f30cf..bf92fb7 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/common/EntityType.java +++ b/src/main/java/eu/dnetlib/dhp/schema/common/EntityType.java @@ -1,7 +1,7 @@ package eu.dnetlib.dhp.schema.common; -import eu.dnetlib.dhp.schema.oaf.OafEntity; +import eu.dnetlib.dhp.schema.oaf.Entity; /** Actual entity types in the Graph */ public enum EntityType { @@ -14,7 +14,7 @@ public enum EntityType { * @param actual OafEntity subclass * @return the EntityType associated to the given class */ - public static EntityType fromClass(Class clazz) { + public static EntityType fromClass(Class clazz) { return EntityType.valueOf(clazz.getSimpleName().toLowerCase()); } 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 e47ae97..b023a17 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/common/ModelConstants.java +++ b/src/main/java/eu/dnetlib/dhp/schema/common/ModelConstants.java @@ -81,7 +81,7 @@ public class ModelConstants { public static final Qualifier PROVENANCE_ACTION_SET_QUALIFIER = qualifier( - SYSIMPORT_ACTIONSET, SYSIMPORT_ACTIONSET, DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS); + SYSIMPORT_ACTIONSET, SYSIMPORT_ACTIONSET, DNET_PROVENANCE_ACTIONS); public static final String DATASET_RESULTTYPE_CLASSID = "dataset"; public static final String PUBLICATION_RESULTTYPE_CLASSID = "publication"; @@ -186,36 +186,36 @@ public class ModelConstants { public static final Qualifier PUBLICATION_DEFAULT_RESULTTYPE = qualifier( PUBLICATION_RESULTTYPE_CLASSID, PUBLICATION_RESULTTYPE_CLASSID, - DNET_RESULT_TYPOLOGIES, DNET_RESULT_TYPOLOGIES); + DNET_RESULT_TYPOLOGIES); public static final Qualifier DATASET_DEFAULT_RESULTTYPE = qualifier( DATASET_RESULTTYPE_CLASSID, DATASET_RESULTTYPE_CLASSID, - DNET_RESULT_TYPOLOGIES, DNET_RESULT_TYPOLOGIES); + DNET_RESULT_TYPOLOGIES); public static final Qualifier SOFTWARE_DEFAULT_RESULTTYPE = qualifier( SOFTWARE_RESULTTYPE_CLASSID, SOFTWARE_RESULTTYPE_CLASSID, - DNET_RESULT_TYPOLOGIES, DNET_RESULT_TYPOLOGIES); + DNET_RESULT_TYPOLOGIES); public static final Qualifier ORP_DEFAULT_RESULTTYPE = qualifier( ORP_RESULTTYPE_CLASSID, ORP_RESULTTYPE_CLASSID, - DNET_RESULT_TYPOLOGIES, DNET_RESULT_TYPOLOGIES); + DNET_RESULT_TYPOLOGIES); public static final Qualifier REPOSITORY_PROVENANCE_ACTIONS = qualifier( SYSIMPORT_CROSSWALK_REPOSITORY, SYSIMPORT_CROSSWALK_REPOSITORY, - DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS); + DNET_PROVENANCE_ACTIONS); public static final Qualifier ENTITYREGISTRY_PROVENANCE_ACTION = qualifier( SYSIMPORT_CROSSWALK_ENTITYREGISTRY, SYSIMPORT_CROSSWALK_ENTITYREGISTRY, - DNET_PROVENANCE_ACTIONS, DNET_PROVENANCE_ACTIONS); + DNET_PROVENANCE_ACTIONS); public static final String UNKNOWN_REPOSITORY_ORIGINALID = "openaire____::1256f046-bf1f-4afc-8b47-d0b147148b18"; public static final KeyValue UNKNOWN_REPOSITORY = keyValue( "10|openaire____::55045bd2a65019fd8e6741a755395c8c", "Unknown Repository"); - public static final Qualifier UNKNOWN_COUNTRY = qualifier(UNKNOWN, "Unknown", DNET_COUNTRY_TYPE, DNET_COUNTRY_TYPE); + public static final Qualifier UNKNOWN_COUNTRY = qualifier(UNKNOWN, "Unknown", DNET_COUNTRY_TYPE); public static final Qualifier MAIN_TITLE_QUALIFIER = qualifier( - "main title", "main title", DNET_DATACITE_TITLE, DNET_DATACITE_TITLE); + "main title", "main title", DNET_DATACITE_TITLE); public static final AccessRight OPEN_ACCESS_RIGHT() { @@ -223,20 +223,17 @@ public class ModelConstants { result.setClassid(ACCESS_RIGHT_OPEN); result.setClassid(ACCESS_RIGHT_OPEN); result.setSchemeid(ModelConstants.DNET_ACCESS_MODES); - result.setSchemename(ModelConstants.DNET_ACCESS_MODES); return result; } private static Qualifier qualifier( final String classid, final String classname, - final String schemeid, - final String schemename) { + final String schemeid) { final Qualifier q = new Qualifier(); q.setClassid(classid); q.setClassname(classname); q.setSchemeid(schemeid); - q.setSchemename(schemename); return q; } @@ -244,7 +241,6 @@ public class ModelConstants { final KeyValue kv = new KeyValue(); kv.setKey(key); kv.setValue(value); - kv.setDataInfo(new DataInfo()); return kv; } } 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 c7a24b6..e38da89 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/common/ModelSupport.java +++ b/src/main/java/eu/dnetlib/dhp/schema/common/ModelSupport.java @@ -184,8 +184,6 @@ public class ModelSupport { .filter(r -> relationName.equalsIgnoreCase(r.getRelClass())) .findFirst() .orElse(null); - - } /** @@ -206,7 +204,7 @@ public class ModelSupport { private ModelSupport() { } - public static String getIdPrefix(Class clazz) { + public static String getIdPrefix(Class clazz) { return idPrefixMap.get(clazz); } @@ -258,36 +256,44 @@ public class ModelSupport { * @param * @return */ - public static Class[] getOafModelClasses() { + public static Class[] getOafModelClasses() { return new Class[] { + AccessRight.class, Author.class, + AuthorPid.class, Context.class, Country.class, DataInfo.class, Dataset.class, Datasource.class, + Entity.class, + EntityDataInfo.class, + EoscIfGuidelines.class, ExternalReference.class, ExtraInfo.class, - Field.class, GeoLocation.class, + H2020Classification.class, + H2020Programme.class, Instance.class, - AccessRight.class, - OpenAccessRoute.class, Journal.class, KeyValue.class, - Oaf.class, - OafEntity.class, + License.class, + Measure.class, OAIProvenance.class, + OpenAccessRoute.class, Organization.class, OriginDescription.class, OtherResearchProduct.class, Project.class, + Provenance.class, Publication.class, + Publisher.class, Qualifier.class, Relation.class, Result.class, Software.class, - StructuredProperty.class + StructuredProperty.class, + Subject.class }; } @@ -307,7 +313,7 @@ public class ModelSupport { entityMapping.get(EntityType.valueOf(targetType)).name()); } - public static String tableIdentifier(String dbName, String tableName) { + public static String tableIdentifier(String dbName, String tableName) { checkArgument(StringUtils.isNotBlank(dbName), "DB name cannot be empty"); checkArgument(StringUtils.isNotBlank(tableName), "table name cannot be empty"); @@ -315,24 +321,14 @@ public class ModelSupport { return String.format("%s.%s", dbName, tableName); } - public static String tableIdentifier(String dbName, Class clazz) { + public static String tableIdentifier(String dbName, Class clazz) { checkArgument(Objects.nonNull(clazz), "clazz is needed to derive the table name, thus cannot be null"); return tableIdentifier(dbName, clazz.getSimpleName().toLowerCase()); } - public static Function idFn() { - return x -> { - if (isSubClass(x, Relation.class)) { - return idFnForRelation(x); - } - return idFnForOafEntity(x); - }; - } - - private static String idFnForRelation(T t) { - Relation r = (Relation) t; + private static String idFnForRelation(Relation r) { return Optional .ofNullable(r.getSource()) .map( @@ -368,8 +364,8 @@ public class ModelSupport { .orElse(null); } - private static String idFnForOafEntity(T t) { - return ((OafEntity) t).getId(); + private static String idFnForOafEntity(T t) { + return t.getId(); } public static String md5(final String s) { diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Author.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Author.java index b2f757d..9f3e2e3 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Author.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Author.java @@ -15,9 +15,7 @@ public class Author implements Serializable { // START WITH 1 private Integer rank; - private List pid; - - private List> affiliation; + private List pid; public String getFullname() { return fullname; @@ -51,22 +49,14 @@ public class Author implements Serializable { this.rank = rank; } - public List getPid() { + public List getPid() { return pid; } - public void setPid(List pid) { + public void setPid(List pid) { this.pid = pid; } - public List> getAffiliation() { - return affiliation; - } - - public void setAffiliation(List> affiliation) { - this.affiliation = affiliation; - } - @Override public boolean equals(Object o) { if (this == o) @@ -78,13 +68,12 @@ public class Author implements Serializable { && Objects.equals(name, author.name) && Objects.equals(surname, author.surname) && Objects.equals(rank, author.rank) - && Objects.equals(pid, author.pid) - && Objects.equals(affiliation, author.affiliation); + && Objects.equals(pid, author.pid); } @Override public int hashCode() { - return Objects.hash(fullname, name, surname, rank, pid, affiliation); + return Objects.hash(fullname, name, surname, rank, pid); } } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/AuthorPid.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/AuthorPid.java new file mode 100644 index 0000000..fa15ab2 --- /dev/null +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/AuthorPid.java @@ -0,0 +1,16 @@ +package eu.dnetlib.dhp.schema.oaf; + +import java.io.Serializable; + +public class AuthorPid extends StructuredProperty implements Serializable { + + private DataInfo dataInfo; + + public DataInfo getDataInfo() { + return dataInfo; + } + + public void setDataInfo(DataInfo dataInfo) { + this.dataInfo = dataInfo; + } +} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/DataInfo.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/DataInfo.java index 9d572ee..d6b0bd5 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/DataInfo.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/DataInfo.java @@ -3,24 +3,15 @@ package eu.dnetlib.dhp.schema.oaf; import java.io.Serializable; import java.util.Objects; +import java.util.Optional; public class DataInfo implements Serializable { - private Boolean invisible = false; private Boolean inferred; - private Boolean deletedbyinference = false; - private String trust; + private float trust; private String inferenceprovenance; private Qualifier provenanceaction; - public Boolean getInvisible() { - return invisible; - } - - public void setInvisible(Boolean invisible) { - this.invisible = invisible; - } - public Boolean getInferred() { return inferred; } @@ -29,19 +20,11 @@ public class DataInfo implements Serializable { this.inferred = inferred; } - public Boolean getDeletedbyinference() { - return deletedbyinference; - } - - public void setDeletedbyinference(Boolean deletedbyinference) { - this.deletedbyinference = deletedbyinference; - } - - public String getTrust() { + public float getTrust() { return trust; } - public void setTrust(String trust) { + public void setTrust(float trust) { this.trust = trust; } @@ -68,9 +51,7 @@ public class DataInfo implements Serializable { if (o == null || getClass() != o.getClass()) return false; DataInfo dataInfo = (DataInfo) o; - return Objects.equals(invisible, dataInfo.invisible) - && Objects.equals(inferred, dataInfo.inferred) - && Objects.equals(deletedbyinference, dataInfo.deletedbyinference) + return Objects.equals(inferred, dataInfo.inferred) && Objects.equals(trust, dataInfo.trust) && Objects.equals(inferenceprovenance, dataInfo.inferenceprovenance) && Objects.equals(provenanceaction, dataInfo.provenanceaction); @@ -80,6 +61,6 @@ public class DataInfo implements Serializable { public int hashCode() { return Objects .hash( - invisible, inferred, deletedbyinference, trust, inferenceprovenance, provenanceaction); + inferred, trust, inferenceprovenance, provenanceaction); } } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Dataset.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Dataset.java index b5587c6..329aff5 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Dataset.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Dataset.java @@ -8,70 +8,70 @@ import eu.dnetlib.dhp.schema.common.ModelConstants; public class Dataset extends Result implements Serializable { - private Field storagedate; + private String storagedate; // candidate for removal - private Field device; + private String device; - private Field size; + private String size; - private Field version; + private String version; - private Field lastmetadataupdate; + private String lastmetadataupdate; - private Field metadataversionnumber; + private String metadataversionnumber; private List geolocation; public Dataset() { - setResulttype(ModelConstants.DATASET_DEFAULT_RESULTTYPE); + setResulttype(ModelConstants.DATASET_RESULTTYPE_CLASSID); } - public Field getStoragedate() { + public String getStoragedate() { return storagedate; } - public void setStoragedate(Field storagedate) { + public void setStoragedate(String storagedate) { this.storagedate = storagedate; } - public Field getDevice() { + public String getDevice() { return device; } - public void setDevice(Field device) { + public void setDevice(String device) { this.device = device; } - public Field getSize() { + public String getSize() { return size; } - public void setSize(Field size) { + public void setSize(String size) { this.size = size; } - public Field getVersion() { + public String getVersion() { return version; } - public void setVersion(Field version) { + public void setVersion(String version) { this.version = version; } - public Field getLastmetadataupdate() { + public String getLastmetadataupdate() { return lastmetadataupdate; } - public void setLastmetadataupdate(Field lastmetadataupdate) { + public void setLastmetadataupdate(String lastmetadataupdate) { this.lastmetadataupdate = lastmetadataupdate; } - public Field getMetadataversionnumber() { + public String getMetadataversionnumber() { return metadataversionnumber; } - public void setMetadataversionnumber(Field metadataversionnumber) { + public void setMetadataversionnumber(String metadataversionnumber) { this.metadataversionnumber = metadataversionnumber; } @@ -82,35 +82,4 @@ public class Dataset extends Result implements Serializable { public void setGeolocation(List geolocation) { this.geolocation = geolocation; } - - @Override - public void mergeFrom(OafEntity e) { - super.mergeFrom(e); - - if (!Dataset.class.isAssignableFrom(e.getClass())) { - return; - } - - final Dataset d = (Dataset) e; - - storagedate = d.getStoragedate() != null && compareTrust(this, e) < 0 ? d.getStoragedate() : storagedate; - - device = d.getDevice() != null && compareTrust(this, e) < 0 ? d.getDevice() : device; - - size = d.getSize() != null && compareTrust(this, e) < 0 ? d.getSize() : size; - - version = d.getVersion() != null && compareTrust(this, e) < 0 ? d.getVersion() : version; - - lastmetadataupdate = d.getLastmetadataupdate() != null && compareTrust(this, e) < 0 - ? d.getLastmetadataupdate() - : lastmetadataupdate; - - metadataversionnumber = d.getMetadataversionnumber() != null && compareTrust(this, e) < 0 - ? d.getMetadataversionnumber() - : metadataversionnumber; - - geolocation = mergeLists(geolocation, d.getGeolocation()); - - mergeOAFDataInfo(d); - } } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Datasource.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Datasource.java index 5067ada..08568fb 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Datasource.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Datasource.java @@ -4,11 +4,8 @@ package eu.dnetlib.dhp.schema.oaf; import java.io.Serializable; import java.util.List; -public class Datasource extends OafEntity implements Serializable { +public class Datasource extends Entity implements Serializable { - /** - * - */ private static final long serialVersionUID = 1019089598408414496L; @Deprecated @@ -23,83 +20,83 @@ public class Datasource extends OafEntity implements Serializable { private Qualifier openairecompatibility; - private Field officialname; + private String officialname; - private Field englishname; + private String englishname; - private Field websiteurl; + private String websiteurl; - private Field logourl; + private String logourl; - private Field contactemail; + private String contactemail; - private Field namespaceprefix; + private String namespaceprefix; - private Field latitude; + private String latitude; - private Field longitude; + private String longitude; - private Field dateofvalidation; + private String dateofvalidation; - private Field description; + private String description; private List subjects; // opendoar specific fields (od*) @Deprecated - private Field odnumberofitems; + private String odnumberofitems; @Deprecated - private Field odnumberofitemsdate; + private String odnumberofitemsdate; @Deprecated - private Field odpolicies; + private String odpolicies; @Deprecated - private List> odlanguages; + private List odlanguages; private List languages; @Deprecated - private List> odcontenttypes; + private List odcontenttypes; - private List> accessinfopackage; + private List accessinfopackage; // re3data fields - private Field releasestartdate; + private String releasestartdate; - private Field releaseenddate; + private String releaseenddate; - private Field missionstatementurl; + private String missionstatementurl; @Deprecated - private Field dataprovider; + private Boolean dataprovider; @Deprecated - private Field serviceprovider; + private Boolean serviceprovider; // {open, restricted or closed} - private Field databaseaccesstype; + private String databaseaccesstype; // {open, restricted or closed} - private Field datauploadtype; + private String datauploadtype; // {feeRequired, registration, other} - private Field databaseaccessrestriction; + private String databaseaccessrestriction; // {feeRequired, registration, other} - private Field datauploadrestriction; + private String datauploadrestriction; @Deprecated - private Field versioning; + private Boolean versioning; private Boolean versioncontrol; - private Field citationguidelineurl; + private String citationguidelineurl; - private Field pidsystems; + private String pidsystems; - private Field certificates; + private String certificates; @Deprecated private List policies; @@ -146,7 +143,7 @@ public class Datasource extends OafEntity implements Serializable { return datasourcetype; } - public void setDatasourcetype(final Qualifier datasourcetype) { + public void setDatasourcetype(Qualifier datasourcetype) { this.datasourcetype = datasourcetype; } @@ -154,7 +151,7 @@ public class Datasource extends OafEntity implements Serializable { return datasourcetypeui; } - public void setDatasourcetypeui(final Qualifier datasourcetypeui) { + public void setDatasourcetypeui(Qualifier datasourcetypeui) { this.datasourcetypeui = datasourcetypeui; } @@ -178,87 +175,87 @@ public class Datasource extends OafEntity implements Serializable { return openairecompatibility; } - public void setOpenairecompatibility(final Qualifier openairecompatibility) { + public void setOpenairecompatibility(Qualifier openairecompatibility) { this.openairecompatibility = openairecompatibility; } - public Field getOfficialname() { + public String getOfficialname() { return officialname; } - public void setOfficialname(final Field officialname) { + public void setOfficialname(String officialname) { this.officialname = officialname; } - public Field getEnglishname() { + public String getEnglishname() { return englishname; } - public void setEnglishname(final Field englishname) { + public void setEnglishname(String englishname) { this.englishname = englishname; } - public Field getWebsiteurl() { + public String getWebsiteurl() { return websiteurl; } - public void setWebsiteurl(final Field websiteurl) { + public void setWebsiteurl(String websiteurl) { this.websiteurl = websiteurl; } - public Field getLogourl() { + public String getLogourl() { return logourl; } - public void setLogourl(final Field logourl) { + public void setLogourl(String logourl) { this.logourl = logourl; } - public Field getContactemail() { + public String getContactemail() { return contactemail; } - public void setContactemail(final Field contactemail) { + public void setContactemail(String contactemail) { this.contactemail = contactemail; } - public Field getNamespaceprefix() { + public String getNamespaceprefix() { return namespaceprefix; } - public void setNamespaceprefix(final Field namespaceprefix) { + public void setNamespaceprefix(String namespaceprefix) { this.namespaceprefix = namespaceprefix; } - public Field getLatitude() { + public String getLatitude() { return latitude; } - public void setLatitude(final Field latitude) { + public void setLatitude(String latitude) { this.latitude = latitude; } - public Field getLongitude() { + public String getLongitude() { return longitude; } - public void setLongitude(final Field longitude) { + public void setLongitude(String longitude) { this.longitude = longitude; } - public Field getDateofvalidation() { + public String getDateofvalidation() { return dateofvalidation; } - public void setDateofvalidation(final Field dateofvalidation) { + public void setDateofvalidation(String dateofvalidation) { this.dateofvalidation = dateofvalidation; } - public Field getDescription() { + public String getDescription() { return description; } - public void setDescription(final Field description) { + public void setDescription(String description) { this.description = description; } @@ -266,39 +263,39 @@ public class Datasource extends OafEntity implements Serializable { return subjects; } - public void setSubjects(final List subjects) { + public void setSubjects(List subjects) { this.subjects = subjects; } - public Field getOdnumberofitems() { + public String getOdnumberofitems() { return odnumberofitems; } - public void setOdnumberofitems(final Field odnumberofitems) { + public void setOdnumberofitems(String odnumberofitems) { this.odnumberofitems = odnumberofitems; } - public Field getOdnumberofitemsdate() { + public String getOdnumberofitemsdate() { return odnumberofitemsdate; } - public void setOdnumberofitemsdate(final Field odnumberofitemsdate) { + public void setOdnumberofitemsdate(String odnumberofitemsdate) { this.odnumberofitemsdate = odnumberofitemsdate; } - public Field getOdpolicies() { + public String getOdpolicies() { return odpolicies; } - public void setOdpolicies(final Field odpolicies) { + public void setOdpolicies(String odpolicies) { this.odpolicies = odpolicies; } - public List> getOdlanguages() { + public List getOdlanguages() { return odlanguages; } - public void setOdlanguages(final List> odlanguages) { + public void setOdlanguages(List odlanguages) { this.odlanguages = odlanguages; } @@ -306,103 +303,103 @@ public class Datasource extends OafEntity implements Serializable { return languages; } - public void setLanguages(final List languages) { + public void setLanguages(List languages) { this.languages = languages; } - public List> getOdcontenttypes() { + public List getOdcontenttypes() { return odcontenttypes; } - public void setOdcontenttypes(final List> odcontenttypes) { + public void setOdcontenttypes(List odcontenttypes) { this.odcontenttypes = odcontenttypes; } - public List> getAccessinfopackage() { + public List getAccessinfopackage() { return accessinfopackage; } - public void setAccessinfopackage(final List> accessinfopackage) { + public void setAccessinfopackage(List accessinfopackage) { this.accessinfopackage = accessinfopackage; } - public Field getReleasestartdate() { + public String getReleasestartdate() { return releasestartdate; } - public void setReleasestartdate(final Field releasestartdate) { + public void setReleasestartdate(String releasestartdate) { this.releasestartdate = releasestartdate; } - public Field getReleaseenddate() { + public String getReleaseenddate() { return releaseenddate; } - public void setReleaseenddate(final Field releaseenddate) { + public void setReleaseenddate(String releaseenddate) { this.releaseenddate = releaseenddate; } - public Field getMissionstatementurl() { + public String getMissionstatementurl() { return missionstatementurl; } - public void setMissionstatementurl(final Field missionstatementurl) { + public void setMissionstatementurl(String missionstatementurl) { this.missionstatementurl = missionstatementurl; } - public Field getDataprovider() { + public Boolean getDataprovider() { return dataprovider; } - public void setDataprovider(final Field dataprovider) { + public void setDataprovider(Boolean dataprovider) { this.dataprovider = dataprovider; } - public Field getServiceprovider() { + public Boolean getServiceprovider() { return serviceprovider; } - public void setServiceprovider(final Field serviceprovider) { + public void setServiceprovider(Boolean serviceprovider) { this.serviceprovider = serviceprovider; } - public Field getDatabaseaccesstype() { + public String getDatabaseaccesstype() { return databaseaccesstype; } - public void setDatabaseaccesstype(final Field databaseaccesstype) { + public void setDatabaseaccesstype(String databaseaccesstype) { this.databaseaccesstype = databaseaccesstype; } - public Field getDatauploadtype() { + public String getDatauploadtype() { return datauploadtype; } - public void setDatauploadtype(final Field datauploadtype) { + public void setDatauploadtype(String datauploadtype) { this.datauploadtype = datauploadtype; } - public Field getDatabaseaccessrestriction() { + public String getDatabaseaccessrestriction() { return databaseaccessrestriction; } - public void setDatabaseaccessrestriction(final Field databaseaccessrestriction) { + public void setDatabaseaccessrestriction(String databaseaccessrestriction) { this.databaseaccessrestriction = databaseaccessrestriction; } - public Field getDatauploadrestriction() { + public String getDatauploadrestriction() { return datauploadrestriction; } - public void setDatauploadrestriction(final Field datauploadrestriction) { + public void setDatauploadrestriction(String datauploadrestriction) { this.datauploadrestriction = datauploadrestriction; } - public Field getVersioning() { + public Boolean getVersioning() { return versioning; } - public void setVersioning(final Field versioning) { + public void setVersioning(Boolean versioning) { this.versioning = versioning; } @@ -414,27 +411,27 @@ public class Datasource extends OafEntity implements Serializable { this.versioncontrol = versioncontrol; } - public Field getCitationguidelineurl() { + public String getCitationguidelineurl() { return citationguidelineurl; } - public void setCitationguidelineurl(final Field citationguidelineurl) { + public void setCitationguidelineurl(String citationguidelineurl) { this.citationguidelineurl = citationguidelineurl; } - public Field getPidsystems() { + public String getPidsystems() { return pidsystems; } - public void setPidsystems(final Field pidsystems) { + public void setPidsystems(String pidsystems) { this.pidsystems = pidsystems; } - public Field getCertificates() { + public String getCertificates() { return certificates; } - public void setCertificates(final Field certificates) { + public void setCertificates(String certificates) { this.certificates = certificates; } @@ -442,7 +439,7 @@ public class Datasource extends OafEntity implements Serializable { return policies; } - public void setPolicies(final List policies) { + public void setPolicies(List policies) { this.policies = policies; } @@ -450,7 +447,7 @@ public class Datasource extends OafEntity implements Serializable { return journal; } - public void setJournal(final Journal journal) { + public void setJournal(Journal journal) { this.journal = journal; } @@ -458,7 +455,7 @@ public class Datasource extends OafEntity implements Serializable { return researchentitytypes; } - public void setResearchentitytypes(final List researchentitytypes) { + public void setResearchentitytypes(List researchentitytypes) { this.researchentitytypes = researchentitytypes; } @@ -466,7 +463,7 @@ public class Datasource extends OafEntity implements Serializable { return providedproducttypes; } - public void setProvidedproducttypes(final List providedproducttypes) { + public void setProvidedproducttypes(List providedproducttypes) { this.providedproducttypes = providedproducttypes; } @@ -474,7 +471,7 @@ public class Datasource extends OafEntity implements Serializable { return jurisdiction; } - public void setJurisdiction(final Qualifier jurisdiction) { + public void setJurisdiction(Qualifier jurisdiction) { this.jurisdiction = jurisdiction; } @@ -482,7 +479,7 @@ public class Datasource extends OafEntity implements Serializable { return thematic; } - public void setThematic(final Boolean thematic) { + public void setThematic(Boolean thematic) { this.thematic = thematic; } @@ -490,7 +487,7 @@ public class Datasource extends OafEntity implements Serializable { return contentpolicies; } - public void setContentpolicies(final List contentpolicies) { + public void setContentpolicies(List contentpolicies) { this.contentpolicies = contentpolicies; } @@ -530,10 +527,26 @@ public class Datasource extends OafEntity implements Serializable { return consenttermsofuse; } - public void setConsenttermsofuse(final Boolean consenttermsofuse) { + public void setConsenttermsofuse(Boolean consenttermsofuse) { this.consenttermsofuse = consenttermsofuse; } + public Boolean getFulltextdownload() { + return fulltextdownload; + } + + public void setFulltextdownload(Boolean fulltextdownload) { + this.fulltextdownload = fulltextdownload; + } + + public String getConsenttermsofusedate() { + return consenttermsofusedate; + } + + public void setConsenttermsofusedate(String consenttermsofusedate) { + this.consenttermsofusedate = consenttermsofusedate; + } + public String getLastconsenttermsofusedate() { return lastconsenttermsofusedate; } @@ -542,22 +555,6 @@ public class Datasource extends OafEntity implements Serializable { this.lastconsenttermsofusedate = lastconsenttermsofusedate; } - public Boolean getFulltextdownload() { - return fulltextdownload; - } - - public void setFulltextdownload(final Boolean fulltextdownload) { - this.fulltextdownload = fulltextdownload; - } - - public String getConsenttermsofusedate() { - return consenttermsofusedate; - } - - public void setConsenttermsofusedate(final String consenttermsofusedate) { - this.consenttermsofusedate = consenttermsofusedate; - } - public List getEoscifguidelines() { return eoscifguidelines; } @@ -565,10 +562,4 @@ public class Datasource extends OafEntity implements Serializable { public void setEoscifguidelines(List eoscifguidelines) { this.eoscifguidelines = eoscifguidelines; } - - @Override - public void mergeFrom(final OafEntity e) { - super.mergeFrom(e); - } - } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/OafEntity.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Entity.java similarity index 58% rename from src/main/java/eu/dnetlib/dhp/schema/oaf/OafEntity.java rename to src/main/java/eu/dnetlib/dhp/schema/oaf/Entity.java index 0411821..3fef249 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/OafEntity.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Entity.java @@ -5,21 +5,50 @@ import java.io.Serializable; import java.util.*; import java.util.stream.Collectors; -public abstract class OafEntity extends Oaf implements Serializable { +public abstract class Entity extends Oaf implements Serializable { private String id; private List originalId; + /** + * The list of datasource id/name pairs providing this Oaf. + */ + protected List collectedfrom; + + private Long lastupdatetimestamp; + private List pid; private String dateofcollection; private String dateoftransformation; + /** + * The Measures. + */ + private List measures; + private List extraInfo; - private OAIProvenance oaiprovenance; + private EntityDataInfo dataInfo; + + + public List getCollectedfrom() { + return collectedfrom; + } + + public void setCollectedfrom(List collectedfrom) { + this.collectedfrom = collectedfrom; + } + + public Long getLastupdatetimestamp() { + return lastupdatetimestamp; + } + + public void setLastupdatetimestamp(Long lastupdatetimestamp) { + this.lastupdatetimestamp = lastupdatetimestamp; + } public String getId() { return id; @@ -57,6 +86,24 @@ public abstract class OafEntity extends Oaf implements Serializable { return dateoftransformation; } + /** + * Gets measures. + * + * @return the measures + */ + public List getMeasures() { + return measures; + } + + /** + * Sets measures. + * + * @param measures the measures + */ + public void setMeasures(List measures) { + this.measures = measures; + } + public void setDateoftransformation(String dateoftransformation) { this.dateoftransformation = dateoftransformation; } @@ -69,43 +116,12 @@ public abstract class OafEntity extends Oaf implements Serializable { this.extraInfo = extraInfo; } - public OAIProvenance getOaiprovenance() { - return oaiprovenance; + public EntityDataInfo getDataInfo() { + return dataInfo; } - public void setOaiprovenance(OAIProvenance oaiprovenance) { - this.oaiprovenance = oaiprovenance; - } - - public void mergeFrom(OafEntity e) { - super.mergeFrom(e); - - originalId = mergeLists(originalId, e.getOriginalId()); - - pid = mergeLists(pid, e.getPid()); - - if (e.getDateofcollection() != null && compareTrust(this, e) < 0) - dateofcollection = e.getDateofcollection(); - - if (e.getDateoftransformation() != null && compareTrust(this, e) < 0) - dateoftransformation = e.getDateoftransformation(); - - extraInfo = mergeLists(extraInfo, e.getExtraInfo()); - - if (e.getOaiprovenance() != null && compareTrust(this, e) < 0) - oaiprovenance = e.getOaiprovenance(); - } - - @SafeVarargs - protected final List mergeLists(final List... lists) { - - return Arrays - .stream(lists) - .filter(Objects::nonNull) - .flatMap(List::stream) - .filter(Objects::nonNull) - .distinct() - .collect(Collectors.toList()); + public void setDataInfo(EntityDataInfo dataInfo) { + this.dataInfo = dataInfo; } @Override @@ -116,7 +132,7 @@ public abstract class OafEntity extends Oaf implements Serializable { return false; if (!super.equals(o)) return false; - OafEntity oafEntity = (OafEntity) o; + Entity oafEntity = (Entity) o; return Objects.equals(id, oafEntity.id); } @@ -124,4 +140,5 @@ public abstract class OafEntity extends Oaf implements Serializable { public int hashCode() { return Objects.hash(super.hashCode(), id); } + } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/EntityDataInfo.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/EntityDataInfo.java new file mode 100644 index 0000000..0f54eee --- /dev/null +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/EntityDataInfo.java @@ -0,0 +1,44 @@ +package eu.dnetlib.dhp.schema.oaf; + +import java.util.Objects; + +public class EntityDataInfo extends DataInfo { + + private Boolean invisible = false; + private Boolean deletedbyinference = false; + + + public Boolean getInvisible() { + return invisible; + } + + public void setInvisible(Boolean invisible) { + this.invisible = invisible; + } + + public Boolean getDeletedbyinference() { + return deletedbyinference; + } + + public void setDeletedbyinference(Boolean deletedbyinference) { + this.deletedbyinference = deletedbyinference; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + EntityDataInfo dataInfo = (EntityDataInfo) o; + return super.equals(o) && Objects.equals(invisible, dataInfo.invisible) + && Objects.equals(deletedbyinference, dataInfo.deletedbyinference); + } + + @Override + public int hashCode() { + return Objects + .hash(super.hashCode(), invisible, deletedbyinference); + } + +} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/ExternalReference.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/ExternalReference.java index 0689b44..b8d090f 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/ExternalReference.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/ExternalReference.java @@ -27,9 +27,6 @@ public class ExternalReference implements Serializable { // maps the oaf:reference/@query attribute private String query; - // ExternalReferences might be also inferred - private DataInfo dataInfo; - public String getSitename() { return sitename; } @@ -86,14 +83,6 @@ public class ExternalReference implements Serializable { this.query = query; } - public DataInfo getDataInfo() { - return dataInfo; - } - - public void setDataInfo(DataInfo dataInfo) { - this.dataInfo = dataInfo; - } - @Override public boolean equals(Object o) { if (this == o) @@ -106,15 +95,14 @@ public class ExternalReference implements Serializable { && Objects.equals(url, that.url) && Objects.equals(qualifier, that.qualifier) && Objects.equals(refidentifier, that.refidentifier) - && Objects.equals(query, that.query) - && Objects.equals(dataInfo, that.dataInfo); + && Objects.equals(query, that.query); } @Override public int hashCode() { return Objects .hash( - sitename, label, url, qualifier, refidentifier, query, dataInfo); + sitename, label, url, qualifier, refidentifier, query); } } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Field.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Field.java deleted file mode 100644 index 8358bc4..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Field.java +++ /dev/null @@ -1,45 +0,0 @@ - -package eu.dnetlib.dhp.schema.oaf; - -import java.io.Serializable; -import java.util.Objects; - -public class Field implements Serializable { - - private T value; - - private DataInfo dataInfo; - - public T getValue() { - return value; - } - - public void setValue(T value) { - this.value = value; - } - - public DataInfo getDataInfo() { - return dataInfo; - } - - public void setDataInfo(DataInfo dataInfo) { - this.dataInfo = dataInfo; - } - - @Override - public int hashCode() { - return getValue() == null ? 0 : getValue().hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - Field other = (Field) obj; - return Objects.equals(getValue(), other.getValue()); - } -} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Instance.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Instance.java index 6bb2908..db87aac 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Instance.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Instance.java @@ -6,7 +6,7 @@ import java.util.List; public class Instance implements Serializable { - private Field license; + private License license; private AccessRight accessright; @@ -16,6 +16,8 @@ public class Instance implements Serializable { private List url; + private List fulltext; + // other research products specifc private String distributionlocation; @@ -25,25 +27,23 @@ public class Instance implements Serializable { private List alternateIdentifier; - private Field dateofacceptance; + private String dateofacceptance; // ( article | book ) processing charges. Defined here to cope with possible wrongly typed // results - private Field processingchargeamount; + private String processingchargeamount; // currency - alphabetic code describe in ISO-4217. Defined here to cope with possible wrongly // typed results - private Field processingchargecurrency; + private String processingchargecurrency; private Qualifier refereed; // peer-review status - private List measures; - - public Field getLicense() { + public License getLicense() { return license; } - public void setLicense(Field license) { + public void setLicense(License license) { this.license = license; } @@ -79,6 +79,14 @@ public class Instance implements Serializable { this.url = url; } + public List getFulltext() { + return fulltext; + } + + public void setFulltext(List fulltext) { + this.fulltext = fulltext; + } + public String getDistributionlocation() { return distributionlocation; } @@ -103,11 +111,11 @@ public class Instance implements Serializable { this.pid = pid; } - public Field getDateofacceptance() { + public String getDateofacceptance() { return dateofacceptance; } - public void setDateofacceptance(Field dateofacceptance) { + public void setDateofacceptance(String dateofacceptance) { this.dateofacceptance = dateofacceptance; } @@ -119,19 +127,19 @@ public class Instance implements Serializable { this.alternateIdentifier = alternateIdentifier; } - public Field getProcessingchargeamount() { + public String getProcessingchargeamount() { return processingchargeamount; } - public void setProcessingchargeamount(Field processingchargeamount) { + public void setProcessingchargeamount(String processingchargeamount) { this.processingchargeamount = processingchargeamount; } - public Field getProcessingchargecurrency() { + public String getProcessingchargecurrency() { return processingchargecurrency; } - public void setProcessingchargecurrency(Field processingchargecurrency) { + public void setProcessingchargecurrency(String processingchargecurrency) { this.processingchargecurrency = processingchargecurrency; } @@ -143,14 +151,6 @@ public class Instance implements Serializable { this.refereed = refereed; } - public List getMeasures() { - return measures; - } - - public void setMeasures(List measures) { - this.measures = measures; - } - public String toComparableString() { return String .format( diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/KeyValue.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/KeyValue.java index 4e2d601..ce31198 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/KeyValue.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/KeyValue.java @@ -13,8 +13,6 @@ public class KeyValue implements Serializable { private String value; - private DataInfo dataInfo; - public String getKey() { return key; } @@ -31,14 +29,6 @@ public class KeyValue implements Serializable { this.value = value; } - public DataInfo getDataInfo() { - return dataInfo; - } - - public void setDataInfo(DataInfo dataInfo) { - this.dataInfo = dataInfo; - } - public String toComparableString() { return isBlank() ? "" diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/License.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/License.java new file mode 100644 index 0000000..0fcd152 --- /dev/null +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/License.java @@ -0,0 +1,16 @@ +package eu.dnetlib.dhp.schema.oaf; + +import java.io.Serializable; + +public class License implements Serializable { + + private String url; + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } +} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Oaf.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Oaf.java index 0df5572..16adbe3 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Oaf.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Oaf.java @@ -1,108 +1,6 @@ - package eu.dnetlib.dhp.schema.oaf; import java.io.Serializable; -import java.util.Collection; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; -import java.util.stream.Stream; -public abstract class Oaf implements Serializable { - - /** - * The list of datasource id/name pairs providing this relationship. - */ - protected List collectedfrom; - - private DataInfo dataInfo; - - private Long lastupdatetimestamp; - - public List getCollectedfrom() { - return collectedfrom; - } - - public void setCollectedfrom(List collectedfrom) { - this.collectedfrom = collectedfrom; - } - - public DataInfo getDataInfo() { - return dataInfo; - } - - public void setDataInfo(DataInfo dataInfo) { - this.dataInfo = dataInfo; - } - - public Long getLastupdatetimestamp() { - return lastupdatetimestamp; - } - - public void setLastupdatetimestamp(Long lastupdatetimestamp) { - this.lastupdatetimestamp = lastupdatetimestamp; - } - - public void mergeFrom(Oaf o) { - if (Objects.isNull(o)) { - return; - } - setCollectedfrom( - Stream - .concat( - Optional - .ofNullable(getCollectedfrom()) - .map(Collection::stream) - .orElse(Stream.empty()), - Optional - .ofNullable(o.getCollectedfrom()) - .map(Collection::stream) - .orElse(Stream.empty())) - .distinct() // relies on KeyValue.equals - .collect(Collectors.toList())); - - setLastupdatetimestamp( - Math - .max( - Optional.ofNullable(getLastupdatetimestamp()).orElse(0L), - Optional.ofNullable(o.getLastupdatetimestamp()).orElse(0L))); - } - - public void mergeOAFDataInfo(Oaf o) { - Optional.ofNullable(o) - .ifPresent(other -> Optional.ofNullable(other.getDataInfo()) - .ifPresent(otherDataInfo -> Optional.ofNullable(this.getDataInfo()) - .ifPresent(thisDataInfo -> { - if (compareTrust(this, other) < 0 || thisDataInfo.getInvisible()) { - setDataInfo(otherDataInfo); - } - }))); - } - - protected String extractTrust(Oaf e) { - if (e == null || e.getDataInfo() == null || e.getDataInfo().getTrust() == null) - return "0.0"; - return e.getDataInfo().getTrust(); - } - - protected int compareTrust(Oaf a, Oaf b) { - return extractTrust(a).compareTo(extractTrust(b)); - } - - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - Oaf oaf = (Oaf) o; - return Objects.equals(getDataInfo(), oaf.getDataInfo()) - && Objects.equals(lastupdatetimestamp, oaf.lastupdatetimestamp); - } - - @Override - public int hashCode() { - return Objects.hash(dataInfo, lastupdatetimestamp); - } +public class Oaf implements Serializable { } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Organization.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Organization.java index a5f9bce..91092a8 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Organization.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Organization.java @@ -4,158 +4,158 @@ package eu.dnetlib.dhp.schema.oaf; import java.io.Serializable; import java.util.List; -public class Organization extends OafEntity implements Serializable { +public class Organization extends Entity implements Serializable { - private Field legalshortname; + private String legalshortname; - private Field legalname; + private String legalname; - private List> alternativeNames; + private List alternativeNames; - private Field websiteurl; + private String websiteurl; - private Field logourl; + private String logourl; - private Field eclegalbody; + private String eclegalbody; - private Field eclegalperson; + private String eclegalperson; - private Field ecnonprofit; + private String ecnonprofit; - private Field ecresearchorganization; + private String ecresearchorganization; - private Field echighereducation; + private String echighereducation; - private Field ecinternationalorganizationeurinterests; + private String ecinternationalorganizationeurinterests; - private Field ecinternationalorganization; + private String ecinternationalorganization; - private Field ecenterprise; + private String ecenterprise; - private Field ecsmevalidated; + private String ecsmevalidated; - private Field ecnutscode; + private String ecnutscode; private Qualifier country; - public Field getLegalshortname() { + public String getLegalshortname() { return legalshortname; } - public void setLegalshortname(Field legalshortname) { + public void setLegalshortname(String legalshortname) { this.legalshortname = legalshortname; } - public Field getLegalname() { + public String getLegalname() { return legalname; } - public void setLegalname(Field legalname) { + public void setLegalname(String legalname) { this.legalname = legalname; } - public List> getAlternativeNames() { + public List getAlternativeNames() { return alternativeNames; } - public void setAlternativeNames(List> alternativeNames) { + public void setAlternativeNames(List alternativeNames) { this.alternativeNames = alternativeNames; } - public Field getWebsiteurl() { + public String getWebsiteurl() { return websiteurl; } - public void setWebsiteurl(Field websiteurl) { + public void setWebsiteurl(String websiteurl) { this.websiteurl = websiteurl; } - public Field getLogourl() { + public String getLogourl() { return logourl; } - public void setLogourl(Field logourl) { + public void setLogourl(String logourl) { this.logourl = logourl; } - public Field getEclegalbody() { + public String getEclegalbody() { return eclegalbody; } - public void setEclegalbody(Field eclegalbody) { + public void setEclegalbody(String eclegalbody) { this.eclegalbody = eclegalbody; } - public Field getEclegalperson() { + public String getEclegalperson() { return eclegalperson; } - public void setEclegalperson(Field eclegalperson) { + public void setEclegalperson(String eclegalperson) { this.eclegalperson = eclegalperson; } - public Field getEcnonprofit() { + public String getEcnonprofit() { return ecnonprofit; } - public void setEcnonprofit(Field ecnonprofit) { + public void setEcnonprofit(String ecnonprofit) { this.ecnonprofit = ecnonprofit; } - public Field getEcresearchorganization() { + public String getEcresearchorganization() { return ecresearchorganization; } - public void setEcresearchorganization(Field ecresearchorganization) { + public void setEcresearchorganization(String ecresearchorganization) { this.ecresearchorganization = ecresearchorganization; } - public Field getEchighereducation() { + public String getEchighereducation() { return echighereducation; } - public void setEchighereducation(Field echighereducation) { + public void setEchighereducation(String echighereducation) { this.echighereducation = echighereducation; } - public Field getEcinternationalorganizationeurinterests() { + public String getEcinternationalorganizationeurinterests() { return ecinternationalorganizationeurinterests; } public void setEcinternationalorganizationeurinterests( - Field ecinternationalorganizationeurinterests) { + String ecinternationalorganizationeurinterests) { this.ecinternationalorganizationeurinterests = ecinternationalorganizationeurinterests; } - public Field getEcinternationalorganization() { + public String getEcinternationalorganization() { return ecinternationalorganization; } - public void setEcinternationalorganization(Field ecinternationalorganization) { + public void setEcinternationalorganization(String ecinternationalorganization) { this.ecinternationalorganization = ecinternationalorganization; } - public Field getEcenterprise() { + public String getEcenterprise() { return ecenterprise; } - public void setEcenterprise(Field ecenterprise) { + public void setEcenterprise(String ecenterprise) { this.ecenterprise = ecenterprise; } - public Field getEcsmevalidated() { + public String getEcsmevalidated() { return ecsmevalidated; } - public void setEcsmevalidated(Field ecsmevalidated) { + public void setEcsmevalidated(String ecsmevalidated) { this.ecsmevalidated = ecsmevalidated; } - public Field getEcnutscode() { + public String getEcnutscode() { return ecnutscode; } - public void setEcnutscode(Field ecnutscode) { + public void setEcnutscode(String ecnutscode) { this.ecnutscode = ecnutscode; } @@ -167,48 +167,4 @@ public class Organization extends OafEntity implements Serializable { this.country = country; } - @Override - public void mergeFrom(OafEntity e) { - super.mergeFrom(e); - - if (!Organization.class.isAssignableFrom(e.getClass())) { - return; - } - - final Organization o = (Organization) e; - legalshortname = o.getLegalshortname() != null && compareTrust(this, e) < 0 - ? o.getLegalshortname() - : legalshortname; - legalname = o.getLegalname() != null && compareTrust(this, e) < 0 ? o.getLegalname() : legalname; - alternativeNames = mergeLists(o.getAlternativeNames(), alternativeNames); - websiteurl = o.getWebsiteurl() != null && compareTrust(this, e) < 0 ? o.getWebsiteurl() : websiteurl; - logourl = o.getLogourl() != null && compareTrust(this, e) < 0 ? o.getLogourl() : logourl; - eclegalbody = o.getEclegalbody() != null && compareTrust(this, e) < 0 ? o.getEclegalbody() : eclegalbody; - eclegalperson = o.getEclegalperson() != null && compareTrust(this, e) < 0 - ? o.getEclegalperson() - : eclegalperson; - ecnonprofit = o.getEcnonprofit() != null && compareTrust(this, e) < 0 ? o.getEcnonprofit() : ecnonprofit; - ecresearchorganization = o.getEcresearchorganization() != null && compareTrust(this, e) < 0 - ? o.getEcresearchorganization() - : ecresearchorganization; - echighereducation = o.getEchighereducation() != null && compareTrust(this, e) < 0 - ? o.getEchighereducation() - : echighereducation; - ecinternationalorganizationeurinterests = o.getEcinternationalorganizationeurinterests() != null - && compareTrust(this, e) < 0 - ? o.getEcinternationalorganizationeurinterests() - : ecinternationalorganizationeurinterests; - ecinternationalorganization = o.getEcinternationalorganization() != null && compareTrust(this, e) < 0 - ? o.getEcinternationalorganization() - : ecinternationalorganization; - ecenterprise = o.getEcenterprise() != null && compareTrust(this, e) < 0 - ? o.getEcenterprise() - : ecenterprise; - ecsmevalidated = o.getEcsmevalidated() != null && compareTrust(this, e) < 0 - ? o.getEcsmevalidated() - : ecsmevalidated; - ecnutscode = o.getEcnutscode() != null && compareTrust(this, e) < 0 ? o.getEcnutscode() : ecnutscode; - country = o.getCountry() != null && compareTrust(this, e) < 0 ? o.getCountry() : country; - mergeOAFDataInfo(o); - } } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/OtherResearchProduct.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/OtherResearchProduct.java index b04934c..c66bbb4 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/OtherResearchProduct.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/OtherResearchProduct.java @@ -8,53 +8,37 @@ import eu.dnetlib.dhp.schema.common.ModelConstants; public class OtherResearchProduct extends Result implements Serializable { - private List> contactperson; + private List contactperson; - private List> contactgroup; + private List contactgroup; - private List> tool; + private List tool; public OtherResearchProduct() { - setResulttype(ModelConstants.ORP_DEFAULT_RESULTTYPE); + setResulttype(ModelConstants.ORP_RESULTTYPE_CLASSID); } - public List> getContactperson() { + public List getContactperson() { return contactperson; } - public void setContactperson(List> contactperson) { + public void setContactperson(List contactperson) { this.contactperson = contactperson; } - public List> getContactgroup() { + public List getContactgroup() { return contactgroup; } - public void setContactgroup(List> contactgroup) { + public void setContactgroup(List contactgroup) { this.contactgroup = contactgroup; } - public List> getTool() { + public List getTool() { return tool; } - public void setTool(List> tool) { + public void setTool(List tool) { this.tool = tool; } - - @Override - public void mergeFrom(OafEntity e) { - super.mergeFrom(e); - - if (!OtherResearchProduct.class.isAssignableFrom(e.getClass())) { - return; - } - - OtherResearchProduct o = (OtherResearchProduct) e; - - contactperson = mergeLists(contactperson, o.getContactperson()); - contactgroup = mergeLists(contactgroup, o.getContactgroup()); - tool = mergeLists(tool, o.getTool()); - mergeOAFDataInfo(e); - } } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Project.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Project.java index 0798212..9a0632d 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Project.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Project.java @@ -4,57 +4,55 @@ package eu.dnetlib.dhp.schema.oaf; import java.io.Serializable; import java.util.List; -import org.apache.commons.lang3.StringUtils; +public class Project extends Entity implements Serializable { -public class Project extends OafEntity implements Serializable { + private String websiteurl; - private Field websiteurl; + private String code; - private Field code; + private String acronym; - private Field acronym; + private String title; - private Field title; + private String startdate; - private Field startdate; + private String enddate; - private Field enddate; + private String callidentifier; - private Field callidentifier; + private String keywords; - private Field keywords; + private String duration; - private Field duration; + private String ecsc39; - private Field ecsc39; + private String oamandatepublications; - private Field oamandatepublications; - - private Field ecarticle29_3; + private String ecarticle29_3; private List subjects; - private List> fundingtree; + private List fundingtree; private Qualifier contracttype; - private Field optional1; + private String optional1; - private Field optional2; + private String optional2; - private Field jsonextrainfo; + private String jsonextrainfo; - private Field contactfullname; + private String contactfullname; - private Field contactfax; + private String contactfax; - private Field contactphone; + private String contactphone; - private Field contactemail; + private String contactemail; - private Field summary; + private String summary; - private Field currency; + private String currency; private Float totalcost; @@ -64,7 +62,7 @@ public class Project extends OafEntity implements Serializable { private String h2020topicdescription; - private List h2020classification; + private Listh2020classification; public String getH2020topicdescription() { return h2020topicdescription; @@ -90,99 +88,99 @@ public class Project extends OafEntity implements Serializable { this.h2020classification = h2020classification; } - public Field getWebsiteurl() { + public String getWebsiteurl() { return websiteurl; } - public void setWebsiteurl(Field websiteurl) { + public void setWebsiteurl( String websiteurl) { this.websiteurl = websiteurl; } - public Field getCode() { + public String getCode() { return code; } - public void setCode(Field code) { + public void setCode( String code) { this.code = code; } - public Field getAcronym() { + public String getAcronym() { return acronym; } - public void setAcronym(Field acronym) { + public void setAcronym( String acronym) { this.acronym = acronym; } - public Field getTitle() { + public String getTitle() { return title; } - public void setTitle(Field title) { + public void setTitle( String title) { this.title = title; } - public Field getStartdate() { + public String getStartdate() { return startdate; } - public void setStartdate(Field startdate) { + public void setStartdate( String startdate) { this.startdate = startdate; } - public Field getEnddate() { + public String getEnddate() { return enddate; } - public void setEnddate(Field enddate) { + public void setEnddate( String enddate) { this.enddate = enddate; } - public Field getCallidentifier() { + public String getCallidentifier() { return callidentifier; } - public void setCallidentifier(Field callidentifier) { + public void setCallidentifier( String callidentifier) { this.callidentifier = callidentifier; } - public Field getKeywords() { + public String getKeywords() { return keywords; } - public void setKeywords(Field keywords) { + public void setKeywords( String keywords) { this.keywords = keywords; } - public Field getDuration() { + public String getDuration() { return duration; } - public void setDuration(Field duration) { + public void setDuration( String duration) { this.duration = duration; } - public Field getEcsc39() { + public String getEcsc39() { return ecsc39; } - public void setEcsc39(Field ecsc39) { + public void setEcsc39( String ecsc39) { this.ecsc39 = ecsc39; } - public Field getOamandatepublications() { + public String getOamandatepublications() { return oamandatepublications; } - public void setOamandatepublications(Field oamandatepublications) { + public void setOamandatepublications( String oamandatepublications) { this.oamandatepublications = oamandatepublications; } - public Field getEcarticle29_3() { + public String getEcarticle29_3() { return ecarticle29_3; } - public void setEcarticle29_3(Field ecarticle29_3) { + public void setEcarticle29_3( String ecarticle29_3) { this.ecarticle29_3 = ecarticle29_3; } @@ -194,11 +192,11 @@ public class Project extends OafEntity implements Serializable { this.subjects = subjects; } - public List> getFundingtree() { + public List< String> getFundingtree() { return fundingtree; } - public void setFundingtree(List> fundingtree) { + public void setFundingtree(List< String> fundingtree) { this.fundingtree = fundingtree; } @@ -210,75 +208,75 @@ public class Project extends OafEntity implements Serializable { this.contracttype = contracttype; } - public Field getOptional1() { + public String getOptional1() { return optional1; } - public void setOptional1(Field optional1) { + public void setOptional1( String optional1) { this.optional1 = optional1; } - public Field getOptional2() { + public String getOptional2() { return optional2; } - public void setOptional2(Field optional2) { + public void setOptional2( String optional2) { this.optional2 = optional2; } - public Field getJsonextrainfo() { + public String getJsonextrainfo() { return jsonextrainfo; } - public void setJsonextrainfo(Field jsonextrainfo) { + public void setJsonextrainfo( String jsonextrainfo) { this.jsonextrainfo = jsonextrainfo; } - public Field getContactfullname() { + public String getContactfullname() { return contactfullname; } - public void setContactfullname(Field contactfullname) { + public void setContactfullname( String contactfullname) { this.contactfullname = contactfullname; } - public Field getContactfax() { + public String getContactfax() { return contactfax; } - public void setContactfax(Field contactfax) { + public void setContactfax( String contactfax) { this.contactfax = contactfax; } - public Field getContactphone() { + public String getContactphone() { return contactphone; } - public void setContactphone(Field contactphone) { + public void setContactphone( String contactphone) { this.contactphone = contactphone; } - public Field getContactemail() { + public String getContactemail() { return contactemail; } - public void setContactemail(Field contactemail) { + public void setContactemail( String contactemail) { this.contactemail = contactemail; } - public Field getSummary() { + public String getSummary() { return summary; } - public void setSummary(Field summary) { + public void setSummary( String summary) { this.summary = summary; } - public Field getCurrency() { + public String getCurrency() { return currency; } - public void setCurrency(Field currency) { + public void setCurrency( String currency) { this.currency = currency; } @@ -298,64 +296,4 @@ public class Project extends OafEntity implements Serializable { this.fundedamount = fundedamount; } - @Override - public void mergeFrom(OafEntity e) { - super.mergeFrom(e); - - if (!Project.class.isAssignableFrom(e.getClass())) { - return; - } - - Project p = (Project) e; - - websiteurl = p.getWebsiteurl() != null && compareTrust(this, e) < 0 ? p.getWebsiteurl() : websiteurl; - code = p.getCode() != null && compareTrust(this, e) < 0 ? p.getCode() : code; - acronym = p.getAcronym() != null && compareTrust(this, e) < 0 ? p.getAcronym() : acronym; - title = p.getTitle() != null && compareTrust(this, e) < 0 ? p.getTitle() : title; - startdate = p.getStartdate() != null && compareTrust(this, e) < 0 ? p.getStartdate() : startdate; - enddate = p.getEnddate() != null && compareTrust(this, e) < 0 ? p.getEnddate() : enddate; - callidentifier = p.getCallidentifier() != null && compareTrust(this, e) < 0 - ? p.getCallidentifier() - : callidentifier; - keywords = p.getKeywords() != null && compareTrust(this, e) < 0 ? p.getKeywords() : keywords; - duration = p.getDuration() != null && compareTrust(this, e) < 0 ? p.getDuration() : duration; - ecsc39 = p.getEcsc39() != null && compareTrust(this, e) < 0 ? p.getEcsc39() : ecsc39; - oamandatepublications = p.getOamandatepublications() != null && compareTrust(this, e) < 0 - ? p.getOamandatepublications() - : oamandatepublications; - ecarticle29_3 = p.getEcarticle29_3() != null && compareTrust(this, e) < 0 - ? p.getEcarticle29_3() - : ecarticle29_3; - subjects = mergeLists(subjects, p.getSubjects()); - fundingtree = mergeLists(fundingtree, p.getFundingtree()); - contracttype = p.getContracttype() != null && compareTrust(this, e) < 0 - ? p.getContracttype() - : contracttype; - optional1 = p.getOptional1() != null && compareTrust(this, e) < 0 ? p.getOptional1() : optional1; - optional2 = p.getOptional2() != null && compareTrust(this, e) < 0 ? p.getOptional2() : optional2; - jsonextrainfo = p.getJsonextrainfo() != null && compareTrust(this, e) < 0 - ? p.getJsonextrainfo() - : jsonextrainfo; - contactfullname = p.getContactfullname() != null && compareTrust(this, e) < 0 - ? p.getContactfullname() - : contactfullname; - contactfax = p.getContactfax() != null && compareTrust(this, e) < 0 ? p.getContactfax() : contactfax; - contactphone = p.getContactphone() != null && compareTrust(this, e) < 0 - ? p.getContactphone() - : contactphone; - contactemail = p.getContactemail() != null && compareTrust(this, e) < 0 - ? p.getContactemail() - : contactemail; - summary = p.getSummary() != null && compareTrust(this, e) < 0 ? p.getSummary() : summary; - currency = p.getCurrency() != null && compareTrust(this, e) < 0 ? p.getCurrency() : currency; - - if (p.getH2020topiccode() != null && StringUtils.isEmpty(h2020topiccode)){ - h2020topiccode = p.getH2020topiccode(); - h2020topicdescription = p.getH2020topicdescription(); - } - - h2020classification = mergeLists(h2020classification, p.getH2020classification()); - - mergeOAFDataInfo(e); - } } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Provenance.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Provenance.java new file mode 100644 index 0000000..fd15386 --- /dev/null +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Provenance.java @@ -0,0 +1,24 @@ +package eu.dnetlib.dhp.schema.oaf; + +public class Provenance { + + private KeyValue collectedfrom; + + private DataInfo dataInfo; + + public KeyValue getCollectedfrom() { + return collectedfrom; + } + + public void setCollectedfrom(KeyValue collectedfrom) { + this.collectedfrom = collectedfrom; + } + + public DataInfo getDataInfo() { + return dataInfo; + } + + public void setDataInfo(DataInfo dataInfo) { + this.dataInfo = dataInfo; + } +} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Publication.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Publication.java index 3058c26..ee6fed0 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Publication.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Publication.java @@ -7,33 +7,8 @@ import eu.dnetlib.dhp.schema.common.ModelConstants; public class Publication extends Result implements Serializable { - // publication specific - private Journal journal; - public Publication() { - setResulttype(ModelConstants.PUBLICATION_DEFAULT_RESULTTYPE); + setResulttype(ModelConstants.PUBLICATION_RESULTTYPE_CLASSID); } - public Journal getJournal() { - return journal; - } - - public void setJournal(Journal journal) { - this.journal = journal; - } - - @Override - public void mergeFrom(OafEntity e) { - super.mergeFrom(e); - - if (!Publication.class.isAssignableFrom(e.getClass())) { - return; - } - - Publication p = (Publication) e; - - if (p.getJournal() != null && compareTrust(this, e) < 0) - journal = p.getJournal(); - mergeOAFDataInfo(e); - } } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Publisher.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Publisher.java new file mode 100644 index 0000000..de3d6fc --- /dev/null +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Publisher.java @@ -0,0 +1,16 @@ +package eu.dnetlib.dhp.schema.oaf; + +import java.io.Serializable; + +public class Publisher implements Serializable { + + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Qualifier.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Qualifier.java index 87ecb55..fa00532 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Qualifier.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Qualifier.java @@ -2,17 +2,18 @@ package eu.dnetlib.dhp.schema.oaf; import java.io.Serializable; +import java.util.stream.Stream; import org.apache.commons.lang3.StringUtils; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.google.common.base.Joiner; public class Qualifier implements Serializable { private String classid; private String classname; private String schemeid; - private String schemename; public String getClassid() { return classid; @@ -38,32 +39,12 @@ public class Qualifier implements Serializable { this.schemeid = schemeid; } - public String getSchemename() { - return schemename; - } - - public void setSchemename(String schemename) { - this.schemename = schemename; - } - public String toComparableString() { - return isBlank() - ? "" - : String - .format( - "%s::%s::%s::%s", - classid != null ? classid : "", - classname != null ? classname : "", - schemeid != null ? schemeid : "", - schemename != null ? schemename : ""); - } - - @JsonIgnore - public boolean isBlank() { - return StringUtils.isBlank(classid) - && StringUtils.isBlank(classname) - && StringUtils.isBlank(schemeid) - && StringUtils.isBlank(schemename); + return Joiner + .on("::") + .join( + Stream.of(getClassid(), getClassname(), getSchemeid()) + .filter(StringUtils::isNotBlank).iterator()); } @Override diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java index fc6c5e0..53c8414 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java @@ -3,6 +3,7 @@ package eu.dnetlib.dhp.schema.oaf; import static com.google.common.base.Preconditions.checkArgument; +import java.io.Serializable; import java.text.ParseException; import java.util.ArrayList; import java.util.List; @@ -16,7 +17,7 @@ import eu.dnetlib.dhp.schema.common.ModelSupport; * subRelType and relClass. Provenance information is modeled according to the dataInfo element and collectedFrom, while * individual relationship types can provide extra information via the properties field. */ -public class Relation extends Oaf { +public class Relation extends Oaf implements Serializable { /** * Main relationship classifier, values include 'resultResult', 'resultProject', 'resultOrganization', etc. @@ -54,6 +55,18 @@ public class Relation extends Oaf { */ private String validationDate; + private List provenance; + + private DataInfo dataInfo; + + public DataInfo getDataInfo() { + return dataInfo; + } + + public void setDataInfo(DataInfo dataInfo) { + this.dataInfo = dataInfo; + } + /** * List of relation specific properties. Values include 'similarityLevel', indicating the similarity score between a * pair of publications. @@ -124,6 +137,14 @@ public class Relation extends Oaf { this.validationDate = validationDate; } + public List getProvenance() { + return provenance; + } + + public void setProvenance(List provenance) { + this.provenance = provenance; + } + public void mergeFrom(final Relation r) { checkArgument(Objects.equals(getSource(), r.getSource()), "source ids must be equal"); @@ -142,8 +163,6 @@ public class Relation extends Oaf { "invalid validation date format in relation [s:%s, t:%s]: %s", getSource(), getTarget(), getValidationDate())); } - - super.mergeFrom(r); } @Override @@ -162,7 +181,7 @@ public class Relation extends Oaf { @Override public int hashCode() { - return Objects.hash(relType, subRelType, relClass, source, target, collectedfrom); + return Objects.hash(relType, subRelType, relClass, source, target, provenance); } } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java index ff0246b..07bc153 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java @@ -2,38 +2,22 @@ package eu.dnetlib.dhp.schema.oaf; import java.io.Serializable; -import java.util.*; -import java.util.stream.Collectors; - -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.tuple.ImmutablePair; -import org.apache.commons.lang3.tuple.Pair; - -import eu.dnetlib.dhp.schema.common.AccessRightComparator; -import eu.dnetlib.dhp.schema.common.ModelConstants; -import eu.dnetlib.dhp.schema.oaf.utils.CleaningFunctions; +import java.util.List; /** * The type Result. */ -public class Result extends OafEntity implements Serializable { +public class Result extends Entity implements Serializable { /** * ( article | book ) processing charges. */ - - private Field processingchargeamount; - + private String processingchargeamount; /** * currency - alphabetic code describe in ISO-4217. */ - private Field processingchargecurrency; - - /** - * The Measures. - */ - private List measures; + private String processingchargecurrency; /** * The Author. @@ -41,15 +25,13 @@ public class Result extends OafEntity implements Serializable { private List author; /** - * The Resulttype. + * The Resulttype. It allows subclassing results into publications | datasets | software | orp */ -// resulttype allows subclassing results into publications | datasets | software - private Qualifier resulttype; + private String resulttype; /** * The Language. */ -// common fields private Qualifier language; /** @@ -75,42 +57,42 @@ public class Result extends OafEntity implements Serializable { /** * The Description. */ - private List> description; + private List description; /** * The Dateofacceptance. */ - private Field dateofacceptance; + private String dateofacceptance; /** * The Publisher. */ - private Field publisher; + private Publisher publisher; /** * The Embargoenddate. */ - private Field embargoenddate; + private String embargoenddate; /** * The Source. */ - private List> source; + private List source; /** * The Fulltext. */ - private List> fulltext; // remove candidate + private List fulltext; /** * The Format. */ - private List> format; + private List format; /** * The Contributor. */ - private List> contributor; + private List contributor; /** * The Resourcetype. @@ -120,13 +102,15 @@ public class Result extends OafEntity implements Serializable { /** * The Coverage. */ - private List> coverage; + private List coverage; /** * The Bestaccessright. */ private Qualifier bestaccessright; + private Journal journal; + /** * The Context. */ @@ -147,37 +131,21 @@ public class Result extends OafEntity implements Serializable { */ private List eoscifguidelines; - /** - * Gets measures. - * - * @return the measures - */ - public List getMeasures() { - return measures; - } + private OAIProvenance oaiprovenance; - /** - * Sets measures. - * - * @param measures the measures - */ - public void setMeasures(List measures) { - this.measures = measures; - } - - public Field getProcessingchargeamount() { + public String getProcessingchargeamount() { return processingchargeamount; } - public void setProcessingchargeamount(Field processingchargeamount) { + public void setProcessingchargeamount(String processingchargeamount) { this.processingchargeamount = processingchargeamount; } - public Field getProcessingchargecurrency() { + public String getProcessingchargecurrency() { return processingchargecurrency; } - public void setProcessingchargecurrency(Field processingchargecurrency) { + public void setProcessingchargecurrency(String processingchargecurrency) { this.processingchargecurrency = processingchargecurrency; } @@ -204,7 +172,7 @@ public class Result extends OafEntity implements Serializable { * * @return the resulttype */ - public Qualifier getResulttype() { + public String getResulttype() { return resulttype; } @@ -213,7 +181,7 @@ public class Result extends OafEntity implements Serializable { * * @param resulttype the resulttype */ - public void setResulttype(Qualifier resulttype) { + public void setResulttype(String resulttype) { this.resulttype = resulttype; } @@ -312,7 +280,7 @@ public class Result extends OafEntity implements Serializable { * * @return the description */ - public List> getDescription() { + public List getDescription() { return description; } @@ -321,7 +289,7 @@ public class Result extends OafEntity implements Serializable { * * @param description the description */ - public void setDescription(List> description) { + public void setDescription(List description) { this.description = description; } @@ -330,7 +298,7 @@ public class Result extends OafEntity implements Serializable { * * @return the dateofacceptance */ - public Field getDateofacceptance() { + public String getDateofacceptance() { return dateofacceptance; } @@ -339,7 +307,7 @@ public class Result extends OafEntity implements Serializable { * * @param dateofacceptance the dateofacceptance */ - public void setDateofacceptance(Field dateofacceptance) { + public void setDateofacceptance(String dateofacceptance) { this.dateofacceptance = dateofacceptance; } @@ -348,7 +316,7 @@ public class Result extends OafEntity implements Serializable { * * @return the publisher */ - public Field getPublisher() { + public Publisher getPublisher() { return publisher; } @@ -357,7 +325,7 @@ public class Result extends OafEntity implements Serializable { * * @param publisher the publisher */ - public void setPublisher(Field publisher) { + public void setPublisher(Publisher publisher) { this.publisher = publisher; } @@ -366,7 +334,7 @@ public class Result extends OafEntity implements Serializable { * * @return the embargoenddate */ - public Field getEmbargoenddate() { + public String getEmbargoenddate() { return embargoenddate; } @@ -375,7 +343,7 @@ public class Result extends OafEntity implements Serializable { * * @param embargoenddate the embargoenddate */ - public void setEmbargoenddate(Field embargoenddate) { + public void setEmbargoenddate(String embargoenddate) { this.embargoenddate = embargoenddate; } @@ -384,7 +352,7 @@ public class Result extends OafEntity implements Serializable { * * @return the source */ - public List> getSource() { + public List getSource() { return source; } @@ -393,7 +361,7 @@ public class Result extends OafEntity implements Serializable { * * @param source the source */ - public void setSource(List> source) { + public void setSource(List source) { this.source = source; } @@ -402,7 +370,7 @@ public class Result extends OafEntity implements Serializable { * * @return the fulltext */ - public List> getFulltext() { + public List getFulltext() { return fulltext; } @@ -411,7 +379,7 @@ public class Result extends OafEntity implements Serializable { * * @param fulltext the fulltext */ - public void setFulltext(List> fulltext) { + public void setFulltext(List fulltext) { this.fulltext = fulltext; } @@ -420,7 +388,7 @@ public class Result extends OafEntity implements Serializable { * * @return the format */ - public List> getFormat() { + public List getFormat() { return format; } @@ -429,7 +397,7 @@ public class Result extends OafEntity implements Serializable { * * @param format the format */ - public void setFormat(List> format) { + public void setFormat(List format) { this.format = format; } @@ -438,7 +406,7 @@ public class Result extends OafEntity implements Serializable { * * @return the contributor */ - public List> getContributor() { + public List getContributor() { return contributor; } @@ -447,7 +415,7 @@ public class Result extends OafEntity implements Serializable { * * @param contributor the contributor */ - public void setContributor(List> contributor) { + public void setContributor(List contributor) { this.contributor = contributor; } @@ -474,7 +442,7 @@ public class Result extends OafEntity implements Serializable { * * @return the coverage */ - public List> getCoverage() { + public List getCoverage() { return coverage; } @@ -483,7 +451,7 @@ public class Result extends OafEntity implements Serializable { * * @param coverage the coverage */ - public void setCoverage(List> coverage) { + public void setCoverage(List coverage) { this.coverage = coverage; } @@ -505,6 +473,14 @@ public class Result extends OafEntity implements Serializable { this.bestaccessright = bestaccessright; } + public Journal getJournal() { + return journal; + } + + public void setJournal(Journal journal) { + this.journal = journal; + } + /** * Gets context. * @@ -567,332 +543,11 @@ public class Result extends OafEntity implements Serializable { this.eoscifguidelines = eoscifguidelines; } - /** - * Is an enrichment boolean. - * - * @param e the e - * @return the boolean - */ - public static boolean isAnEnrichment(OafEntity e) { - return e.getDataInfo()!= null && - e.getDataInfo().getProvenanceaction()!= null - && ModelConstants.PROVENANCE_ENRICH.equalsIgnoreCase(e.getDataInfo().getProvenanceaction().getClassid()); + public OAIProvenance getOaiprovenance() { + return oaiprovenance; } - - /** - * Normalize pid string. - * - * @param pid the pid - * @return the string - */ - private static String extractKeyFromPid(final StructuredProperty pid) { - if (pid == null) - return null; - final StructuredProperty normalizedPid = CleaningFunctions.normalizePidValue(pid); - - return String.format("%s::%s", normalizedPid.getQualifier().getClassid(), normalizedPid.getValue()); - } - - /** - * Valid pid boolean. - * - * @param p the p - * @return the boolean - */ - private static boolean validPid(final StructuredProperty p) { - return p.getValue()!= null && p.getQualifier()!= null && p.getQualifier().getClassid()!=null; - } - - - /** - * This method converts the list of instance enrichments - * into a Map where the key is the normalized identifier - * and the value is the instance itself - * - * @param ri the list of enrichment instances - * @return the result map - */ - public static Map toInstanceMap(final List ri) { - - - return ri - .stream() - .filter(i -> i.getPid() != null || i.getAlternateIdentifier() != null) - .flatMap(i -> { - final List> result = new ArrayList<>(); - if (i.getPid() != null) - i.getPid().stream().filter(Result::validPid).forEach(p -> result.add(new ImmutablePair<>(extractKeyFromPid(p), i))); - if (i.getAlternateIdentifier() != null) - i.getAlternateIdentifier().stream().filter(Result::validPid).forEach(p -> result.add(new ImmutablePair<>(extractKeyFromPid(p), i))); - return result.stream(); - }).collect(Collectors.toMap( - Pair::getLeft, - Pair::getRight, - (a, b) -> a - )); - } - - /** - * This utility method finds the list of enrichment instances - * that match one or more PIDs in the input list - * - * @param pids the list of PIDs - * @param enrichments the List of enrichment instances having the same pid - * @return the list - */ - private static List findEnrichmentsByPID(final List pids, final Map enrichments) { - if (pids == null || enrichments == null) - return null; - return pids - .stream() - .map(Result::extractKeyFromPid) - .map(enrichments::get) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - } - - /** - * This method apply enrichment on a single instance - * The enrichment consists of replacing values on - * single attribute only if in the current instance is missing - * The only repeatable field enriched is measures - * - * @param currentInstance the current instance - * @param enrichment the enrichment instance - */ - private static void applyEnrichment(final Instance currentInstance, final Instance enrichment) { - if (currentInstance == null || enrichment == null) - return; - - //ENRICH accessright - if (enrichment.getAccessright()!=null && currentInstance.getAccessright() == null) - currentInstance.setAccessright(enrichment.getAccessright()); - - //ENRICH license - if (enrichment.getLicense()!=null && currentInstance.getLicense() == null) - currentInstance.setLicense(enrichment.getLicense()); - - //ENRICH instanceType - if (enrichment.getInstancetype()!=null && currentInstance.getInstancetype() == null) - currentInstance.setInstancetype(enrichment.getInstancetype()); - - //ENRICH hostedby - if (enrichment.getHostedby()!=null && currentInstance.getHostedby() == null) - currentInstance.setHostedby(enrichment.getHostedby()); - - //ENRICH distributionlocation - if (enrichment.getDistributionlocation()!=null && currentInstance.getDistributionlocation() == null) - currentInstance.setDistributionlocation(enrichment.getDistributionlocation()); - - //ENRICH collectedfrom - if (enrichment.getCollectedfrom()!=null && currentInstance.getCollectedfrom() == null) - currentInstance.setCollectedfrom(enrichment.getCollectedfrom()); - - //ENRICH dateofacceptance - if (enrichment.getDateofacceptance()!=null && currentInstance.getDateofacceptance() == null) - currentInstance.setDateofacceptance(enrichment.getDateofacceptance()); - - //ENRICH processingchargeamount - if (enrichment.getProcessingchargeamount()!=null && currentInstance.getProcessingchargeamount() == null) - currentInstance.setProcessingchargeamount(enrichment.getProcessingchargeamount()); - - //ENRICH refereed - if (enrichment.getRefereed()!=null && currentInstance.getRefereed() == null) - currentInstance.setRefereed(enrichment.getRefereed()); - - //ENRICH measures - if (enrichment.getMeasures()!=null) - if (currentInstance.getMeasures() == null) - currentInstance.setMeasures(enrichment.getMeasures()); - else - enrichment.getMeasures().forEach(currentInstance.getMeasures()::add); - - } - - - /** - * This main method apply the enrichment of the instances - * - * @param toEnrichInstances the instances that could be enriched - * @param enrichmentInstances the enrichment instances - * @return list of instances possibly enriched - */ - private static List enrichInstances(final List toEnrichInstances,final List enrichmentInstances) { - final List enrichmentResult = new ArrayList<>(); - - if (toEnrichInstances == null) { - return enrichmentResult; - } - if (enrichmentInstances == null) { - return enrichmentResult; - } - Map ri = toInstanceMap(enrichmentInstances); - - toEnrichInstances.forEach(i -> { - final List e = findEnrichmentsByPID(i.getPid(), ri); - if (e!= null && e.size()> 0) { - e.forEach(enr -> applyEnrichment(i, enr)); - } else { - final List a = findEnrichmentsByPID(i.getAlternateIdentifier(), ri); - if (a!= null && a.size()> 0) { - a.forEach(enr -> applyEnrichment(i, enr)); - } - } - enrichmentResult.add(i); - }); - return enrichmentResult; - } - - @Override - public void mergeFrom(OafEntity e) { - super.mergeFrom(e); - - if (!Result.class.isAssignableFrom(e.getClass())) { - return; - } - - Result r = (Result) e; - - if(processingchargeamount == null || StringUtils.isBlank(processingchargeamount.getValue() )){ - processingchargeamount = r.getProcessingchargeamount(); - processingchargecurrency = r.getProcessingchargecurrency(); - } - - measures = mergeLists(measures, r.getMeasures()); - - eoscifguidelines = mergeLists(eoscifguidelines, r.getEoscifguidelines()); - - if( !isAnEnrichment(this) && !isAnEnrichment(e)) - instance = mergeLists(instance, r.getInstance()); - else { - final List enrichmentInstances = isAnEnrichment(this) ? instance : r.getInstance(); - final List enrichedInstances= isAnEnrichment(this) ? r.getInstance(): instance; - if (isAnEnrichment(this)) - setDataInfo(e.getDataInfo()); - instance = enrichInstances(enrichedInstances,enrichmentInstances); - } - - if (r.getBestaccessright() != null - && new AccessRightComparator().compare(r.getBestaccessright(), bestaccessright) < 0) - bestaccessright = r.getBestaccessright(); - - if (r.getResulttype() != null && compareTrust(this, r) < 0) - resulttype = r.getResulttype(); - - if (r.getLanguage() != null && compareTrust(this, r) < 0) - language = r.getLanguage(); - - if (Objects.nonNull(r.getDateofacceptance())) { - if (Objects.isNull(getDateofacceptance())) { - dateofacceptance = r.getDateofacceptance(); - } else if (compareTrust(this, r) < 0) { - dateofacceptance = r.getDateofacceptance(); - } - } - - country = mergeLists(country, r.getCountry()); - - subject = mergeLists(subject, r.getSubject()); - - // merge title lists: main title with higher trust and distinct between the others - StructuredProperty baseMainTitle = null; - if (title != null) { - baseMainTitle = getMainTitle(title); - if (baseMainTitle != null) { - final StructuredProperty p = baseMainTitle; - title = title.stream().filter(t -> t != p).collect(Collectors.toList()); - } - } - - StructuredProperty newMainTitle = null; - if (r.getTitle() != null) { - newMainTitle = getMainTitle(r.getTitle()); - if (newMainTitle != null) { - final StructuredProperty p = newMainTitle; - r.setTitle(r.getTitle().stream().filter(t -> t != p).collect(Collectors.toList())); - } - } - - if (newMainTitle != null && compareTrust(this, r) < 0) { - baseMainTitle = newMainTitle; - } - - title = mergeLists(title, r.getTitle()); - if (title != null && baseMainTitle != null) { - title.add(baseMainTitle); - } - - relevantdate = mergeLists(relevantdate, r.getRelevantdate()); - - description = longestLists(description, r.getDescription()); - - if (r.getPublisher() != null && compareTrust(this, r) < 0) - publisher = r.getPublisher(); - - if (r.getEmbargoenddate() != null && compareTrust(this, r) < 0) - embargoenddate = r.getEmbargoenddate(); - - source = mergeLists(source, r.getSource()); - - fulltext = mergeLists(fulltext, r.getFulltext()); - - format = mergeLists(format, r.getFormat()); - - contributor = mergeLists(contributor, r.getContributor()); - - if (r.getResourcetype() != null) - resourcetype = r.getResourcetype(); - - coverage = mergeLists(coverage, r.getCoverage()); - - context = mergeLists(context, r.getContext()); - - externalReference = mergeLists(externalReference, r.getExternalReference()); - } - - /** - * Longest lists list. - * - * @param a the a - * @param b the b - * @return the list - */ - private List> longestLists(List> a, List> b) { - if (a == null || b == null) - return a == null ? b : a; - if (a.size() == b.size()) { - int msa = a - .stream() - .filter(i -> i != null && i.getValue() != null) - .map(i -> i.getValue().length()) - .max(Comparator.naturalOrder()) - .orElse(0); - int msb = b - .stream() - .filter(i -> i != null && i.getValue() != null) - .map(i -> i.getValue().length()) - .max(Comparator.naturalOrder()) - .orElse(0); - return msa > msb ? a : b; - } - return a.size() > b.size() ? a : b; - } - - /** - * Gets main title. - * - * @param titles the titles - * @return the main title - */ - private StructuredProperty getMainTitle(List titles) { - // need to check if the list of titles contains more than 1 main title? (in that case, we should chose which - // main title select in the list) - for (StructuredProperty t : titles) { - if (t.getQualifier() != null && t.getQualifier().getClassid() != null) - if (t.getQualifier().getClassid().equals("main title")) - return t; - } - return null; + public void setOaiprovenance(OAIProvenance oaiprovenance) { + this.oaiprovenance = oaiprovenance; } } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Software.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Software.java index d25b5c9..2a51877 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Software.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Software.java @@ -8,41 +8,30 @@ import eu.dnetlib.dhp.schema.common.ModelConstants; public class Software extends Result implements Serializable { - private List> documentationUrl; + private List documentationUrl; // candidate for removal - private List license; - - // candidate for removal - private Field codeRepositoryUrl; + private String codeRepositoryUrl; private Qualifier programmingLanguage; public Software() { - setResulttype(ModelConstants.SOFTWARE_DEFAULT_RESULTTYPE); + setResulttype(ModelConstants.SOFTWARE_RESULTTYPE_CLASSID); } - public List> getDocumentationUrl() { + public List getDocumentationUrl() { return documentationUrl; } - public void setDocumentationUrl(List> documentationUrl) { + public void setDocumentationUrl(List documentationUrl) { this.documentationUrl = documentationUrl; } - public List getLicense() { - return license; - } - - public void setLicense(List license) { - this.license = license; - } - - public Field getCodeRepositoryUrl() { + public String getCodeRepositoryUrl() { return codeRepositoryUrl; } - public void setCodeRepositoryUrl(Field codeRepositoryUrl) { + public void setCodeRepositoryUrl(String codeRepositoryUrl) { this.codeRepositoryUrl = codeRepositoryUrl; } @@ -53,28 +42,4 @@ public class Software extends Result implements Serializable { public void setProgrammingLanguage(Qualifier programmingLanguage) { this.programmingLanguage = programmingLanguage; } - - @Override - public void mergeFrom(OafEntity e) { - super.mergeFrom(e); - - if (!Software.class.isAssignableFrom(e.getClass())) { - return; - } - - final Software s = (Software) e; - documentationUrl = mergeLists(documentationUrl, s.getDocumentationUrl()); - - license = mergeLists(license, s.getLicense()); - - codeRepositoryUrl = s.getCodeRepositoryUrl() != null && compareTrust(this, s) < 0 - ? s.getCodeRepositoryUrl() - : codeRepositoryUrl; - - programmingLanguage = s.getProgrammingLanguage() != null && compareTrust(this, s) < 0 - ? s.getProgrammingLanguage() - : programmingLanguage; - - mergeOAFDataInfo(e); - } } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/StructuredProperty.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/StructuredProperty.java index 8750950..62669b0 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/StructuredProperty.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/StructuredProperty.java @@ -14,8 +14,6 @@ public class StructuredProperty implements Serializable { private Qualifier qualifier; - private DataInfo dataInfo; - public String getValue() { return value; } @@ -32,14 +30,6 @@ public class StructuredProperty implements Serializable { this.qualifier = qualifier; } - public DataInfo getDataInfo() { - return dataInfo; - } - - public void setDataInfo(DataInfo dataInfo) { - this.dataInfo = dataInfo; - } - public String toComparableString() { return Stream .of( diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Subject.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Subject.java index b06ceb2..df00af4 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Subject.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Subject.java @@ -3,4 +3,14 @@ package eu.dnetlib.dhp.schema.oaf; import java.io.Serializable; public class Subject extends StructuredProperty implements Serializable { + + private DataInfo dataInfo; + + public DataInfo getDataInfo() { + return dataInfo; + } + + public void setDataInfo(DataInfo dataInfo) { + this.dataInfo = dataInfo; + } } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/IdentifierFactory.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/IdentifierFactory.java index 32e8e39..aac2c8c 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/IdentifierFactory.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/IdentifierFactory.java @@ -139,7 +139,7 @@ public class IdentifierFactory implements Serializable { * @param md5 indicates whether should hash the PID value or not. * @return an identifier from the most relevant PID, entity.id otherwise */ - public static String createIdentifier(T entity, boolean md5) { + public static String createIdentifier(T entity, boolean md5) { checkArgument(StringUtils.isNoneBlank(entity.getId()), "missing entity identifier"); @@ -164,7 +164,7 @@ public class IdentifierFactory implements Serializable { .orElseGet(entity::getId); } - private static Map> extractPids(T entity) { + private static Map> extractPids(T entity) { if (entity instanceof Result) { return Optional .ofNullable(((Result) entity).getInstance()) @@ -249,14 +249,14 @@ public class IdentifierFactory implements Serializable { } /** - * @see {@link IdentifierFactory#createIdentifier(OafEntity, boolean)} + * @see {@link IdentifierFactory#createIdentifier(Entity, boolean)} */ - public static String createIdentifier(T entity) { + public static String createIdentifier(T entity) { return createIdentifier(entity, true); } - private static String idFromPid(T entity, StructuredProperty s, boolean md5) { + private static String idFromPid(T entity, StructuredProperty s, boolean md5) { return idFromPid(ModelSupport.getIdPrefix(entity.getClass()), s.getQualifier().getClassid(), s.getValue(), md5); } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidComparator.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidComparator.java index a2bc65a..7a5d560 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidComparator.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidComparator.java @@ -4,12 +4,12 @@ package eu.dnetlib.dhp.schema.oaf.utils; import java.util.Comparator; import eu.dnetlib.dhp.schema.common.ModelSupport; -import eu.dnetlib.dhp.schema.oaf.OafEntity; +import eu.dnetlib.dhp.schema.oaf.Entity; import eu.dnetlib.dhp.schema.oaf.Organization; import eu.dnetlib.dhp.schema.oaf.Result; import eu.dnetlib.dhp.schema.oaf.StructuredProperty; -public class PidComparator implements Comparator { +public class PidComparator implements Comparator { private final T entity; diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ResultTypeComparator.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ResultTypeComparator.java index 04d855d..a233ae7 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ResultTypeComparator.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ResultTypeComparator.java @@ -34,8 +34,8 @@ public class ResultTypeComparator implements Comparator { return 1; } - String lClass = left.getResulttype().getClassid(); - String rClass = right.getResulttype().getClassid(); + String lClass = left.getResulttype(); + String rClass = right.getResulttype(); if (lClass.equals(rClass)) return 0; diff --git a/src/main/java/eu/dnetlib/dhp/schema/sx/OafUtils.scala b/src/main/java/eu/dnetlib/dhp/schema/sx/OafUtils.scala index b34a951..3113d23 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/sx/OafUtils.scala +++ b/src/main/java/eu/dnetlib/dhp/schema/sx/OafUtils.scala @@ -1,82 +1,53 @@ package eu.dnetlib.dhp.schema.sx import eu.dnetlib.dhp.schema.common.ModelConstants -import eu.dnetlib.dhp.schema.oaf.{AccessRight, DataInfo, Field, KeyValue, Qualifier, StructuredProperty} +import eu.dnetlib.dhp.schema.oaf.{AccessRight, DataInfo, KeyValue, Qualifier, StructuredProperty} object OafUtils { - - def generateKeyValue(key: String, value: String): KeyValue = { val kv: KeyValue = new KeyValue() kv.setKey(key) kv.setValue(value) - kv.setDataInfo(generateDataInfo("0.9")) kv } - - def generateDataInfo(trust: String = "0.9", invisible: Boolean = false): DataInfo = { + def generateDataInfo(trust: Float = 0.9f, invisible: Boolean = false): DataInfo = { val di = new DataInfo - di.setDeletedbyinference(false) di.setInferred(false) - di.setInvisible(invisible) di.setTrust(trust) di.setProvenanceaction(createQualifier(ModelConstants.SYSIMPORT_ACTIONSET, ModelConstants.DNET_PROVENANCE_ACTIONS)) di } def createQualifier(cls: String, sch: String): Qualifier = { - createQualifier(cls, cls, sch, sch) + createQualifier(cls, cls, sch) } - - def createQualifier(classId: String, className: String, schemeId: String, schemeName: String): Qualifier = { + def createQualifier(classId: String, className: String, schemeId: String): Qualifier = { val q: Qualifier = new Qualifier q.setClassid(classId) q.setClassname(className) q.setSchemeid(schemeId) - q.setSchemename(schemeName) q } - def createAccessRight(classId: String, className: String, schemeId: String, schemeName: String): AccessRight = { + def createAccessRight(classId: String, className: String, schemeId: String): AccessRight = { val accessRight: AccessRight = new AccessRight accessRight.setClassid(classId) accessRight.setClassname(className) accessRight.setSchemeid(schemeId) - accessRight.setSchemename(schemeName) accessRight } - - def asField[T](value: T): Field[T] = { - val tmp = new Field[T] - tmp.setValue(value) - tmp - - - } - - def createSP(value: String, classId: String,className:String, schemeId: String, schemeName:String): StructuredProperty = { + def createSP(value: String, classId: String,className:String, schemeId: String): StructuredProperty = { val sp = new StructuredProperty - sp.setQualifier(createQualifier(classId,className, schemeId, schemeName)) + sp.setQualifier(createQualifier(classId,className, schemeId)) sp.setValue(value) sp } - - - def createSP(value: String, classId: String,className:String, schemeId: String, schemeName:String, dataInfo: DataInfo): StructuredProperty = { - val sp = new StructuredProperty - sp.setQualifier(createQualifier(classId,className, schemeId, schemeName)) - sp.setValue(value) - sp.setDataInfo(dataInfo) - sp - - } - def createSP(value: String, classId: String, schemeId: String): StructuredProperty = { val sp = new StructuredProperty sp.setQualifier(createQualifier(classId, schemeId)) @@ -85,16 +56,4 @@ object OafUtils { } - - - def createSP(value: String, classId: String, schemeId: String, dataInfo: DataInfo): StructuredProperty = { - val sp = new StructuredProperty - sp.setQualifier(createQualifier(classId, schemeId)) - sp.setValue(value) - sp.setDataInfo(dataInfo) - sp - - } - - } diff --git a/src/test/java/eu/dnetlib/dhp/schema/common/ModelSupportTest.java b/src/test/java/eu/dnetlib/dhp/schema/common/ModelSupportTest.java index 3e1533b..f26fed0 100644 --- a/src/test/java/eu/dnetlib/dhp/schema/common/ModelSupportTest.java +++ b/src/test/java/eu/dnetlib/dhp/schema/common/ModelSupportTest.java @@ -8,7 +8,7 @@ import java.io.IOException; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import eu.dnetlib.dhp.schema.oaf.OafEntity; +import eu.dnetlib.dhp.schema.oaf.Entity; import eu.dnetlib.dhp.schema.oaf.Relation; import eu.dnetlib.dhp.schema.oaf.Result; @@ -20,7 +20,7 @@ public class ModelSupportTest { @Test void shouldReturnFalseWhenSubClassDoesNotExtendSuperClass() { // when - Boolean result = ModelSupport.isSubClass(Relation.class, OafEntity.class); + Boolean result = ModelSupport.isSubClass(Relation.class, Entity.class); // then assertFalse(result); @@ -29,7 +29,7 @@ public class ModelSupportTest { @Test void shouldReturnTrueWhenSubClassExtendsSuperClass() { // when - Boolean result = ModelSupport.isSubClass(Result.class, OafEntity.class); + Boolean result = ModelSupport.isSubClass(Result.class, Entity.class); // then assertTrue(result); diff --git a/src/test/java/eu/dnetlib/dhp/schema/oaf/MergeTest.java b/src/test/java/eu/dnetlib/dhp/schema/oaf/MergeTest.java deleted file mode 100644 index 4479ea1..0000000 --- a/src/test/java/eu/dnetlib/dhp/schema/oaf/MergeTest.java +++ /dev/null @@ -1,682 +0,0 @@ - -package eu.dnetlib.dhp.schema.oaf; - -import static org.junit.jupiter.api.Assertions.*; - -import java.io.IOException; -import java.io.InputStream; -import java.time.format.DateTimeParseException; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.collect.Lists; - -/** - * The type Merge test. - */ -class MergeTest { - - /** - * The Oaf. - */ - OafEntity oaf; - - /** - * Sets up. - */ - @BeforeEach - public void setUp() { - oaf = new Publication(); - } - - /** - * Merge lists test. - */ - @Test - @SuppressWarnings("unchecked") - void mergeListsTest() { - - // string list merge test - List a = Arrays.asList("a", "b", "c", "e"); - List b = Arrays.asList("a", "b", "c", "d"); - List c = null; - - System.out.println("merge result 1 = " + oaf.mergeLists(a, b)); - - System.out.println("merge result 2 = " + oaf.mergeLists(a, c)); - - System.out.println("merge result 3 = " + oaf.mergeLists(c, c)); - } - - /** - * Merge publication collected from test. - */ - @Test - void mergePublicationCollectedFromTest() { - - Publication a = publication(); - Publication b = publication(); - - a.setCollectedfrom(Arrays.asList(setKV("a", "open"), setKV("b", "closed"))); - b.setCollectedfrom(Arrays.asList(setKV("A", "open"), setKV("b", "Open"))); - - a.mergeFrom(b); - - assertNotNull(a.getCollectedfrom()); - assertEquals(3, a.getCollectedfrom().size()); - } - - /** - * Load resource result list. - * - * @param the type parameter - * @param path the path - * @param clazz the clazz - * @return the list - * @throws Exception the exception - */ - private List loadResourceResult(final String path, final Class clazz ) throws Exception { - final ObjectMapper mapper = new ObjectMapper(); - final InputStream str = Objects.requireNonNull(getClass().getResourceAsStream(path)); - // LOAD test publications - return IOUtils.readLines(str).stream().map(s -> { - try { - return mapper.readValue(s, clazz); - } catch (IOException e) { - return null; - } - }).filter(Objects::nonNull).collect(Collectors.toList()); - } - - - /** - * Apply to any test list result the same pid of the enrichment instance - * - * @param source the source - * @param enrichment the enrichment - * @param overrideAlternateIdentifier the override alternate identifier - */ - private void updatePidIntoPublicationInstance(final List source, final Listenrichment, final boolean overrideAlternateIdentifier) { - for(int i = 0 ; i< source.size(); i++) { - final Result currentPub = source.get(i); - final Result currentEnrichment = enrichment.get(i); - final Instance currentInstance = Objects.requireNonNull(currentPub.getInstance()).get(0); - if (overrideAlternateIdentifier) - currentInstance.setAlternateIdentifier(Objects.requireNonNull(currentEnrichment.getInstance()).get(0).getPid()); - else - currentInstance.setPid(Objects.requireNonNull(currentEnrichment.getInstance()).get(0).getPid()); - } - } - - - private void applyAndVerifyEnrichment(final List l1, final List l2) { - // Apply Merge and verify that enrichments works - for(int i = 0 ; i< l1.size(); i++) { - final Result currentPub = l2.get(i); - final Result currentEnrichment = l1.get(i); - currentPub.mergeFrom(currentEnrichment); - assertEquals(1, currentPub.getInstance().size()); - final Instance currentInstance = Objects.requireNonNull(currentPub.getInstance()).get(0); - assertNotNull(currentInstance.getMeasures()); - assertNotNull(currentPub.getTitle()); - assertFalse(Result.isAnEnrichment(currentPub)); - } - - } - - /** - * Test the merge of the APC at the level of the result and the instance. - * - * @throws Exception the exception - */ - - @Test - void testAPCMerge() throws Exception { - List publications = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/publication_apc.json", Publication.class); - System.out.println(publications.size()); - publications.forEach(p -> assertEquals(1, p.getInstance().size())); - publications.forEach(p -> assertTrue(p.getProcessingchargeamount() != null )); - publications.forEach(p -> assertTrue(p.getProcessingchargecurrency() != null )); - publications.forEach(p -> assertTrue(StringUtils.isNotBlank(p.getProcessingchargeamount().getValue() ))); - publications.forEach(p -> assertTrue(StringUtils.isNotBlank(p.getProcessingchargecurrency().getValue() ))); - - publications.forEach(p -> p.getInstance().stream() - .forEach(i -> assertTrue(i.getProcessingchargeamount() != null))); - publications.forEach(p -> p.getInstance().stream() - .forEach(i -> assertTrue(i.getProcessingchargecurrency() != null))); - - publications.forEach(p -> p.getInstance().stream() - .forEach(i -> assertTrue(StringUtils.isNotBlank(i.getProcessingchargeamount().getValue())))); - publications.forEach(p -> p.getInstance().stream() - .forEach(i -> assertTrue(StringUtils.isNotBlank(i.getProcessingchargecurrency().getValue())))); - - Result p1 = publications.get(0); - Result p2 = publications.get(1); - - p1.mergeFrom(p2); - - assertEquals("1721.47", p1.getProcessingchargeamount().getValue()); - assertEquals("EUR", p1.getProcessingchargecurrency().getValue()); - - assertEquals(2 , p1.getInstance().size()); - - p1.getInstance().stream().forEach(i -> assertTrue(i.getProcessingchargeamount() != null)); - p1.getInstance().stream().forEach(i -> assertTrue(i.getProcessingchargecurrency() != null)); - - p1.getInstance().stream().anyMatch(i -> i.getProcessingchargeamount().getValue().equals("2000.47")); - p1.getInstance().stream().anyMatch(i -> i.getProcessingchargeamount().getValue().equals("1721.47")); - - p1.getInstance().stream().anyMatch(i -> i.getProcessingchargecurrency().getValue().equals("EUR")); - p1.getInstance().stream().anyMatch(i -> i.getProcessingchargecurrency().getValue().equals("USD")); - System.out.println(new ObjectMapper().writeValueAsString(p1)); - } - @Test - void testAPCMerge2() throws Exception { - List publications = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/publication_apc2.json", Publication.class); - System.out.println(publications.size()); - publications.forEach(p -> assertEquals(1, p.getInstance().size())); - assertTrue(publications.get(0).getProcessingchargeamount() != null ); - assertTrue(publications.get(0).getProcessingchargecurrency() != null ); - assertTrue(publications.get(1).getProcessingchargeamount() == null ); - - Result p1 = publications.get(1); - Result p2 = publications.get(0); - - //merge visible record with OpenAPC - p1.mergeFrom(p2); - - assertFalse(p1.getDataInfo().getInvisible()); - assertEquals("1721.47", p1.getProcessingchargeamount().getValue()); - assertEquals("EUR", p1.getProcessingchargecurrency().getValue()); - - assertEquals(2 , p1.getInstance().size()); - p1.getInstance().stream().anyMatch(i -> i.getProcessingchargeamount() != null); - - p1.getInstance().stream().anyMatch(i -> i.getProcessingchargecurrency() != null); - - assertEquals("1721.47", p1.getInstance().stream().filter(i -> i.getProcessingchargeamount() != null) - .collect(Collectors.toList()).get(0).getProcessingchargeamount().getValue()); - - assertEquals("EUR", p1.getInstance().stream().filter(i -> i.getProcessingchargeamount() != null) - .collect(Collectors.toList()).get(0).getProcessingchargecurrency().getValue()); - assertFalse(p1.getDataInfo().getInvisible()); - System.out.println(new ObjectMapper().writeValueAsString(p1)); - - //merge OpenAPC with visible record - p2.mergeFrom(p1); - assertFalse(p2.getDataInfo().getInvisible()); - assertEquals("1721.47", p2.getProcessingchargeamount().getValue()); - assertEquals("EUR", p2.getProcessingchargecurrency().getValue()); - - assertEquals(2 , p2.getInstance().size()); - p2.getInstance().stream().anyMatch(i -> i.getProcessingchargeamount() != null); - - p2.getInstance().stream().anyMatch(i -> i.getProcessingchargecurrency() != null); - - assertEquals("1721.47", p2.getInstance().stream().filter(i -> i.getProcessingchargeamount() != null) - .collect(Collectors.toList()).get(0).getProcessingchargeamount().getValue()); - - assertEquals("EUR", p2.getInstance().stream().filter(i -> i.getProcessingchargeamount() != null) - .collect(Collectors.toList()).get(0).getProcessingchargecurrency().getValue()); - - } - - /** - * Test enrichment function. - * - * @throws Exception the exception - */ - @Test - void testEnrichment() throws Exception { - - - // 1 TEST UPDATING PID INSTANCE AND MERGE CURRENT PUBLICATION WITH ENRICHMENT - // LOAD test publications - List publications = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/publications.json", Publication.class); - // Assert that each publication has only one instance and inside that all the measure field is empty - publications.forEach(p -> { - assertEquals(1, p.getInstance().size()); - final Instance currentInstance = Objects.requireNonNull(p.getInstance()).get(0); - assertNull(currentInstance.getMeasures()); - }); - - // LOAD test enrichments - List enrichment = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/enrichment.json", Result.class); - - updatePidIntoPublicationInstance(publications, enrichment, false); - applyAndVerifyEnrichment(publications, enrichment); - - - // 2 TEST UPDATING ALTERNATE ID INSTANCE AND MERGE CURRENT PUBLICATION WITH ENRICHMENT - publications = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/publications.json", Publication.class); - enrichment = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/enrichment.json", Result.class); - updatePidIntoPublicationInstance(publications, enrichment, true); - applyAndVerifyEnrichment(publications, enrichment); - - - // 3 TEST UPDATING PID INSTANCE AND MERGE ENRICHMENT WITH CURRENT PUBLICATION - publications = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/publications.json", Publication.class); - enrichment = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/enrichment.json", Result.class); - updatePidIntoPublicationInstance(publications, enrichment, false); - applyAndVerifyEnrichment( enrichment, publications); - - // 4 TEST UPDATING ALTERNATE ID INSTANCE AND MERGE ENRICHMENT WITH CURRENT PUBLICATION - publications = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/publications.json", Publication.class); - enrichment = loadResourceResult("/eu/dnetlib/dhp/schema/oaf/utils/enrichment.json", Result.class); - updatePidIntoPublicationInstance(publications, enrichment, true); - applyAndVerifyEnrichment( enrichment, publications); - - - } - - - /** - * Merge publication date of acceptance test both present. - */ - @Test - void mergePublicationDateOfAcceptanceTest_bothPresent() { - - Publication a = publication(); - Publication b = publication(); - - a.setDateofacceptance(field("2021-06-18")); - b.setDateofacceptance(field("2021-06-19")); - - a.mergeFrom(b); - - assertNotNull(a.getDateofacceptance()); - assertEquals("2021-06-18", a.getDateofacceptance().getValue()); - } - - /** - * Merge publication date of acceptance test both present 1. - */ - @Test - void mergePublicationDateOfAcceptanceTest_bothPresent_1() { - - Publication a = publication("0.8"); - Publication b = publication("0.9"); - - a.setDateofacceptance(field("2021-06-18")); - b.setDateofacceptance(field("2021-06-19")); - - a.mergeFrom(b); - - assertNotNull(a.getDateofacceptance()); - assertEquals("2021-06-19", a.getDateofacceptance().getValue()); - } - - /** - * Merge publication date of acceptance test both present 2. - */ - @Test - void mergePublicationDateOfAcceptanceTest_bothPresent_2() { - - Publication a = publication("0.9"); - Publication b = publication("0.8"); - - a.setDateofacceptance(field("2021-06-18")); - b.setDateofacceptance(field("2021-06-19")); - - a.mergeFrom(b); - - assertNotNull(a.getDateofacceptance()); - assertEquals("2021-06-18", a.getDateofacceptance().getValue()); - } - - /** - * Merge publication date of acceptance test left missing. - */ - @Test - void mergePublicationDateOfAcceptanceTest_leftMissing() { - - Publication a = publication(); - Publication b = publication(); - - b.setDateofacceptance(field("2021-06-19")); - - a.mergeFrom(b); - - assertNotNull(a.getDateofacceptance()); - assertEquals("2021-06-19", a.getDateofacceptance().getValue()); - } - - /** - * Merge publication date of acceptance test left missing 1. - */ - @Test - void mergePublicationDateOfAcceptanceTest_leftMissing_1() { - - Publication a = publication("0.9"); - Publication b = publication("0.8"); - - b.setDateofacceptance(field("2021-06-19")); - - a.mergeFrom(b); - - assertNotNull(a.getDateofacceptance()); - assertEquals("2021-06-19", a.getDateofacceptance().getValue()); - } - - /** - * Merge publication date of acceptance test left missing 2. - */ - @Test - void mergePublicationDateOfAcceptanceTest_leftMissing_2() { - - Publication a = publication("0.8"); - Publication b = publication("0.9"); - - b.setDateofacceptance(field("2021-06-19")); - - a.mergeFrom(b); - - assertNotNull(a.getDateofacceptance()); - assertEquals("2021-06-19", a.getDateofacceptance().getValue()); - } - - /** - * Merge publication date of acceptance test right missing. - */ - @Test - void mergePublicationDateOfAcceptanceTest_rightMissing() { - - Publication a = publication(); - Publication b = publication(); - - a.setDateofacceptance(field("2021-06-19")); - - a.mergeFrom(b); - - assertNotNull(a.getDateofacceptance()); - assertEquals("2021-06-19", a.getDateofacceptance().getValue()); - } - - /** - * Merge publication date of acceptance test right missing 1. - */ - @Test - void mergePublicationDateOfAcceptanceTest_rightMissing_1() { - - Publication a = publication("0.8"); - Publication b = publication("0.9"); - - a.setDateofacceptance(field("2021-06-19")); - - a.mergeFrom(b); - - assertNotNull(a.getDateofacceptance()); - assertEquals("2021-06-19", a.getDateofacceptance().getValue()); - } - - /** - * Merge publication date of acceptance test right missing 2. - */ - @Test - void mergePublicationDateOfAcceptanceTest_rightMissing_2() { - - Publication a = publication("0.9"); - Publication b = publication("0.8"); - - a.setDateofacceptance(field("2021-06-19")); - - a.mergeFrom(b); - - assertNotNull(a.getDateofacceptance()); - assertEquals("2021-06-19", a.getDateofacceptance().getValue()); - } - - /** - * Merge publication subject test. - */ - @Test - void mergePublicationSubjectTest() { - - Publication a = publication(); - Publication b = publication(); - - a.setSubject(Arrays.asList(setSub("a", "open", "classe"), setSub("b", "open", "classe"))); - b.setSubject(Arrays.asList(setSub("A", "open", "classe"), setSub("c", "open", "classe"))); - - a.mergeFrom(b); - - assertNotNull(a.getSubject()); - assertEquals(3, a.getSubject().size()); - } - - /** - * Merge publication EoscIfGuidelines test. - */ - @Test - void mergePublicationEoscIfGuidelinesTest() { - - Publication a = publication(); - Publication b = publication(); - - a.setEoscifguidelines(Lists.newArrayList(eoscifg("a", "label a", "https://aaa.aa", "semRelA"))); - b.setEoscifguidelines(Lists.newArrayList(eoscifg("a", "label a", "https://aaa.aa", "semRelA"))); - - a.mergeFrom(b); - - assertNotNull(a.getEoscifguidelines()); - assertEquals(1, a.getEoscifguidelines().size()); - - a.getEoscifguidelines().clear(); - b.getEoscifguidelines().clear(); - - a.setEoscifguidelines(Lists.newArrayList(eoscifg("a", "label a", "https://aaa.aa", "semRelA"))); - b.setEoscifguidelines(Lists.newArrayList(eoscifg("a", "label a", "https://aaa.aa", "semRelA"))); - - b.mergeFrom(a); - - assertNotNull(a.getEoscifguidelines()); - assertEquals(1, a.getEoscifguidelines().size()); - - EoscIfGuidelines e = b.getEoscifguidelines().get(0); - assertEquals("a", e.getCode()); - assertEquals("label a", e.getLabel()); - assertEquals("https://aaa.aa", e.getUrl()); - assertEquals("semRelA", e.getSemanticRelation()); - - a.getEoscifguidelines().clear(); - b.getEoscifguidelines().clear(); - - a.setEoscifguidelines(Lists.newArrayList(eoscifg("a", "label a", "https://aaa.aa", "semRelA"))); - b.setEoscifguidelines(Lists.newArrayList(eoscifg("b", "label b", "https://bbb.bb", "semRelB"))); - - a.mergeFrom(b); - - assertNotNull(a.getEoscifguidelines()); - assertEquals(2, a.getEoscifguidelines().size()); - } - - private EoscIfGuidelines eoscifg(String code, String label, String url, String semrel) { - EoscIfGuidelines e = new EoscIfGuidelines(); - e.setCode(code); - e.setLabel(label); - e.setUrl(url); - e.setSemanticRelation(semrel); - return e; - } - - /** - * Merge relation test. - */ - @Test - void mergeRelationTest() { - - Relation a = createRel(null, null); - Relation b = createRel(null, null); - a.mergeFrom(b); - assertEquals(a, b); - - a = createRel(true, null); - b = createRel(null, null); - a.mergeFrom(b); - assertEquals(true, a.getValidated()); - - a = createRel(true, null); - b = createRel(false, null); - a.mergeFrom(b); - assertEquals(true, a.getValidated()); - - a = createRel(true, null); - b = createRel(true, "2016-04-05T12:41:19.202Z"); - a.mergeFrom(b); - assertEquals("2016-04-05T12:41:19.202Z", a.getValidationDate()); - - a = createRel(true, "2016-05-07T12:41:19.202Z"); - b = createRel(true, "2016-04-05T12:41:19.202Z"); - a.mergeFrom(b); - assertEquals("2016-04-05T12:41:19.202Z", a.getValidationDate()); - - a = createRel(true, "2020-09-10 11:08:52"); - b = createRel(true, "2021-09-10 11:08:52"); - a.mergeFrom(b); - assertEquals("2020-09-10 11:08:52", a.getValidationDate()); - - a = createRel(true, "2021-03-16T10:32:42Z"); - b = createRel(true, "2020-03-16T10:32:42Z"); - a.mergeFrom(b); - assertEquals("2020-03-16T10:32:42Z", a.getValidationDate()); - - - } - - /** - * Merge relation test parse exception. - */ - @Test - void mergeRelationTestParseException() { - assertThrows(DateTimeParseException.class, () -> { - Relation a = createRel(true, "Once upon a time ..."); - Relation b = createRel(true, "... in a far away land"); - a.mergeFrom(b); - }); - } - - /** - * Create rel relation. - * - * @param validated the validated - * @param validationDate the validation date - * @return the relation - */ - private Relation createRel(Boolean validated, String validationDate) { - Relation rel = new Relation(); - rel.setSource("1"); - rel.setTarget("2"); - rel.setRelType("reltype"); - rel.setSubRelType("subreltype"); - rel.setRelClass("relclass"); - rel.setValidated(validated); - rel.setValidationDate(validationDate); - return rel; - } - - /** - * Sets kv. - * - * @param key the key - * @param value the value - * @return the kv - */ - private KeyValue setKV(final String key, final String value) { - - KeyValue k = new KeyValue(); - - k.setKey(key); - k.setValue(value); - - return k; - } - - private Subject setSub(final String value, final String schema, final String classname) { - Subject s = new Subject(); - s.setValue(value); - Qualifier q = new Qualifier(); - q.setClassname(classname); - q.setClassid(classname); - q.setSchemename(schema); - q.setSchemeid(schema); - s.setQualifier(q); - return s; - } - - /** - * Sets sp. - * - * @param value the value - * @param schema the schema - * @param classname the classname - * @return the sp - */ - private StructuredProperty setSP( - final String value, final String schema, final String classname) { - StructuredProperty s = new StructuredProperty(); - s.setValue(value); - Qualifier q = new Qualifier(); - q.setClassname(classname); - q.setClassid(classname); - q.setSchemename(schema); - q.setSchemeid(schema); - s.setQualifier(q); - return s; - } - - /** - * Field field. - * - * @param the type parameter - * @param value the value - * @return the field - */ - private Field field(T value) { - Field f = new Field(); - f.setValue(value); - return f; - } - - /** - * Publication publication. - * - * @return the publication - */ - private Publication publication() { - Publication p = new Publication(); - p.setDataInfo(df("0.9")); - return p; - } - - /** - * Publication publication. - * - * @param trust the trust - * @return the publication - */ - private Publication publication(String trust) { - Publication p = new Publication(); - p.setDataInfo(df(trust)); - return p; - } - - /** - * Df data info. - * - * @param trust the trust - * @return the data info - */ - private DataInfo df(String trust) { - DataInfo d = new DataInfo(); - d.setTrust(trust); - return d; - } -} diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/dataset_1.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/dataset_1.json deleted file mode 100644 index e38c4d1..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/dataset_1.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1g", "resuttype" : { "classid" : "dataset" }, "pid":[{"qualifier":{"classid":"doi"},"value":"10.1016/j.cmet.2011.03.013"},{"qualifier":{"classid":"urn"},"value":"urn:nbn:nl:ui:29-f3ed5f9e-edf6-457e-8848-61b58a4075e2"},{"qualifier":{"classid":"scp-number"},"value":"79953761260"},{"qualifier":{"classid":"pmc"},"value":"21459329"}], "collectedfrom" : [ { "key" : "10|openaire____::081b82f96300b6a6e3d282bad31cb6e2", "value" : "Crossref"} ]} \ No newline at end of file diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/dataset_2.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/dataset_2.json deleted file mode 100644 index 52e4e12..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/dataset_2.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1g", "resuttype" : { "classid" : "dataset" }, "pid":[{"qualifier":{"classid":"doi"},"value":"10.1016/j.cmet.2011.03.013"},{"qualifier":{"classid":"urn"},"value":"urn:nbn:nl:ui:29-f3ed5f9e-edf6-457e-8848-61b58a4075e2"},{"qualifier":{"classid":"scp-number"},"value":"79953761260"},{"qualifier":{"classid":"pmc"},"value":"21459329"}], "collectedfrom" : [ { "key" : "10|openaire____::081b82f96300b6a6e3d282bad31cb6e3", "value" : "Repository B"} ]} \ No newline at end of file diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/enrichment.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/enrichment.json deleted file mode 100644 index a26b106..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/enrichment.json +++ /dev/null @@ -1,12 +0,0 @@ -{"dataInfo":{"deletedbyinference":false,"inferred":true,"invisible":false,"provenanceaction":{"classid":"sysimport:enrich","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"id":"unresolved::10.0000/ra.v2i3.114::doi","instance":[{"measures":[{"id":"influence","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"5.91019644836e-09"}]},{"id":"popularity_alt","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"0.0"}]},{"id":"popularity","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"4.65008652949e-09"}]}],"pid":[{"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.0000/ra.v2i3.114"}]}]} -{"dataInfo":{"deletedbyinference":false,"inferred":true,"invisible":false,"provenanceaction":{"classid":"sysimport:enrich","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"id":"unresolved::10.0001/(aj).v3i6.458::doi","instance":[{"measures":[{"id":"influence","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"5.91019644836e-09"}]},{"id":"popularity_alt","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"0.0"}]},{"id":"popularity","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"4.01810569717e-09"}]}],"pid":[{"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.0001/(aj).v3i6.458"}]}]} -{"dataInfo":{"deletedbyinference":false,"inferred":true,"invisible":false,"provenanceaction":{"classid":"sysimport:enrich","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"id":"unresolved::10.0001/1587::doi","instance":[{"measures":[{"id":"influence","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"5.91019644836e-09"}]},{"id":"popularity_alt","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"0.0"}]},{"id":"popularity","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"5.39172290649e-09"}]}],"pid":[{"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.0001/1587"}]}]} -{"dataInfo":{"deletedbyinference":false,"inferred":true,"invisible":false,"provenanceaction":{"classid":"sysimport:enrich","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"id":"unresolved::10.0001/462::doi","instance":[{"measures":[{"id":"influence","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"6.33235333753e-09"}]},{"id":"popularity_alt","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"0.36"}]},{"id":"popularity","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"5.00285265116e-09"}]}],"pid":[{"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.0001/462"}]}]} -{"dataInfo":{"deletedbyinference":false,"inferred":true,"invisible":false,"provenanceaction":{"classid":"sysimport:enrich","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"id":"unresolved::10.0001/731::doi","instance":[{"measures":[{"id":"influence","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"5.91019644836e-09"}]},{"id":"popularity_alt","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"0.0"}]},{"id":"popularity","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"4.01810569717e-09"}]}],"pid":[{"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.0001/731"}]}]} -{"dataInfo":{"deletedbyinference":false,"inferred":true,"invisible":false,"provenanceaction":{"classid":"sysimport:enrich","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"id":"unresolved::10.0001/ijllis.v9i4.2066.g2482::doi","instance":[{"measures":[{"id":"influence","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"5.91019644836e-09"}]},{"id":"popularity_alt","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"0.0"}]},{"id":"popularity","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"8.48190886761e-09"}]}],"pid":[{"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.0001/ijllis.v9i4.2066.g2482"}]}]} -{"dataInfo":{"deletedbyinference":false,"inferred":true,"invisible":false,"provenanceaction":{"classid":"sysimport:enrich","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"id":"unresolved::10.0118/alfahim.v3i1.140::doi","instance":[{"measures":[{"id":"influence","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"5.91019644836e-09"}]},{"id":"popularity_alt","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"0.0"}]},{"id":"popularity","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"9.88840807598e-09"}]}],"pid":[{"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.0118/alfahim.v3i1.140"}]}]} -{"dataInfo":{"deletedbyinference":false,"inferred":true,"invisible":false,"provenanceaction":{"classid":"sysimport:enrich","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"id":"unresolved::10.0166/fk2.stagefigshare.6442896.v3::doi","instance":[{"measures":[{"id":"influence","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"5.91019644836e-09"}]},{"id":"popularity_alt","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"0.0"}]},{"id":"popularity","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"7.28336930301e-09"}]}],"pid":[{"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.0166/fk2.stagefigshare.6442896.v3"}]}]} -{"dataInfo":{"deletedbyinference":false,"inferred":true,"invisible":false,"provenanceaction":{"classid":"sysimport:enrich","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"id":"unresolved::10.0301/jttb.v2i1.64::doi","instance":[{"measures":[{"id":"influence","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"5.91019644836e-09"}]},{"id":"popularity_alt","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"0.0"}]},{"id":"popularity","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"7.28336930301e-09"}]}],"pid":[{"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.0301/jttb.v2i1.64"}]}]} -{"dataInfo":{"deletedbyinference":false,"inferred":true,"invisible":false,"provenanceaction":{"classid":"sysimport:enrich","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"id":"unresolved::10.0809/seruni.v1i1.567::doi","instance":[{"measures":[{"id":"influence","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"5.91019644836e-09"}]},{"id":"popularity_alt","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"0.0"}]},{"id":"popularity","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"2.62959564033e-09"}]}],"pid":[{"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.0809/seruni.v1i1.567"}]}]} -{"dataInfo":{"deletedbyinference":false,"inferred":true,"invisible":false,"provenanceaction":{"classid":"sysimport:enrich","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"id":"unresolved::10.0809/seruni.v2i1.765::doi","instance":[{"measures":[{"id":"influence","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"9.40178571921e-09"}]},{"id":"popularity_alt","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"0.0559872"}]},{"id":"popularity","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"3.67659957614e-09"}]}],"pid":[{"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.0809/seruni.v2i1.765"}]}]} -{"dataInfo":{"deletedbyinference":false,"inferred":true,"invisible":false,"provenanceaction":{"classid":"sysimport:enrich","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"id":"unresolved::10.0901/jkip.v7i3.485::doi","instance":[{"measures":[{"id":"influence","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"5.91019644836e-09"}]},{"id":"popularity_alt","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"0.0"}]},{"id":"popularity","unit":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"update","inferred":true,"invisible":false,"provenanceaction":{"classid":"measure:bip","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":""},"key":"score","value":"6.26204125721e-09"}]}],"pid":[{"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.0901/jkip.v7i3.485"}]}]} \ No newline at end of file diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/orp-rohub.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/orp-rohub.json index c989394..c0f13ff 100644 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/orp-rohub.json +++ b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/orp-rohub.json @@ -1 +1,197 @@ -{"collectedfrom":[{"key":"10|fairsharing_::1b69ebedb522700034547abc5652ffac","value":"ROHub","dataInfo":null}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1663926081966,"id":"50|w3id________::afc7592914ae190a50570db90f55f9c2","originalId":["50|fsh_____4119::afc7592914ae190a50570db90f55f9c2","https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca"],"pid":[{"value":"https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca","qualifier":{"classid":"w3id","classname":"w3id.org","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2019-03-27T15:15:22.22Z","dateoftransformation":"2019-04-17T16:04:20.586Z","extraInfo":[],"oaiprovenance":null,"processingchargeamount":null,"processingchargecurrency":null,"measures":null,"author":[{"fullname":"CNR-ISMAR","name":"","surname":"","rank":1,"pid":[],"affiliation":[]}],"resulttype":{"classid":"other","classname":"other","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[{"value":"Ecology","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},{"value":"EOSC::RO-crate","qualifier":{"classid":"","classname":"","schemeid":"","schemename":""},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"title":[{"value":"Using biological effects tools to define Good Environmental Status under the European Union Marine Strategy Framework Directive","qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"relevantdate":[{"value":"2018-06-20T11:21:46Z","qualifier":{"classid":"UNKNOWN","classname":"UNKNOWN","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"description":[{"value":"The use of biological effects tools offer enormous potential to meet the challenges outlined by the European Union Marine Strategy Framework Directive (MSFD) whereby Member States are required to develop a robust set of tools for defining 11 qualitative descriptors of Good Environmental Status (GES), such as demonstrating that \"Concentrations of contaminants are at levels not giving rise to pollution effects\" (GES Descriptor 8). This paper discusses the combined approach of monitoring chemical contaminant levels, along side biological effect measurements relating to the effect of pollutants, for undertaking assessments of GES across European marine regions. We outline the minimum standards that biological effects tools should meet if they are to be used for defining GES in relation to Descriptor 8 and describe the current international initiatives underway to develop assessment criteria for these biological effects techniques. Crown Copyright (C) 2010 Published by Elsevier Ltd. All rights reserved.","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":null,"publisher":{"value":"Poznań Supercomputing and Networking Center","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[{"value":"Generation Service","dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"resourcetype":{"classid":"RO-crate","classname":"RO-crate","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"coverage":[],"bestaccessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"context":[],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes","openAccessRoute":null},"instancetype":{"classid":"other research product","classname":"other research product","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"10|fairsharing_::1b69ebedb522700034547abc5652ffac","value":"ROHub","dataInfo":null},"url":null,"distributionlocation":null,"collectedfrom":{"key":"10|fairsharing_::1b69ebedb522700034547abc5652ffac","value":"ROHub","dataInfo":null},"pid":[{"value":"https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca","qualifier":{"classid":"w3id","classname":"w3id.org","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":null,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"sysimport:crosswalk:repository","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"alternateIdentifier":[],"dateofacceptance":null,"processingchargeamount":null,"processingchargecurrency":null,"refereed":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"measures":null}],"eoscifguidelines":null,"contactperson":[],"contactgroup":[],"tool":[]} +{ + "collectedfrom": [ + { + "key": "10|fairsharing_::1b69ebedb522700034547abc5652ffac", + "value": "ROHub", + "dataInfo": null + } + ], + "dataInfo": { + "invisible": false, + "inferred": false, + "deletedbyinference": false, + "trust": "0.9", + "inferenceprovenance": null, + "provenanceaction": { + "classid": "sysimport:crosswalk:repository", + "classname": "sysimport:crosswalk:repository", + "schemeid": "dnet:provenanceActions" + } + }, + "lastupdatetimestamp": 1663926081966, + "id": "50|w3id________::afc7592914ae190a50570db90f55f9c2", + "originalId": [ + "50|fsh_____4119::afc7592914ae190a50570db90f55f9c2", + "https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca" + ], + "pid": [ + { + "value": "https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca", + "qualifier": { + "classid": "w3id", + "classname": "w3id.org", + "schemeid": "dnet:pid_types" + } + } + ], + "dateofcollection": "2019-03-27T15:15:22.22Z", + "dateoftransformation": "2019-04-17T16:04:20.586Z", + "extraInfo": [], + "oaiprovenance": null, + "processingchargeamount": null, + "processingchargecurrency": null, + "measures": null, + "author": [ + { + "fullname": "CNR-ISMAR", + "name": "", + "surname": "", + "rank": 1, + "pid": [] + } + ], + "resulttype": "other", + "language": { + "classid": "UNKNOWN", + "classname": "Unknown", + "schemeid": "dnet:languages" + }, + "country": [], + "subject": [ + { + "value": "Ecology", + "qualifier": { + "classid": "", + "classname": "", + "schemeid": "" + }, + "dataInfo": { + "inferred": false, + "trust": "0.9", + "inferenceprovenance": null, + "provenanceaction": { + "classid": "sysimport:crosswalk:repository", + "classname": "sysimport:crosswalk:repository", + "schemeid": "dnet:provenanceActions" + } + } + }, + { + "value": "EOSC::RO-crate", + "qualifier": { + "classid": "", + "classname": "", + "schemeid": "" + }, + "dataInfo": { + "inferred": false, + "trust": "0.9", + "inferenceprovenance": null, + "provenanceaction": { + "classid": "sysimport:crosswalk:repository", + "classname": "sysimport:crosswalk:repository", + "schemeid": "dnet:provenanceActions" + } + } + } + ], + "title": [ + { + "value": "Using biological effects tools to define Good Environmental Status under the European Union Marine Strategy Framework Directive", + "qualifier": { + "classid": "main title", + "classname": "main title", + "schemeid": "dnet:dataCite_title" + } + } + ], + "relevantdate": [ + { + "value": "2018-06-20T11:21:46Z", + "qualifier": { + "classid": "UNKNOWN", + "classname": "UNKNOWN", + "schemeid": "dnet:dataCite_date" + } + } + ], + "description": [ + "The use of biological effects tools offer enormous potential to meet the challenges outlined by the European Union Marine Strategy Framework Directive (MSFD) whereby Member States are required to develop a robust set of tools for defining 11 qualitative descriptors of Good Environmental Status (GES), such as demonstrating that \"Concentrations of contaminants are at levels not giving rise to pollution effects\" (GES Descriptor 8). This paper discusses the combined approach of monitoring chemical contaminant levels, along side biological effect measurements relating to the effect of pollutants, for undertaking assessments of GES across European marine regions. We outline the minimum standards that biological effects tools should meet if they are to be used for defining GES in relation to Descriptor 8 and describe the current international initiatives underway to develop assessment criteria for these biological effects techniques. Crown Copyright (C) 2010 Published by Elsevier Ltd. All rights reserved." + ], + "dateofacceptance": null, + "publisher": { + "name": "Poznań Supercomputing and Networking Center" + }, + "embargoenddate": null, + "source": [], + "fulltext": [], + "format": [], + "contributor": [ + "Generation Service" + ], + "resourcetype": { + "classid": "RO-crate", + "classname": "RO-crate", + "schemeid": "dnet:dataCite_resource", + "schemename": "dnet:dataCite_resource" + }, + "coverage": [], + "bestaccessright": { + "classid": "OPEN", + "classname": "Open Access", + "schemeid": "dnet:access_modes", + "schemename": "dnet:access_modes" + }, + "context": [], + "externalReference": [], + "instance": [ + { + "license": null, + "accessright": { + "classid": "OPEN", + "classname": "Open Access", + "schemeid": "dnet:access_modes", + "openAccessRoute": null + }, + "instancetype": { + "classid": "other research product", + "classname": "other research product", + "schemeid": "dnet:publication_resource" + }, + "hostedby": { + "key": "10|fairsharing_::1b69ebedb522700034547abc5652ffac", + "value": "ROHub" + }, + "url": null, + "distributionlocation": null, + "collectedfrom": { + "key": "10|fairsharing_::1b69ebedb522700034547abc5652ffac", + "value": "ROHub" + }, + "pid": [ + { + "value": "https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca", + "qualifier": { + "classid": "w3id", + "classname": "w3id.org", + "schemeid": "dnet:pid_types" + } + } + ], + "alternateIdentifier": [], + "dateofacceptance": null, + "processingchargeamount": null, + "processingchargecurrency": null, + "refereed": { + "classid": "UNKNOWN", + "classname": "Unknown", + "schemeid": "dnet:review_levels" + }, + "measures": null + } + ], + "eoscifguidelines": null, + "contactperson": [], + "contactgroup": [], + "tool": [] +} diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_1.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_1.json deleted file mode 100644 index 704c5ad..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_1.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1f", "resuttype" : { "classid" : "publication" }, "pid":[{"qualifier":{"classid":"doi"},"value":"10.1016/j.cmet.2011.03.013"},{"qualifier":{"classid":"urn"},"value":"urn:nbn:nl:ui:29-f3ed5f9e-edf6-457e-8848-61b58a4075e2"},{"qualifier":{"classid":"scp-number"},"value":"79953761260"},{"qualifier":{"classid":"pmc"},"value":"21459329"}], "collectedfrom" : [ { "key" : "10|openaire____::081b82f96300b6a6e3d282bad31cb6e2", "value" : "Crossref"} ]} \ No newline at end of file diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_2.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_2.json deleted file mode 100644 index a1744e8..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_2.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1f", "resuttype" : { "classid" : "publication" }, "pid":[{"qualifier":{"classid":"doi"},"value":"10.1016/j.cmet.2011.03.013"},{"qualifier":{"classid":"urn"},"value":"urn:nbn:nl:ui:29-f3ed5f9e-edf6-457e-8848-61b58a4075e2"},{"qualifier":{"classid":"scp-number"},"value":"79953761260"},{"qualifier":{"classid":"pmc"},"value":"21459329"}], "collectedfrom" : [ { "key" : "10|openaire____::081b82f96300b6a6e3d282bad31cb6e3", "value" : "Repository A"} ]} \ No newline at end of file diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_apc.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_apc.json deleted file mode 100644 index 6139032..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_apc.json +++ /dev/null @@ -1,2 +0,0 @@ -{"collectedfrom":[{"key":"10|apc_________::e2b1600b229fc30663c8a1f662debddf","value":"OpenAPC Global Initiative","dataInfo":null}],"dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1643970857177,"id":"50|doi_________::000023f9cb6e3a247c764daec4273cbc","originalId":["50|openapc_____::000023f9cb6e3a247c764daec4273cbc","10.1155/2015/439379"],"pid":[{"value":"10.1155/2015/439379","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2022-02-01T15:26:33.817Z","dateoftransformation":"2022-02-02T15:45:32.502Z","extraInfo":[],"oaiprovenance":null,"processingchargeamount":{"value":"1721.47","dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargecurrency":{"value":"EUR","dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"measures":null,"author":[],"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[],"title":[],"relevantdate":[],"description":[],"dateofacceptance":null,"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"context":[],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes","openAccessRoute":null},"instancetype":{"classid":"0004","classname":"Conference object","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"10|apc_________::e2b1600b229fc30663c8a1f662debddf","value":"OpenAPC Global Initiative","dataInfo":null},"url":["https://doi.org/10.1155/2015/439379"],"distributionlocation":"","collectedfrom":{"key":"10|apc_________::e2b1600b229fc30663c8a1f662debddf","value":"OpenAPC Global Initiative","dataInfo":null},"pid":[{"value":"10.1155/2015/439379","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"alternateIdentifier":[{"value":"25811027.0","qualifier":{"classid":"pmid","classname":"pmid","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":null,"processingchargeamount":{"value":"1721.47","dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargecurrency":{"value":"EUR","dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"refereed":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"measures":null}],"journal":{"name":"BioMed Research International","issnPrinted":"2314-6133","issnOnline":"","issnLinking":"","ep":"","iss":"","sp":"","vol":"","edition":"","conferenceplace":null,"conferencedate":null,"dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}} -{"collectedfrom":[{"key":"10|apc_________::f2b1600b229fc30663c8a1f662debddf","value":"OpenAPC Global Initiative","dataInfo":null}],"dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1643970857177,"id":"50|doi_________::100023f9cb6e3a247c764daec4273cbc","originalId":["50|openapc_____::a00023f9cb6e3a247c764daec4273cbc","10.1155/2015/fake"],"pid":[{"value":"10.1155/2015/fake","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2022-02-01T15:26:33.817Z","dateoftransformation":"2022-02-02T15:45:32.502Z","extraInfo":[],"oaiprovenance":null,"processingchargeamount":{"value":"2000.47","dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargecurrency":{"value":"USD","dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"measures":null,"author":[],"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[],"title":[],"relevantdate":[],"description":[],"dateofacceptance":null,"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"context":[],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes","openAccessRoute":null},"instancetype":{"classid":"0004","classname":"Conference object","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"10|apc_________::e2b1600b229fc30663c8a1f662debddf","value":"OpenAPC Global Initiative","dataInfo":null},"url":["https://doi.org/10.1155/2015/fake"],"distributionlocation":"","collectedfrom":{"key":"10|apc_________::e2b1600b229fc30663c8a1f662debddf","value":"OpenAPC Global Initiative","dataInfo":null},"pid":[{"value":"10.1155/2015/fake","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"alternateIdentifier":[{"value":"25811027.0","qualifier":{"classid":"pmid","classname":"pmid","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":null,"processingchargeamount":{"value":"2000.47","dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargecurrency":{"value":"USD","dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"refereed":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"measures":null}],"journal":{"name":"BioMed Research International","issnPrinted":"2314-6133","issnOnline":"","issnLinking":"","ep":"","iss":"","sp":"","vol":"","edition":"","conferenceplace":null,"conferencedate":null,"dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}} \ No newline at end of file diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_apc2.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_apc2.json deleted file mode 100644 index a0b1644..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_apc2.json +++ /dev/null @@ -1,2 +0,0 @@ -{"collectedfrom":[{"key":"10|apc_________::e2b1600b229fc30663c8a1f662debddf","value":"OpenAPC Global Initiative","dataInfo":null}],"dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}},"lastupdatetimestamp":1643970857177,"id":"50|doi_________::000023f9cb6e3a247c764daec4273cbc","originalId":["50|openapc_____::000023f9cb6e3a247c764daec4273cbc","10.1155/2015/439379"],"pid":[{"value":"10.1155/2015/439379","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofcollection":"2022-02-01T15:26:33.817Z","dateoftransformation":"2022-02-02T15:45:32.502Z","extraInfo":[],"oaiprovenance":null,"processingchargeamount":{"value":"1721.47","dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargecurrency":{"value":"EUR","dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"measures":null,"author":[],"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"language":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:languages","schemename":"dnet:languages"},"country":[],"subject":[],"title":[],"relevantdate":[],"description":[],"dateofacceptance":null,"publisher":null,"embargoenddate":null,"source":[],"fulltext":[],"format":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"context":[],"externalReference":[],"instance":[{"license":null,"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes","openAccessRoute":null},"instancetype":{"classid":"0004","classname":"Conference object","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":{"key":"10|apc_________::e2b1600b229fc30663c8a1f662debddf","value":"OpenAPC Global Initiative","dataInfo":null},"url":["https://doi.org/10.1155/2015/439379"],"distributionlocation":"","collectedfrom":{"key":"10|apc_________::e2b1600b229fc30663c8a1f662debddf","value":"OpenAPC Global Initiative","dataInfo":null},"pid":[{"value":"10.1155/2015/439379","qualifier":{"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"alternateIdentifier":[{"value":"25811027.0","qualifier":{"classid":"pmid","classname":"pmid","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}],"dateofacceptance":null,"processingchargeamount":{"value":"1721.47","dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"processingchargecurrency":{"value":"EUR","dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}},"refereed":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"measures":null}],"journal":{"name":"BioMed Research International","issnPrinted":"2314-6133","issnOnline":"","issnLinking":"","ep":"","iss":"","sp":"","vol":"","edition":"","conferenceplace":null,"conferencedate":null,"dataInfo":{"invisible":true,"inferred":false,"deletedbyinference":false,"trust":"0.9","inferenceprovenance":"","provenanceaction":{"classid":"sysimport:crosswalk:datasetarchive","classname":"sysimport:crosswalk:datasetarchive","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"}}}} -{"author":[{"fullname":"Antikainen, Maria","name":"Maria","pid":[],"rank":1,"surname":"Antikainen"},{"fullname":"Niemelä, Marketta","name":"Marketta","pid":[],"rank":2,"surname":"Niemelä"}],"bestaccessright":{"classid":"CLOSED","classname":"Closed Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2017-01-01"},"dateofcollection":"2021-11-06T12:40:11.372Z","dateoftransformation":"2021-11-06T15:30:47.295Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Local food supports local finance, employment and cultural traditions. Local food producers often have limited resources to invest in R&D, and their risk-taking ability is low. Earlier studies in the online community context indicate that utilising the user's creativity and innovation capability has a great deal of potential for new product development and service design. For local food producers, social media offers cost-efficient opportunities for involving customers in product and service development. The aim of the study is to explore the potential of a co-creation approach for local food producers and how to engage consumers in that co-creation. The study is dyadic, taking both the consumers' and producers' perspectives. The results indicate that consumers seem to be interested in having long-term relationships with producers. Their motivations to participate in co-creation processes were found to be mostly related to the possibility of producing better products and of learning and gaining new insights. The producers who participated in our study have already taken the first steps in using social media, and the next logical step would be utilising social media in the co-creation process."}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|355e65625b88::38d0ab3b2212878dee7072170f1561ee","instance":[{"accessright":{"classid":"CLOSED","classname":"Closed Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"alternateIdentifier":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1504/ijtmkt.2017.081507"}],"collectedfrom":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2017-01-01"},"distributionlocation":"","hostedby":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"pid":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["https://cris.vtt.fi/en/publications/44aa6ac9-4763-4cef-a683-220dbcb02712"]}],"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1638458079051,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"https%3A%2F%2Fcris.vtt.fi%2Fws%2Foai","datestamp":"2021-10-22T11:41:35Z","harvestDate":"2021-11-06T12:40:11.372Z","identifier":"oai:cris.vtt.fi:publications/44aa6ac9-4763-4cef-a683-220dbcb02712","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"originalId":["oai:cris.vtt.fi:publications/44aa6ac9-4763-4cef-a683-220dbcb02712","50|355e65625b88::38d0ab3b2212878dee7072170f1561ee"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Antikainen , M & Niemelä , M 2017 , ' How to co-create local food products with consumers? ' , International Journal of Technology Marketing , vol. 12 , no. 1 , pp. 71-89 . https://doi.org/10.1504/IJTMKT.2017.081507"}],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"co-creation"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"local food"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"new product development"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"open innovation"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"social media"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"case study"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"consumer"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"co-development"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"co-design"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"user involvement"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"sustainability"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"How to co-create local food products with consumers?"}]} \ No newline at end of file diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publications.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publications.json deleted file mode 100644 index ef0cc58..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publications.json +++ /dev/null @@ -1,12 +0,0 @@ -{"author":[{"fullname":"Levande, Paul","name":"Paul","pid":[],"rank":1,"surname":"Levande"}],"bestaccessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::6824b298c96ba906a3e6a70593affbf5","value":"Episciences"}],"context":[],"contributor":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Coordination Episciences iam"}],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2011-01-01"},"dateofcollection":"2021-11-09T19:00:42.081Z","dateoftransformation":"2021-11-09T19:36:08.397Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"We examine the $q=1$ and $t=0$ special cases of the parking functions conjecture. The parking functions conjecture states that the Hilbert series for the space of diagonal harmonics is equal to the bivariate generating function of $area$ and $dinv$ over the set of parking functions. Haglund recently proved that the Hilbert series for the space of diagonal harmonics is equal to a bivariate generating function over the set of Tesler matrices–upper-triangular matrices with every hook sum equal to one. We give a combinatorial interpretation of the Haglund generating function at $q=1$ and prove the corresponding case of the parking functions conjecture (first proven by Garsia and Haiman). We also discuss a possible proof of the $t = 0$ case consistent with this combinatorial interpretation. We conclude by briefly discussing possible refinements of the parking functions conjecture arising from this research and point of view. $\\textbf{Note added in proof}$: We have since found such a proof of the $t = 0$ case and conjectured more detailed refinements. This research will most likely be presented in full in a forthcoming article."},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"On examine les cas spéciaux $q=1$ et $t=0$ de la conjecture des fonctions de stationnement. Cette conjecture déclare que la série de Hilbert pour l'espace des harmoniques diagonaux est égale à la fonction génératrice bivariée (paramètres $area$ et $dinv$) sur l'ensemble des fonctions de stationnement. Haglund a prouvé récemment que la série de Hilbert pour l'espace des harmoniques diagonaux est égale à une fonction génératrice bivariée sur l'ensemble des matrices de Tesler triangulaires supérieures dont la somme de chaque équerre vaut un. On donne une interprétation combinatoire de la fonction génératrice de Haglund pour $q=1$ et on prouve le cas correspondant de la conjecture dans le cas des fonctions de stationnement (prouvé d'abord par Garsia et Haiman). On discute aussi d'une preuve possible du cas $t=0$, cohérente avec cette interprétation combinatoire. On conclut en discutant brièvement les raffinements possibles de la conjecture des fonctions de stationnement de ce point de vue. $\\textbf{Note ajoutée sur épreuve}$: j'ai trouvé depuis cet article une preuve du cas $t=0$ et conjecturé des raffinements possibles. Ces résultats seront probablement présentés dans un article ultérieur."}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|06cdd3ff4700::93859bd27121c3ee7c6ee4bfb1790cba","instance":[{"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"alternateIdentifier":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.46298/dmtcs.2940"}],"collectedfrom":{"key":"10|openaire____::6824b298c96ba906a3e6a70593affbf5","value":"Episciences"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2011-01-01"},"distributionlocation":"","hostedby":{"key":"10|openaire____::6824b298c96ba906a3e6a70593affbf5","value":"Episciences"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"pid":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["https://dmtcs.episciences.org/2940"]}],"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1638458725892,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"https%3A%2F%2Foai.episciences.org%2F","datestamp":"2011-01-01","harvestDate":"2021-11-09T19:00:42.081Z","identifier":"oai:episciences.org:dmtcs:2940","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"originalId":["50|06cdd3ff4700::93859bd27121c3ee7c6ee4bfb1790cba","oai:episciences.org:dmtcs:2940"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"ISSN: 1365-8050"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Discrete Mathematics & Theoretical Computer Science"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Episciences.org"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"dmtcs:2940 - Discrete Mathematics & Theoretical Computer Science, 2011-01-01, DMTCS Proceedings vol. AO, 23rd International Conference on Formal Power Series and Algebraic Combinatorics (FPSAC 2011)"}],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"parking function"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"Hilbert series"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"diagonal harmonics"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"[MATH.MATH-CO] Mathematics [math]/Combinatorics [math.CO]"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"[INFO.INFO-DM] Computer Science [cs]/Discrete Mathematics [cs.DM]"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Special Cases of the Parking Functions Conjecture and Upper-Triangular Matrices"}]} -{"author":[{"fullname":"Ward, Mark Daniel","name":"Mark Daniel","pid":[],"rank":1,"surname":"Ward"},{"fullname":"Szpankowski, Wojciech","name":"Wojciech","pid":[],"rank":2,"surname":"Szpankowski"}],"bestaccessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::6824b298c96ba906a3e6a70593affbf5","value":"Episciences"}],"context":[],"contributor":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Coordination Episciences iam"}],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2005-01-01"},"dateofcollection":"2021-11-09T19:00:34.758Z","dateoftransformation":"2021-11-09T19:50:55.725Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"In a suffix tree, the multiplicity matching parameter (MMP) $M_n$ is the number of leaves in the subtree rooted at the branching point of the $(n+1)$st insertion. Equivalently, the MMP is the number of pointers into the database in the Lempel-Ziv '77 data compression algorithm. We prove that the MMP asymptotically follows the logarithmic series distribution plus some fluctuations. In the proof we compare the distribution of the MMP in suffix trees to its distribution in tries built over independent strings. Our results are derived by both probabilistic and analytic techniques of the analysis of algorithms. In particular, we utilize combinatorics on words, bivariate generating functions, pattern matching, recurrence relations, analytical poissonization and depoissonization, the Mellin transform, and complex analysis."}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|06cdd3ff4700::ff21e3c55d527fa7db171137c5fd1f1f","instance":[{"accessright":{"classid":"OPEN","classname":"Open Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"alternateIdentifier":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.46298/dmtcs.3387"}],"collectedfrom":{"key":"10|openaire____::6824b298c96ba906a3e6a70593affbf5","value":"Episciences"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2005-01-01"},"distributionlocation":"","hostedby":{"key":"10|openaire____::6824b298c96ba906a3e6a70593affbf5","value":"Episciences"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"pid":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["https://dmtcs.episciences.org/3387"]}],"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1638458734473,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"https%3A%2F%2Foai.episciences.org%2F","datestamp":"2005-01-01","harvestDate":"2021-11-09T19:00:34.758Z","identifier":"oai:episciences.org:dmtcs:3387","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"originalId":["50|06cdd3ff4700::ff21e3c55d527fa7db171137c5fd1f1f","oai:episciences.org:dmtcs:3387"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"ISSN: 1365-8050"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Discrete Mathematics & Theoretical Computer Science"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Episciences.org"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"dmtcs:3387 - Discrete Mathematics & Theoretical Computer Science, 2005-01-01, DMTCS Proceedings vol. AD, International Conference on Analysis of Algorithms"}],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"data compression"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"complex asymptotics"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"suffix trees"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"combinatorics on words"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"pattern matching"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"autocorrelation polynomial"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"[INFO.INFO-DS] Computer Science [cs]/Data Structures and Algorithms [cs.DS]"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"[INFO.INFO-DM] Computer Science [cs]/Discrete Mathematics [cs.DM]"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"[MATH.MATH-CO] Mathematics [math]/Combinatorics [math.CO]"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"value":"[INFO.INFO-CG] Computer Science [cs]/Computational Geometry [cs.CG]"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Analysis of the multiplicity matching parameter in suffix trees"}]} -{"author":[{"fullname":"Södergård, Caj","name":"Caj","pid":[],"rank":1,"surname":"Södergård"}],"bestaccessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"1989-01-01"},"dateofcollection":"2021-11-06T12:40:33.938Z","dateoftransformation":"2021-11-06T13:13:36.91Z","description":[],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|355e65625b88::046477dc24819c5f1453166aa7bfb75e","instance":[{"accessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"alternateIdentifier":[],"collectedfrom":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"1989-01-01"},"distributionlocation":"","hostedby":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"instancetype":{"classid":"0004","classname":"Conference object","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"pid":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["https://cris.vtt.fi/en/publications/42136eb0-696d-4861-b587-3b451a46a914"]}],"language":{"classid":"fin","classname":"Finnish","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1638458015650,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"https%3A%2F%2Fcris.vtt.fi%2Fws%2Foai","datestamp":"2019-06-19T05:36:38Z","harvestDate":"2021-11-06T12:40:33.938Z","identifier":"oai:cris.vtt.fi:publications/42136eb0-696d-4861-b587-3b451a46a914","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"originalId":["50|355e65625b88::046477dc24819c5f1453166aa7bfb75e","oai:cris.vtt.fi:publications/42136eb0-696d-4861-b587-3b451a46a914"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Södergård , C 1989 , ' Telefax ja telefoto ' , Kehittyvä tiedonsiirto graafisessa yrityksessä , Helsinki , Finland , 29/05/89 - 30/05/89 ."}],"subject":[],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Telefax ja telefoto"}]} -{"author":[{"fullname":"Antikainen, Maria","name":"Maria","pid":[],"rank":1,"surname":"Antikainen"},{"fullname":"Niemelä, Marketta","name":"Marketta","pid":[],"rank":2,"surname":"Niemelä"}],"bestaccessright":{"classid":"CLOSED","classname":"Closed Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2017-01-01"},"dateofcollection":"2021-11-06T12:40:11.372Z","dateoftransformation":"2021-11-06T15:30:47.295Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Local food supports local finance, employment and cultural traditions. Local food producers often have limited resources to invest in R&D, and their risk-taking ability is low. Earlier studies in the online community context indicate that utilising the user's creativity and innovation capability has a great deal of potential for new product development and service design. For local food producers, social media offers cost-efficient opportunities for involving customers in product and service development. The aim of the study is to explore the potential of a co-creation approach for local food producers and how to engage consumers in that co-creation. The study is dyadic, taking both the consumers' and producers' perspectives. The results indicate that consumers seem to be interested in having long-term relationships with producers. Their motivations to participate in co-creation processes were found to be mostly related to the possibility of producing better products and of learning and gaining new insights. The producers who participated in our study have already taken the first steps in using social media, and the next logical step would be utilising social media in the co-creation process."}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|355e65625b88::38d0ab3b2212878dee7072170f1561ee","instance":[{"accessright":{"classid":"CLOSED","classname":"Closed Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"alternateIdentifier":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1504/ijtmkt.2017.081507"}],"collectedfrom":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2017-01-01"},"distributionlocation":"","hostedby":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"pid":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["https://cris.vtt.fi/en/publications/44aa6ac9-4763-4cef-a683-220dbcb02712"]}],"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1638458079051,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"https%3A%2F%2Fcris.vtt.fi%2Fws%2Foai","datestamp":"2021-10-22T11:41:35Z","harvestDate":"2021-11-06T12:40:11.372Z","identifier":"oai:cris.vtt.fi:publications/44aa6ac9-4763-4cef-a683-220dbcb02712","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"originalId":["oai:cris.vtt.fi:publications/44aa6ac9-4763-4cef-a683-220dbcb02712","50|355e65625b88::38d0ab3b2212878dee7072170f1561ee"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Antikainen , M & Niemelä , M 2017 , ' How to co-create local food products with consumers? ' , International Journal of Technology Marketing , vol. 12 , no. 1 , pp. 71-89 . https://doi.org/10.1504/IJTMKT.2017.081507"}],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"co-creation"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"local food"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"new product development"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"open innovation"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"social media"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"case study"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"consumer"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"co-development"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"co-design"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"user involvement"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"sustainability"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"How to co-create local food products with consumers?"}]} -{"author":[{"fullname":"Lehtinen, Pekka","name":"Pekka","pid":[],"rank":1,"surname":"Lehtinen"},{"fullname":"Sibakov, Juhani","name":"Juhani","pid":[],"rank":2,"surname":"Sibakov"}],"bestaccessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2010-01-01"},"dateofcollection":"2021-11-06T12:47:29.271Z","dateoftransformation":"2021-11-06T16:36:12.322Z","description":[],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|355e65625b88::4d3f5bf7749b9a26c01e80f3dd36daef","instance":[{"accessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"alternateIdentifier":[],"collectedfrom":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2010-01-01"},"distributionlocation":"","hostedby":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"pid":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["https://cris.vtt.fi/en/publications/39400c55-6b86-4fd5-a380-622e887db9a5"]}],"language":{"classid":"fin","classname":"Finnish","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1638458104266,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"https%3A%2F%2Fcris.vtt.fi%2Fws%2Foai","datestamp":"2021-11-03T06:19:09Z","harvestDate":"2021-11-06T12:47:29.271Z","identifier":"oai:cris.vtt.fi:publications/39400c55-6b86-4fd5-a380-622e887db9a5","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"originalId":["50|355e65625b88::4d3f5bf7749b9a26c01e80f3dd36daef","oai:cris.vtt.fi:publications/39400c55-6b86-4fd5-a380-622e887db9a5"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Lehtinen , P & Sibakov , J 2010 , ' Enemmän kaurasta ' , Mallas ja Olut , vol. 2010 , no. 3 , pp. 84-87 ."}],"subject":[],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Enemmän kaurasta"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"More from oats"}]} -{"author":[{"fullname":"Ronkainen, Hannu","name":"Hannu","pid":[],"rank":1,"surname":"Ronkainen"},{"fullname":"Mellin, Joni","name":"Joni","pid":[],"rank":2,"surname":"Mellin"}],"bestaccessright":{"classid":"CLOSED","classname":"Closed Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2004-01-01"},"dateofcollection":"2021-11-06T12:44:56.68Z","dateoftransformation":"2021-11-06T17:00:20.868Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"A floating capacitor with a MOS charge injector structure can be used as a nonvolatile memory. This type of memory device can be embedded into an analog MOS technology with capacitors. In this article the feasibility of the structure for small scale embedded memory is studied with 1.5µm analog ASIC molybdenum gate technology."}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|355e65625b88::56bbb35df31e73991dee2df139a1cefa","instance":[{"accessright":{"classid":"CLOSED","classname":"Closed Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"alternateIdentifier":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1088/0031-8949/2004/t114/034"}],"collectedfrom":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2004-01-01"},"distributionlocation":"","hostedby":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"pid":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["https://cris.vtt.fi/en/publications/8f14e470-b1fe-46fd-bc71-207b65751a4c"]}],"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1638458115933,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"https%3A%2F%2Fcris.vtt.fi%2Fws%2Foai","datestamp":"2021-01-01T03:20:34Z","harvestDate":"2021-11-06T12:44:56.68Z","identifier":"oai:cris.vtt.fi:publications/8f14e470-b1fe-46fd-bc71-207b65751a4c","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"originalId":["oai:cris.vtt.fi:publications/8f14e470-b1fe-46fd-bc71-207b65751a4c","50|355e65625b88::56bbb35df31e73991dee2df139a1cefa"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Ronkainen , H & Mellin , J 2004 , ' EEPROM cell design for molybdenum gate analog BECMOS process ' , Physica Scripta , vol. T114 , pp. 133 - 137 . https://doi.org/10.1088/0031-8949/2004/T114/034"}],"subject":[],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"EEPROM cell design for molybdenum gate analog BECMOS process"}]} -{"author":[],"bestaccessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"}],"context":[],"contributor":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Vallinheimo, Eija"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Setälä, Tarja"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Sohlberg, Sakari"}],"country":[{"classid":"FI","classname":"Finland","dataInfo":{"deletedbyinference":false,"inferenceprovenance":"propagation","inferred":true,"invisible":false,"provenanceaction":{"classid":"country:instrepos","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.85"},"schemeid":"dnet:countries","schemename":"dnet:countries"}],"coverage":[],"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2002-01-01"},"dateofcollection":"2021-11-06T12:47:04.287Z","dateoftransformation":"2021-11-06T18:34:59.086Z","description":[],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|355e65625b88::76e3f831b17a51b6c2c5d072469c7587","instance":[{"accessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"alternateIdentifier":[],"collectedfrom":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2002-01-01"},"distributionlocation":"","hostedby":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"instancetype":{"classid":"0002","classname":"Book","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"pid":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["https://cris.vtt.fi/en/publications/6d8a9079-5a24-43d3-bcd5-1b5f538b3c0b"]}],"language":{"classid":"fin","classname":"Finnish","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1638458154975,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"https%3A%2F%2Fcris.vtt.fi%2Fws%2Foai","datestamp":"2020-11-20T08:22:01Z","harvestDate":"2021-11-06T12:47:04.287Z","identifier":"oai:cris.vtt.fi:publications/6d8a9079-5a24-43d3-bcd5-1b5f538b3c0b","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"originalId":["50|355e65625b88::76e3f831b17a51b6c2c5d072469c7587","oai:cris.vtt.fi:publications/6d8a9079-5a24-43d3-bcd5-1b5f538b3c0b"],"pid":[],"publisher":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"VTT Technical Research Centre of Finland"},"relevantdate":[],"resourcetype":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Vallinheimo , E , Setälä , T & Sohlberg , S (eds) 2002 , Kuinka metallintutkimus jalostui : Muistelmia metallurgian laboratoriosta 1942-1994 . VTT Technical Research Centre of Finland , Espoo ."}],"subject":[],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Kuinka metallintutkimus jalostui:Muistelmia metallurgian laboratoriosta 1942-1994"}]} -{"author":[{"fullname":"Cao, Sunliang","name":"Sunliang","pid":[],"rank":1,"surname":"Cao"},{"fullname":"Hasan, Ala","name":"Ala","pid":[],"rank":2,"surname":"Hasan"},{"fullname":"Siren, Kai","name":"Kai","pid":[],"rank":3,"surname":"Siren"}],"bestaccessright":{"classid":"CLOSED","classname":"Closed Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2013-01-01"},"dateofcollection":"2021-11-06T12:41:33.649Z","dateoftransformation":"2021-11-06T18:56:51.151Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"The objective of this paper is to close the scientific gap that there is a lack of comprehensive matching analysis for the increasingly complicated on-site hybrid energy systems with a continuously decreased annual primary energy consumption/equivalent CO2 emission. Thus, a thorough matching analysis is conducted for the on-site hybrid systems of two office buildings under distinct climate conditions. Both of the studied buildings are equipped with PV and solar thermal assisted ground source heat pumps (GSHP), which can be controlled by six excess renewable electrical (REe) and one excess renewable thermal (REth) treatments with respect to certain thermal storage recharging and grid exporting strategies. The assessment criteria are six recently defined indices. With the aid of these indices, the key methodology is to conduct parametric analyses from the aspect of matching for solar thermal collector area and connection type, PV panel area, and electrical battery size regarding certain excess REe or REth treatments. The outcomes of matching analyses show the advantages of solar thermal collectors connected in a parallel fashion in meeting office heating demands, the consistency between electrical generation and demand in the daytime in office buildings, the enhancement of on-site heating and cooling by GSHP and free ground cooling, and the battery effect in technically improving electrical matching. Furthermore, the fluctuations of indices in the instantaneous matching analysis clearly reflect the matching situations of on-site renewable energy resources and demand conditions at each time-step, which will be helpful for the detailed investigation of specific system operations and user behaviours. It has been shown that the methodology used in the study can be helpful for aiding the design of increasingly complicated on-site hybrid energy systems."}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|355e65625b88::7c73a836ec6edb701b2ed0a45de2be34","instance":[{"accessright":{"classid":"CLOSED","classname":"Closed Access","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"alternateIdentifier":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"doi","classname":"Digital Object Identifier","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"value":"10.1016/j.apenergy.2013.07.031"}],"collectedfrom":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2013-01-01"},"distributionlocation":"","hostedby":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"pid":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["https://cris.vtt.fi/en/publications/b1dfe7fc-4e60-4982-8f1c-ccc12579ab00"]}],"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1638458162087,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"https%3A%2F%2Fcris.vtt.fi%2Fws%2Foai","datestamp":"2021-06-19T01:36:54Z","harvestDate":"2021-11-06T12:41:33.649Z","identifier":"oai:cris.vtt.fi:publications/b1dfe7fc-4e60-4982-8f1c-ccc12579ab00","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"originalId":["oai:cris.vtt.fi:publications/b1dfe7fc-4e60-4982-8f1c-ccc12579ab00","50|355e65625b88::7c73a836ec6edb701b2ed0a45de2be34"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Cao , S , Hasan , A & Siren , K 2013 , ' Matching analysis for on-site hybrid renewable energy systems of office buildings with extended indices ' , Applied Energy , vol. 113 , pp. 230-247 . https://doi.org/10.1016/j.apenergy.2013.07.031"}],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"ground source heat pump"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"matching indices"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"mismatch analysis"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"office building"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"renewable feed-in"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"solar"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"/dk/atira/pure/sustainabledevelopmentgoals/affordable_and_clean_energy"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"SDG 7 - Affordable and Clean Energy"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"/dk/atira/pure/sustainabledevelopmentgoals/climate_action"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"SDG 13 - Climate Action"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Matching analysis for on-site hybrid renewable energy systems of office buildings with extended indices"}]} -{"author":[{"fullname":"Suni, Ilkka","name":"Ilkka","pid":[],"rank":1,"surname":"Suni"},{"fullname":"Grönberg, Leif","name":"Leif","pid":[],"rank":2,"surname":"Grönberg"},{"fullname":"Saarilahti, Jaakko","name":"Jaakko","pid":[],"rank":3,"surname":"Saarilahti"}],"bestaccessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"}],"context":[],"contributor":[],"country":[{"classid":"FI","classname":"Finland","dataInfo":{"deletedbyinference":false,"inferenceprovenance":"propagation","inferred":true,"invisible":false,"provenanceaction":{"classid":"country:instrepos","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.85"},"schemeid":"dnet:countries","schemename":"dnet:countries"}],"coverage":[],"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"1987-01-01"},"dateofcollection":"2021-11-06T12:46:23.315Z","dateoftransformation":"2021-11-06T19:15:49.866Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"The authors report on the effects of ion implantation and rapid thermal annealing on the electrical transport properties of TiSi2 and MoSi2. The silicide layers were formed by solid phase reactions of sputtered metal films with silicon. Some of the wafers were implanted at room temperature with arsenic. To investigate the damage recovery, one of the samples were subjected to rapid thermal annealing. The resistivities of the silicides were measured in the van der Pauw configuration. The results are presented and discussed."}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|355e65625b88::80ee0506f19328fb194bd236f29b8c49","instance":[{"accessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"alternateIdentifier":[],"collectedfrom":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"1987-01-01"},"distributionlocation":"","hostedby":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"pid":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["https://cris.vtt.fi/en/publications/6ad59175-e7a1-4c3f-9e14-0e2978e54a66"]}],"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1638458167217,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"https%3A%2F%2Fcris.vtt.fi%2Fws%2Foai","datestamp":"2021-05-25T05:25:16Z","harvestDate":"2021-11-06T12:46:23.315Z","identifier":"oai:cris.vtt.fi:publications/6ad59175-e7a1-4c3f-9e14-0e2978e54a66","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"originalId":["50|355e65625b88::80ee0506f19328fb194bd236f29b8c49","oai:cris.vtt.fi:publications/6ad59175-e7a1-4c3f-9e14-0e2978e54a66"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Suni , I , Grönberg , L & Saarilahti , J 1987 , ' Transport properties of silicides : effects of ion-irradiation and annealing ' , Vide, les Couches Minces , vol. 42 , no. 236 , pp. 233-236 ."}],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"titanium silicide"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"ion beams"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"heat treatment"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"molybdenum silicide"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"rapid thermal annealing"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Transport properties of silicides:effects of ion-irradiation and annealing"}]} -{"author":[{"fullname":"Kortelainen, Helena","name":"Helena","pid":[],"rank":1,"surname":"Kortelainen"},{"fullname":"Pursio, Saku","name":"Saku","pid":[],"rank":2,"surname":"Pursio"}],"bestaccessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2001-01-01"},"dateofcollection":"2021-11-06T12:47:14.02Z","dateoftransformation":"2021-11-06T20:52:03.055Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Availability performance is an efficiency measure. As input data, mean times between failures, mean times to repair and failure criticality are required. Detailed availability performance analysis of a production system requires a model, which takes into account the logical structure of the system and the storage capacity between process stages. The model can also take into account the effect of production disturbances and planned stoppages if corresponding data is available. A comprehensive availability performance model is a practical tool when improvements are to be directed effectively, strategies tested, or alternative investment proposals compared."}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|355e65625b88::9a9eb0e8d57ecfda331a206f6b122e2b","instance":[{"accessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"alternateIdentifier":[],"collectedfrom":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"2001-01-01"},"distributionlocation":"","hostedby":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"pid":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["https://cris.vtt.fi/en/publications/a92459e2-68b4-45f9-b8a5-ed7b00e764d8"]}],"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1638458197611,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"https%3A%2F%2Fcris.vtt.fi%2Fws%2Foai","datestamp":"2021-01-01T03:54:58Z","harvestDate":"2021-11-06T12:47:14.02Z","identifier":"oai:cris.vtt.fi:publications/a92459e2-68b4-45f9-b8a5-ed7b00e764d8","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"originalId":["oai:cris.vtt.fi:publications/a92459e2-68b4-45f9-b8a5-ed7b00e764d8","50|355e65625b88::9a9eb0e8d57ecfda331a206f6b122e2b"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Kortelainen , H & Pursio , S 2001 , ' Availability performance stands for plant efficiency ' , Paperi ja puu , vol. 83 , no. 4 , pp. 292-296 ."}],"subject":[],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Availability performance stands for plant efficiency"}]} -{"author":[{"fullname":"Antikainen, Hannele","name":"Hannele","pid":[],"rank":1,"surname":"Antikainen"}],"bestaccessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"}],"context":[],"contributor":[],"country":[],"coverage":[],"dataInfo":{"deletedbyinference":true,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"1996-01-01"},"dateofcollection":"2021-11-06T12:48:05.57Z","dateoftransformation":"2021-11-06T22:12:02.979Z","description":[],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|355e65625b88::ab957719ef10690373ff1c3cae3769ac","instance":[{"accessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"alternateIdentifier":[],"collectedfrom":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"1996-01-01"},"distributionlocation":"","hostedby":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"instancetype":{"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"pid":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["https://cris.vtt.fi/en/publications/d26b0846-6bc4-42e2-b343-8849be5e1cf0"]}],"language":{"classid":"fin","classname":"Finnish","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1638458218199,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"https%3A%2F%2Fcris.vtt.fi%2Fws%2Foai","datestamp":"2019-08-02T08:01:44Z","harvestDate":"2021-11-06T12:48:05.57Z","identifier":"oai:cris.vtt.fi:publications/d26b0846-6bc4-42e2-b343-8849be5e1cf0","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"originalId":["50|355e65625b88::ab957719ef10690373ff1c3cae3769ac","oai:cris.vtt.fi:publications/d26b0846-6bc4-42e2-b343-8849be5e1cf0"],"pid":[],"relevantdate":[],"resourcetype":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Antikainen , H 1996 , ' Preflight -ohjelma paljastaa tulostusongelmat ' , Suomen Lehdistö , vol. 66 , no. 5 , pp. 22-25 ."}],"subject":[],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Preflight -ohjelma paljastaa tulostusongelmat"}]} -{"author":[{"fullname":"Leppälahti, Jukka","name":"Jukka","pid":[],"rank":1,"surname":"Leppälahti"}],"bestaccessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"collectedfrom":[{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"}],"context":[],"contributor":[],"country":[{"classid":"FI","classname":"Finland","dataInfo":{"deletedbyinference":false,"inferenceprovenance":"propagation","inferred":true,"invisible":false,"provenanceaction":{"classid":"country:instrepos","classname":"Inferred by OpenAIRE","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.85"},"schemeid":"dnet:countries","schemename":"dnet:countries"}],"coverage":[],"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"1998-01-01"},"dateofcollection":"2021-11-06T12:50:53.064Z","dateoftransformation":"2021-11-06T22:22:36.446Z","description":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Factors affecting the release and reactions of fuel-bound nitrogen in air gasification conditions were studied in order to be able to minimise their production during gasification. Another objective was to find new means to remove nitrogenous compounds from hot gasification gas. In fluidised-bed and fixed-bed types of gasifier NH3 is the predominant nitrogenous compound in addition to N2. In thermodynamic equilibrium the NH3 content of gasification gas is low. The equilibrium content ranges from 1 to 350 ppms depending on the temperature, pressure and stoichiometric ratio. The highest equilibrium content is usually encountered at high pressure. The real NH3 content of gasifier product gas is usually at least an order of magnitude higher. The fraction of fuel nitrogen that is converted to NH3 in gasification is affected by several factors. During pyrolysis young biomass fuels tend to release part of the fuel nitrogen directly as NH3, whereas coals seem to release fuel nitrogen primarily from structures that favour HCN formation. A low heating rate and factors that increase the extent of secondary reactions of gases and char during pyrolysis also increase the conversion of HCN to NH3. In fluidised-bed (and fixed-bed) gasifiers the conditions seem to favour NH3 formation but in entrained-bed gasifiers a high heating rate may promote HCN formation. Factors affecting the release of char nitrogen in gasifiers are poorly known. In this work, a statistical model was developed, which can predict the conversion of fuel nitrogen to NH3 in a laboratory-scale fluidised-bed gasifier and a larger entrained-bed gasifier. It was found that the formation of NH3 was mostly dependent on the freeboard temperature of the gasifier, and on the iron, calcium, ash and volatile matter content of fuel. Increasing the iron content of the fuel resulted in a strong decreasing effect in the NH3 formation in the fluidised-bed gasifier, but it had a smaller effect in the entrained-bed gasifier. The decomposition rate of NH3 may be increased by adding or creating suitable reactive gas species into the hot gas. In selective catalytic oxidation oxidisers like O2, NO or a mixture of these are added to the gasification gas before flowing the gas through the catalyst bed. Aluminium oxide and aluminium silicate catalysts proved to be the most effective of the materials tested in promoting NH3 decomposition in the presence of oxidisers. The temperature of optimum NH3 reduction was tightly dependent on the composition of the oxidiser used. If NO was allowed to convert to NO2 in the oxidiser mixture before feeding the oxidiser to the reactor, the best conversion was achieved at temperatures below 500 °C. If pure NO and O2 were used, the best conversion was achieved at 500 - 600 °C. An important finding in this work was the ability of aluminium oxide to catalyse the reaction between added O2 and NH3. No nitrogen oxides were formed during this type of NH3 oxidation on the aluminium oxide catalyst. The reaction product was probably N2. When O2/NH3 ratio was 4 in the experiments with synthetic gasification gas, 75% of the NH3 was decomposed in the aluminium oxide bed at the temperature range of 550 - 700 °C. The development of a gas cleaning process based on these results of selective catalytic oxidation still leaves several questions unanswered. The most important questions are connected with optimising the process, with the effect of gas impurities on the reactions and with the alternatives of oxidising HCN to N2 simultaneously with NH3."}],"externalReference":[],"extraInfo":[],"format":[],"fulltext":[],"id":"50|355e65625b88::ad8d151a2ef39d827b1b591ec856d886","instance":[{"accessright":{"classid":"RESTRICTED","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"alternateIdentifier":[],"collectedfrom":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"dateofacceptance":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"1998-01-01"},"distributionlocation":"","hostedby":{"key":"10|openaire____::4692342f0992d91f9e705c26959f09e0","value":"VTT Research Information System"},"instancetype":{"classid":"0006","classname":"Doctoral thesis","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"pid":[],"refereed":{"classid":"0000","classname":"Unknown","schemeid":"dnet:review_levels","schemename":"dnet:review_levels"},"url":["https://cris.vtt.fi/en/publications/34ca749e-a4cf-47c1-a28f-01720421cdc7"]}],"language":{"classid":"eng","classname":"English","schemeid":"dnet:languages","schemename":"dnet:languages"},"lastupdatetimestamp":1638458220428,"oaiprovenance":{"originDescription":{"altered":true,"baseURL":"https%3A%2F%2Fcris.vtt.fi%2Fws%2Foai","datestamp":"2021-01-02T03:47:22Z","harvestDate":"2021-11-06T12:50:53.064Z","identifier":"oai:cris.vtt.fi:publications/34ca749e-a4cf-47c1-a28f-01720421cdc7","metadataNamespace":"http://www.openarchives.org/OAI/2.0/oai_dc/"}},"originalId":["50|355e65625b88::ad8d151a2ef39d827b1b591ec856d886","oai:cris.vtt.fi:publications/34ca749e-a4cf-47c1-a28f-01720421cdc7"],"pid":[],"publisher":{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"VTT Technical Research Centre of Finland"},"relevantdate":[],"resourcetype":{"classid":"UNKNOWN","classname":"Unknown","schemeid":"dnet:dataCite_resource","schemename":"dnet:dataCite_resource"},"resulttype":{"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"source":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"value":"Leppälahti , J 1998 , ' Behaviour of fuel-bound nitrogen in gasification and in high-temperature NH3 removal processes : Dissertation ' , Doctor Degree , Åbo Akademi University , Espoo ."}],"subject":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"gas cleaning"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"gasifiers"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"hot gases"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"nitrogen"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"catalytic cleaning"},{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"keyword","classname":"keyword","schemeid":"dnet:result_subject","schemename":"dnet:result_subject"},"value":"gasification"}],"title":[{"dataInfo":{"deletedbyinference":false,"inferenceprovenance":"","inferred":false,"invisible":false,"provenanceaction":{"classid":"sysimport:crosswalk:repository","classname":"Harvested","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"qualifier":{"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"value":"Behaviour of fuel-bound nitrogen in gasification and in high-temperature NH3 removal processes:Dissertation"}]} \ No newline at end of file -- 2.17.1 From 7b76611955bea833226bc77c0ff2ce06aed02766 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 1 Feb 2023 16:12:23 +0100 Subject: [PATCH 02/15] WIP: refactoring model utilities --- .../schema/common/AccessRightComparator.java | 69 --- .../dnetlib/dhp/schema/common/EntityType.java | 21 - .../dhp/schema/common/MainEntityType.java | 7 - .../dhp/schema/common/ModelSupport.java | 408 ------------------ .../dhp/schema/common/RefereedComparator.java | 44 -- .../dhp/schema/common/RelationInverse.java | 46 -- .../dhp/schema/mdstore/MetadataRecord.java | 5 +- .../eu/dnetlib/dhp/schema/oaf/Entity.java | 3 +- .../dhp/schema/oaf/EntityDataInfo.java | 1 - .../eu/dnetlib/dhp/schema/oaf/Relation.java | 25 -- .../schema/oaf/utils/CleaningFunctions.java | 74 ---- .../schema/oaf/utils/IdentifierFactory.java | 292 ------------- .../dhp/schema/oaf/utils/ModelHardLimits.java | 24 -- .../oaf/utils/OrganizationPidComparator.java | 38 -- .../dhp/schema/oaf/utils/PidBlacklist.java | 8 - .../oaf/utils/PidBlacklistProvider.java | 39 -- .../dhp/schema/oaf/utils/PidComparator.java | 48 --- .../dnetlib/dhp/schema/oaf/utils/PidType.java | 79 ---- .../schema/oaf/utils/PidValueComparator.java | 33 -- .../schema/oaf/utils/ResultPidComparator.java | 53 --- .../oaf/utils/ResultTypeComparator.java | 77 ---- .../dhp/schema/oaf/utils/pid_blacklist.json | 5 - .../dhp/schema/common/ModelSupportTest.java | 53 --- .../oaf/utils/BlackListProviderTest.java | 21 - .../oaf/utils/IdentifierFactoryTest.java | 87 ---- .../dhp/schema/oaf/utils/orp-rohub.json | 197 --------- .../dhp/schema/oaf/utils/publication_3.json | 1 - .../dhp/schema/oaf/utils/publication_4.json | 1 - .../dhp/schema/oaf/utils/publication_5.json | 1 - .../schema/oaf/utils/publication_doi1.json | 33 -- .../schema/oaf/utils/publication_doi2.json | 37 -- .../schema/oaf/utils/publication_doi3.json | 37 -- .../schema/oaf/utils/publication_doi4.json | 37 -- .../schema/oaf/utils/publication_doi5.json | 37 -- .../schema/oaf/utils/publication_openapc.json | 31 -- .../schema/oaf/utils/publication_pmc1.json | 17 - .../schema/oaf/utils/publication_pmc2.json | 21 - .../schema/oaf/utils/publication_urn1.json | 23 - 38 files changed, 3 insertions(+), 2030 deletions(-) delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/common/AccessRightComparator.java delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/common/EntityType.java delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/common/MainEntityType.java delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/common/ModelSupport.java delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/common/RefereedComparator.java delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/common/RelationInverse.java delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/oaf/utils/CleaningFunctions.java delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/oaf/utils/IdentifierFactory.java delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ModelHardLimits.java delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/oaf/utils/OrganizationPidComparator.java delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidBlacklist.java delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidBlacklistProvider.java delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidComparator.java delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidType.java delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidValueComparator.java delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ResultPidComparator.java delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ResultTypeComparator.java delete mode 100644 src/main/resources/eu/dnetlib/dhp/schema/oaf/utils/pid_blacklist.json delete mode 100644 src/test/java/eu/dnetlib/dhp/schema/common/ModelSupportTest.java delete mode 100644 src/test/java/eu/dnetlib/dhp/schema/oaf/utils/BlackListProviderTest.java delete mode 100644 src/test/java/eu/dnetlib/dhp/schema/oaf/utils/IdentifierFactoryTest.java delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/orp-rohub.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_3.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_4.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_5.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi1.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi2.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi3.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi4.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi5.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_openapc.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_pmc1.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_pmc2.json delete mode 100644 src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_urn1.json diff --git a/src/main/java/eu/dnetlib/dhp/schema/common/AccessRightComparator.java b/src/main/java/eu/dnetlib/dhp/schema/common/AccessRightComparator.java deleted file mode 100644 index f77e2af..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/common/AccessRightComparator.java +++ /dev/null @@ -1,69 +0,0 @@ - -package eu.dnetlib.dhp.schema.common; - -import java.util.Comparator; - -import eu.dnetlib.dhp.schema.oaf.Qualifier; - -public class AccessRightComparator implements Comparator { - - @Override - public int compare(T left, T 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("OPEN SOURCE")) - return -1; - if (rClass.equals("OPEN SOURCE")) - return 1; - - if (lClass.equals("OPEN")) - return -1; - if (rClass.equals("OPEN")) - return 1; - - if (lClass.equals("6MONTHS")) - return -1; - if (rClass.equals("6MONTHS")) - return 1; - - if (lClass.equals("12MONTHS")) - return -1; - if (rClass.equals("12MONTHS")) - return 1; - - if (lClass.equals("EMBARGO")) - return -1; - if (rClass.equals("EMBARGO")) - return 1; - - if (lClass.equals("RESTRICTED")) - return -1; - if (rClass.equals("RESTRICTED")) - return 1; - - if (lClass.equals("CLOSED")) - return -1; - if (rClass.equals("CLOSED")) - return 1; - - if (lClass.equals("UNKNOWN")) - return -1; - if (rClass.equals("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/EntityType.java b/src/main/java/eu/dnetlib/dhp/schema/common/EntityType.java deleted file mode 100644 index bf92fb7..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/common/EntityType.java +++ /dev/null @@ -1,21 +0,0 @@ - -package eu.dnetlib.dhp.schema.common; - -import eu.dnetlib.dhp.schema.oaf.Entity; - -/** Actual entity types in the Graph */ -public enum EntityType { - publication, dataset, otherresearchproduct, software, datasource, organization, project; - - /** - * Resolves the EntityType, given the relative class name - * - * @param clazz the given class name - * @param actual OafEntity subclass - * @return the EntityType associated to the given class - */ - public static EntityType fromClass(Class clazz) { - - return EntityType.valueOf(clazz.getSimpleName().toLowerCase()); - } -} diff --git a/src/main/java/eu/dnetlib/dhp/schema/common/MainEntityType.java b/src/main/java/eu/dnetlib/dhp/schema/common/MainEntityType.java deleted file mode 100644 index cda8ba4..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/common/MainEntityType.java +++ /dev/null @@ -1,7 +0,0 @@ - -package eu.dnetlib.dhp.schema.common; - -/** Main entity types in the Graph */ -public enum MainEntityType { - result, datasource, organization, project -} diff --git a/src/main/java/eu/dnetlib/dhp/schema/common/ModelSupport.java b/src/main/java/eu/dnetlib/dhp/schema/common/ModelSupport.java deleted file mode 100644 index e38da89..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/common/ModelSupport.java +++ /dev/null @@ -1,408 +0,0 @@ - -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; -import java.security.NoSuchAlgorithmException; -import java.text.ParseException; -import java.util.Date; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.function.Function; - -import org.apache.commons.codec.binary.Hex; -import org.apache.commons.lang3.StringUtils; - -import com.github.sisyphsu.dateparser.DateParserUtils; -import com.google.common.collect.Maps; - -import eu.dnetlib.dhp.schema.oaf.*; - -/** Oaf model utility methods. */ -public class ModelSupport { - - /** Defines the mapping between the actual entity type and the main entity type */ - private static final Map entityMapping = Maps.newHashMap(); - - static { - entityMapping.put(EntityType.publication, MainEntityType.result); - entityMapping.put(EntityType.dataset, MainEntityType.result); - entityMapping.put(EntityType.otherresearchproduct, MainEntityType.result); - entityMapping.put(EntityType.software, MainEntityType.result); - entityMapping.put(EntityType.datasource, MainEntityType.datasource); - entityMapping.put(EntityType.organization, MainEntityType.organization); - entityMapping.put(EntityType.project, MainEntityType.project); - } - - /** - * Defines the mapping between the actual entity types and the relative classes implementing them - */ - public static final Map entityTypes = Maps.newHashMap(); - - static { - entityTypes.put(EntityType.datasource, Datasource.class); - entityTypes.put(EntityType.organization, Organization.class); - entityTypes.put(EntityType.project, Project.class); - entityTypes.put(EntityType.dataset, Dataset.class); - entityTypes.put(EntityType.otherresearchproduct, OtherResearchProduct.class); - entityTypes.put(EntityType.software, Software.class); - entityTypes.put(EntityType.publication, Publication.class); - } - - public static final Map oafTypes = Maps.newHashMap(); - - static { - oafTypes.put("datasource", Datasource.class); - oafTypes.put("organization", Organization.class); - oafTypes.put("project", Project.class); - oafTypes.put("dataset", Dataset.class); - oafTypes.put("otherresearchproduct", OtherResearchProduct.class); - oafTypes.put("software", Software.class); - oafTypes.put("publication", Publication.class); - oafTypes.put("relation", Relation.class); - } - - public static final Map idPrefixMap = Maps.newHashMap(); - - static { - idPrefixMap.put(Datasource.class, "10"); - idPrefixMap.put(Organization.class, "20"); - idPrefixMap.put(Project.class, "40"); - idPrefixMap.put(Dataset.class, "50"); - idPrefixMap.put(OtherResearchProduct.class, "50"); - idPrefixMap.put(Software.class, "50"); - idPrefixMap.put(Publication.class, "50"); - } - - public static final Map entityIdPrefix = Maps.newHashMap(); - - static { - entityIdPrefix.put("datasource", "10"); - entityIdPrefix.put("organization", "20"); - entityIdPrefix.put("project", "40"); - entityIdPrefix.put("result", "50"); - } - - public static final Map idPrefixEntity = Maps.newHashMap(); - - static { - idPrefixEntity.put("10", "datasource"); - idPrefixEntity.put("20", "organization"); - idPrefixEntity.put("40", "project"); - idPrefixEntity.put("50", "result"); - } - - public static final Map relationInverseMap = Maps.newHashMap(); - - static { - set(relationInverseMap, PROJECT_ORGANIZATION, PARTICIPATION, IS_PARTICIPANT, HAS_PARTICIPANT); - - 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_DESCRIBED_BY, 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"; - - public static final String DATE_FORMAT = "yyyy-MM-dd"; - - private ModelSupport() { - } - - public static String getIdPrefix(Class clazz) { - return idPrefixMap.get(clazz); - } - - /** - * Checks subclass-superclass relationship. - * - * @param subClazzObject Subclass object instance - * @param superClazzObject Superclass object instance - * @param Subclass type - * @param Superclass type - * @return True if X is a subclass of Y - */ - public static Boolean isSubClass( - X subClazzObject, Y superClazzObject) { - return isSubClass(subClazzObject.getClass(), superClazzObject.getClass()); - } - - /** - * Checks subclass-superclass relationship. - * - * @param subClazzObject Subclass object instance - * @param superClazz Superclass class - * @param Subclass type - * @param Superclass type - * @return True if X is a subclass of Y - */ - public static Boolean isSubClass( - X subClazzObject, Class superClazz) { - return isSubClass(subClazzObject.getClass(), superClazz); - } - - /** - * Checks subclass-superclass relationship. - * - * @param subClazz Subclass class - * @param superClazz Superclass class - * @param Subclass type - * @param Superclass type - * @return True if X is a subclass of Y - */ - public static Boolean isSubClass( - Class subClazz, Class superClazz) { - return superClazz.isAssignableFrom(subClazz); - } - - /** - * Lists all the OAF model classes - * - * @param - * @return - */ - public static Class[] getOafModelClasses() { - return new Class[] { - AccessRight.class, - Author.class, - AuthorPid.class, - Context.class, - Country.class, - DataInfo.class, - Dataset.class, - Datasource.class, - Entity.class, - EntityDataInfo.class, - EoscIfGuidelines.class, - ExternalReference.class, - ExtraInfo.class, - GeoLocation.class, - H2020Classification.class, - H2020Programme.class, - Instance.class, - Journal.class, - KeyValue.class, - License.class, - Measure.class, - OAIProvenance.class, - OpenAccessRoute.class, - Organization.class, - OriginDescription.class, - OtherResearchProduct.class, - Project.class, - Provenance.class, - Publication.class, - Publisher.class, - Qualifier.class, - Relation.class, - Result.class, - Software.class, - StructuredProperty.class, - Subject.class - }; - } - - public static String getMainType(final EntityType type) { - return entityMapping.get(type).name(); - } - - public static boolean isResult(EntityType type) { - return MainEntityType.result.name().equals(getMainType(type)); - } - - public static String getScheme(final String sourceType, final String targetType) { - return String - .format( - schemeTemplate, - entityMapping.get(EntityType.valueOf(sourceType)).name(), - entityMapping.get(EntityType.valueOf(targetType)).name()); - } - - public static String tableIdentifier(String dbName, String tableName) { - - checkArgument(StringUtils.isNotBlank(dbName), "DB name cannot be empty"); - checkArgument(StringUtils.isNotBlank(tableName), "table name cannot be empty"); - - return String.format("%s.%s", dbName, tableName); - } - - public static String tableIdentifier(String dbName, Class clazz) { - - checkArgument(Objects.nonNull(clazz), "clazz is needed to derive the table name, thus cannot be null"); - - return tableIdentifier(dbName, clazz.getSimpleName().toLowerCase()); - } - - private static String idFnForRelation(Relation r) { - return Optional - .ofNullable(r.getSource()) - .map( - source -> Optional - .ofNullable(r.getTarget()) - .map( - target -> Optional - .ofNullable(r.getRelType()) - .map( - relType -> Optional - .ofNullable(r.getSubRelType()) - .map( - subRelType -> Optional - .ofNullable(r.getRelClass()) - .map( - relClass -> String - .join( - source, - target, - relType, - subRelType, - relClass)) - .orElse( - String - .join( - source, - target, - relType, - subRelType))) - .orElse(String.join(source, target, relType))) - .orElse(String.join(source, target))) - .orElse(source)) - .orElse(null); - } - - private static String idFnForOafEntity(T t) { - return t.getId(); - } - - public static String md5(final String s) { - try { - final MessageDigest md = MessageDigest.getInstance("MD5"); - md.update(s.getBytes(StandardCharsets.UTF_8)); - return new String(Hex.encodeHex(md.digest())); - } catch (final NoSuchAlgorithmException e) { - throw new IllegalStateException(e); - } - } - - public static String generateIdentifier(final String originalId, final String nsPrefix) { - return String.format("%s::%s", nsPrefix, md5(originalId)); - } - - public static String oldest(String dateA, String dateB) throws ParseException { - - if (StringUtils.isBlank(dateA)) { - return dateB; - } - if (StringUtils.isBlank(dateB)) { - return dateA; - } - if (StringUtils.isNotBlank(dateA) && StringUtils.isNotBlank(dateB)) { - - final Date a = DateParserUtils.parseDate(dateA); - final Date b = DateParserUtils.parseDate(dateB); - - if (Objects.nonNull(a) && Objects.nonNull(b)) { - return a.before(b) ? dateA : dateB; - } else { - return null; - } - } else { - return null; - } - } - -} diff --git a/src/main/java/eu/dnetlib/dhp/schema/common/RefereedComparator.java b/src/main/java/eu/dnetlib/dhp/schema/common/RefereedComparator.java deleted file mode 100644 index 86c0d97..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/common/RefereedComparator.java +++ /dev/null @@ -1,44 +0,0 @@ - -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 deleted file mode 100644 index 2b9ed94..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/common/RelationInverse.java +++ /dev/null @@ -1,46 +0,0 @@ - -package eu.dnetlib.dhp.schema.common; - -public class RelationInverse { - private String relClass; - private String inverseRelClass; - private String relType; - private String subReltype; - - public String getRelType() { - return relType; - } - - public RelationInverse setRelType(String relType) { - this.relType = relType; - return this; - } - - public String getSubReltype() { - return subReltype; - } - - public RelationInverse setSubReltype(String subReltype) { - this.subReltype = subReltype; - return this; - } - - public String getRelClass() { - return relClass; - } - - public RelationInverse setRelClass(String relClass) { - this.relClass = relClass; - return this; - } - - public String getInverseRelClass() { - return inverseRelClass; - } - - public RelationInverse setInverseRelClass(String inverseRelClass) { - this.inverseRelClass = inverseRelClass; - return this; - } - -} diff --git a/src/main/java/eu/dnetlib/dhp/schema/mdstore/MetadataRecord.java b/src/main/java/eu/dnetlib/dhp/schema/mdstore/MetadataRecord.java index 8277e14..9fce404 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/mdstore/MetadataRecord.java +++ b/src/main/java/eu/dnetlib/dhp/schema/mdstore/MetadataRecord.java @@ -3,8 +3,6 @@ package eu.dnetlib.dhp.schema.mdstore; import java.io.Serializable; -import eu.dnetlib.dhp.schema.common.ModelSupport; - /** * This class models a record in a Metadata store collection on HDFS */ @@ -38,6 +36,7 @@ public class MetadataRecord implements Serializable { } public MetadataRecord( + String id, String originalId, String encoding, Provenance provenance, @@ -49,7 +48,7 @@ public class MetadataRecord implements Serializable { this.provenance = provenance; this.body = body; this.dateOfCollection = dateOfCollection; - this.id = ModelSupport.generateIdentifier(originalId, this.provenance.getNsPrefix()); + this.id = id; } public String getId() { diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Entity.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Entity.java index 3fef249..790f7fd 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Entity.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Entity.java @@ -14,7 +14,7 @@ public abstract class Entity extends Oaf implements Serializable { /** * The list of datasource id/name pairs providing this Oaf. */ - protected List collectedfrom; + private List collectedfrom; private Long lastupdatetimestamp; @@ -33,7 +33,6 @@ public abstract class Entity extends Oaf implements Serializable { private EntityDataInfo dataInfo; - public List getCollectedfrom() { return collectedfrom; } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/EntityDataInfo.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/EntityDataInfo.java index 0f54eee..a172b36 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/EntityDataInfo.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/EntityDataInfo.java @@ -7,7 +7,6 @@ public class EntityDataInfo extends DataInfo { private Boolean invisible = false; private Boolean deletedbyinference = false; - public Boolean getInvisible() { return invisible; } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java index 53c8414..09b16be 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java @@ -1,16 +1,11 @@ package eu.dnetlib.dhp.schema.oaf; -import static com.google.common.base.Preconditions.checkArgument; - import java.io.Serializable; -import java.text.ParseException; import java.util.ArrayList; import java.util.List; import java.util.Objects; -import eu.dnetlib.dhp.schema.common.ModelSupport; - /** * Relation models any edge between two nodes in the OpenAIRE graph. It has a source id and a target id pointing to * graph node identifiers and it is further characterised by the semantic of the link through the fields relType, @@ -145,26 +140,6 @@ public class Relation extends Oaf implements Serializable { this.provenance = provenance; } - public void mergeFrom(final Relation r) { - - checkArgument(Objects.equals(getSource(), r.getSource()), "source ids must be equal"); - checkArgument(Objects.equals(getTarget(), r.getTarget()), "target ids must be equal"); - checkArgument(Objects.equals(getRelType(), r.getRelType()), "relType(s) must be equal"); - checkArgument( - Objects.equals(getSubRelType(), r.getSubRelType()), "subRelType(s) must be equal"); - checkArgument(Objects.equals(getRelClass(), r.getRelClass()), "relClass(es) must be equal"); - - setValidated(getValidated() || r.getValidated()); - try { - setValidationDate(ModelSupport.oldest(getValidationDate(), r.getValidationDate())); - } catch (ParseException e) { - throw new IllegalArgumentException(String - .format( - "invalid validation date format in relation [s:%s, t:%s]: %s", getSource(), getTarget(), - getValidationDate())); - } - } - @Override public boolean equals(Object o) { if (this == o) diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/CleaningFunctions.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/CleaningFunctions.java deleted file mode 100644 index 1d12478..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/CleaningFunctions.java +++ /dev/null @@ -1,74 +0,0 @@ - -package eu.dnetlib.dhp.schema.oaf.utils; - -import java.util.HashSet; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; - -import org.apache.commons.lang3.StringUtils; - -import eu.dnetlib.dhp.schema.oaf.StructuredProperty; - -public class CleaningFunctions { - - public static final String DOI_PREFIX_REGEX = "(^10\\.|\\/10\\.)"; - public static final String DOI_PREFIX = "10."; - - public static final Set PID_BLACKLIST = new HashSet<>(); - - static { - PID_BLACKLIST.add("none"); - PID_BLACKLIST.add("na"); - } - - public CleaningFunctions() {} - - /** - * Utility method that filter PID values on a per-type basis. - * @param s the PID whose value will be checked. - * @return false if the pid matches the filter criteria, true otherwise. - */ - public static boolean pidFilter(StructuredProperty s) { - final String pidValue = s.getValue(); - if (Objects.isNull(s.getQualifier()) || - StringUtils.isBlank(pidValue) || - StringUtils.isBlank(pidValue.replaceAll("(?:\\n|\\r|\\t|\\s)", ""))) { - return false; - } - if (CleaningFunctions.PID_BLACKLIST.contains(pidValue)) { - return false; - } - return !PidBlacklistProvider.getBlacklist(s.getQualifier().getClassid()).contains(pidValue); - } - - /** - * Utility method that normalises PID values on a per-type basis. - * @param pid the PID whose value will be normalised. - * @return the PID containing the normalised value. - */ - public static StructuredProperty normalizePidValue(StructuredProperty pid) { - pid.setValue( - normalizePidValue( - pid.getQualifier().getClassid(), - pid.getValue())); - - return pid; - } - - public static String normalizePidValue(String pidType, String pidValue) { - String value = Optional - .ofNullable(pidValue) - .map(String::trim) - .orElseThrow(() -> new IllegalArgumentException("PID value cannot be empty")); - - switch (pidType) { - - // TODO add cleaning for more PID types as needed - case "doi": - return value.toLowerCase().replaceFirst(DOI_PREFIX_REGEX, DOI_PREFIX); - } - return value; - } - -} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/IdentifierFactory.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/IdentifierFactory.java deleted file mode 100644 index aac2c8c..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/IdentifierFactory.java +++ /dev/null @@ -1,292 +0,0 @@ - -package eu.dnetlib.dhp.schema.oaf.utils; - -import static com.google.common.base.Preconditions.checkArgument; -import static eu.dnetlib.dhp.schema.common.ModelConstants.*; - -import java.io.Serializable; -import java.nio.charset.StandardCharsets; -import java.security.MessageDigest; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import org.apache.commons.codec.binary.Hex; -import org.apache.commons.lang3.StringUtils; - -import com.google.common.collect.HashBiMap; -import com.google.common.collect.Maps; - -import eu.dnetlib.dhp.schema.common.ModelSupport; -import eu.dnetlib.dhp.schema.oaf.*; - -/** - * Factory class for OpenAIRE identifiers in the Graph - */ -public class IdentifierFactory implements Serializable { - - public static final String ID_SEPARATOR = "::"; - public static final String ID_PREFIX_SEPARATOR = "|"; - - public static final int ID_PREFIX_LEN = 12; - - /** - * Declares the associations PID_TYPE -> [DATASOURCE ID, NAME] considered authoritative for that PID_TYPE. - * The id of the record (source_::id) will be rewritten as pidType_::id) - */ - public static final Map> PID_AUTHORITY = Maps.newHashMap(); - - static { - PID_AUTHORITY.put(PidType.doi, HashBiMap.create()); - PID_AUTHORITY.get(PidType.doi).put(CROSSREF_ID, "Crossref"); - PID_AUTHORITY.get(PidType.doi).put(DATACITE_ID, "Datacite"); - PID_AUTHORITY.get(PidType.doi).put(ZENODO_OD_ID, "ZENODO"); - PID_AUTHORITY.get(PidType.doi).put(ZENODO_R3_ID, "Zenodo"); - - PID_AUTHORITY.put(PidType.pmc, HashBiMap.create()); - PID_AUTHORITY.get(PidType.pmc).put(EUROPE_PUBMED_CENTRAL_ID, "Europe PubMed Central"); - PID_AUTHORITY.get(PidType.pmc).put(PUBMED_CENTRAL_ID, "PubMed Central"); - - PID_AUTHORITY.put(PidType.pmid, HashBiMap.create()); - PID_AUTHORITY.get(PidType.pmid).put(EUROPE_PUBMED_CENTRAL_ID, "Europe PubMed Central"); - PID_AUTHORITY.get(PidType.pmid).put(PUBMED_CENTRAL_ID, "PubMed Central"); - - PID_AUTHORITY.put(PidType.arXiv, HashBiMap.create()); - PID_AUTHORITY.get(PidType.arXiv).put(ARXIV_ID, "arXiv.org e-Print Archive"); - - PID_AUTHORITY.put(PidType.w3id, HashBiMap.create()); - PID_AUTHORITY.get(PidType.w3id).put(ROHUB_ID, "ROHub"); - } - - /** - * Declares the associations PID_TYPE -> [DATASOURCE ID, PID SUBSTRING] considered as delegated authority for that - * PID_TYPE. Example, Zenodo is delegated to forge DOIs that contain the 'zenodo' word. - * - * If a record with the same id (same pid) comes from 2 data sources, the one coming from a delegated source wins. E.g. Zenodo records win over those from Datacite. - * See also https://code-repo.d4science.org/D-Net/dnet-hadoop/pulls/187 and the class dhp-common/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/OafMapperUtils.java - */ - public static final Map> DELEGATED_PID_AUTHORITY = Maps.newHashMap(); - - static { - DELEGATED_PID_AUTHORITY.put(PidType.doi, new HashMap<>()); - DELEGATED_PID_AUTHORITY.get(PidType.doi).put(ZENODO_OD_ID, "zenodo"); - DELEGATED_PID_AUTHORITY.get(PidType.doi).put(ZENODO_R3_ID, "zenodo"); - DELEGATED_PID_AUTHORITY.put(PidType.w3id, new HashMap<>()); - DELEGATED_PID_AUTHORITY.get(PidType.w3id).put(ROHUB_ID, "ro-id"); - } - - /** - * Declares the associations PID_TYPE -> [DATASOURCE ID, NAME] whose records are considered enrichment for the graph. - * Their OpenAIRE ID is built from the declared PID type. Are merged with their corresponding record, identified by - * the same OpenAIRE id. - */ - public static final Map> ENRICHMENT_PROVIDER = Maps.newHashMap(); - - static { - ENRICHMENT_PROVIDER.put(PidType.doi, HashBiMap.create()); - ENRICHMENT_PROVIDER.get(PidType.doi).put(OPEN_APC_ID, OPEN_APC_NAME); - } - - public static Set delegatedAuthorityDatasourceIds() { - return DELEGATED_PID_AUTHORITY.values() - .stream() - .flatMap(m -> m.keySet().stream()) - .collect(Collectors.toCollection(HashSet::new)); - } - - public static List getPids(List pid, KeyValue collectedFrom) { - return pidFromInstance(pid, collectedFrom, true).distinct().collect(Collectors.toList()); - } - - public static String createDOIBoostIdentifier(T entity) { - if (entity == null) - return null; - - StructuredProperty pid = null; - if (entity.getPid() != null) { - pid = entity - .getPid() - .stream() - .filter(Objects::nonNull) - .filter(s -> s.getQualifier() != null && "doi".equalsIgnoreCase(s.getQualifier().getClassid())) - .filter(CleaningFunctions::pidFilter) - .findAny() - .orElse(null); - } else { - if (entity.getInstance() != null) { - pid = entity - .getInstance() - .stream() - .filter(i -> i.getPid() != null) - .flatMap(i -> i.getPid().stream()) - .filter(CleaningFunctions::pidFilter) - .findAny() - .orElse(null); - } - } - if (pid != null) - return idFromPid(entity, pid, true); - return null; - } - - /** - * Creates an identifier from the most relevant PID (if available) provided by a known PID authority in the given - * entity T. Returns entity.id when none of the PIDs meet the selection criteria is available. - * - * @param entity the entity providing PIDs and a default ID. - * @param the specific entity type. Currently Organization and Result subclasses are supported. - * @param md5 indicates whether should hash the PID value or not. - * @return an identifier from the most relevant PID, entity.id otherwise - */ - public static String createIdentifier(T entity, boolean md5) { - - checkArgument(StringUtils.isNoneBlank(entity.getId()), "missing entity identifier"); - - final Map> pids = extractPids(entity); - - return pids - .values() - .stream() - .flatMap(Set::stream) - .min(new PidComparator<>(entity)) - .map( - min -> Optional - .ofNullable(pids.get(min.getQualifier().getClassid())) - .map( - p -> p - .stream() - .sorted(new PidValueComparator()) - .findFirst() - .map(s -> idFromPid(entity, s, md5)) - .orElseGet(entity::getId)) - .orElseGet(entity::getId)) - .orElseGet(entity::getId); - } - - private static Map> extractPids(T entity) { - if (entity instanceof Result) { - return Optional - .ofNullable(((Result) entity).getInstance()) - .map(IdentifierFactory::mapPids) - .orElse(new HashMap<>()); - } else { - return entity - .getPid() - .stream() - .map(CleaningFunctions::normalizePidValue) - .filter(CleaningFunctions::pidFilter) - .collect( - Collectors - .groupingBy( - p -> p.getQualifier().getClassid(), - Collectors.mapping(p -> p, Collectors.toCollection(HashSet::new)))); - } - } - - private static Map> mapPids(List instance) { - return instance - .stream() - .map(i -> pidFromInstance(i.getPid(), i.getCollectedfrom(), false)) - .flatMap(Function.identity()) - .collect( - Collectors - .groupingBy( - p -> p.getQualifier().getClassid(), - Collectors.mapping(p -> p, Collectors.toCollection(HashSet::new)))); - } - - private static Stream pidFromInstance(List pid, KeyValue collectedFrom, - boolean mapHandles) { - return Optional - .ofNullable(pid) - .map( - pp -> pp - .stream() - // filter away PIDs provided by a DS that is not considered an authority for the - // given PID Type - .filter(p -> shouldFilterPidByCriteria(collectedFrom, p, mapHandles)) - .map(CleaningFunctions::normalizePidValue) - .filter(p -> isNotFromDelegatedAuthority(collectedFrom, p)) - .filter(CleaningFunctions::pidFilter)) - .orElse(Stream.empty()); - } - - - private static boolean shouldFilterPidByCriteria(KeyValue collectedFrom, StructuredProperty p, boolean mapHandles) { - final PidType pType = PidType.tryValueOf(p.getQualifier().getClassid()); - - if (Objects.isNull(collectedFrom)) { - return false; - } - - boolean isEnrich = Optional - .ofNullable(ENRICHMENT_PROVIDER.get(pType)) - .map(enrich -> enrich.containsKey(collectedFrom.getKey()) - || enrich.containsValue(collectedFrom.getValue())) - .orElse(false); - - boolean isAuthority = Optional - .ofNullable(PID_AUTHORITY.get(pType)) - .map(authorities -> authorities.containsKey(collectedFrom.getKey()) - || authorities.containsValue(collectedFrom.getValue())) - .orElse(false); - - return (mapHandles && pType.equals(PidType.handle)) || isEnrich || isAuthority; - } - - private static boolean isNotFromDelegatedAuthority(KeyValue collectedFrom, StructuredProperty p) { - final PidType pType = PidType.tryValueOf(p.getQualifier().getClassid()); - - final Map da = DELEGATED_PID_AUTHORITY.get(pType); - if (Objects.isNull(da)) { - return true; - } - if (!da.containsKey(collectedFrom.getKey())) { - return true; - } - return StringUtils.contains(p.getValue(), da.get(collectedFrom.getKey())); - } - - /** - * @see {@link IdentifierFactory#createIdentifier(Entity, boolean)} - */ - public static String createIdentifier(T entity) { - - return createIdentifier(entity, true); - } - - private static String idFromPid(T entity, StructuredProperty s, boolean md5) { - return idFromPid(ModelSupport.getIdPrefix(entity.getClass()), s.getQualifier().getClassid(), s.getValue(), md5); - } - - public static String idFromPid(String numericPrefix, String pidType, String pidValue, boolean md5) { - return new StringBuilder() - .append(numericPrefix) - .append(ID_PREFIX_SEPARATOR) - .append(createPrefix(pidType)) - .append(ID_SEPARATOR) - .append(md5 ? md5(pidValue) : pidValue) - .toString(); - } - - // create the prefix (length = 12) - private static String createPrefix(String pidType) { - StringBuilder prefix = new StringBuilder(StringUtils.left(pidType, ID_PREFIX_LEN)); - while (prefix.length() < ID_PREFIX_LEN) { - prefix.append("_"); - } - return prefix.substring(0, ID_PREFIX_LEN); - } - - public static String md5(final String s) { - try { - final MessageDigest md = MessageDigest.getInstance("MD5"); - md.update(s.getBytes(StandardCharsets.UTF_8)); - return new String(Hex.encodeHex(md.digest())); - } catch (final Exception e) { - return null; - } - } - -} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ModelHardLimits.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ModelHardLimits.java deleted file mode 100644 index ea40509..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ModelHardLimits.java +++ /dev/null @@ -1,24 +0,0 @@ - -package eu.dnetlib.dhp.schema.oaf.utils; - -public class ModelHardLimits { - - private ModelHardLimits() {} - - public static final String LAYOUT = "index"; - public static final String INTERPRETATION = "openaire"; - public static final String SEPARATOR = "-"; - - public static final int MAX_EXTERNAL_ENTITIES = 50; - public static final int MAX_AUTHORS = 200; - public static final int MAX_AUTHOR_FULLNAME_LENGTH = 1000; - public static final int MAX_TITLE_LENGTH = 5000; - public static final int MAX_TITLES = 10; - public static final int MAX_ABSTRACT_LENGTH = 150000; - public static final int MAX_INSTANCES = 10; - - public static String getCollectionName(String format) { - return format + SEPARATOR + LAYOUT + SEPARATOR + INTERPRETATION; - } - -} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/OrganizationPidComparator.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/OrganizationPidComparator.java deleted file mode 100644 index 3a6df29..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/OrganizationPidComparator.java +++ /dev/null @@ -1,38 +0,0 @@ - -package eu.dnetlib.dhp.schema.oaf.utils; - -import java.util.Comparator; - -import eu.dnetlib.dhp.schema.oaf.StructuredProperty; - -public class OrganizationPidComparator implements Comparator { - - @Override - public int compare(StructuredProperty left, StructuredProperty right) { - - PidType lClass = PidType.tryValueOf(left.getQualifier().getClassid()); - PidType rClass = PidType.tryValueOf(right.getQualifier().getClassid()); - - if (lClass.equals(PidType.openorgs)) - return -1; - if (rClass.equals(PidType.openorgs)) - return 1; - - if (lClass.equals(PidType.GRID)) - return -1; - if (rClass.equals(PidType.GRID)) - return 1; - - if (lClass.equals(PidType.mag_id)) - return -1; - if (rClass.equals(PidType.mag_id)) - return 1; - - if (lClass.equals(PidType.urn)) - return -1; - if (rClass.equals(PidType.urn)) - return 1; - - return 0; - } -} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidBlacklist.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidBlacklist.java deleted file mode 100644 index 0b8e5e3..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidBlacklist.java +++ /dev/null @@ -1,8 +0,0 @@ - -package eu.dnetlib.dhp.schema.oaf.utils; - -import java.util.HashMap; -import java.util.HashSet; - -public class PidBlacklist extends HashMap> { -} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidBlacklistProvider.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidBlacklistProvider.java deleted file mode 100644 index 3bcd0ab..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidBlacklistProvider.java +++ /dev/null @@ -1,39 +0,0 @@ - -package eu.dnetlib.dhp.schema.oaf.utils; - -import java.io.IOException; -import java.util.HashSet; -import java.util.Optional; -import java.util.Set; - -import org.apache.commons.io.IOUtils; - -import com.fasterxml.jackson.databind.ObjectMapper; - -public class PidBlacklistProvider { - - private static final PidBlacklist blacklist; - - static { - try { - String json = IOUtils.toString(IdentifierFactory.class.getResourceAsStream("pid_blacklist.json")); - blacklist = new ObjectMapper().readValue(json, PidBlacklist.class); - - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - public static PidBlacklist getBlacklist() { - return blacklist; - } - - public static Set getBlacklist(String pidType) { - return Optional - .ofNullable(getBlacklist().get(pidType)) - .orElse(new HashSet<>()); - } - - private PidBlacklistProvider() {} - -} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidComparator.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidComparator.java deleted file mode 100644 index 7a5d560..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidComparator.java +++ /dev/null @@ -1,48 +0,0 @@ - -package eu.dnetlib.dhp.schema.oaf.utils; - -import java.util.Comparator; - -import eu.dnetlib.dhp.schema.common.ModelSupport; -import eu.dnetlib.dhp.schema.oaf.Entity; -import eu.dnetlib.dhp.schema.oaf.Organization; -import eu.dnetlib.dhp.schema.oaf.Result; -import eu.dnetlib.dhp.schema.oaf.StructuredProperty; - -public class PidComparator implements Comparator { - - private final T entity; - - public PidComparator(T entity) { - this.entity = entity; - } - - @Override - public int compare(StructuredProperty left, StructuredProperty right) { - - if (left == null && right == null) - return 0; - if (left == null) - return 1; - if (right == null) - return -1; - - if (ModelSupport.isSubClass(entity, Result.class)) { - return compareResultPids(left, right); - } - if (ModelSupport.isSubClass(entity, Organization.class)) { - return compareOrganizationtPids(left, right); - } - - // Else (but unlikely), lexicographical ordering will do. - return left.getQualifier().getClassid().compareTo(right.getQualifier().getClassid()); - } - - private int compareResultPids(StructuredProperty left, StructuredProperty right) { - return new ResultPidComparator().compare(left, right); - } - - private int compareOrganizationtPids(StructuredProperty left, StructuredProperty right) { - return new OrganizationPidComparator().compare(left, right); - } -} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidType.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidType.java deleted file mode 100644 index 392bc02..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidType.java +++ /dev/null @@ -1,79 +0,0 @@ - -package eu.dnetlib.dhp.schema.oaf.utils; - -import org.apache.commons.lang3.EnumUtils; - -public enum PidType { - - /** - * The DOI syntax shall be made up of a DOI prefix and a DOI suffix separated by a forward slash. - * - * There is no defined limit on the length of the DOI name, or of the DOI prefix or DOI suffix. - * - * The DOI name is case-insensitive and can incorporate any printable characters from the legal graphic characters - * of Unicode. Further constraints on character use (e.g. use of language-specific alphanumeric characters) can be - * defined for an application by the ISO 26324 Registration Authority. - * - * - * DOI prefix: The DOI prefix shall be composed of a directory indicator followed by a registrant code. - * These two components shall be separated by a full stop (period). The directory indicator shall be "10" and - * distinguishes the entire set of character strings (prefix and suffix) as digital object identifiers within the - * resolution system. - * - * Registrant code: The second element of the DOI prefix shall be the registrant code. The registrant code is a - * unique string assigned to a registrant. - * - * DOI suffix: The DOI suffix shall consist of a character string of any length chosen by the registrant. - * Each suffix shall be unique to the prefix element that precedes it. The unique suffix can be a sequential number, - * or it might incorporate an identifier generated from or based on another system used by the registrant - * (e.g. ISAN, ISBN, ISRC, ISSN, ISTC, ISNI; in such cases, a preferred construction for such a suffix can be - * specified, as in Example 1). - * - * Source: https://www.doi.org/doi_handbook/2_Numbering.html#2.2 - */ - doi, - - /** - * PubMed Unique Identifier (PMID) - * - * This field is a 1-to-8 digit accession number with no leading zeros. It is present on all records and is the - * accession number for managing and disseminating records. PMIDs are not reused after records are deleted. - * - * Beginning in February 2012 PMIDs include extensions following a decimal point to account for article versions - * (e.g., 21804956.2). All citations are considered version 1 until replaced. The extended PMID is not displayed - * on the MEDLINE format. - * - * View the citation in abstract format in PubMed to access additional versions when available (see the article in - * the Jan-Feb 2012 NLM Technical Bulletin). - * - * Source: https://www.nlm.nih.gov/bsd/mms/medlineelements.html#pmid - */ - pmid, - - /** - * This field contains the unique identifier for the cited article in PubMed Central. The identifier begins with the - * prefix PMC. - * - * Source: https://www.nlm.nih.gov/bsd/mms/medlineelements.html#pmc - */ - pmc, handle, arXiv, nct, pdb, w3id, - - // Organization - openorgs, corda, corda_h2020, GRID, mag_id, urn, - - // Used by dedup - undefined, original; - - public static boolean isValid(String type) { - return EnumUtils.isValidEnum(PidType.class, type); - } - - public static PidType tryValueOf(String s) { - try { - return PidType.valueOf(s); - } catch (Exception e) { - return PidType.original; - } - } - -} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidValueComparator.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidValueComparator.java deleted file mode 100644 index 0e20835..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/PidValueComparator.java +++ /dev/null @@ -1,33 +0,0 @@ - -package eu.dnetlib.dhp.schema.oaf.utils; - -import java.util.Comparator; -import java.util.Optional; - -import eu.dnetlib.dhp.schema.oaf.StructuredProperty; - -public class PidValueComparator implements Comparator { - - @Override - public int compare(StructuredProperty left, StructuredProperty right) { - - if (left == null && right == null) - return 0; - if (left == null) - return 1; - if (right == null) - return -1; - - StructuredProperty l = CleaningFunctions.normalizePidValue(left); - StructuredProperty r = CleaningFunctions.normalizePidValue(right); - - return Optional - .ofNullable(l.getValue()) - .map( - lv -> Optional - .ofNullable(r.getValue()) - .map(rv -> lv.compareTo(rv)) - .orElse(-1)) - .orElse(1); - } -} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ResultPidComparator.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ResultPidComparator.java deleted file mode 100644 index e51c480..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ResultPidComparator.java +++ /dev/null @@ -1,53 +0,0 @@ - -package eu.dnetlib.dhp.schema.oaf.utils; - -import java.util.Comparator; - -import eu.dnetlib.dhp.schema.oaf.StructuredProperty; - -public class ResultPidComparator implements Comparator { - - @Override - public int compare(StructuredProperty left, StructuredProperty right) { - - PidType lClass = PidType.tryValueOf(left.getQualifier().getClassid()); - PidType rClass = PidType.tryValueOf(right.getQualifier().getClassid()); - - if (lClass.equals(PidType.doi)) - return -1; - if (rClass.equals(PidType.doi)) - return 1; - - if (lClass.equals(PidType.pmid)) - return -1; - if (rClass.equals(PidType.pmid)) - return 1; - - if (lClass.equals(PidType.pmc)) - return -1; - if (rClass.equals(PidType.pmc)) - return 1; - - if (lClass.equals(PidType.handle)) - return -1; - if (rClass.equals(PidType.handle)) - return 1; - - if (lClass.equals(PidType.arXiv)) - return -1; - if (rClass.equals(PidType.arXiv)) - return 1; - - if (lClass.equals(PidType.nct)) - return -1; - if (rClass.equals(PidType.nct)) - return 1; - - if (lClass.equals(PidType.pdb)) - return -1; - if (rClass.equals(PidType.pdb)) - return 1; - - return 0; - } -} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ResultTypeComparator.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ResultTypeComparator.java deleted file mode 100644 index a233ae7..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/utils/ResultTypeComparator.java +++ /dev/null @@ -1,77 +0,0 @@ - -package eu.dnetlib.dhp.schema.oaf.utils; - -import static eu.dnetlib.dhp.schema.common.ModelConstants.CROSSREF_ID; - -import java.util.Comparator; -import java.util.HashSet; -import java.util.Optional; -import java.util.stream.Collectors; - -import eu.dnetlib.dhp.schema.common.ModelConstants; -import eu.dnetlib.dhp.schema.oaf.KeyValue; -import eu.dnetlib.dhp.schema.oaf.Result; - -public class ResultTypeComparator implements Comparator { - - @Override - public int compare(Result left, Result right) { - - if (left == null && right == null) - return 0; - if (left == null) - return 1; - if (right == null) - return -1; - - HashSet lCf = getCollectedFromIds(left); - HashSet rCf = getCollectedFromIds(right); - - if (lCf.contains(CROSSREF_ID) && !rCf.contains(CROSSREF_ID)) { - return -1; - } - if (!lCf.contains(CROSSREF_ID) && rCf.contains(CROSSREF_ID)) { - return 1; - } - - String lClass = left.getResulttype(); - String rClass = right.getResulttype(); - - if (lClass.equals(rClass)) - return 0; - - if (lClass.equals(ModelConstants.PUBLICATION_RESULTTYPE_CLASSID)) - return -1; - if (rClass.equals(ModelConstants.PUBLICATION_RESULTTYPE_CLASSID)) - return 1; - - if (lClass.equals(ModelConstants.DATASET_RESULTTYPE_CLASSID)) - return -1; - if (rClass.equals(ModelConstants.DATASET_RESULTTYPE_CLASSID)) - return 1; - - if (lClass.equals(ModelConstants.SOFTWARE_RESULTTYPE_CLASSID)) - return -1; - if (rClass.equals(ModelConstants.SOFTWARE_RESULTTYPE_CLASSID)) - return 1; - - if (lClass.equals(ModelConstants.ORP_RESULTTYPE_CLASSID)) - return -1; - if (rClass.equals(ModelConstants.ORP_RESULTTYPE_CLASSID)) - return 1; - - // Else (but unlikely), lexicographical ordering will do. - return lClass.compareTo(rClass); - } - - protected HashSet getCollectedFromIds(Result left) { - return Optional - .ofNullable(left.getCollectedfrom()) - .map( - cf -> cf - .stream() - .map(KeyValue::getKey) - .collect(Collectors.toCollection(HashSet::new))) - .orElse(new HashSet<>()); - } -} diff --git a/src/main/resources/eu/dnetlib/dhp/schema/oaf/utils/pid_blacklist.json b/src/main/resources/eu/dnetlib/dhp/schema/oaf/utils/pid_blacklist.json deleted file mode 100644 index 05e8cde..0000000 --- a/src/main/resources/eu/dnetlib/dhp/schema/oaf/utils/pid_blacklist.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "doi" : [ "10.12739/10.12739", "10.11646/zootaxa.4404.1.1", "10.5281/zenodo.3678492", "10.11646/zootaxa.4757.1.1", "10.17176/20170811-142447", "10.6035/asparkia", "10.11646/zootaxa.4754.1.6", "10.11646/zootaxa.4784.1.1", "10.6035/millars", "10.11646/zootaxa.4776.1.1", "10.1590/1982-0224-20170094", "10.11646/zootaxa.4773.1.1", "10.11646/zootaxa.4744.1.1", "10.3897/zookeys.38.383", "10.1371/journal.", "10.5281/zenodo.3727017", "10.5252/zoosystema2019v41a15", "10.6035/dossiersf", "10.11646/zootaxa.4754.1.20", "10.6035/recerca", "10.11646/zootaxa.4428.1.1", "10.7179/psri", "10.11646/zootaxa.4785.1.1", "10.2478/aemnp-2018-0014", "10.17979/spudc.9788497497565", "10.2139/ssrn.2721313", "10.17979/spudc.9788497497749", "10.5281/zenodo.3760976", "10.11646/zootaxa.4381.1.1", "10.6035/tiempos", "10.11646/zootaxa.4754.1.10", "10.5281/zenodo.3776452", "10.11646/zootaxa.4754.1.16", "10.5252/zoosystema2019v41a26", "10.11646/zootaxa.4759.2.1", "10.11646/zootaxa.4741.1.1", "10.5252/zoosystema2019v41a4", "10.1145/nnnnnnn.nnnnnnn", "10.17979/spudc.9788497497169", "10.11646/zootaxa.4780.3.1", "10.11646/zootaxa.4663.1.1", "10.5281/zenodo.3748525", "10.5281/zenodo.3746744", "10.3920/978-90-8686-761-5", "10.14198/eurau18alicante", "10.5252/geodiversitas2019v41a8", "10.4126/38m-0000003", "10.5281/zenodo.3648511", "10.6035/clr", "10.4126/38m-0000004", "10.5281/zenodo.3732535", "10.5281/zenodo.3355776", "10.4126/38m-0000002", "10.11646/zootaxa.4763.3.3", "10.11646/zootaxa.4413.3.1", "10.1163/9789004416208_005", "10.4126/38m-0000001", "10.3897/zookeys.30.308", "10.4126/38m-0000000", "10.5281/zenodo.3739808", "10.5281/zenodo.3674873", "10.3161/00034541anz2020.70.1.003", "10.5281/zenodo.3738648", "10.11646/zootaxa.4765.1.1", "10.11646/zootaxa.4754.1.8", "10.3897/zookeys.36.306", "10.4230/lipics", "10.5281/zenodo.3758345", "10.3161/00034541anz2020.70.1.001", "10.3929/ethz-a-005427569", "10.11646/zootaxa.4772.1.1", "10.5281/zenodo.3677235", "10.11646/zootaxa.4766.1.1", "10.17509/jurnal", "10.1145/1235", "10.11646/zootaxa.4754.1.15", "10.2478/aemnp-2018-0018", "10.11646/zootaxa.4538.1.1", "10.11646/zootaxa.4740.1.1", "10.3897/zookeys.32.282", "10.3897/zookeys.2.56", "10.3897/zookeys.39.425", "10.11646/zootaxa.4514.3.3", "10.1007/978-94-007-1966-8", "10.3897/zookeys.26.214", "10.11646/zootaxa.4106.1.1", "10.3897/zookeys.22.219", "10.11646/zootaxa.4748.2.1", "10.5252/zoosystema2019v41a19", "10.3897/zookeys.22.122", "10.1080/00222933.2019.1634225", "10.11646/zootaxa.4632.1.1", "10.1007/s00259-016-3484-4", "10.3897/zookeys.19.221", "10.3897/zookeys.2.7", "10.11646/zootaxa.4777.1.1", "10.14279/depositonce-3753", "10.1111/apha.12712", "10.11646/zootaxa.4759.3.4", "10.11646/zootaxa.4754.1.9", "10.11646/zootaxa.4747.2.8", "10.5281/zenodo.3757451", "10.5281/zenodo.3740269", "10.5252/zoosystema2020v42a4", "10.1140/epje/i2013-13103-3", "10.1177/0301006619863862", "10.5281/zenodo.3726987", "10.12795/hid", "10.24042/jipf", "10.12795/e-rips", "10.1186/s12913-016-1423-5", "10.4126/38m-0000005", "10.3847/2041-8213/aa91c9", "10.1145/1122445.1122456", "10.1103/physrevlett.114.191803", "10.3920/978-90-8686-782-0", "10.11646/zootaxa.4739.1.1", "10.11646/zootaxa.4770.1.1", "10.21009/10.21009/jpd.081", "10.1080/15548627.2015.1100356", "10.12795/ricl", "10.3897/zookeys.34.309", "10.1080/00222933.2019.1692088", "10.4126/frl01-0064002", "10.1371/journal", "10.1175/1520-0485(2002)032", "10.3897/zookeys.22.152", "10.11646/zootaxa.4731.2.1", "10.4126/frl01-0064005", "10.11646/zootaxa.4738.1.1", "10.11646/zootaxa.4780.1.6", "10.4126/frl01-0064004", "10.6018/analesps.31.1.158071", "10.1007/jhep08(2016)045", "10.5281/zenodo.3759519", "10.4126/frl01-0064010", "10.11646/zootaxa.4537.1.1", "10.5281/zenodo.3713533", "10.5281/zenodo.3742020", "10.4126/frl01-0064014", "10.4126/frl01-0064001", "10.1000/isbn", "10.5281/zenodo.3777290", "10.4126/frl01-0064008", "10.1159/000440895", "10.3897/zookeys.31.140", "10.4126/frl01-0064003", "10.1080/00222933.2018.1524032", "10.21686/2500-3925-2014-6", "10.1016/j.bbr.2011.03.031", "10.4126/frl01-0064006", "10.4126/frl01-0064007", "10.4126/frl01-0064020", "10.4126/frl01-0064016", "10.2478/aemnp-2018-0013", "10.4126/frl01-0064021", "10.5281/zenodo.3754300", "10.15330/gal.29-30.", "10.3897/zookeys.2.4", "10.5252/zoosystema2019v41a7", "10.22435/bpk.v17i2", "10.4126/frl01-0063997", "10.3897/zookeys.11.160", "10.11646/zootaxa.4754.1.14", "10.4126/frl01-0064013", "10.1080/20013078.2018.1535750", "10.1016/j.", "10.4126/frl01-0064011", "10.1002/ece3.2579", "10.1088/0264-9381/28/9/094001", "10.3897/zookeys.2.25", "10.4126/frl01-0064019", "10.4126/frl01-0063994", "10.4126/frl01-0064135", "10.4126/frl01-0063998", "10.12795/ppa", "10.4126/frl01-0064009", "10.11646/zootaxa.4769.1.1", "10.11646/zootaxa.4419.1.1", "10.11646/zootaxa.4733.1.1", "10.4126/frl01-0063993", "10.3161/15081109acc2016.18.1.005", "10.11646/zootaxa.4763.1.2", "10.11646/zootaxa.4754.1.19", "10.4126/frl01-0064136", "10.4126/frl01-0064159", "10.4126/frl01-0063999", "10.4126/frl01-0064161", "10.1089/ten.tea.2015.5000.abstracts", "10.1002/(issn)1521-3773", "10.1140/epjc/s10052-015-3325-9", "10.1016/j.physletb.2016.04.050", "10.1007/jhep04(2015)117", "10.1111/gcb.14904", "10.1016/s0140-6736(17)32129-3", "10.11646/zootaxa.4748.1.1", "10.4126/frl01-0064078", "10.1140/epjc/s10052-015-3408-7", "10.1002/(issn)1097-4652", "10.1007/jhep06(2015)121", "10.1007/jhep09(2014)103", "10.1016/j.gca.2007.06.021", "10.1007/jhep09(2015)049", "10.3897/zookeys.4.32", "10.6101/azq/0002", "10.11646/zootaxa.4764.1.1", "10.11646/zootaxa.4772.1.5", "10.4126/frl01-0064000", "10.4126/frl01-0064131", "10.1016/j.physletb.2015.08.061", "10.1007/jhep01(2015)069", "10.1016/j.physletb.2016.06.039", "10.1016/j.physletb.2015.07.011", "10.1007/jhep04(2015)116", "10.3920/978-90-8686-797-4", "10.1016/j.physletb.2015.12.020", "10.1016/j.physletb.2015.04.042", "10.1016/j.physletb.2016.06.004", "10.1140/epjc/s10052-015-3261-8", "10.1016/j.physletb.2015.10.067", "10.1016/j.physletb.2015.07.065", "10.1163/1876312x-00002195", "10.1016/j.physletb.2013.12.010", "10.1016/j.physletb.2013.01.024", "10.1007/jhep11(2014)056", "10.1007/jhep12(2017)142", "10.1002/pds.4864", "10.1140/epjc/s10052-015-3262-7", "10.1016/j.physletb.2014.09.054", "10.1140/epjc/s10052-015-3373-1", "10.1007/jhep03(2015)041", "10.1016/j.physletb.2016.02.047", "10.4126/frl01-0064018", "10.1016/j.physletb.2014.01.042", "10.1007/jhep09(2014)037", "10.1007/978-94-017-7285-3", "10.1007/s00424-013-1401-2", "10.1007/s00259-017-3822-1", "10.1177/0301006616671273", "10.1007/jhep09(2014)112", "10.1007/jhep06(2015)116", "10.1140/epjc/s10052-018-6243-9", "10.1140/epjc/s10052-017-4692-1", "10.1007/jhep10(2015)144", "10.1007/jhep07(2017)107", "10.1007/jhep11(2014)088", "10.1016/j.physletb.2014.01.006", "10.1007/jhep01(2018)055", "10.1016/j.physletb.2016.03.060", "10.1140/epjc/s10052-019-6904-3", "10.11646/zootaxa.4737.1.1", "10.3934/xx.xx.xx.xx", "10.11646/zootaxa.4758.2.1", "10.1016/j.physletb.2015.10.004", "10.1016/j.physletb.2015.07.053", "10.5798/diclemedj.0921.2012.04.0184", "10.1007/jhep04(2014)169", "10.4126/frl01-0064160", "10.3989/aem.2001.v31.i2", "10.1039/x0xx00000x", "10.11646/zootaxa.3856.4.1", "10.4126/frl01-0064133", "10.1007/jhep05(2015)078", "10.1016/j.physletb.2012.08.020", "10.1007/jhep07(2015)032", "10.1159/000090218", "10.1016/j.physletb.2014.03.015", "10.1007/jhep09(2015)108", "10.1007/jhep09(2015)050", "10.1007/jhep01(2014)163", "10.1016/j.physletb.2014.11.026", "10.1140/epjc/s10052-016-4580-0", "10.1140/epjc/s10052-014-3109-7", "10.1140/epjc/s10052-014-3231-6", "10.1007/jhep02(2014)088", "10.1016/j.physletb.2016.01.056", "10.1016/j.physletb.2015.08.047", "10.1016/j.physletb.2015.12.039", "10.1007/jhep11(2015)071", "10.1140/epjc/s10052-015-3853-3", "10.1007/jhep04(2015)124", "10.1016/j.physletb.2015.07.010", "10.5281/zenodo.3413524", "10.1007/jhep04(2014)031", "10.1007/jhep07(2015)157", "10.1103/physrevd.90.052008", "10.1007/jhep11(2014)118", "10.3920/978-90-8686-708-0", "10.5281/zenodo.1136235", "10.1103/physrevd.86.032003", "10.1016/j.physletb.2016.01.032", "10.1007/jhep03(2018)174", "10.1007/jhep10(2017)182", "10.1140/epjst/e2019-900045-4", "10.1016/j.physletb.2015.06.070", "10.1140/epjc/s10052-016-4067-z", "10.1016/j.physletb.2015.11.042", "10.1007/jhep04(2018)033", "10.1007/jhep09(2014)145", "10.1016/j.physletb.2016.08.055", "10.1016/j.physletb.2015.04.002", "10.1007/jhep03(2014)032", "10.1140/epjc/s10052-017-5491-4", "10.1016/j.physletb.2015.09.062", "10.1016/j.physletb.2014.12.003", "10.1016/j.physletb.2015.03.017", "10.1140/epjc/s10052-014-3195-6", "10.1140/epjc/s10052-016-4034-8", "10.1140/epjc/s10052-016-4070-4", "10.1140/epjc/s10052-018-5693-4", "10.4126/frl01-0064017", "10.1007/jhep08(2014)173", "10.1016/j.physletb.2014.06.076", "10.1016/j.physletb.2018.11.064", "10.1140/epjc/s10052-017-4988-1", "10.11646/zootaxa.4258.4.3", "10.11646/zootaxa.4766.1.2", "10.11646/zootaxa.4780.1.1", "10.5281/zenodo.3693943", "10.4126/frl01-0064129", "10.15330/gal.28.", "10.1007/jhep02(2016)145", "10.1007/jhep04(2014)172", "10.1007/jhep04(2016)005", "10.1007/jhep03(2016)125", "10.1016/j.physletb.2018.02.033", "10.1007/jhep08(2017)052", "10.1007/jhep12(2017)085", "10.1007/jhep09(2014)176", "10.1007/jhep12(2017)024", "10.1140/epjc/s10052-018-5686-3", "10.1016/j.physletb.2016.11.035", "10.1016/j.physletb.2015.12.017", "10.1140/epjc/s10052-015-3542-2", "10.1140/epjc/s10052-014-3071-4", "10.1103/physrevd.97.032009", "10.1140/epjc/s10052-015-3306-z", "10.1016/j.physletb.2017.12.043", "10.1140/epjc/s10052-014-3233-4", "10.1016/j.physletb.2018.09.013", "10.1016/j.gca.2007.06.014", "10.1016/j.physletb.2016.05.005", "10.1038/s41586-019-1171-x", "10.1016/j.physletb.2016.05.087", "10.1007/jhep06(2018)022", "10.1016/j.physletb.2016.01.057", "10.1016/j.physletb.2018.03.023", "10.1140/epjc/s10052-015-3351-7", "10.1126/science.aap8757", "10.1007/jhep09(2015)137", "10.1007/jhep01(2015)063", "10.1007/jhep01(2018)126", "10.1016/j.gca.2007.06.020", "10.1140/epjc/s10052-018-5595-5", "10.1016/j.physletb.2015.02.015", "10.1016/j.physletb.2014.06.077", "10.1007/jhep12(2017)059", "10.1007/jhep10(2017)141", "10.1007/jhep02(2014)107", "10.1140/epjc/s10052-014-2965-5", "10.1016/j.physletb.2015.07.079", "10.1007/jhep10(2017)112", "10.1140/epjc/s10052-014-2982-4", "10.1007/jhep05(2016)160", "10.1016/j.physletb.2016.07.030", "10.1140/epjc/s10052-014-3168-9", "10.1140/epjc/s10052-018-5583-9", "10.1140/epjc/s10052-016-4184-8", "10.1007/jhep08(2015)105", "10.1007/jhep05(2015)061", "10.1103/physrevd.97.032003", "10.1140/epjc/s10052-014-3190-y", "10.1016/j.physletb.2012.10.061", "10.1140/epjc/s10052-014-2941-0", "10.1016/j.physletb.2016.02.002", "10.1016/j.physletb.2016.05.033", "10.1007/jhep01(2014)096", "10.1007/jhep09(2015)201", "10.1016/j.physletb.2016.01.010", "10.1016/j.physletb.2015.07.037", "10.1007/jhep07(2015)042", "10.1016/j.physletb.2016.05.044", "10.1016/j.physletb.2016.05.088", "10.3897/zookeys.2.2", "10.1007/jhep11(2015)018", "10.1007/jhep11(2015)189", "10.1016/j.physletb.2016.10.014", "10.1007/jhep06(2015)080", "10.1016/j.physletb.2014.11.042", "10.1140/epjc/s10052-014-3157-z", "10.1140/epjc/s10052-015-3406-9", "10.1016/j.physletb.2016.02.056", "10.1016/j.physletb.2015.03.054", "10.1140/epjc/s10052-016-4574-y", "10.5252/geodiversitas2019v41a15", "10.1007/jhep09(2014)094", "10.1140/epjc/s10052-017-5486-1", "10.1007/jhep03(2018)095", "10.11646/zootaxa.4736.1.1", "10.11646/zootaxa.4766.2.1", "10.5281/zenodo.3762392", "10.5281/zenodo.3761958", "10.11646/zootaxa.4403.3.2", "10.1553/iswimab", "10.11646/zootaxa.3750.5.1", "10.4126/frl01-0064134", "10.1103/physrevd.87.032002", "10.1140/epjc/s10052-013-2676-3", "10.1007/jhep02(2015)153", "10.1007/jhep08(2017)006", "10.1016/j.physletb.2016.11.005", "10.1007/jhep01(2013)029", "10.1007/jhep10(2017)132", "10.1016/j.physletb.2013.01.034", "10.1016/j.physletb.2016.03.046", "10.1140/epjc/s10052-016-3988-x", "10.1016/j.physletb.2016.07.006", "10.1140/epjc/s10052-018-5752-x", "10.1140/epjc/s10052-015-3454-1", "10.1002/ece3.1303", "10.1007/jhep02(2014)013", "10.1007/jhep06(2016)081", "10.1140/epjc/s10052-014-3117-7", "10.1007/jhep09(2017)084", "10.1016/j.physletb.2017.09.078", "10.1007/jhep08(2016)005", "10.1007/jhep01(2015)020", "10.1140/epjc/s10052-017-4852-3", "10.1016/j.physletb.2018.02.045", "10.7818/sibecolandaeetmeeting.2019", "10.1007/jhep11(2014)104", "10.1007/jhep05(2018)077", "10.1016/j.physletb.2016.11.045", "10.1016/j.physletb.2016.10.042", "10.1140/epjc/s10052-016-4203-9", "10.1007/jhep01(2015)068", "10.1007/jhep06(2016)093", "10.1016/j.physletb.2015.09.051", "10.1140/epjc/s10052-015-3534-2", "10.1007/jhep09(2014)087", "10.1016/j.physletb.2014.05.055", "10.1016/j.physletb.2014.02.033", "10.1140/epjc/s10052-017-5225-7", "10.1140/epjc/s10052-017-5442-0", "10.1016/s0140-6736(18)32335-3", "10.1016/j.physletb.2017.11.049", "10.1007/jhep06(2018)166", "10.1016/j.physletb.2016.05.002", "10.1140/epjc/s10052-016-4219-1", "10.1140/epjst/e2019-900087-0", "10.1007/jhep01(2016)166", "10.1007/jhep01(2018)097", "10.1016/j.physletb.2017.11.043", "10.1016/j.physletb.2018.04.036", "10.1140/epjc/s10052-018-5607-5", "10.1007/jhep12(2017)034", "10.1007/jhep11(2016)112", "10.1007/jhep06(2014)008", "10.1140/epjc/s10052-012-2261-1", "10.1016/j.physletb.2014.08.039", "10.1016/s0140-6736(16)31919-5", "10.1140/epjc/s10052-019-7058-z", "10.1016/j.physletb.2014.07.053", "10.1007/jhep01(2015)053", "10.1016/j.physletb.2016.07.042", "10.1007/jhep08(2014)103", "10.1007/jhep06(2015)100", "10.1140/epjc/s10052-015-3363-3", "10.1140/epjc/s10052-017-4915-5", "10.1140/epjc/s10052-014-3023-z", "10.1140/epjc/s10052-017-5315-6", "10.1140/epjc/s10052-016-4050-8", "10.3389/fpsyt.2017.00244", "10.1016/j.physletb.2014.10.002", "10.1007/jhep07(2015)162", "10.1007/jhep08(2014)174", "10.3897/zookeys.2.23", "10.1007/jhep07(2017)014", "10.1007/jhep04(2016)035", "10.1140/epjc/s10052-017-4984-5", "10.1007/jhep02(2016)156", "10.1016/j.physletb.2016.03.039", "10.1007/jhep07(2018)115", "10.3897/zookeys.34.268", "10.1007/jhep02(2016)122", "10.1016/j.physletb.2012.03.022", "10.1016/j.physletb.2018.09.019", "10.1016/j.physletb.2018.09.024", "10.1051/0004-6361/201629272", "10.1103/physrevc.97.024904", "10.1140/epjc/s10052-016-4521-y", "10.1140/epjc/s10052-016-4176-8", "10.1140/epjc/s10052-014-3134-6", "10.1140/epjc/s10052-016-4110-0", "10.1007/jhep07(2017)121", "10.1007/jhep07(2018)153", "10.1007/jhep03(2018)115", "10.1007/jhep04(2018)060", "10.11606/1807-0205/2020.60.06", "10.4126/frl01-0064015", "10.1007/jhep09(2017)020", "10.1016/j.physletb.2014.04.023", "10.1016/j.physletb.2015.02.048", "10.1007/jhep02(2018)032", "10.1016/j.physletb.2018.01.001", "10.1140/epjc/s10052-015-3852-4", "10.1007/jhep10(2014)087", "10.11646/zootaxa.4630.1.1", "10.5281/zenodo.3742118", "10.4126/frl01-0064022", "10.11646/zootaxa.4758.3.1", "10.11646/zootaxa.4772.3.1", "10.11646/zootaxa.4576.3.5", "10.4126/frl01-0064125", "10.1007/jhep12(2017)017", "10.4126/frl01-0064162", "10.4126/frl01-0064138", "10.1007/jhep06(2014)124", "10.1007/jhep06(2016)059", "10.1007/jhep06(2014)035", "10.1103/physrevd.90.052005", "10.1007/jhep11(2017)062", "10.3847/2041-8213/aa9aed", "10.1016/j.physletb.2016.06.080", "10.1007/jhep10(2017)073", "10.1007/jhep03(2018)167", "10.1016/j.physletb.2018.11.065", "10.1140/epjc/s10052-017-5081-5", "10.1140/epjc/s10052-015-3500-z", "10.1140/epjc/s10052-017-5445-x", "10.1016/j.physletb.2014.01.049", "10.1007/jhep03(2018)172", "10.1016/j.physletb.2015.03.048", "10.1016/j.physletb.2018.11.032", "10.1007/jhep05(2018)025", "10.1016/j.physletb.2016.08.052", "10.1016/j.physletb.2014.09.008", "10.1103/physrevlett.120.071802", "10.1016/j.physletb.2018.01.049", "10.1016/j.physletb.2016.06.017", "10.1016/j.physletb.2016.04.005", "10.1007/jhep06(2018)031", "10.1007/jhep01(2016)079", "10.1007/jhep10(2017)006", "10.1140/epjc/s10052-018-5740-1", "10.1016/j.physletb.2015.01.034", "10.1007/jhep10(2017)005", "10.1016/j.physletb.2018.04.007", "10.1007/jhep04(2015)164", "10.1140/epjc/s10052-018-5691-6", "10.1007/jhep05(2018)148", "10.1007/jhep03(2018)003", "10.1140/epjc/s10052-014-3076-z", "10.1016/j.physletb.2016.02.015", "10.1103/physrevd.97.072003", "10.1016/j.physletb.2017.11.054", "10.1140/epjc/s10052-011-1849-1", "10.1007/jhep09(2016)175", "10.1016/j.physletb.2017.12.011", "10.1007/jhep04(2014)103", "10.1007/jhep12(2014)017", "10.1016/j.physletb.2014.09.048", "10.1140/epjc/s10052-019-7202-9", "10.1007/jhep04(2014)191", "10.1007/jhep07(2013)163", "10.1140/epjc/s10052-014-3130-x", "10.1007/jhep04(2016)023", "10.1016/j.physletb.2015.07.023", "10.1140/epjc/s10052-018-6500-y", "10.1016/j.physletb.2015.04.045", "10.1007/jhep09(2017)053", "10.1007/jhep10(2017)180", "10.1140/epjc/s10052-017-4912-8", "10.1007/jhep10(2016)129", "10.3920/978-90-8686-816-2", "10.1007/jhep01(2017)099", "10.1007/jhep01(2018)045", "10.1007/jhep04(2015)025", "10.1016/j.physletb.2018.02.050", "10.1103/physrevlett.116.032301", "10.1007/jhep08(2017)029", "10.1007/jhep08(2017)073", "10.1016/j.physletb.2014.11.059", "10.1007/jhep01(2013)131", "10.1007/jhep06(2014)112", "10.1016/j.physletb.2017.09.066", "10.1140/epjc/s10052-014-2883-6", "10.1094/mpmi", "10.1007/jhep11(2017)195", "10.1007/jhep06(2018)108", "10.1007/jhep09(2018)139", "10.1016/j.physletb.2016.12.005", "10.1140/epjc/s10052-017-5349-9", "10.1016/j.physletb.2012.08.021", "10.1016/j.physletb.2014.10.032", "10.1007/jhep09(2017)088", "10.1140/epjc/s10052-015-3425-6", "10.1007/jhep01(2018)054", "10.1103/physrevlett.110.182302", "10.1140/epjc/s10052-017-5317-4", "10.1007/jhep01(2017)117", "10.1016/j.physletb.2017.12.006", "10.1016/j.physletb.2018.02.004", "10.1016/j.physletb.2018.02.025", "10.1016/j.physletb.2016.02.055", "10.1016/j.physletb.2016.04.061", "10.1140/epjc/s10052-015-3372-2", "10.1016/j.physletb.2015.02.051", "10.1016/j.physletb.2014.11.049", "10.1007/jhep09(2016)001", "10.1016/j.physletb.2016.03.017", "10.1007/jhep06(2016)067", "10.1140/epjc/s10052-015-3543-1", "10.1140/epjc/s10052-017-4911-9", "10.1007/jhep07(2013)122", "10.1140/epjc/s10052-019-6855-8", "10.1140/epjc/s10052-019-6540-y", "10.1007/jhep06(2014)009", "10.1007/jhep05(2019)043", "10.1016/j.physletb.2016.01.028", "10.1103/physrevlett.120.231801", "10.1140/epjc/s10052-016-4325-0", "10.1007/jhep07(2018)127", "10.1016/j.physletb.2016.05.003", "10.1140/epjc/s10052-017-4644-9", "10.1140/epjc/s10052-017-4700-5", "10.1007/jhep06(2018)107", "10.1016/j.physletb.2018.01.042", "10.1140/epjc/s10052-018-5624-4", "10.1007/jhep08(2016)139", "10.1007/jhep05(2018)195", "10.1103/physrevd.97.052012", "10.1140/epjc/s10052-016-3978-z", "10.1007/jhep05(2019)088", "10.1140/epjc/s10052-017-5079-z", "10.1140/epjc/s10052-016-4205-7", "10.1007/jhep01(2016)006", "10.1140/epjc/s10052-016-4286-3", "10.1016/j.physletb.2017.04.071", "10.1103/physrevd.97.012007", "10.1016/j.physletb.2018.01.077", "10.1007/jhep04(2018)073", "10.1016/j.physletb.2015.09.057", "10.1007/jhep07(2018)032", "10.1140/epjc/s10052-015-3435-4", "10.1007/jhep11(2017)010", "10.1093/isd/ixaa002", "10.1016/j.physletb.2018.03.035", "10.1007/jhep10(2018)031", "10.1016/s0140-6736(18)31891-9", "10.1140/epjc/s10052-018-6148-7", "10.1016/j.physletb.2018.03.057", "10.1140/epjc/s10052-019-6632-8", "10.1016/j.physletb.2015.11.071", "10.1140/epjc/s10052-018-5605-7", "10.1016/j.physletb.2018.10.073", "10.1140/epjc/s10052-019-7387-y", "10.1007/jhep06(2019)143", "10.1140/epjc/s10052-018-5567-9", "10.1140/epjc/s10052-019-6909-y", "10.1002/(sici)1521-3978(199901)47:1/3", "10.5281/zenodo.3758372", "10.4126/frl01-0064041", "10.1140/epjc/s10052-014-3129-3", "10.11646/zootaxa.4685.1.1", "10.11646/zootaxa.4756.1.1", "10.6101/azq/0001", "10.14582/duzg", "10.1016/j.physletb.2012.11.039", "10.4126/frl01-0064191", "10.1016/j.physletb.2013.12.029", "10.1007/jhep10(2013)189", "10.1051/0004-6361/201629512", "10.1007/jhep01(2013)116", "10.2312/gfz.lis.2016.001", "10.1016/j.physletb.2013.01.040", "10.1103/physrevd.90.112005", "10.1140/epjc/s10052-015-3726-9", "10.1007/s11682-013-9269-5", "10.1007/jhep02(2017)071", "10.1016/j.physletb.2016.09.040", "10.1007/jhep02(2017)117", "10.1007/jhep08(2016)009", "10.1103/physrevd.97.052010", "10.1007/jhep09(2017)032", "10.1103/physrevd.97.032005", "10.1140/epjc/s10052-017-4965-8", "10.1016/j.physletb.2016.08.042", "10.1016/j.physletb.2017.10.039", "10.1007/jhep03(2016)127", "10.1140/epjc/s10052-014-3034-9", "10.1007/jhep03(2017)113", "10.1007/jhep11(2018)040", "10.1140/epjc/s10052-018-6457-x", "10.1140/epjc/s10052-016-4041-9", "10.1140/epjc/s10052-018-6219-9", "10.1140/epjc/s10052-016-4149-y", "10.1007/jhep10(2017)072", "10.1140/epjc/s10052-016-4083-z", "10.1140/epjc/s10052-016-3956-5", "10.1007/jhep04(2016)073", "10.1007/jhep06(2016)177", "10.1016/j.physletb.2018.03.084", "10.1007/jhep10(2015)128", "10.1007/jhep03(2018)166", "10.1140/epjc/s10052-015-3491-9", "10.1016/j.physletb.2015.04.060", "10.1103/physrevd.92.112001", "10.1140/epjc/s10052-015-3367-z", "10.1007/jhep10(2017)019", "10.1007/jhep10(2017)131", "10.1016/j.physletb.2018.08.057", "10.1007/jhep01(2016)096", "10.1016/j.physletb.2017.09.053", "10.1007/jhep07(2017)013", "10.1007/jhep01(2019)030", "10.1007/jhep11(2016)110", "10.1016/j.physletb.2012.02.044", "10.1140/epjc/s10052-017-5192-z", "10.1007/jhep03(2015)022", "10.1140/epjc/s10052-019-6847-8", "10.1093/database/baz085", "10.1140/epjc/s10052-015-3451-4", "10.1007/jhep11(2017)029", "10.1140/epjc/s10052-015-3517-3", "10.1007/jhep07(2017)001", "10.1007/jhep09(2016)074", "10.1103/physrevd.97.072016", "10.1007/jhep05(2018)006", "10.1103/physrevlett.120.081801", "10.1103/physrevlett.120.161802", "10.1103/physrevlett.120.202005", "10.5281/zenodo.1299123", "10.5281/zenodo.3777294" ], - "pmid" : [], - "pmc" : [] -} \ No newline at end of file diff --git a/src/test/java/eu/dnetlib/dhp/schema/common/ModelSupportTest.java b/src/test/java/eu/dnetlib/dhp/schema/common/ModelSupportTest.java deleted file mode 100644 index f26fed0..0000000 --- a/src/test/java/eu/dnetlib/dhp/schema/common/ModelSupportTest.java +++ /dev/null @@ -1,53 +0,0 @@ - -package eu.dnetlib.dhp.schema.common; - -import static org.junit.jupiter.api.Assertions.*; - -import java.io.IOException; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -import eu.dnetlib.dhp.schema.oaf.Entity; -import eu.dnetlib.dhp.schema.oaf.Relation; -import eu.dnetlib.dhp.schema.oaf.Result; - -public class ModelSupportTest { - - @Nested - class IsSubClass { - - @Test - void shouldReturnFalseWhenSubClassDoesNotExtendSuperClass() { - // when - Boolean result = ModelSupport.isSubClass(Relation.class, Entity.class); - - // then - assertFalse(result); - } - - @Test - void shouldReturnTrueWhenSubClassExtendsSuperClass() { - // when - Boolean result = ModelSupport.isSubClass(Result.class, Entity.class); - - // then - assertTrue(result); - } - } - - - @Nested - class InverseRelation { - - @Test - void findRelations() throws IOException { - assertNotNull(ModelSupport.findRelation("isMetadataFor")); - assertNotNull(ModelSupport.findRelation("ismetadatafor")); - assertNotNull(ModelSupport.findRelation("ISMETADATAFOR")); - assertNotNull(ModelSupport.findRelation("isRelatedTo")); - - - } - } -} diff --git a/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/BlackListProviderTest.java b/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/BlackListProviderTest.java deleted file mode 100644 index 61d06a6..0000000 --- a/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/BlackListProviderTest.java +++ /dev/null @@ -1,21 +0,0 @@ - -package eu.dnetlib.dhp.schema.oaf.utils; - -import java.util.Set; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -class BlackListProviderTest { - - @Test - void blackListTest() { - - Assertions.assertNotNull(PidBlacklistProvider.getBlacklist()); - Assertions.assertNotNull(PidBlacklistProvider.getBlacklist().get("doi")); - Assertions.assertTrue(PidBlacklistProvider.getBlacklist().get("doi").size() > 0); - final Set xxx = PidBlacklistProvider.getBlacklist("xxx"); - Assertions.assertNotNull(xxx); - Assertions.assertEquals(0, xxx.size()); - } -} diff --git a/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/IdentifierFactoryTest.java b/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/IdentifierFactoryTest.java deleted file mode 100644 index e21f57e..0000000 --- a/src/test/java/eu/dnetlib/dhp/schema/oaf/utils/IdentifierFactoryTest.java +++ /dev/null @@ -1,87 +0,0 @@ - -package eu.dnetlib.dhp.schema.oaf.utils; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -import java.io.IOException; - -import org.apache.commons.io.IOUtils; -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; - -import eu.dnetlib.dhp.schema.oaf.Publication; - -class IdentifierFactoryTest { - - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - - @Test - void testCreateIdentifierForPublication() throws IOException { - - verifyIdentifier( - "publication_doi1.json", "50|doi_________::79dbc7a2a56dc1532659f9038843256e", true); - - verifyIdentifier( - "publication_doi2.json", "50|doi_________::79dbc7a2a56dc1532659f9038843256e", true); - - verifyIdentifier( - "publication_doi3.json", "50|pmc_________::94e4cb08c93f8733b48e2445d04002ac", true); - - verifyIdentifier( - "publication_doi4.json", "50|od______2852::38861c44e6052a8d49f59a4c39ba5e66", true); - - verifyIdentifier( - "publication_doi5.json", "50|doi_________::3bef95c0ca26dd55451fc8839ea69d27", true); - - verifyIdentifier( - "publication_pmc1.json", "50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1f", true); - - verifyIdentifier( - "publication_pmc2.json", "50|pmc_________::94e4cb08c93f8733b48e2445d04002ac", true); - - verifyIdentifier( - "publication_openapc.json", "50|doi_________::79dbc7a2a56dc1532659f9038843256e", true); - - final String defaultID = "50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1f"; - verifyIdentifier("publication_3.json", defaultID, true); - verifyIdentifier("publication_4.json", defaultID, true); - verifyIdentifier("publication_5.json", defaultID, true); - - } - - @Test - void testCreateIdentifierForPublicationNoHash() throws IOException { - - verifyIdentifier("publication_doi1.json", "50|doi_________::10.1016/j.cmet.2010.03.013", false); - verifyIdentifier("publication_doi2.json", "50|doi_________::10.1016/j.cmet.2010.03.013", false); - verifyIdentifier("publication_pmc1.json", "50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1f", false); - verifyIdentifier( - "publication_urn1.json", "50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1f", false); - - final String defaultID = "50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1f"; - verifyIdentifier("publication_3.json", defaultID, false); - verifyIdentifier("publication_4.json", defaultID, false); - verifyIdentifier("publication_5.json", defaultID, false); - } - - @Test - void testCreateIdentifierForROHub() throws IOException { - verifyIdentifier( - "orp-rohub.json", "50|w3id________::afc7592914ae190a50570db90f55f9c2", true); - } - - protected void verifyIdentifier(String filename, String expectedID, boolean md5) throws IOException { - final String json = IOUtils.toString(getClass().getResourceAsStream(filename)); - final Publication pub = OBJECT_MAPPER.readValue(json, Publication.class); - - String id = IdentifierFactory.createIdentifier(pub, md5); - System.out.println(id); - assertNotNull(id); - assertEquals(expectedID, id); - } - -} diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/orp-rohub.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/orp-rohub.json deleted file mode 100644 index c0f13ff..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/orp-rohub.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "collectedfrom": [ - { - "key": "10|fairsharing_::1b69ebedb522700034547abc5652ffac", - "value": "ROHub", - "dataInfo": null - } - ], - "dataInfo": { - "invisible": false, - "inferred": false, - "deletedbyinference": false, - "trust": "0.9", - "inferenceprovenance": null, - "provenanceaction": { - "classid": "sysimport:crosswalk:repository", - "classname": "sysimport:crosswalk:repository", - "schemeid": "dnet:provenanceActions" - } - }, - "lastupdatetimestamp": 1663926081966, - "id": "50|w3id________::afc7592914ae190a50570db90f55f9c2", - "originalId": [ - "50|fsh_____4119::afc7592914ae190a50570db90f55f9c2", - "https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca" - ], - "pid": [ - { - "value": "https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca", - "qualifier": { - "classid": "w3id", - "classname": "w3id.org", - "schemeid": "dnet:pid_types" - } - } - ], - "dateofcollection": "2019-03-27T15:15:22.22Z", - "dateoftransformation": "2019-04-17T16:04:20.586Z", - "extraInfo": [], - "oaiprovenance": null, - "processingchargeamount": null, - "processingchargecurrency": null, - "measures": null, - "author": [ - { - "fullname": "CNR-ISMAR", - "name": "", - "surname": "", - "rank": 1, - "pid": [] - } - ], - "resulttype": "other", - "language": { - "classid": "UNKNOWN", - "classname": "Unknown", - "schemeid": "dnet:languages" - }, - "country": [], - "subject": [ - { - "value": "Ecology", - "qualifier": { - "classid": "", - "classname": "", - "schemeid": "" - }, - "dataInfo": { - "inferred": false, - "trust": "0.9", - "inferenceprovenance": null, - "provenanceaction": { - "classid": "sysimport:crosswalk:repository", - "classname": "sysimport:crosswalk:repository", - "schemeid": "dnet:provenanceActions" - } - } - }, - { - "value": "EOSC::RO-crate", - "qualifier": { - "classid": "", - "classname": "", - "schemeid": "" - }, - "dataInfo": { - "inferred": false, - "trust": "0.9", - "inferenceprovenance": null, - "provenanceaction": { - "classid": "sysimport:crosswalk:repository", - "classname": "sysimport:crosswalk:repository", - "schemeid": "dnet:provenanceActions" - } - } - } - ], - "title": [ - { - "value": "Using biological effects tools to define Good Environmental Status under the European Union Marine Strategy Framework Directive", - "qualifier": { - "classid": "main title", - "classname": "main title", - "schemeid": "dnet:dataCite_title" - } - } - ], - "relevantdate": [ - { - "value": "2018-06-20T11:21:46Z", - "qualifier": { - "classid": "UNKNOWN", - "classname": "UNKNOWN", - "schemeid": "dnet:dataCite_date" - } - } - ], - "description": [ - "The use of biological effects tools offer enormous potential to meet the challenges outlined by the European Union Marine Strategy Framework Directive (MSFD) whereby Member States are required to develop a robust set of tools for defining 11 qualitative descriptors of Good Environmental Status (GES), such as demonstrating that \"Concentrations of contaminants are at levels not giving rise to pollution effects\" (GES Descriptor 8). This paper discusses the combined approach of monitoring chemical contaminant levels, along side biological effect measurements relating to the effect of pollutants, for undertaking assessments of GES across European marine regions. We outline the minimum standards that biological effects tools should meet if they are to be used for defining GES in relation to Descriptor 8 and describe the current international initiatives underway to develop assessment criteria for these biological effects techniques. Crown Copyright (C) 2010 Published by Elsevier Ltd. All rights reserved." - ], - "dateofacceptance": null, - "publisher": { - "name": "Poznań Supercomputing and Networking Center" - }, - "embargoenddate": null, - "source": [], - "fulltext": [], - "format": [], - "contributor": [ - "Generation Service" - ], - "resourcetype": { - "classid": "RO-crate", - "classname": "RO-crate", - "schemeid": "dnet:dataCite_resource", - "schemename": "dnet:dataCite_resource" - }, - "coverage": [], - "bestaccessright": { - "classid": "OPEN", - "classname": "Open Access", - "schemeid": "dnet:access_modes", - "schemename": "dnet:access_modes" - }, - "context": [], - "externalReference": [], - "instance": [ - { - "license": null, - "accessright": { - "classid": "OPEN", - "classname": "Open Access", - "schemeid": "dnet:access_modes", - "openAccessRoute": null - }, - "instancetype": { - "classid": "other research product", - "classname": "other research product", - "schemeid": "dnet:publication_resource" - }, - "hostedby": { - "key": "10|fairsharing_::1b69ebedb522700034547abc5652ffac", - "value": "ROHub" - }, - "url": null, - "distributionlocation": null, - "collectedfrom": { - "key": "10|fairsharing_::1b69ebedb522700034547abc5652ffac", - "value": "ROHub" - }, - "pid": [ - { - "value": "https://w3id.org/ro-id/0ab171a7-45c5-4194-82d4-850955504bca", - "qualifier": { - "classid": "w3id", - "classname": "w3id.org", - "schemeid": "dnet:pid_types" - } - } - ], - "alternateIdentifier": [], - "dateofacceptance": null, - "processingchargeamount": null, - "processingchargecurrency": null, - "refereed": { - "classid": "UNKNOWN", - "classname": "Unknown", - "schemeid": "dnet:review_levels" - }, - "measures": null - } - ], - "eoscifguidelines": null, - "contactperson": [], - "contactgroup": [], - "tool": [] -} diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_3.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_3.json deleted file mode 100644 index 6d33568..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_3.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1f","pid":[{"qualifier":{"classid":"scp-number"},"value":"79953761260"}]} \ No newline at end of file diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_4.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_4.json deleted file mode 100644 index 6617fe1..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_4.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1f","pid":[]} \ No newline at end of file diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_5.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_5.json deleted file mode 100644 index 700a100..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_5.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1f"} \ No newline at end of file diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi1.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi1.json deleted file mode 100644 index 83bc0cd..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi1.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": "50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1f", - "instance": [ - { - "collectedfrom": { - "key": "10|openaire____::081b82f96300b6a6e3d282bad31cb6e2", - "value": "Crossref" - }, - "pid": [ - { - "qualifier": {"classid": "doi"}, - "value": "10.1016/j.cmet.2010.03.013" - } - ] - }, - { - "pid": [ - { - "qualifier": {"classid": "urn"}, - "value": "urn:nbn:nl:ui:29-f3ed5f9e-edf6-457e-8848-61b58a4075e2" - }, - { - "qualifier": {"classid": "scp-number"}, - "value": "79953761260" - }, - { - "qualifier": {"classid": "pmc"}, - "value": "21459329" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi2.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi2.json deleted file mode 100644 index 5c73fc3..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi2.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": "50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1f", - "instance": [ - { - "collectedfrom": { - "key": "10|openaire____::081b82f96300b6a6e3d282bad31cb6e2", - "value": "Crossref" - }, - "pid": [ - { - "qualifier": {"classid": "doi"}, - "value": "10.1016/j.cmet.2010.03.013" - } - ] - }, - { - "collectedfrom": { - "key": "10|opendoar____::8b6dd7db9af49e67306feb59a8bdc52c", - "value": "Europe PubMed Central" - }, - "pid": [ - { - "qualifier": {"classid": "urn"}, - "value": "urn:nbn:nl:ui:29-f3ed5f9e-edf6-457e-8848-61b58a4075e2" - }, - { - "qualifier": {"classid": "scp-number"}, - "value": "79953761260" - }, - { - "qualifier": {"classid": "pmc"}, - "value": "21459329" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi3.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi3.json deleted file mode 100644 index b1ea01f..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi3.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": "50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1f", - "instance": [ - { - "collectedfrom": { - "key": "10|opendoar____::358aee4cc897452c00244351e4d91f69", - "value": "Zenodo" - }, - "pid": [ - { - "qualifier": {"classid": "doi"}, - "value": "10.1016/j.cmet.2010.03.013" - } - ] - }, - { - "collectedfrom": { - "key": "10|opendoar____::8b6dd7db9af49e67306feb59a8bdc52c", - "value": "Europe PubMed Central" - }, - "pid": [ - { - "qualifier": {"classid": "urn"}, - "value": "urn:nbn:nl:ui:29-f3ed5f9e-edf6-457e-8848-61b58a4075e2" - }, - { - "qualifier": {"classid": "scp-number"}, - "value": "79953761260" - }, - { - "qualifier": {"classid": "pmc"}, - "value": "21459329" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi4.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi4.json deleted file mode 100644 index 764c510..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi4.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": "50|od______2852::38861c44e6052a8d49f59a4c39ba5e66", - "instance": [ - { - "collectedfrom": { - "key": "10|opendoar____::358aee4cc897452c00244351e4d91f69", - "value": "Zenodo" - }, - "pid": [ - { - "qualifier": {"classid": "doi"}, - "value": "10.1016/j.cmet.2010.03.013" - }, - { - "qualifier": {"classid": "handle"}, - "value": "11012/83840" - } - ] - }, - { - "collectedfrom": { - "key": "10|opendoar____::2852", - "value": "Digital library of Brno University of Technology" - }, - "pid": [ - { - "qualifier": {"classid": "pmc"}, - "value": "21459329" - }, - { - "qualifier": {"classid": "handle"}, - "value": "11012/83840" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi5.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi5.json deleted file mode 100644 index 816f0dc..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_doi5.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": "50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1f", - "instance": [ - { - "collectedfrom": { - "key": "10|opendoar____::358aee4cc897452c00244351e4d91f69", - "value": "Zenodo" - }, - "pid": [ - { - "qualifier": {"classid": "doi"}, - "value": "10.5281/zenodo.5121485" - } - ] - }, - { - "collectedfrom": { - "key": "10|opendoar____::8b6dd7db9af49e67306feb59a8bdc52c", - "value": "Europe PubMed Central" - }, - "pid": [ - { - "qualifier": {"classid": "urn"}, - "value": "urn:nbn:nl:ui:29-f3ed5f9e-edf6-457e-8848-61b58a4075e2" - }, - { - "qualifier": {"classid": "scp-number"}, - "value": "79953761260" - }, - { - "qualifier": {"classid": "pmc"}, - "value": "21459329" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_openapc.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_openapc.json deleted file mode 100644 index f06ac18..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_openapc.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": "50|openapc_____::000023f9cb6e3a247c764daec4273cbc", - "resuttype": { - "classid": "publication" - }, - "instance": [ - { - "collectedfrom": { - "key": "10|apc_________::e2b1600b229fc30663c8a1f662debddf", - "value": "OpenAPC Global Initiative" - }, - "pid": [ - { - "qualifier": {"classid": "doi"}, - "value": "10.1016/j.cmet.2010.03.013" - }, - { - "qualifier": {"classid": "pmc"}, - "value": "21459329" - }, - { - "qualifier": {"classid": "pmid"}, - "value": "25811027" - } - ], - "url":["https://doi.org/10.1155/2015/439379"] - } - ] -} - - diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_pmc1.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_pmc1.json deleted file mode 100644 index 537719f..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_pmc1.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "id": "50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1f", - "pid": [ - { - "qualifier": {"classid": "urn"}, - "value": "urn:nbn:nl:ui:29-f3ed5f9e-edf6-457e-8848-61b58a4075e2" - }, - { - "qualifier": {"classid": "scp-number"}, - "value": "79953761260" - }, - { - "qualifier": {"classid": "pmc"}, - "value": "21459329" - } - ] -} \ No newline at end of file diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_pmc2.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_pmc2.json deleted file mode 100644 index e7d49ee..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_pmc2.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id":"50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1f", - "instance": [ - { - "collectedfrom": { - "key": "10|opendoar____::8b6dd7db9af49e67306feb59a8bdc52c", - "value": "Europe PubMed Central" - }, - "pid": [ - { - "qualifier": {"classid": "doi"}, - "value": "10.1016/j.cmet.2010.03.013" - }, - { - "qualifier":{"classid":"pmc"}, - "value":"21459329" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_urn1.json b/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_urn1.json deleted file mode 100644 index 5323ac8..0000000 --- a/src/test/resources/eu/dnetlib/dhp/schema/oaf/utils/publication_urn1.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": "50|DansKnawCris::0829b5191605bdbea36d6502b8c1ce1f", - "pid": [ - { - "qualifier": { - "classid": "urn" - }, - "value": "urn:nbn:nl:ui:29-f3ed5f9e-edf6-457e-8848-61b58a4075e2" - }, - { - "qualifier": { - "classid": "scp-number" - }, - "value": "79953761260" - }, - { - "qualifier": { - "classid": "pmcid" - }, - "value": "21459329" - } - ] -} \ No newline at end of file -- 2.17.1 From 112b5c29ec1d23fda1d2d3023f72dbfc3de155d6 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 1 Feb 2023 17:04:58 +0100 Subject: [PATCH 03/15] WIP: pruning out non necessary fields from the internal model --- .../java/eu/dnetlib/dhp/schema/oaf/Relation.java | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java index 09b16be..9ff7c19 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java @@ -51,17 +51,7 @@ public class Relation extends Oaf implements Serializable { private String validationDate; private List provenance; - - private DataInfo dataInfo; - - public DataInfo getDataInfo() { - return dataInfo; - } - - public void setDataInfo(DataInfo dataInfo) { - this.dataInfo = dataInfo; - } - + /** * List of relation specific properties. Values include 'similarityLevel', indicating the similarity score between a * pair of publications. -- 2.17.1 From 57d1b88746a651e6ece3b1b4037e43fabd7ec474 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 2 Feb 2023 17:01:22 +0100 Subject: [PATCH 04/15] WIP: pruning out non necessary fields from the internal model --- .../java/eu/dnetlib/dhp/schema/oaf/Measure.java | 12 ++++-------- .../eu/dnetlib/dhp/schema/oaf/MeasureUnit.java | 14 ++++++++++++++ .../java/eu/dnetlib/dhp/schema/oaf/Relation.java | 2 +- .../eu/dnetlib/dhp/schema/oaf/MeasureTest.java | 4 ++-- 4 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 src/main/java/eu/dnetlib/dhp/schema/oaf/MeasureUnit.java diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Measure.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Measure.java index 78a4c68..6063a8e 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Measure.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Measure.java @@ -17,10 +17,10 @@ public class Measure implements Serializable { private String id; /** - * List of units associated with this measure. KeyValue provides a pair to store the label (key) and the value, plus + * List of units associated with this measure. MeasureUnit provides a pair to store the label (key) and the value, plus * common provenance information. */ - private List unit; + private List unit; public String getId() { return id; @@ -30,18 +30,14 @@ public class Measure implements Serializable { this.id = id; } - public List getUnit() { + public List getUnit() { return unit; } - public void setUnit(List unit) { + public void setUnit(List unit) { this.unit = unit; } - public void mergeFrom(Measure m) { - // TODO - } - @Override public boolean equals(Object o) { if (this == o) diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/MeasureUnit.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/MeasureUnit.java new file mode 100644 index 0000000..7a5fcb2 --- /dev/null +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/MeasureUnit.java @@ -0,0 +1,14 @@ +package eu.dnetlib.dhp.schema.oaf; + +public class MeasureUnit extends KeyValue { + + private DataInfo dataInfo; + + public DataInfo getDataInfo() { + return dataInfo; + } + + public void setDataInfo(DataInfo dataInfo) { + this.dataInfo = dataInfo; + } +} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java index 9ff7c19..b03bf6f 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java @@ -51,7 +51,7 @@ public class Relation extends Oaf implements Serializable { private String validationDate; private List provenance; - + /** * List of relation specific properties. Values include 'similarityLevel', indicating the similarity score between a * pair of publications. diff --git a/src/test/java/eu/dnetlib/dhp/schema/oaf/MeasureTest.java b/src/test/java/eu/dnetlib/dhp/schema/oaf/MeasureTest.java index c6f8aa8..cc54ea1 100644 --- a/src/test/java/eu/dnetlib/dhp/schema/oaf/MeasureTest.java +++ b/src/test/java/eu/dnetlib/dhp/schema/oaf/MeasureTest.java @@ -47,8 +47,8 @@ class MeasureTest { Assertions.assertNotNull(mm); } - private KeyValue unit(String key, String value) { - KeyValue unit = new KeyValue(); + private MeasureUnit unit(String key, String value) { + MeasureUnit unit = new MeasureUnit(); unit.setKey(key); unit.setValue(value); return unit; -- 2.17.1 From 73d50d350ec1da8837bb0346c587dc0088048aef Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 8 Feb 2023 16:01:55 +0100 Subject: [PATCH 05/15] removed DataInfo from Journal type --- .../java/eu/dnetlib/dhp/schema/oaf/Journal.java | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Journal.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Journal.java index 7a375e2..6897450 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Journal.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Journal.java @@ -28,8 +28,6 @@ public class Journal implements Serializable { private String conferencedate; - private DataInfo dataInfo; - public String getName() { return name; } @@ -118,14 +116,6 @@ public class Journal implements Serializable { this.conferencedate = conferencedate; } - public DataInfo getDataInfo() { - return dataInfo; - } - - public void setDataInfo(DataInfo dataInfo) { - this.dataInfo = dataInfo; - } - @Override public boolean equals(Object o) { if (this == o) @@ -143,8 +133,7 @@ public class Journal implements Serializable { && Objects.equals(vol, journal.vol) && Objects.equals(edition, journal.edition) && Objects.equals(conferenceplace, journal.conferenceplace) - && Objects.equals(conferencedate, journal.conferencedate) - && Objects.equals(dataInfo, journal.dataInfo); + && Objects.equals(conferencedate, journal.conferencedate); } @Override @@ -161,7 +150,6 @@ public class Journal implements Serializable { vol, edition, conferenceplace, - conferencedate, - dataInfo); + conferencedate); } } -- 2.17.1 From 29c61bb283b3eac1af4d6fd96dc834871f861479 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 8 Feb 2023 16:04:48 +0100 Subject: [PATCH 06/15] avoid NPEs --- src/main/java/eu/dnetlib/dhp/schema/oaf/StructuredProperty.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/StructuredProperty.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/StructuredProperty.java index 62669b0..922f386 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/StructuredProperty.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/StructuredProperty.java @@ -33,7 +33,7 @@ public class StructuredProperty implements Serializable { public String toComparableString() { return Stream .of( - getQualifier().toComparableString(), + Optional.ofNullable(getQualifier()).map(q -> q.toComparableString()).orElse(""), Optional.ofNullable(getValue()).map(String::toLowerCase).orElse("")) .filter(StringUtils::isNotBlank) .collect(Collectors.joining("||")); -- 2.17.1 From 22b4d99f5626dbf9c77d9fb28a6558cd96596aec Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Wed, 8 Feb 2023 16:19:07 +0100 Subject: [PATCH 07/15] Added constructor to Publisher and License and other constants --- .../java/eu/dnetlib/dhp/schema/common/ModelConstants.java | 7 +++++++ src/main/java/eu/dnetlib/dhp/schema/oaf/License.java | 8 ++++++++ src/main/java/eu/dnetlib/dhp/schema/oaf/Publisher.java | 7 +++++++ 3 files changed, 22 insertions(+) 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 b023a17..d40c514 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/common/ModelConstants.java +++ b/src/main/java/eu/dnetlib/dhp/schema/common/ModelConstants.java @@ -16,6 +16,8 @@ public class ModelConstants { public static final String ORCID_DS = ORCID.toUpperCase(); public static final String CROSSREF_ID = "10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"; + + public static final String CROSSREF_NAME = "Crossref"; public static final String DATACITE_ID = "10|openaire____::9e3be59865b2c1c335d32dae2fe7b254"; public static final String ZENODO_OD_ID = "10|opendoar____::358aee4cc897452c00244351e4d91f69"; @@ -217,6 +219,11 @@ public class ModelConstants { public static final Qualifier MAIN_TITLE_QUALIFIER = qualifier( "main title", "main title", DNET_DATACITE_TITLE); + public static final Qualifier ALTERNATIVE_TITLE_QUALIFIER = qualifier( + "alternative title", "alternative title", DNET_DATACITE_TITLE); + + private static final Qualifier SUBTITLE_QUALIFIER = qualifier("subtitle", "subtitle", DNET_DATACITE_TITLE); + public static final AccessRight OPEN_ACCESS_RIGHT() { final AccessRight result = new AccessRight(); diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/License.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/License.java index 0fcd152..70adfd4 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/License.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/License.java @@ -4,6 +4,14 @@ import java.io.Serializable; public class License implements Serializable { + + public License() { + } + + public License(String url) { + this.url = url; + } + private String url; public String getUrl() { diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Publisher.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Publisher.java index de3d6fc..c3b6520 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Publisher.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Publisher.java @@ -6,6 +6,13 @@ public class Publisher implements Serializable { private String name; + public Publisher() { + } + + public Publisher(String name) { + this.name = name; + } + public String getName() { return name; } -- 2.17.1 From e42cc8787890c9489e6e0d7b2e534dc956ef0642 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Wed, 8 Feb 2023 16:22:58 +0100 Subject: [PATCH 08/15] updated visibility of method --- src/main/java/eu/dnetlib/dhp/schema/common/ModelConstants.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 d40c514..6c7ab72 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/common/ModelConstants.java +++ b/src/main/java/eu/dnetlib/dhp/schema/common/ModelConstants.java @@ -222,7 +222,7 @@ public class ModelConstants { public static final Qualifier ALTERNATIVE_TITLE_QUALIFIER = qualifier( "alternative title", "alternative title", DNET_DATACITE_TITLE); - private static final Qualifier SUBTITLE_QUALIFIER = qualifier("subtitle", "subtitle", DNET_DATACITE_TITLE); + public static final Qualifier SUBTITLE_QUALIFIER = qualifier("subtitle", "subtitle", DNET_DATACITE_TITLE); public static final AccessRight OPEN_ACCESS_RIGHT() { -- 2.17.1 From 64de71ab5038bbe5c3306be643961f6cf8a352a6 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 9 Feb 2023 09:16:08 +0100 Subject: [PATCH 09/15] ModelConstants moved in dhp-common --- .../dhp/schema/common/ModelConstants.java | 253 ------------------ .../eu/dnetlib/dhp/schema/oaf/Dataset.java | 6 +- .../dhp/schema/oaf/OtherResearchProduct.java | 6 +- .../dnetlib/dhp/schema/oaf/Publication.java | 6 +- .../eu/dnetlib/dhp/schema/oaf/Software.java | 6 +- .../eu/dnetlib/dhp/schema/sx/OafUtils.scala | 59 ---- .../dhp/schema/action/AtomicActionTest.java | 7 +- .../dnetlib/dhp/schema/oaf/MeasureTest.java | 1 - 8 files changed, 15 insertions(+), 329 deletions(-) delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/common/ModelConstants.java delete mode 100644 src/main/java/eu/dnetlib/dhp/schema/sx/OafUtils.scala diff --git a/src/main/java/eu/dnetlib/dhp/schema/common/ModelConstants.java b/src/main/java/eu/dnetlib/dhp/schema/common/ModelConstants.java deleted file mode 100644 index d40c514..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/common/ModelConstants.java +++ /dev/null @@ -1,253 +0,0 @@ - -package eu.dnetlib.dhp.schema.common; - -import eu.dnetlib.dhp.schema.oaf.AccessRight; -import eu.dnetlib.dhp.schema.oaf.DataInfo; -import eu.dnetlib.dhp.schema.oaf.KeyValue; -import eu.dnetlib.dhp.schema.oaf.Qualifier; - -public class ModelConstants { - - private ModelConstants() {} - - public static final String ORCID = "orcid"; - public static final String ORCID_PENDING = "orcid_pending"; - public static final String ORCID_CLASSNAME = "Open Researcher and Contributor ID"; - public static final String ORCID_DS = ORCID.toUpperCase(); - - public static final String CROSSREF_ID = "10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"; - - public static final String CROSSREF_NAME = "Crossref"; - public static final String DATACITE_ID = "10|openaire____::9e3be59865b2c1c335d32dae2fe7b254"; - - public static final String ZENODO_OD_ID = "10|opendoar____::358aee4cc897452c00244351e4d91f69"; - public static final String ZENODO_R3_ID = "10|re3data_____::7b0ad08687b2c960d5aeef06f811d5e6"; - - public static final String EUROPE_PUBMED_CENTRAL_ID = "10|opendoar____::8b6dd7db9af49e67306feb59a8bdc52c"; - public static final String PUBMED_CENTRAL_ID = "10|opendoar____::eda80a3d5b344bc40f3bc04f65b7a357"; - public static final String ARXIV_ID = "10|opendoar____::6f4922f45568161a8cdf4ad2299f6d23"; - public static final String ROHUB_ID = "10|fairsharing_::1b69ebedb522700034547abc5652ffac"; - - 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"; - public static final String ACCESS_RIGHT_CLOSED = "CLOSED"; - - public static final String DNET_SUBJECT_KEYWORD = "keyword"; - - public static final String DNET_SUBJECT_FOS_CLASSID = "FOS"; - - public static final String DNET_SUBJECT_FOS_CLASSNAME = "Fields of Science and Technology classification"; - - public static final String DNET_SUBJECT_TYPOLOGIES = "dnet:subject_classification_typologies"; - public static final String DNET_RESULT_TYPOLOGIES = "dnet:result_typologies"; - public static final String DNET_PUBLICATION_RESOURCE = "dnet:publication_resource"; - public static final String DNET_ACCESS_MODES = "dnet:access_modes"; - public static final String DNET_LANGUAGES = "dnet:languages"; - public static final String DNET_PID_TYPES = "dnet:pid_types"; - public static final String DNET_DATACITE_DATE = "dnet:dataCite_date"; - public static final String DNET_DATACITE_TITLE = "dnet:dataCite_title"; - public static final String DNET_DATA_CITE_RESOURCE = "dnet:dataCite_resource"; - public static final String DNET_PROVENANCE_ACTIONS = "dnet:provenanceActions"; - public static final String DNET_COUNTRY_TYPE = "dnet:countries"; - 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"; - public static final String SYSIMPORT_ACTIONSET = "sysimport:actionset"; - public static final String SYSIMPORT_ORCID_NO_DOI = "sysimport:actionset:orcidworks-no-doi"; - - public static final String USER_CLAIM = "user:claim"; - 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); - - public static final String DATASET_RESULTTYPE_CLASSID = "dataset"; - public static final String PUBLICATION_RESULTTYPE_CLASSID = "publication"; - public static final String SOFTWARE_RESULTTYPE_CLASSID = "software"; - public static final String ORP_RESULTTYPE_CLASSID = "other"; - - public static final String RESULT_RESULT = "resultResult"; // relType - /** - * @deprecated Use {@link ModelConstants#RELATIONSHIP} instead. - */ - @Deprecated - public static final String PUBLICATION_DATASET = "publicationDataset"; // subreltype - - public static final String SUPPLEMENT = "supplement"; // subreltype - public static final String IS_SUPPLEMENT_TO = "IsSupplementTo"; - public static final String IS_SUPPLEMENTED_BY = "IsSupplementedBy"; - - public static final String PART = "part"; // subreltype - public static final String IS_PART_OF = "IsPartOf"; - public static final String HAS_PART = "HasPart"; - - public static final String RELATIONSHIP = "relationship"; // subreltype - - public static final String IS_RELATED_TO = "IsRelatedTo"; - public static final String IS_IDENTICAL_TO = "IsIdenticalTo"; - - public static final String REFERENCES = "References"; - public static final String IS_REFERENCED_BY = "IsReferencedBy"; - public static final String CONTINUES = "Continues"; - public static final String IS_CONTINUED_BY = "IsContinuedBy"; - public static final String DOCUMENTS = "Documents"; - public static final String IS_DOCUMENTED_BY = "IsDocumentedBy"; - public static final String IS_SOURCE_OF = "IsSourceOf"; - 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_DESCRIBED_BY = "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"; - public static final String IS_CITED_BY = "IsCitedBy"; - - public static final String REVIEW = "review"; // subreltype - public static final String REVIEWS = "Reviews"; - public static final String IS_REVIEWED_BY = "IsReviewedBy"; - - public static final String VERSION = "version"; // subreltype - public static final String IS_VERSION_OF = "IsVersionOf"; - public static final String HAS_VERSION = "HasVersion"; - public static final String IS_PREVIOUS_VERSION_OF = "IsPreviousVersionOf"; - public static final String IS_NEW_VERSION_OF = "IsNewVersionOf"; - public static final String IS_VARIANT_FORM_OF = "IsVariantFormOf"; - public static final String IS_ORIGINAL_FORM_OF = "IsOriginalFormOf"; - public static final String IS_OBSOLETED_BY = "IsObsoletedBy"; - public static final String OBSOLETES = "Obsoletes"; - - public static final String RESULT_PROJECT = "resultProject"; // relType - public static final String OUTCOME = "outcome"; // subreltype - public static final String IS_PRODUCED_BY = "isProducedBy"; - public static final String PRODUCES = "produces"; - - public static final String DATASOURCE_ORGANIZATION = "datasourceOrganization"; // relType - public static final String PROVISION = "provision"; // subreltype - public static final String IS_PROVIDED_BY = "isProvidedBy"; - public static final String PROVIDES = "provides"; - - public static final String PROJECT_ORGANIZATION = "projectOrganization"; // relType - public static final String PARTICIPATION = "participation"; // subreltype - public static final String HAS_PARTICIPANT = "hasParticipant"; - public static final String IS_PARTICIPANT = "isParticipant"; - - public static final String RESULT_ORGANIZATION = "resultOrganization"; // relType - public static final String AFFILIATION = "affiliation"; // subreltype - public static final String IS_AUTHOR_INSTITUTION_OF = "isAuthorInstitutionOf"; - 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"; - public static final String IS_MERGED_IN = "isMergedIn"; - - public static final String SIMILARITY = "similarity"; // subreltype - public static final String IS_SIMILAR_TO = "isSimilarTo"; - public static final String IS_AMONG_TOP_N_SIMILAR_DOCS = "IsAmongTopNSimilarDocuments"; - public static final String HAS_AMONG_TOP_N_SIMILAR_DOCS = "HasAmongTopNSimilarDocuments"; - - public static final String IS_DIFFERENT_FROM = "isDifferentFrom"; - - public static final String UNKNOWN = "UNKNOWN"; - public static final String NOT_AVAILABLE = "not available"; - - public static final Qualifier PUBLICATION_DEFAULT_RESULTTYPE = qualifier( - PUBLICATION_RESULTTYPE_CLASSID, PUBLICATION_RESULTTYPE_CLASSID, - DNET_RESULT_TYPOLOGIES); - - public static final Qualifier DATASET_DEFAULT_RESULTTYPE = qualifier( - DATASET_RESULTTYPE_CLASSID, DATASET_RESULTTYPE_CLASSID, - DNET_RESULT_TYPOLOGIES); - - public static final Qualifier SOFTWARE_DEFAULT_RESULTTYPE = qualifier( - SOFTWARE_RESULTTYPE_CLASSID, SOFTWARE_RESULTTYPE_CLASSID, - DNET_RESULT_TYPOLOGIES); - - public static final Qualifier ORP_DEFAULT_RESULTTYPE = qualifier( - ORP_RESULTTYPE_CLASSID, ORP_RESULTTYPE_CLASSID, - DNET_RESULT_TYPOLOGIES); - - public static final Qualifier REPOSITORY_PROVENANCE_ACTIONS = qualifier( - SYSIMPORT_CROSSWALK_REPOSITORY, SYSIMPORT_CROSSWALK_REPOSITORY, - DNET_PROVENANCE_ACTIONS); - - public static final Qualifier ENTITYREGISTRY_PROVENANCE_ACTION = qualifier( - SYSIMPORT_CROSSWALK_ENTITYREGISTRY, SYSIMPORT_CROSSWALK_ENTITYREGISTRY, - DNET_PROVENANCE_ACTIONS); - - public static final String UNKNOWN_REPOSITORY_ORIGINALID = "openaire____::1256f046-bf1f-4afc-8b47-d0b147148b18"; - public static final KeyValue UNKNOWN_REPOSITORY = keyValue( - "10|openaire____::55045bd2a65019fd8e6741a755395c8c", "Unknown Repository"); - - public static final Qualifier UNKNOWN_COUNTRY = qualifier(UNKNOWN, "Unknown", DNET_COUNTRY_TYPE); - - public static final Qualifier MAIN_TITLE_QUALIFIER = qualifier( - "main title", "main title", DNET_DATACITE_TITLE); - - public static final Qualifier ALTERNATIVE_TITLE_QUALIFIER = qualifier( - "alternative title", "alternative title", DNET_DATACITE_TITLE); - - private static final Qualifier SUBTITLE_QUALIFIER = qualifier("subtitle", "subtitle", DNET_DATACITE_TITLE); - - public static final AccessRight OPEN_ACCESS_RIGHT() { - - final AccessRight result = new AccessRight(); - result.setClassid(ACCESS_RIGHT_OPEN); - result.setClassid(ACCESS_RIGHT_OPEN); - result.setSchemeid(ModelConstants.DNET_ACCESS_MODES); - return result; - } - - private static Qualifier qualifier( - final String classid, - final String classname, - final String schemeid) { - final Qualifier q = new Qualifier(); - q.setClassid(classid); - q.setClassname(classname); - q.setSchemeid(schemeid); - return q; - } - - private static KeyValue keyValue(final String key, final String value) { - final KeyValue kv = new KeyValue(); - kv.setKey(key); - kv.setValue(value); - return kv; - } -} diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Dataset.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Dataset.java index 329aff5..e529c20 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Dataset.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Dataset.java @@ -4,10 +4,10 @@ package eu.dnetlib.dhp.schema.oaf; import java.io.Serializable; import java.util.List; -import eu.dnetlib.dhp.schema.common.ModelConstants; - public class Dataset extends Result implements Serializable { + private static final String DATASET_RESULTTYPE = "dataset"; + private String storagedate; // candidate for removal @@ -24,7 +24,7 @@ public class Dataset extends Result implements Serializable { private List geolocation; public Dataset() { - setResulttype(ModelConstants.DATASET_RESULTTYPE_CLASSID); + setResulttype(DATASET_RESULTTYPE); } public String getStoragedate() { diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/OtherResearchProduct.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/OtherResearchProduct.java index c66bbb4..daa56b2 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/OtherResearchProduct.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/OtherResearchProduct.java @@ -4,10 +4,10 @@ package eu.dnetlib.dhp.schema.oaf; import java.io.Serializable; import java.util.List; -import eu.dnetlib.dhp.schema.common.ModelConstants; - public class OtherResearchProduct extends Result implements Serializable { + private static final String ORP_RESULTTYPE = "otherresearchproduct"; + private List contactperson; private List contactgroup; @@ -15,7 +15,7 @@ public class OtherResearchProduct extends Result implements Serializable { private List tool; public OtherResearchProduct() { - setResulttype(ModelConstants.ORP_RESULTTYPE_CLASSID); + setResulttype(ORP_RESULTTYPE); } public List getContactperson() { diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Publication.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Publication.java index ee6fed0..cb8ce53 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Publication.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Publication.java @@ -3,12 +3,12 @@ package eu.dnetlib.dhp.schema.oaf; import java.io.Serializable; -import eu.dnetlib.dhp.schema.common.ModelConstants; - public class Publication extends Result implements Serializable { + private static final String PUBLICATION_RESULTTYPE = "publication"; + public Publication() { - setResulttype(ModelConstants.PUBLICATION_RESULTTYPE_CLASSID); + setResulttype(PUBLICATION_RESULTTYPE); } } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Software.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Software.java index 2a51877..c927891 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Software.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Software.java @@ -4,10 +4,10 @@ package eu.dnetlib.dhp.schema.oaf; import java.io.Serializable; import java.util.List; -import eu.dnetlib.dhp.schema.common.ModelConstants; - public class Software extends Result implements Serializable { + private static final String SOFTWARE_RESULTTYPE = "software"; + private List documentationUrl; // candidate for removal @@ -16,7 +16,7 @@ public class Software extends Result implements Serializable { private Qualifier programmingLanguage; public Software() { - setResulttype(ModelConstants.SOFTWARE_RESULTTYPE_CLASSID); + setResulttype(SOFTWARE_RESULTTYPE); } public List getDocumentationUrl() { diff --git a/src/main/java/eu/dnetlib/dhp/schema/sx/OafUtils.scala b/src/main/java/eu/dnetlib/dhp/schema/sx/OafUtils.scala deleted file mode 100644 index 3113d23..0000000 --- a/src/main/java/eu/dnetlib/dhp/schema/sx/OafUtils.scala +++ /dev/null @@ -1,59 +0,0 @@ -package eu.dnetlib.dhp.schema.sx - -import eu.dnetlib.dhp.schema.common.ModelConstants -import eu.dnetlib.dhp.schema.oaf.{AccessRight, DataInfo, KeyValue, Qualifier, StructuredProperty} - -object OafUtils { - - def generateKeyValue(key: String, value: String): KeyValue = { - val kv: KeyValue = new KeyValue() - kv.setKey(key) - kv.setValue(value) - kv - } - - def generateDataInfo(trust: Float = 0.9f, invisible: Boolean = false): DataInfo = { - val di = new DataInfo - di.setInferred(false) - di.setTrust(trust) - di.setProvenanceaction(createQualifier(ModelConstants.SYSIMPORT_ACTIONSET, ModelConstants.DNET_PROVENANCE_ACTIONS)) - di - } - - def createQualifier(cls: String, sch: String): Qualifier = { - createQualifier(cls, cls, sch) - } - - def createQualifier(classId: String, className: String, schemeId: String): Qualifier = { - val q: Qualifier = new Qualifier - q.setClassid(classId) - q.setClassname(className) - q.setSchemeid(schemeId) - q - } - - def createAccessRight(classId: String, className: String, schemeId: String): AccessRight = { - val accessRight: AccessRight = new AccessRight - accessRight.setClassid(classId) - accessRight.setClassname(className) - accessRight.setSchemeid(schemeId) - accessRight - } - - def createSP(value: String, classId: String,className:String, schemeId: String): StructuredProperty = { - val sp = new StructuredProperty - sp.setQualifier(createQualifier(classId,className, schemeId)) - sp.setValue(value) - sp - - } - - def createSP(value: String, classId: String, schemeId: String): StructuredProperty = { - val sp = new StructuredProperty - sp.setQualifier(createQualifier(classId, schemeId)) - sp.setValue(value) - sp - - } - -} diff --git a/src/test/java/eu/dnetlib/dhp/schema/action/AtomicActionTest.java b/src/test/java/eu/dnetlib/dhp/schema/action/AtomicActionTest.java index 22cd48c..a586067 100644 --- a/src/test/java/eu/dnetlib/dhp/schema/action/AtomicActionTest.java +++ b/src/test/java/eu/dnetlib/dhp/schema/action/AtomicActionTest.java @@ -10,7 +10,6 @@ import org.junit.jupiter.api.Test; import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.dhp.schema.common.ModelConstants; import eu.dnetlib.dhp.schema.oaf.Relation; /** @author claudio.atzori */ @@ -23,9 +22,9 @@ class AtomicActionTest { Relation rel = new Relation(); rel.setSource("1"); rel.setTarget("2"); - rel.setRelType(ModelConstants.RESULT_RESULT); - rel.setSubRelType(ModelConstants.DEDUP); - rel.setRelClass(ModelConstants.MERGES); + rel.setRelType("resultResult"); + rel.setSubRelType("dedup"); + rel.setRelClass("merges"); AtomicAction aa1 = new AtomicAction(Relation.class, rel); diff --git a/src/test/java/eu/dnetlib/dhp/schema/oaf/MeasureTest.java b/src/test/java/eu/dnetlib/dhp/schema/oaf/MeasureTest.java index cc54ea1..fb74973 100644 --- a/src/test/java/eu/dnetlib/dhp/schema/oaf/MeasureTest.java +++ b/src/test/java/eu/dnetlib/dhp/schema/oaf/MeasureTest.java @@ -39,7 +39,6 @@ class MeasureTest { List m = Lists.newArrayList(popularity, influence); String s = OBJECT_MAPPER.writeValueAsString(m); - System.out.println(s); List mm = OBJECT_MAPPER.readValue(s, new TypeReference>() { }); -- 2.17.1 From c465b2b4108ac08560fa99bb6647c1c77e0f614c Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Thu, 9 Feb 2023 16:23:50 +0100 Subject: [PATCH 10/15] neat separation between EntityDataInfo and DataInfo --- .../eu/dnetlib/dhp/schema/oaf/DataInfo.java | 7 ++- .../dhp/schema/oaf/EntityDataInfo.java | 51 ++++++++++++++++--- 2 files changed, 48 insertions(+), 10 deletions(-) diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/DataInfo.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/DataInfo.java index d6b0bd5..c50d793 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/DataInfo.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/DataInfo.java @@ -3,12 +3,11 @@ package eu.dnetlib.dhp.schema.oaf; import java.io.Serializable; import java.util.Objects; -import java.util.Optional; public class DataInfo implements Serializable { private Boolean inferred; - private float trust; + private Float trust; private String inferenceprovenance; private Qualifier provenanceaction; @@ -20,11 +19,11 @@ public class DataInfo implements Serializable { this.inferred = inferred; } - public float getTrust() { + public Float getTrust() { return trust; } - public void setTrust(float trust) { + public void setTrust(Float trust) { this.trust = trust; } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/EntityDataInfo.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/EntityDataInfo.java index a172b36..1c71686 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/EntityDataInfo.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/EntityDataInfo.java @@ -2,11 +2,46 @@ package eu.dnetlib.dhp.schema.oaf; import java.util.Objects; -public class EntityDataInfo extends DataInfo { - +public class EntityDataInfo { + private Boolean inferred; + private Float trust; + private String inferenceprovenance; + private Qualifier provenanceaction; private Boolean invisible = false; private Boolean deletedbyinference = false; + public Boolean getInferred() { + return inferred; + } + + public void setInferred(Boolean inferred) { + this.inferred = inferred; + } + + public Float getTrust() { + return trust; + } + + public void setTrust(Float trust) { + this.trust = trust; + } + + public String getInferenceprovenance() { + return inferenceprovenance; + } + + public void setInferenceprovenance(String inferenceprovenance) { + this.inferenceprovenance = inferenceprovenance; + } + + public Qualifier getProvenanceaction() { + return provenanceaction; + } + + public void setProvenanceaction(Qualifier provenanceaction) { + this.provenanceaction = provenanceaction; + } + public Boolean getInvisible() { return invisible; } @@ -30,14 +65,18 @@ public class EntityDataInfo extends DataInfo { if (o == null || getClass() != o.getClass()) return false; EntityDataInfo dataInfo = (EntityDataInfo) o; - return super.equals(o) && Objects.equals(invisible, dataInfo.invisible) - && Objects.equals(deletedbyinference, dataInfo.deletedbyinference); + return Objects.equals(inferred, dataInfo.inferred) + && Objects.equals(trust, dataInfo.trust) + && Objects.equals(inferenceprovenance, dataInfo.inferenceprovenance) + && Objects.equals(provenanceaction, dataInfo.provenanceaction) + && Objects.equals(deletedbyinference, dataInfo.deletedbyinference) + && Objects.equals(invisible, dataInfo.invisible); } @Override public int hashCode() { - return Objects - .hash(super.hashCode(), invisible, deletedbyinference); + return Objects.hash( + inferred, trust, inferenceprovenance, provenanceaction, deletedbyinference, invisible); } } -- 2.17.1 From 4d70508ad9468e0f670d97d391b80cb688ae58d8 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Tue, 14 Feb 2023 12:19:04 +0100 Subject: [PATCH 11/15] moved url attribue on top --- src/main/java/eu/dnetlib/dhp/schema/oaf/License.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/License.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/License.java index 70adfd4..63f7054 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/License.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/License.java @@ -4,6 +4,8 @@ import java.io.Serializable; public class License implements Serializable { + private String url; + public License() { } @@ -12,8 +14,6 @@ public class License implements Serializable { this.url = url; } - private String url; - public String getUrl() { return url; } -- 2.17.1 From 3b5b4c565b6fdf84021de394d66fa85308346726 Mon Sep 17 00:00:00 2001 From: Claudio Atzori Date: Wed, 26 Apr 2023 16:00:41 +0200 Subject: [PATCH 12/15] WIP: model simplification --- .../eu/dnetlib/dhp/schema/oaf/Dataset.java | 4 +- .../dhp/schema/oaf/OtherResearchProduct.java | 4 +- .../eu/dnetlib/dhp/schema/oaf/Provenance.java | 4 +- .../dnetlib/dhp/schema/oaf/Publication.java | 4 +- .../eu/dnetlib/dhp/schema/oaf/Relation.java | 409 +++++++++++++----- .../eu/dnetlib/dhp/schema/oaf/Result.java | 13 +- .../eu/dnetlib/dhp/schema/oaf/Software.java | 4 +- .../dhp/schema/action/AtomicActionTest.java | 6 +- 8 files changed, 323 insertions(+), 125 deletions(-) diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Dataset.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Dataset.java index e529c20..13f0193 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Dataset.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Dataset.java @@ -6,8 +6,6 @@ import java.util.List; public class Dataset extends Result implements Serializable { - private static final String DATASET_RESULTTYPE = "dataset"; - private String storagedate; // candidate for removal @@ -24,7 +22,7 @@ public class Dataset extends Result implements Serializable { private List geolocation; public Dataset() { - setResulttype(DATASET_RESULTTYPE); + setResulttype(RESULTTYPE.dataset); } public String getStoragedate() { diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/OtherResearchProduct.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/OtherResearchProduct.java index daa56b2..f5ab72c 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/OtherResearchProduct.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/OtherResearchProduct.java @@ -6,8 +6,6 @@ import java.util.List; public class OtherResearchProduct extends Result implements Serializable { - private static final String ORP_RESULTTYPE = "otherresearchproduct"; - private List contactperson; private List contactgroup; @@ -15,7 +13,7 @@ public class OtherResearchProduct extends Result implements Serializable { private List tool; public OtherResearchProduct() { - setResulttype(ORP_RESULTTYPE); + setResulttype(RESULTTYPE.otherresearchproduct); } public List getContactperson() { diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Provenance.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Provenance.java index fd15386..c8a70ef 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Provenance.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Provenance.java @@ -1,6 +1,8 @@ package eu.dnetlib.dhp.schema.oaf; -public class Provenance { +import java.io.Serializable; + +public class Provenance implements Serializable { private KeyValue collectedfrom; diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Publication.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Publication.java index cb8ce53..e8e41b6 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Publication.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Publication.java @@ -5,10 +5,8 @@ import java.io.Serializable; public class Publication extends Result implements Serializable { - private static final String PUBLICATION_RESULTTYPE = "publication"; - public Publication() { - setResulttype(PUBLICATION_RESULTTYPE); + setResulttype(RESULTTYPE.publication); } } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java index b03bf6f..17f1378 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java @@ -1,6 +1,7 @@ package eu.dnetlib.dhp.schema.oaf; +import java.beans.Transient; import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -14,139 +15,335 @@ import java.util.Objects; */ public class Relation extends Oaf implements Serializable { - /** - * Main relationship classifier, values include 'resultResult', 'resultProject', 'resultOrganization', etc. - */ - private String relType; + public enum RELTYPE { + resultResult, + resultProject, + resultOrganization, + projectOrganization, + datasourceOrganization + } - /** - * Further classifies a relationship, values include 'affiliation', 'similarity', 'supplement', etc. - */ - private String subRelType; + public enum SUBRELTYPE { + affiliation, + citation, + dedup, + outcome, + part, + participation, + provision, + relationship, + review, + similarity, + supplement, + version; - /** - * Indicates the direction of the relationship, values include 'isSupplementTo', 'isSupplementedBy', 'merges, - * 'isMergedIn'. - */ - private String relClass; + public boolean exists(String subreltype) { + try { + SUBRELTYPE.valueOf(subreltype); + return true; + } catch (IllegalArgumentException | NullPointerException e) { + return false; + } + } + } - /** - * The source entity id. - */ - private String source; + public enum RELCLASS { + IsVersionOf, + IsSourceOf, + isMergedIn, + IsIdenticalTo, + Documents, + IsAmongTopNSimilarDocuments, + IsSupplementedBy, + IsObsoletedBy, + Continues, + IsParentOf, + IsReferencedBy, + IsCitedBy, + Compiles, + IsPreviousVersionOf, + HasPart, + IsDocumentedBy, + HasAmongTopNSimilarDocuments, + isParticipant, + hasAuthorInstitution, + IsRelatedTo, + Requires, + Describes, + IsReviewedBy, + IsContinuedBy, + provides, + IsChildOf, + IsDescribedBy, + IsNewVersionOf, + IsPartOf, + HasVersion, + hasParticipant, + isAuthorInstitutionOf, + IsVariantFormOf, + isProducedBy, + IsMetadataFor, + Cites, + IsRequiredBy, + IsOriginalFormOf, + IsSupplementTo, + IsMetadataOf, + References, + IsCompiledBy, + isProvidedBy, + merges, + IsDerivedFrom, + Obsoletes, + Reviews, + produces; - /** - * The target entity id. - */ - private String target; + public static boolean exists(String relclass) { + try { + RELCLASS.valueOf(relclass); + return true; + } catch (IllegalArgumentException | NullPointerException e) { + return false; + } + } - /** - * Was this relationship authoritatively validated? - */ - private Boolean validated; + @Transient + public RELCLASS getInverse() { + switch (this) { + case IsVersionOf: + return HasVersion; + case IsSourceOf: + return IsDerivedFrom; + case isMergedIn: + return merges; + case IsIdenticalTo: + return IsIdenticalTo; + case Documents: + return IsDocumentedBy; + case IsAmongTopNSimilarDocuments: + return HasAmongTopNSimilarDocuments; + case IsSupplementedBy: + return IsSupplementTo; + case IsObsoletedBy: + return Obsoletes; + case Continues: + return IsContinuedBy; + case IsParentOf: + return IsChildOf; + case IsReferencedBy: + return References; + case IsCitedBy: + return Cites; + case Compiles: + return IsCompiledBy; + case IsPreviousVersionOf: + return IsNewVersionOf; + case HasPart: + return IsPartOf; + case IsDocumentedBy: + return Documents; + case HasAmongTopNSimilarDocuments: + return IsAmongTopNSimilarDocuments; + case isParticipant: + return hasParticipant; + case hasAuthorInstitution: + return isAuthorInstitutionOf; + case IsRelatedTo: + return IsRelatedTo; + case Requires: + return IsRequiredBy; + case Describes: + return IsDescribedBy; + case IsReviewedBy: + return Reviews; + case IsContinuedBy: + return Continues; + case provides: + return isProvidedBy; + case IsChildOf: + return IsParentOf; + case IsDescribedBy: + return Describes; + case IsNewVersionOf: + return IsPreviousVersionOf; + case IsPartOf: + return HasPart; + case HasVersion: + return IsVersionOf; + case hasParticipant: + return isParticipant; + case isAuthorInstitutionOf: + return hasAuthorInstitution; + case IsVariantFormOf: + return IsOriginalFormOf; + case isProducedBy: + return produces; + case IsMetadataFor: + return IsMetadataOf; + case Cites: + return IsCitedBy; + case IsRequiredBy: + return Requires; + case IsOriginalFormOf: + return IsVariantFormOf; + case IsSupplementTo: + return IsSupplementedBy; + case IsMetadataOf: + return IsMetadataFor; + case References: + return IsReferencedBy; + case IsCompiledBy: + return Compiles; + case isProvidedBy: + return provides; + case merges: + return isMergedIn; + case IsDerivedFrom: + return IsSourceOf; + case Obsoletes: + return IsObsoletedBy; + case Reviews: + return IsReviewedBy; + case produces: + return isProducedBy; + } + // makes the compiler happy + throw new IllegalArgumentException("missing inverse mapping for" + this); + } + } - /** - * When was this relationship authoritatively validated. - */ - private String validationDate; + /** + * Main relationship classifier, values include 'resultResult', 'resultProject', 'resultOrganization', etc. + */ + private RELTYPE relType; - private List provenance; + /** + * Further classifies a relationship, values include 'affiliation', 'similarity', 'supplement', etc. + */ + private SUBRELTYPE subRelType; - /** - * List of relation specific properties. Values include 'similarityLevel', indicating the similarity score between a - * pair of publications. - */ - private List properties = new ArrayList<>(); + /** + * Indicates the direction of the relationship, values include 'isSupplementTo', 'isSupplementedBy', 'merges, + * 'isMergedIn'. + */ + private RELCLASS relClass; - public String getRelType() { - return relType; - } + /** + * The source entity id. + */ + private String source; - public void setRelType(final String relType) { - this.relType = relType; - } + /** + * The target entity id. + */ + private String target; - public String getSubRelType() { - return subRelType; - } + /** + * Was this relationship authoritatively validated? + */ + private Boolean validated; - public void setSubRelType(final String subRelType) { - this.subRelType = subRelType; - } + /** + * When was this relationship authoritatively validated. + */ + private String validationDate; - public String getRelClass() { - return relClass; - } + private List provenance; - public void setRelClass(final String relClass) { - this.relClass = relClass; - } + /** + * List of relation specific properties. Values include 'similarityLevel', indicating the similarity score between a + * pair of publications. + */ + private List properties = new ArrayList<>(); - public String getSource() { - return source; - } + public RELTYPE getRelType() { + return relType; + } - public void setSource(final String source) { - this.source = source; - } + public void setRelType(final RELTYPE relType) { + this.relType = relType; + } - public String getTarget() { - return target; - } + public SUBRELTYPE getSubRelType() { + return subRelType; + } - public void setTarget(final String target) { - this.target = target; - } + public void setSubRelType(final SUBRELTYPE subRelType) { + this.subRelType = subRelType; + } - public List getProperties() { - return properties; - } + public RELCLASS getRelClass() { + return relClass; + } - public void setProperties(List properties) { - this.properties = properties; - } + public void setRelClass(final RELCLASS relClass) { + this.relClass = relClass; + } - public Boolean getValidated() { - return Objects.nonNull(validated) && validated; - } + public String getSource() { + return source; + } - public void setValidated(Boolean validated) { - this.validated = validated; - } + public void setSource(final String source) { + this.source = source; + } - public String getValidationDate() { - return validationDate; - } + public String getTarget() { + return target; + } - public void setValidationDate(String validationDate) { - this.validationDate = validationDate; - } + public void setTarget(final String target) { + this.target = target; + } - public List getProvenance() { - return provenance; - } + public List getProperties() { + return properties; + } - public void setProvenance(List provenance) { - this.provenance = provenance; - } + public void setProperties(List properties) { + this.properties = properties; + } - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - Relation relation = (Relation) o; - return relType.equals(relation.relType) - && subRelType.equals(relation.subRelType) - && relClass.equals(relation.relClass) - && source.equals(relation.source) - && target.equals(relation.target); - } + public Boolean getValidated() { + return Objects.nonNull(validated) && validated; + } - @Override - public int hashCode() { - return Objects.hash(relType, subRelType, relClass, source, target, provenance); - } + public void setValidated(Boolean validated) { + this.validated = validated; + } + + public String getValidationDate() { + return validationDate; + } + + public void setValidationDate(String validationDate) { + this.validationDate = validationDate; + } + + public List getProvenance() { + return provenance; + } + + public void setProvenance(List provenance) { + this.provenance = provenance; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + Relation relation = (Relation) o; + return relType.equals(relation.relType) + && subRelType.equals(relation.subRelType) + && relClass.equals(relation.relClass) + && source.equals(relation.source) + && target.equals(relation.target); + } + + @Override + public int hashCode() { + return Objects.hash(relType, subRelType, relClass, source, target, provenance); + } } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java index 07bc153..10c3d1c 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java @@ -9,6 +9,13 @@ import java.util.List; */ public class Result extends Entity implements Serializable { + public enum RESULTTYPE { + publication, + dataset, + software, + otherresearchproduct + } + /** * ( article | book ) processing charges. */ @@ -27,7 +34,7 @@ public class Result extends Entity implements Serializable { /** * The Resulttype. It allows subclassing results into publications | datasets | software | orp */ - private String resulttype; + private RESULTTYPE resulttype; /** * The Language. @@ -172,7 +179,7 @@ public class Result extends Entity implements Serializable { * * @return the resulttype */ - public String getResulttype() { + public RESULTTYPE getResulttype() { return resulttype; } @@ -181,7 +188,7 @@ public class Result extends Entity implements Serializable { * * @param resulttype the resulttype */ - public void setResulttype(String resulttype) { + public void setResulttype(RESULTTYPE resulttype) { this.resulttype = resulttype; } diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Software.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Software.java index c927891..bcdb906 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Software.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Software.java @@ -6,8 +6,6 @@ import java.util.List; public class Software extends Result implements Serializable { - private static final String SOFTWARE_RESULTTYPE = "software"; - private List documentationUrl; // candidate for removal @@ -16,7 +14,7 @@ public class Software extends Result implements Serializable { private Qualifier programmingLanguage; public Software() { - setResulttype(SOFTWARE_RESULTTYPE); + setResulttype(RESULTTYPE.software); } public List getDocumentationUrl() { diff --git a/src/test/java/eu/dnetlib/dhp/schema/action/AtomicActionTest.java b/src/test/java/eu/dnetlib/dhp/schema/action/AtomicActionTest.java index a586067..2e3da10 100644 --- a/src/test/java/eu/dnetlib/dhp/schema/action/AtomicActionTest.java +++ b/src/test/java/eu/dnetlib/dhp/schema/action/AtomicActionTest.java @@ -22,9 +22,9 @@ class AtomicActionTest { Relation rel = new Relation(); rel.setSource("1"); rel.setTarget("2"); - rel.setRelType("resultResult"); - rel.setSubRelType("dedup"); - rel.setRelClass("merges"); + rel.setRelType(Relation.RELTYPE.resultResult); + rel.setSubRelType(Relation.SUBRELTYPE.dedup); + rel.setRelClass(Relation.RELCLASS.merges); AtomicAction aa1 = new AtomicAction(Relation.class, rel); -- 2.17.1 From 80ecc865f7273ac34641cda47769db5e093dd49d Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Fri, 28 Apr 2023 10:53:24 +0200 Subject: [PATCH 13/15] Added inverse Relation utility --- .../eu/dnetlib/dhp/schema/oaf/Relation.java | 93 ++++++++++++++++++- .../dnetlib/dhp/schema/oaf/RelationTest.java | 26 ++++++ 2 files changed, 116 insertions(+), 3 deletions(-) create mode 100644 src/test/java/eu/dnetlib/dhp/schema/oaf/RelationTest.java diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java index 17f1378..11812da 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java @@ -9,18 +9,21 @@ import java.util.Objects; /** * Relation models any edge between two nodes in the OpenAIRE graph. It has a source id and a target id pointing to - * graph node identifiers and it is further characterised by the semantic of the link through the fields relType, + * graph node identifiers, and it is further characterised by the semantic of the link through the fields relType, * subRelType and relClass. Provenance information is modeled according to the dataInfo element and collectedFrom, while * individual relationship types can provide extra information via the properties field. */ public class Relation extends Oaf implements Serializable { + public enum RELTYPE { resultResult, resultProject, resultOrganization, projectOrganization, datasourceOrganization + + //TODO organizationOrganization ???? } public enum SUBRELTYPE { @@ -36,8 +39,7 @@ public class Relation extends Oaf implements Serializable { similarity, supplement, version; - - public boolean exists(String subreltype) { + public static boolean exists(String subreltype) { try { SUBRELTYPE.valueOf(subreltype); return true; @@ -83,6 +85,7 @@ public class Relation extends Oaf implements Serializable { IsVariantFormOf, isProducedBy, IsMetadataFor, + HasAssociationWith, Cites, IsRequiredBy, IsOriginalFormOf, @@ -95,6 +98,7 @@ public class Relation extends Oaf implements Serializable { IsDerivedFrom, Obsoletes, Reviews, + isSimilarTo, produces; public static boolean exists(String relclass) { @@ -105,6 +109,75 @@ public class Relation extends Oaf implements Serializable { return false; } } + @Transient + public SUBRELTYPE getSubRel() { + switch (this) { + case isParticipant: + case hasParticipant: + return SUBRELTYPE.participation; + case isAuthorInstitutionOf: + case hasAuthorInstitution: + return SUBRELTYPE.affiliation; + case isMergedIn: + case merges: + case isSimilarTo: + return SUBRELTYPE.dedup; + case isProducedBy: + case produces: + return SUBRELTYPE.outcome; + case isProvidedBy: + case provides: + return SUBRELTYPE.provision; + case IsAmongTopNSimilarDocuments: + case HasAmongTopNSimilarDocuments: + return SUBRELTYPE.similarity; + case IsSupplementedBy: + case IsSupplementTo: + return SUBRELTYPE.supplement; + case IsPartOf: + case HasPart: + return SUBRELTYPE.part; + case IsCitedBy: + case Cites: + return SUBRELTYPE.citation; + case IsIdenticalTo: + case IsReferencedBy: + case References: + case IsContinuedBy: + case Continues: + case IsDocumentedBy: + case Documents: + case IsDerivedFrom: + case IsSourceOf: + case IsRelatedTo: + case IsCompiledBy: + case Compiles: + case IsDescribedBy: + case Describes: + case IsMetadataFor: + case IsMetadataOf: + case HasAssociationWith: + case IsRequiredBy: + case Requires: + case IsChildOf: + case IsParentOf: + return SUBRELTYPE.relationship; + case IsPreviousVersionOf: + case IsNewVersionOf: + case IsVariantFormOf: + case IsOriginalFormOf: + case IsObsoletedBy: + case Obsoletes: + case IsVersionOf: + case HasVersion: + return SUBRELTYPE.version; + case IsReviewedBy: + case Reviews: + return SUBRELTYPE.review; + } + // makes the compiler happy + throw new IllegalArgumentException("missing SubRel mapping for" + this); + } @Transient public RELCLASS getInverse() { @@ -341,6 +414,20 @@ public class Relation extends Oaf implements Serializable { && target.equals(relation.target); } + public Relation inverse() { + final Relation inverse = new Relation(); + inverse.setSource(this.target); + inverse.setTarget(this.source); + inverse.setRelClass(this.relClass.getInverse()); + inverse.setRelType(this.relType); + inverse.setSubRelType(this.subRelType); + inverse.setProperties(this.properties); + inverse.setValidated(validated); + inverse.setProvenance(provenance); + inverse.setValidationDate(validationDate); + return inverse; + } + @Override public int hashCode() { return Objects.hash(relType, subRelType, relClass, source, target, provenance); diff --git a/src/test/java/eu/dnetlib/dhp/schema/oaf/RelationTest.java b/src/test/java/eu/dnetlib/dhp/schema/oaf/RelationTest.java new file mode 100644 index 0000000..6b14242 --- /dev/null +++ b/src/test/java/eu/dnetlib/dhp/schema/oaf/RelationTest.java @@ -0,0 +1,26 @@ +package eu.dnetlib.dhp.schema.oaf; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +public class RelationTest { + + @Test + public void checkExistRelType() { + assertTrue(Relation.SUBRELTYPE.exists(Relation.SUBRELTYPE.dedup.toString())); + assertFalse(Relation.SUBRELTYPE.exists("foo")); + + } + @Test + public void checSubRelType() { + Relation.RELCLASS rc = Relation.RELCLASS.merges; + assertEquals(Relation.SUBRELTYPE.dedup, rc.getSubRel()); + + for (Relation.RELCLASS value : Relation.RELCLASS.values()) { + System.out.printf("%s => %s\n", value, value.getSubRel()); + + } + } + +} -- 2.17.1 From 3e0159dcd4efcfe70b221ab87bd70f57c8ef172d Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Fri, 28 Apr 2023 11:22:45 +0200 Subject: [PATCH 14/15] added LookUp method for RelClass, this method replaces the ModelSupport.findRelation --- .../java/eu/dnetlib/dhp/schema/oaf/Relation.java | 16 +++++++++++++--- .../eu/dnetlib/dhp/schema/oaf/RelationTest.java | 10 +++++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java index 11812da..9254f2a 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java @@ -3,9 +3,7 @@ package eu.dnetlib.dhp.schema.oaf; import java.beans.Transient; import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * Relation models any edge between two nodes in the OpenAIRE graph. It has a source id and a target id pointing to @@ -179,6 +177,18 @@ public class Relation extends Oaf implements Serializable { throw new IllegalArgumentException("missing SubRel mapping for" + this); } + /** + * This mehtod is an implementation of the valueOF case insensitive + * @param value the input Value + * @return the RELCLASS + */ + public static RELCLASS lookUp(String value) { + Optional rvlaue = Arrays.stream(RELCLASS.values()).filter(e -> e.name().equalsIgnoreCase(value)).findAny(); + if (rvlaue.isPresent()) + return rvlaue.get(); + throw new IllegalArgumentException("value: "+value+" not found"); + } + @Transient public RELCLASS getInverse() { switch (this) { diff --git a/src/test/java/eu/dnetlib/dhp/schema/oaf/RelationTest.java b/src/test/java/eu/dnetlib/dhp/schema/oaf/RelationTest.java index 6b14242..a54ece7 100644 --- a/src/test/java/eu/dnetlib/dhp/schema/oaf/RelationTest.java +++ b/src/test/java/eu/dnetlib/dhp/schema/oaf/RelationTest.java @@ -2,6 +2,7 @@ package eu.dnetlib.dhp.schema.oaf; import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class RelationTest { @@ -13,7 +14,7 @@ public class RelationTest { } @Test - public void checSubRelType() { + public void checkSubRelType() { Relation.RELCLASS rc = Relation.RELCLASS.merges; assertEquals(Relation.SUBRELTYPE.dedup, rc.getSubRel()); @@ -23,4 +24,11 @@ public class RelationTest { } } + @Test + public void lookRelClassUpTest() { + Assertions.assertEquals(Relation.RELCLASS.Compiles, Relation.RELCLASS.lookUp("compiles")); + Assertions.assertEquals(Relation.RELCLASS.IsMetadataFor, Relation.RELCLASS.lookUp("isMetaDATAFOr")); + Assertions.assertThrows(IllegalArgumentException.class, () -> Relation.RELCLASS.lookUp("hello")); + } + } -- 2.17.1 From 2d0c3171379a73ee5b170cca7be604aa85aed630 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Tue, 9 May 2023 10:01:25 +0200 Subject: [PATCH 15/15] Added organizazionOrganization to RELTYPE --- .../java/eu/dnetlib/dhp/schema/oaf/Relation.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java b/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java index 9254f2a..c4e0735 100644 --- a/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java +++ b/src/main/java/eu/dnetlib/dhp/schema/oaf/Relation.java @@ -19,9 +19,8 @@ public class Relation extends Oaf implements Serializable { resultProject, resultOrganization, projectOrganization, - datasourceOrganization - - //TODO organizationOrganization ???? + datasourceOrganization, + organizationOrganization; } public enum SUBRELTYPE { @@ -97,6 +96,7 @@ public class Relation extends Oaf implements Serializable { Obsoletes, Reviews, isSimilarTo, + isDifferentFrom, produces; public static boolean exists(String relclass) { @@ -119,6 +119,7 @@ public class Relation extends Oaf implements Serializable { case isMergedIn: case merges: case isSimilarTo: + case isDifferentFrom: return SUBRELTYPE.dedup; case isProducedBy: case produces: @@ -180,7 +181,7 @@ public class Relation extends Oaf implements Serializable { /** * This mehtod is an implementation of the valueOF case insensitive * @param value the input Value - * @return the RELCLASS + * @return the RELCLASS */ public static RELCLASS lookUp(String value) { Optional rvlaue = Arrays.stream(RELCLASS.values()).filter(e -> e.name().equalsIgnoreCase(value)).findAny(); @@ -288,6 +289,10 @@ public class Relation extends Oaf implements Serializable { return IsReviewedBy; case produces: return isProducedBy; + case isSimilarTo: + return isSimilarTo; + case isDifferentFrom: + return isDifferentFrom; } // makes the compiler happy throw new IllegalArgumentException("missing inverse mapping for" + this); -- 2.17.1