diff --git a/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/common/ModelSupport.java b/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/common/ModelSupport.java index 9ee7c2deb..7d8be81ac 100644 --- a/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/common/ModelSupport.java +++ b/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/common/ModelSupport.java @@ -58,6 +58,18 @@ public class ModelSupport { 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 { @@ -289,6 +301,10 @@ public class ModelSupport { private ModelSupport() { } + public static String getIdPrefix(Class clazz) { + return idPrefixMap.get(clazz); + } + /** * Checks subclass-superclass relationship. * diff --git a/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Dataset.java b/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Dataset.java index 07ddbb00e..b5587c6b7 100644 --- a/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Dataset.java +++ b/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Dataset.java @@ -10,6 +10,7 @@ public class Dataset extends Result implements Serializable { private Field storagedate; + // candidate for removal private Field device; private Field size; diff --git a/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java b/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java index 11fdaa4f9..09e77a244 100644 --- a/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java +++ b/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Result.java @@ -2,8 +2,10 @@ package eu.dnetlib.dhp.schema.oaf; import java.io.Serializable; +import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; public class Result extends OafEntity implements Serializable { @@ -248,13 +250,24 @@ public class Result extends OafEntity implements Serializable { StructuredProperty baseMainTitle = null; if (title != null) { baseMainTitle = getMainTitle(title); - title.remove(baseMainTitle); + if (baseMainTitle != null) { + final StructuredProperty p = baseMainTitle; + title = title.stream().filter(t -> t != p).collect(Collectors.toList()); + } +// +// +// title.remove(baseMainTitle); } StructuredProperty newMainTitle = null; if (r.getTitle() != null) { newMainTitle = getMainTitle(r.getTitle()); - r.getTitle().remove(newMainTitle); + if (newMainTitle != null) { + final StructuredProperty p = newMainTitle; + title = title.stream().filter(t -> t != p).collect(Collectors.toList()); + } + + // r.getTitle().remove(newMainTitle); } if (newMainTitle != null && compareTrust(this, r) < 0) diff --git a/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Software.java b/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Software.java index 40332bf53..d25b5c9ce 100644 --- a/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Software.java +++ b/dhp-schemas/src/main/java/eu/dnetlib/dhp/schema/oaf/Software.java @@ -10,8 +10,10 @@ public class Software extends Result implements Serializable { private List> documentationUrl; + // candidate for removal private List license; + // candidate for removal private Field codeRepositoryUrl; private Qualifier programmingLanguage; diff --git a/dhp-workflows/dhp-broker-events/pom.xml b/dhp-workflows/dhp-broker-events/pom.xml index 0e84d99a4..59ff05ed3 100644 --- a/dhp-workflows/dhp-broker-events/pom.xml +++ b/dhp-workflows/dhp-broker-events/pom.xml @@ -57,7 +57,7 @@ eu.dnetlib dnet-openaire-broker-common - [2.0.0,3.0.0) + [2.0.1,3.0.0) diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/model/EventFactory.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/model/EventFactory.java index 609f206b7..df33fae0d 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/model/EventFactory.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/model/EventFactory.java @@ -12,7 +12,6 @@ import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; -import eu.dnetlib.broker.objects.OpenAireEventPayload; import eu.dnetlib.dhp.broker.oa.util.UpdateInfo; import eu.dnetlib.dhp.schema.oaf.Author; import eu.dnetlib.dhp.schema.oaf.KeyValue; @@ -37,14 +36,13 @@ public class EventFactory { final Map map = createMapFromResult(updateInfo); - final String payload = createPayload(updateInfo); - - final String eventId = - calculateEventId(updateInfo.getTopicPath(), updateInfo.getTarget().getOriginalId().get(0), updateInfo.getHighlightValueAsString()); + final String eventId = calculateEventId( + updateInfo.getTopicPath(), updateInfo.getTarget().getOriginalId().get(0), + updateInfo.getHighlightValueAsString()); res.setEventId(eventId); res.setProducerId(PRODUCER_ID); - res.setPayload(payload); + res.setPayload(updateInfo.asBrokerPayload().toJSON()); res.setMap(map); res.setTopic(updateInfo.getTopicPath()); res.setCreationDate(now); @@ -53,15 +51,6 @@ public class EventFactory { return res; } - private static String createPayload(final UpdateInfo updateInfo) { - final OpenAireEventPayload payload = new OpenAireEventPayload(); - // TODO : use ConversionUtils - - updateInfo.compileHighlight(payload); - - return payload.toJSON(); - } - private static Map createMapFromResult(final UpdateInfo updateInfo) { final Map map = new HashMap<>(); @@ -92,13 +81,17 @@ public class EventFactory { final List subjects = target.getSubject(); if (subjects.size() > 0) { map - .put("target_publication_subject_list", subjects.stream().map(StructuredProperty::getValue).collect(Collectors.toList())); + .put( + "target_publication_subject_list", + subjects.stream().map(StructuredProperty::getValue).collect(Collectors.toList())); } final List authors = target.getAuthor(); if (authors.size() > 0) { map - .put("target_publication_author_list", authors.stream().map(Author::getFullname).collect(Collectors.toList())); + .put( + "target_publication_author_list", + authors.stream().map(Author::getFullname).collect(Collectors.toList())); } // PROVENANCE INFO @@ -125,7 +118,9 @@ public class EventFactory { } private static long parseDateTolong(final String date) { - if (StringUtils.isBlank(date)) { return -1; } + if (StringUtils.isBlank(date)) { + return -1; + } try { return DateUtils.parseDate(date, DATE_PATTERNS).getTime(); } catch (final ParseException e) { diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/GenerateEventsApplication.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/GenerateEventsApplication.java index fede6f8bf..a38e760c5 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/GenerateEventsApplication.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/GenerateEventsApplication.java @@ -87,32 +87,25 @@ public class GenerateEventsApplication { private static final UpdateMatcher>, ?> enrichMoreSoftware = new EnrichMoreSoftware(); private static final UpdateMatcher>, ?> enrichMisissingPublicationIsRelatedTo = new EnrichMissingPublicationIsRelatedTo(); - private static final UpdateMatcher>, ?> enrichMissingPublicationIsReferencedBy = - new EnrichMissingPublicationIsReferencedBy(); + private static final UpdateMatcher>, ?> enrichMissingPublicationIsReferencedBy = new EnrichMissingPublicationIsReferencedBy(); private static final UpdateMatcher>, ?> enrichMissingPublicationReferences = new EnrichMissingPublicationReferences(); - private static final UpdateMatcher>, ?> enrichMissingPublicationIsSupplementedTo = - new EnrichMissingPublicationIsSupplementedTo(); - private static final UpdateMatcher>, ?> enrichMissingPublicationIsSupplementedBy = - new EnrichMissingPublicationIsSupplementedBy(); + private static final UpdateMatcher>, ?> enrichMissingPublicationIsSupplementedTo = new EnrichMissingPublicationIsSupplementedTo(); + private static final UpdateMatcher>, ?> enrichMissingPublicationIsSupplementedBy = new EnrichMissingPublicationIsSupplementedBy(); - private static final UpdateMatcher>, ?> enrichMisissingDatasetIsRelatedTo = - new EnrichMissingDatasetIsRelatedTo(); - private static final UpdateMatcher>, ?> enrichMissingDatasetIsReferencedBy = - new EnrichMissingDatasetIsReferencedBy(); - private static final UpdateMatcher>, ?> enrichMissingDatasetReferences = - new EnrichMissingDatasetReferences(); - private static final UpdateMatcher>, ?> enrichMissingDatasetIsSupplementedTo = - new EnrichMissingDatasetIsSupplementedTo(); - private static final UpdateMatcher>, ?> enrichMissingDatasetIsSupplementedBy = - new EnrichMissingDatasetIsSupplementedBy(); + private static final UpdateMatcher>, ?> enrichMisissingDatasetIsRelatedTo = new EnrichMissingDatasetIsRelatedTo(); + private static final UpdateMatcher>, ?> enrichMissingDatasetIsReferencedBy = new EnrichMissingDatasetIsReferencedBy(); + private static final UpdateMatcher>, ?> enrichMissingDatasetReferences = new EnrichMissingDatasetReferences(); + private static final UpdateMatcher>, ?> enrichMissingDatasetIsSupplementedTo = new EnrichMissingDatasetIsSupplementedTo(); + private static final UpdateMatcher>, ?> enrichMissingDatasetIsSupplementedBy = new EnrichMissingDatasetIsSupplementedBy(); public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); public static void main(final String[] args) throws Exception { final ArgumentApplicationParser parser = new ArgumentApplicationParser( IOUtils - .toString(GenerateEventsApplication.class - .getResourceAsStream("/eu/dnetlib/dhp/oa/graph/merge_claims_parameters.json"))); + .toString( + GenerateEventsApplication.class + .getResourceAsStream("/eu/dnetlib/dhp/oa/graph/merge_claims_parameters.json"))); parser.parseArgument(args); final Boolean isSparkSessionManaged = Optional @@ -156,8 +149,9 @@ public class GenerateEventsApplication { final String graphPath, final Class resultClazz) { - final Dataset results = readPath(spark, graphPath + "/" + resultClazz.getSimpleName().toLowerCase(), resultClazz) - .filter(r -> r.getDataInfo().getDeletedbyinference()); + final Dataset results = readPath( + spark, graphPath + "/" + resultClazz.getSimpleName().toLowerCase(), resultClazz) + .filter(r -> r.getDataInfo().getDeletedbyinference()); final Dataset rels = readPath(spark, graphPath + "/relation", Relation.class) .filter(r -> r.getRelClass().equals(BrokerConstants.IS_MERGED_IN_CLASS)); @@ -196,15 +190,18 @@ public class GenerateEventsApplication { return list.stream().map(EventFactory::newBrokerEvent).collect(Collectors.toList()); } - private static JavaRDD generateRelationEvents(final SparkSession spark, + private static JavaRDD generateRelationEvents( + final SparkSession spark, final String graphPath, final Class sourceClass, final Class targetClass) { - final Dataset sources = readPath(spark, graphPath + "/" + sourceClass.getSimpleName().toLowerCase(), sourceClass) - .filter(r -> r.getDataInfo().getDeletedbyinference()); + final Dataset sources = readPath( + spark, graphPath + "/" + sourceClass.getSimpleName().toLowerCase(), sourceClass) + .filter(r -> r.getDataInfo().getDeletedbyinference()); - final Dataset targets = readPath(spark, graphPath + "/" + sourceClass.getSimpleName().toLowerCase(), targetClass); + final Dataset targets = readPath( + spark, graphPath + "/" + sourceClass.getSimpleName().toLowerCase(), targetClass); final Dataset mergedRels = readPath(spark, graphPath + "/relation", Relation.class) .filter(r -> r.getRelClass().equals(BrokerConstants.IS_MERGED_IN_CLASS)); diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedProjects/EnrichMissingProject.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedProjects/EnrichMissingProject.java index 3ce29f864..ed5e71d52 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedProjects/EnrichMissingProject.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedProjects/EnrichMissingProject.java @@ -28,7 +28,8 @@ public class EnrichMissingProject if (source.getRight().isEmpty()) { return Arrays.asList(); } else { - return target.getRight() + return target + .getRight() .stream() .map(ConversionUtils::oafProjectToBrokerProject) .map(p -> generateUpdateInfo(p, source, target)) diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedProjects/EnrichMoreProject.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedProjects/EnrichMoreProject.java index 70ab5f71c..753166a82 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedProjects/EnrichMoreProject.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedProjects/EnrichMoreProject.java @@ -24,12 +24,14 @@ public class EnrichMoreProject extends UpdateMatcher> protected List> findUpdates(final Pair> source, final Pair> target) { - final Set existingProjects = source.getRight() + final Set existingProjects = source + .getRight() .stream() .map(Project::getId) .collect(Collectors.toSet()); - return target.getRight() + return target + .getRight() .stream() .filter(p -> !existingProjects.contains(p.getId())) .map(ConversionUtils::oafProjectToBrokerProject) diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedPublications/AbstractEnrichMissingPublication.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedPublications/AbstractEnrichMissingPublication.java index 75e77b3c6..074b6043a 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedPublications/AbstractEnrichMissingPublication.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedPublications/AbstractEnrichMissingPublication.java @@ -39,7 +39,7 @@ public abstract class AbstractEnrichMissingPublication .getRight() .stream() .filter(d -> !existingPublications.contains(d.getId())) - .map(ConversionUtils::oafPublicationToBrokerPublication) + .map(ConversionUtils::oafResultToBrokerPublication) .map(i -> generateUpdateInfo(i, source, target)) .collect(Collectors.toList()); diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedSoftware/EnrichMissingSoftware.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedSoftware/EnrichMissingSoftware.java index d0d0f4083..fd9091dc1 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedSoftware/EnrichMissingSoftware.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedSoftware/EnrichMissingSoftware.java @@ -29,7 +29,8 @@ public class EnrichMissingSoftware if (source.getRight().isEmpty()) { return Arrays.asList(); } else { - return target.getRight() + return target + .getRight() .stream() .map(ConversionUtils::oafSoftwareToBrokerSoftware) .map(p -> generateUpdateInfo(p, source, target)) diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedSoftware/EnrichMoreSoftware.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedSoftware/EnrichMoreSoftware.java index 455f08468..cb649dfff 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedSoftware/EnrichMoreSoftware.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/relatedSoftware/EnrichMoreSoftware.java @@ -26,12 +26,14 @@ public class EnrichMoreSoftware final Pair> source, final Pair> target) { - final Set existingSoftwares = source.getRight() + final Set existingSoftwares = source + .getRight() .stream() .map(Software::getId) .collect(Collectors.toSet()); - return target.getRight() + return target + .getRight() .stream() .filter(p -> !existingSoftwares.contains(p.getId())) .map(ConversionUtils::oafSoftwareToBrokerSoftware) diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/simple/EnrichMissingOpenAccess.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/simple/EnrichMissingOpenAccess.java index 524846d06..30638cefb 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/simple/EnrichMissingOpenAccess.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/matchers/simple/EnrichMissingOpenAccess.java @@ -28,7 +28,9 @@ public class EnrichMissingOpenAccess extends UpdateMatcher { .filter(right -> right.equals(BrokerConstants.OPEN_ACCESS)) .count(); - if (count > 0) { return Arrays.asList(); } + if (count > 0) { + return Arrays.asList(); + } return source .getInstance() diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/BrokerConstants.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/BrokerConstants.java index 06a46b7da..f4da59518 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/BrokerConstants.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/BrokerConstants.java @@ -15,7 +15,7 @@ public class BrokerConstants { public static final String OPEN_ACCESS = "OPEN"; public static final String IS_MERGED_IN_CLASS = "isMergedIn"; - public static final List> RESULT_CLASSES = - Arrays.asList(Publication.class, Dataset.class, Software.class, OtherResearchProduct.class); + public static final List> RESULT_CLASSES = Arrays + .asList(Publication.class, Dataset.class, Software.class, OtherResearchProduct.class); } diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtils.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtils.java index 4961fc4e4..2b39115b1 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtils.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/ConversionUtils.java @@ -5,83 +5,150 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.DocumentHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import eu.dnetlib.broker.objects.Instance; import eu.dnetlib.broker.objects.Pid; +import eu.dnetlib.dhp.schema.oaf.Author; import eu.dnetlib.dhp.schema.oaf.Dataset; +import eu.dnetlib.dhp.schema.oaf.ExternalReference; import eu.dnetlib.dhp.schema.oaf.Field; +import eu.dnetlib.dhp.schema.oaf.Instance; +import eu.dnetlib.dhp.schema.oaf.Journal; import eu.dnetlib.dhp.schema.oaf.KeyValue; import eu.dnetlib.dhp.schema.oaf.Project; import eu.dnetlib.dhp.schema.oaf.Publication; +import eu.dnetlib.dhp.schema.oaf.Result; import eu.dnetlib.dhp.schema.oaf.Software; import eu.dnetlib.dhp.schema.oaf.StructuredProperty; public class ConversionUtils { - public static List oafInstanceToBrokerInstances(final eu.dnetlib.dhp.schema.oaf.Instance i) { + private static final Logger log = LoggerFactory.getLogger(ConversionUtils.class); + + public static List oafInstanceToBrokerInstances(final Instance i) { return i.getUrl().stream().map(url -> { - final Instance r = new Instance(); - r.setUrl(url); - r.setInstancetype(i.getInstancetype().getClassid()); - r.setLicense(BrokerConstants.OPEN_ACCESS); - r.setHostedby(i.getHostedby().getValue()); - return r; + return new eu.dnetlib.broker.objects.Instance() + .setUrl(url) + .setInstancetype(i.getInstancetype().getClassid()) + .setLicense(BrokerConstants.OPEN_ACCESS) + .setHostedby(i.getHostedby().getValue()); }).collect(Collectors.toList()); } public static Pid oafPidToBrokerPid(final StructuredProperty sp) { - final Pid pid = new Pid(); - pid.setValue(sp.getValue()); - pid.setType(sp.getQualifier().getClassid()); - return pid; + return sp != null ? new Pid() + .setValue(sp.getValue()) + .setType(sp.getQualifier().getClassid()) : null; } public static final Pair oafSubjectToPair(final StructuredProperty sp) { - return Pair.of(sp.getQualifier().getClassid(), sp.getValue()); + return sp != null ? Pair.of(sp.getQualifier().getClassid(), sp.getValue()) : null; } public static final eu.dnetlib.broker.objects.Dataset oafDatasetToBrokerDataset(final Dataset d) { - final eu.dnetlib.broker.objects.Dataset res = new eu.dnetlib.broker.objects.Dataset(); - res.setOriginalId(d.getOriginalId().get(0)); - res.setTitles(structPropList(d.getTitle())); - res.setPids(d.getPid().stream().map(ConversionUtils::structeredPropertyToPid).collect(Collectors.toList())); - res.setInstances(d.getInstance().stream().map(ConversionUtils::oafInstanceToBrokerInstances).flatMap(List::stream).collect(Collectors.toList())); - res.setCollectedFrom(d.getCollectedfrom().stream().map(KeyValue::getValue).collect(Collectors.toList())); - return res; + return d != null ? new eu.dnetlib.broker.objects.Dataset() + .setOriginalId(d.getOriginalId().get(0)) + .setTitles(structPropList(d.getTitle())) + .setPids(d.getPid().stream().map(ConversionUtils::oafPidToBrokerPid).collect(Collectors.toList())) + .setInstances( + d + .getInstance() + .stream() + .map(ConversionUtils::oafInstanceToBrokerInstances) + .flatMap(List::stream) + .collect(Collectors.toList())) + .setCollectedFrom(d.getCollectedfrom().stream().map(KeyValue::getValue).collect(Collectors.toList())) + : null; } - public static final eu.dnetlib.broker.objects.Publication oafPublicationToBrokerPublication(final Publication d) { - final eu.dnetlib.broker.objects.Publication res = new eu.dnetlib.broker.objects.Publication(); - // TODO This should be reusable - return res; + public static final eu.dnetlib.broker.objects.Publication oafResultToBrokerPublication(final Result result) { + + return result != null ? new eu.dnetlib.broker.objects.Publication() + .setOriginalId(result.getOriginalId().get(0)) + .setTitles(structPropList(result.getTitle())) + .setAbstracts(fieldList(result.getDescription())) + .setLanguage(result.getLanguage().getClassid()) + .setSubjects(structPropList(result.getSubject())) + .setCreators(result.getAuthor().stream().map(Author::getFullname).collect(Collectors.toList())) + .setPublicationdate(result.getDateofcollection()) + .setPublisher(fieldValue(result.getPublisher())) + .setEmbargoenddate(fieldValue(result.getEmbargoenddate())) + .setContributor(fieldList(result.getContributor())) + .setJournal( + result instanceof Publication ? oafJournalToBrokerJournal(((Publication) result).getJournal()) : null) + .setCollectedFrom(result.getCollectedfrom().stream().map(KeyValue::getValue).collect(Collectors.toList())) + .setPids(result.getPid().stream().map(ConversionUtils::oafPidToBrokerPid).collect(Collectors.toList())) + .setInstances( + result + .getInstance() + .stream() + .map(ConversionUtils::oafInstanceToBrokerInstances) + .flatMap(List::stream) + .collect(Collectors.toList())) + .setExternalReferences( + result + .getExternalReference() + .stream() + .map(ConversionUtils::oafExtRefToBrokerExtRef) + .collect(Collectors.toList())) + : null; + } + + private static eu.dnetlib.broker.objects.Journal oafJournalToBrokerJournal(final Journal journal) { + return journal != null ? new eu.dnetlib.broker.objects.Journal() + .setName(journal.getName()) + .setIssn(journal.getIssnPrinted()) + .setEissn(journal.getIssnOnline()) + .setLissn(journal.getIssnLinking()) : null; + } + + private static eu.dnetlib.broker.objects.ExternalReference oafExtRefToBrokerExtRef(final ExternalReference ref) { + return ref != null ? new eu.dnetlib.broker.objects.ExternalReference() + .setRefidentifier(ref.getRefidentifier()) + .setSitename(ref.getSitename()) + .setType(ref.getQualifier().getClassid()) + .setUrl(ref.getUrl()) + : null; } public static final eu.dnetlib.broker.objects.Project oafProjectToBrokerProject(final Project p) { - final eu.dnetlib.broker.objects.Project res = new eu.dnetlib.broker.objects.Project(); - res.setTitle(fieldValue(p.getTitle())); - res.setAcronym(fieldValue(p.getAcronym())); - res.setCode(fieldValue(p.getCode())); - res.setFunder(null); // TODO - res.setFundingProgram(null); // TODO - res.setJurisdiction(null); // TODO + if (p == null) { + return null; + } + + final eu.dnetlib.broker.objects.Project res = new eu.dnetlib.broker.objects.Project() + .setTitle(fieldValue(p.getTitle())) + .setAcronym(fieldValue(p.getAcronym())) + .setCode(fieldValue(p.getCode())); + + final String ftree = fieldValue(p.getFundingtree()); + if (StringUtils.isNotBlank(ftree)) { + try { + final Document fdoc = DocumentHelper.parseText(ftree); + res.setFunder(fdoc.valueOf("/fundingtree/funder/shortname")); + res.setJurisdiction(fdoc.valueOf("/fundingtree/funder/jurisdiction")); + res.setFundingProgram(fdoc.valueOf("//funding_level_0/name")); + } catch (final DocumentException e) { + log.error("Error in record " + p.getId() + ": invalid fundingtree: " + ftree); + } + } + return res; } public static final eu.dnetlib.broker.objects.Software oafSoftwareToBrokerSoftware(final Software sw) { - final eu.dnetlib.broker.objects.Software res = new eu.dnetlib.broker.objects.Software(); - res.setName(structPropValue(sw.getTitle())); - res.setDescription(fieldValue(sw.getDescription())); - res.setRepository(fieldValue(sw.getCodeRepositoryUrl())); - res.setLandingPage(fieldValue(sw.getDocumentationUrl())); - return res; - } - - private static Pid structeredPropertyToPid(final StructuredProperty sp) { - final Pid pid = new Pid(); - pid.setValue(sp.getValue()); - pid.setType(sp.getQualifier().getClassid()); - return pid; + return sw != null ? new eu.dnetlib.broker.objects.Software() + .setName(structPropValue(sw.getTitle())) + .setDescription(fieldValue(sw.getDescription())) + .setRepository(fieldValue(sw.getCodeRepositoryUrl())) + .setLandingPage(fieldValue(sw.getDocumentationUrl())) + : null; } private static String fieldValue(final Field f) { @@ -89,14 +156,29 @@ public class ConversionUtils { } private static String fieldValue(final List> fl) { - return fl != null && !fl.isEmpty() && fl.get(0) != null ? fl.get(0).getValue() : null; + return fl != null ? fl.stream().map(Field::getValue).filter(StringUtils::isNotBlank).findFirst().orElse(null) + : null; } private static String structPropValue(final List props) { - return props != null && !props.isEmpty() && props.get(0) != null ? props.get(0).getValue() : null; + return props != null + ? props.stream().map(StructuredProperty::getValue).filter(StringUtils::isNotBlank).findFirst().orElse(null) + : null; + } + + private static List fieldList(final List> fl) { + return fl != null + ? fl.stream().map(Field::getValue).filter(StringUtils::isNotBlank).collect(Collectors.toList()) + : new ArrayList<>(); } private static List structPropList(final List props) { - return props != null ? props.stream().map(StructuredProperty::getValue).collect(Collectors.toList()) : new ArrayList<>(); + return props != null + ? props + .stream() + .map(StructuredProperty::getValue) + .filter(StringUtils::isNotBlank) + .collect(Collectors.toList()) + : new ArrayList<>(); } } diff --git a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/UpdateInfo.java b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/UpdateInfo.java index 5cc0d371d..04b426a1c 100644 --- a/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/UpdateInfo.java +++ b/dhp-workflows/dhp-broker-events/src/main/java/eu/dnetlib/dhp/broker/oa/util/UpdateInfo.java @@ -1,12 +1,16 @@ package eu.dnetlib.dhp.broker.oa.util; +import java.util.List; import java.util.function.BiConsumer; import java.util.function.Function; import eu.dnetlib.broker.objects.OpenAireEventPayload; +import eu.dnetlib.broker.objects.Provenance; import eu.dnetlib.broker.objects.Publication; import eu.dnetlib.dhp.broker.model.Topic; +import eu.dnetlib.dhp.schema.oaf.Instance; +import eu.dnetlib.dhp.schema.oaf.KeyValue; import eu.dnetlib.dhp.schema.oaf.Result; public final class UpdateInfo { @@ -66,12 +70,41 @@ public final class UpdateInfo { return trust; } - public void compileHighlight(final OpenAireEventPayload payload) { - compileHighlight.accept(payload.getHighlight(), getHighlightValue()); - } - public String getHighlightValueAsString() { return highlightToString.apply(getHighlightValue()); } + public OpenAireEventPayload asBrokerPayload() { + + final Publication p = ConversionUtils.oafResultToBrokerPublication(getSource()); + compileHighlight.accept(p, getHighlightValue()); + + final Publication hl = new Publication(); + compileHighlight.accept(hl, getHighlightValue()); + + final String provId = getSource().getOriginalId().stream().findFirst().orElse(null); + final String provRepo = getSource() + .getCollectedfrom() + .stream() + .map(KeyValue::getValue) + .findFirst() + .orElse(null); + final String provUrl = getSource() + .getInstance() + .stream() + .map(Instance::getUrl) + .flatMap(List::stream) + .findFirst() + .orElse(null); + ; + + final Provenance provenance = new Provenance().setId(provId).setRepositoryName(provRepo).setUrl(provUrl); + + return new OpenAireEventPayload() + .setPublication(p) + .setHighlight(hl) + .setTrust(trust) + .setProvenance(provenance); + } + } diff --git a/dhp-workflows/dhp-doiboost/pom.xml b/dhp-workflows/dhp-doiboost/pom.xml new file mode 100644 index 000000000..168442942 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/pom.xml @@ -0,0 +1,93 @@ + + + + dhp-workflows + eu.dnetlib.dhp + 1.2.2-SNAPSHOT + + 4.0.0 + + dhp-doiboost + + + + + net.alchim31.maven + scala-maven-plugin + 4.0.1 + + + scala-compile-first + initialize + + add-source + compile + + + + scala-test-compile + process-test-resources + + testCompile + + + + + ${scala.version} + + + + + + + + + + + + org.apache.hadoop + hadoop-client + + + org.apache.httpcomponents + httpclient + 4.3.4 + + + eu.dnetlib.dhp + dhp-common + ${project.version} + + + org.apache.cxf + cxf-rt-transports-http + + + + + eu.dnetlib.dhp + dhp-schemas + ${project.version} + + + com.jayway.jsonpath + json-path + + + + org.apache.spark + spark-core_2.11 + + + + org.apache.spark + spark-sql_2.11 + + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/DoiBoostMappingUtil.scala b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/DoiBoostMappingUtil.scala new file mode 100644 index 000000000..90bfacdc9 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/DoiBoostMappingUtil.scala @@ -0,0 +1,374 @@ +package eu.dnetlib.doiboost + +import eu.dnetlib.dhp.schema.action.AtomicAction +import eu.dnetlib.dhp.schema.oaf.{DataInfo, Dataset, Field, Instance, KeyValue, Oaf, Organization, Publication, Qualifier, Relation, Result, StructuredProperty} +import eu.dnetlib.dhp.utils.DHPUtils +import org.apache.commons.lang3.StringUtils +import org.codehaus.jackson.map.ObjectMapper +import org.json4s +import org.json4s.DefaultFormats +import org.json4s.jackson.JsonMethods.parse +import org.slf4j.{Logger, LoggerFactory} + +import scala.collection.JavaConverters._ +import scala.io.Source + + +case class HostedByItemType(id: String, officialname: String, issn: String, eissn: String, lissn: String, openAccess: Boolean) {} + +case class DoiBoostAffiliation(PaperId:Long, AffiliationId:Long, GridId:Option[String], OfficialPage:Option[String], DisplayName:Option[String]){} + +object DoiBoostMappingUtil { + def getUnknownCountry(): Qualifier = { + createQualifier("UNKNOWN","UNKNOWN","dnet:countries","dnet:countries") + } + + + + def generateMAGAffiliationId(affId: String): String = { + s"20|microsoft___$SEPARATOR${DHPUtils.md5(affId)}" + } + + + val logger: Logger = LoggerFactory.getLogger(getClass) + + //STATIC STRING + val MAG = "microsoft" + val MAG_NAME = "Microsoft Academic Graph" + val ORCID = "ORCID" + val CROSSREF = "Crossref" + val UNPAYWALL = "UnpayWall" + val GRID_AC = "grid.ac" + val WIKPEDIA = "wikpedia" + val doiBoostNSPREFIX = "doiboost____" + val OPENAIRE_PREFIX = "openaire____" + val SEPARATOR = "::" + val DNET_LANGUAGES = "dnet:languages" + val PID_TYPES = "dnet:pid_types" + + val invalidName = List(",", "none none", "none, none", "none &na;", "(:null)", "test test test", "test test", "test", "&na; &na;") + + def toActionSet(item:Oaf) :(String, String) = { + val mapper = new ObjectMapper() + + item match { + case dataset: Dataset => + val a: AtomicAction[Dataset] = new AtomicAction[Dataset] + a.setClazz(classOf[Dataset]) + a.setPayload(dataset) + (dataset.getClass.getCanonicalName, mapper.writeValueAsString(a)) + case publication: Publication => + val a: AtomicAction[Publication] = new AtomicAction[Publication] + a.setClazz(classOf[Publication]) + a.setPayload(publication) + (publication.getClass.getCanonicalName, mapper.writeValueAsString(a)) + case organization: Organization => + val a: AtomicAction[Organization] = new AtomicAction[Organization] + a.setClazz(classOf[Organization]) + a.setPayload(organization) + (organization.getClass.getCanonicalName, mapper.writeValueAsString(a)) + case relation: Relation => + val a: AtomicAction[Relation] = new AtomicAction[Relation] + a.setClazz(classOf[Relation]) + a.setPayload(relation) + (relation.getClass.getCanonicalName, mapper.writeValueAsString(a)) + case _ => + null + } + + } + + + def toHostedByItem(input:String): (String, HostedByItemType) = { + implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats + + lazy val json: json4s.JValue = parse(input) + val c :Map[String,HostedByItemType] = json.extract[Map[String, HostedByItemType]] + (c.keys.head, c.values.head) + } + + + def toISSNPair(publication: Publication) : (String, Publication) = { + val issn = if (publication.getJournal == null) null else publication.getJournal.getIssnPrinted + val eissn =if (publication.getJournal == null) null else publication.getJournal.getIssnOnline + val lissn =if (publication.getJournal == null) null else publication.getJournal.getIssnLinking + + if (issn!= null && issn.nonEmpty) + (issn, publication) + else if(eissn!= null && eissn.nonEmpty) + (eissn, publication) + else if(lissn!= null && lissn.nonEmpty) + (lissn, publication) + else + (publication.getId, publication) + } + + + + + def generateGridAffiliationId(gridId:String) :String = { + s"20|grid________::${DHPUtils.md5(gridId.toLowerCase().trim())}" + } + + + def fixResult(result: Dataset) :Dataset = { + val instanceType = result.getInstance().asScala.find(i => i.getInstancetype != null && i.getInstancetype.getClassid.nonEmpty) + if (instanceType.isDefined) { + result.getInstance().asScala.foreach(i => i.setInstancetype(instanceType.get.getInstancetype)) + } + result.getInstance().asScala.foreach(i => { + i.setHostedby(getUbknownHostedBy()) + }) + result + } + + def getUbknownHostedBy():KeyValue = { + val hb = new KeyValue + hb.setValue("Unknown Repository") + hb.setKey(s"10|$OPENAIRE_PREFIX::55045bd2a65019fd8e6741a755395c8c") + hb + + } + + + def getOpenAccessQualifier():Qualifier = { + createQualifier("OPEN","Open Access","dnet:access_modes", "dnet:access_modes") + + } + + def getRestrictedQualifier():Qualifier = { + createQualifier("RESTRICTED","Restricted","dnet:access_modes", "dnet:access_modes") + + } + + def fixPublication(input:((String,Publication), (String,HostedByItemType))): Publication = { + + val publication = input._1._2 + + val item = if (input._2 != null) input._2._2 else null + + + val instanceType = publication.getInstance().asScala.find(i => i.getInstancetype != null && i.getInstancetype.getClassid.nonEmpty) + + if (instanceType.isDefined) { + publication.getInstance().asScala.foreach(i => i.setInstancetype(instanceType.get.getInstancetype)) + } + + + publication.getInstance().asScala.foreach(i => { + val hb = new KeyValue + if (item != null) { + hb.setValue(item.officialname) + hb.setKey(generateDSId(item.id)) + if (item.openAccess) + i.setAccessright(getOpenAccessQualifier()) + publication.setBestaccessright(getOpenAccessQualifier()) + } + else { + hb.setValue("Unknown Repository") + hb.setKey(s"10|$OPENAIRE_PREFIX::55045bd2a65019fd8e6741a755395c8c") + } + i.setHostedby(hb) + }) + + val ar = publication.getInstance().asScala.filter(i => i.getInstancetype != null && i.getAccessright!= null && i.getAccessright.getClassid!= null).map(f=> f.getAccessright.getClassid) + if (ar.nonEmpty) { + if(ar.contains("OPEN")){ + publication.setBestaccessright(getOpenAccessQualifier()) + } + else { + publication.setBestaccessright(getRestrictedQualifier()) + } + } + publication + } + + + def generateDSId(input: String): String = { + + val b = StringUtils.substringBefore(input, "::") + val a = StringUtils.substringAfter(input, "::") + s"10|${b}::${DHPUtils.md5(a)}" + } + + + def generateDataInfo(): DataInfo = { + generateDataInfo("0.9") + } + + + def filterPublication(publication: Publication): Boolean = { + + //Case empty publication + if (publication == null) + return false + + //Case publication with no title + if (publication.getTitle == null || publication.getTitle.size == 0) + return false + + + val s = publication.getTitle.asScala.count(p => p.getValue != null + && p.getValue.nonEmpty && !p.getValue.equalsIgnoreCase("[NO TITLE AVAILABLE]")) + + if (s == 0) + return false + + // fixes #4360 (test publisher) + val publisher = if (publication.getPublisher != null) publication.getPublisher.getValue else null + + if (publisher != null && (publisher.equalsIgnoreCase("Test accounts") || publisher.equalsIgnoreCase("CrossRef Test Account"))) { + return false; + } + + //Publication with no Author + if (publication.getAuthor == null || publication.getAuthor.size() == 0) + return false + + + //filter invalid author + val authors = publication.getAuthor.asScala.map(s => { + if (s.getFullname.nonEmpty) { + s.getFullname + } + else + s"${ + s.getName + } ${ + s.getSurname + }" + }) + + val c = authors.count(isValidAuthorName) + if (c == 0) + return false + + // fixes #4368 + if (authors.count(s => s.equalsIgnoreCase("Addie Jackson")) > 0 && "Elsevier BV".equalsIgnoreCase(publication.getPublisher.getValue)) + return false + + true + } + + + def isValidAuthorName(fullName: String): Boolean = { + if (fullName == null || fullName.isEmpty) + return false + if (invalidName.contains(fullName.toLowerCase.trim)) + return false + true + } + + + def generateDataInfo(trust: String): DataInfo = { + val di = new DataInfo + di.setDeletedbyinference(false) + di.setInferred(false) + di.setInvisible(false) + di.setTrust(trust) + di.setProvenanceaction(createQualifier("sysimport:actionset", "dnet:provenanceActions")) + di + } + + + def createSP(value: String, classId: String, schemeId: String): StructuredProperty = { + val sp = new StructuredProperty + sp.setQualifier(createQualifier(classId, schemeId)) + sp.setValue(value) + sp + + } + + 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 + + } + + def createCrossrefCollectedFrom(): KeyValue = { + + val cf = new KeyValue + cf.setValue(CROSSREF) + cf.setKey("10|" + OPENAIRE_PREFIX + SEPARATOR + DHPUtils.md5(CROSSREF.toLowerCase)) + cf + + } + + + def createUnpayWallCollectedFrom(): KeyValue = { + + val cf = new KeyValue + cf.setValue(UNPAYWALL) + cf.setKey("10|" + OPENAIRE_PREFIX + SEPARATOR + DHPUtils.md5(UNPAYWALL.toLowerCase)) + cf + + } + + def createORIDCollectedFrom(): KeyValue = { + + val cf = new KeyValue + cf.setValue(ORCID) + cf.setKey("10|" + OPENAIRE_PREFIX + SEPARATOR + DHPUtils.md5(ORCID.toLowerCase)) + cf + + } + + + def generateIdentifier (oaf: Result, doi: String): String = { + val id = DHPUtils.md5 (doi.toLowerCase) + if (oaf.isInstanceOf[Dataset] ) + return s"60|${ + doiBoostNSPREFIX + }${ + SEPARATOR + }${ + id + }" + s"50|${ + doiBoostNSPREFIX + }${ + SEPARATOR + }${ + id + }" + } + + + + + def createMAGCollectedFrom(): KeyValue = { + + val cf = new KeyValue + cf.setValue(MAG_NAME) + cf.setKey("10|" + OPENAIRE_PREFIX + SEPARATOR + DHPUtils.md5(MAG)) + cf + + } + + def createQualifier(clsName: String, clsValue: String, schName: String, schValue: String): Qualifier = { + val q = new Qualifier + q.setClassid(clsName) + q.setClassname(clsValue) + q.setSchemeid(schName) + q.setSchemename(schValue) + q + } + + def createQualifier(cls: String, sch: String): Qualifier = { + createQualifier(cls, cls, sch, sch) + } + + + def asField[T](value: T): Field[T] = { + val tmp = new Field[T] + tmp.setValue(value) + tmp + + + } + + +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/SparkGenerateDOIBoostActionSet.scala b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/SparkGenerateDOIBoostActionSet.scala new file mode 100644 index 000000000..7a6cd3faa --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/SparkGenerateDOIBoostActionSet.scala @@ -0,0 +1,80 @@ +package eu.dnetlib.doiboost + +import eu.dnetlib.dhp.application.ArgumentApplicationParser +import eu.dnetlib.dhp.schema.action.AtomicAction +import eu.dnetlib.dhp.schema.oaf.{Organization, Publication, Relation, Dataset => OafDataset} +import org.apache.commons.io.IOUtils +import org.apache.hadoop.io.Text +import org.apache.hadoop.io.compress.GzipCodec +import org.apache.hadoop.mapred.SequenceFileOutputFormat +import org.apache.spark.SparkConf +import org.apache.spark.sql.{Dataset, Encoder, Encoders, SaveMode, SparkSession} +import org.slf4j.{Logger, LoggerFactory} + +object SparkGenerateDOIBoostActionSet { + val logger: Logger = LoggerFactory.getLogger(getClass) + def main(args: Array[String]): Unit = { + + val conf: SparkConf = new SparkConf() + val parser = new ArgumentApplicationParser(IOUtils.toString(getClass.getResourceAsStream("/eu/dnetlib/dhp/doiboost/generate_doiboost_as_params.json"))) + parser.parseArgument(args) + val spark: SparkSession = + SparkSession + .builder() + .config(conf) + .appName(getClass.getSimpleName) + .master(parser.get("master")).getOrCreate() + + implicit val mapEncoderPub: Encoder[Publication] = Encoders.kryo[Publication] + implicit val mapEncoderOrg: Encoder[Organization] = Encoders.kryo[Organization] + implicit val mapEncoderDataset: Encoder[OafDataset] = Encoders.kryo[OafDataset] + implicit val mapEncoderRel: Encoder[Relation] = Encoders.kryo[Relation] + implicit val mapEncoderAS: Encoder[(String, String)] = Encoders.tuple(Encoders.STRING, Encoders.STRING) + + implicit val mapEncoderAtomiAction: Encoder[AtomicAction[OafDataset]] = Encoders.kryo[AtomicAction[OafDataset]] + + val dbPublicationPath = parser.get("dbPublicationPath") + val dbDatasetPath = parser.get("dbDatasetPath") + val crossRefRelation = parser.get("crossRefRelation") + val dbaffiliationRelationPath = parser.get("dbaffiliationRelationPath") + val dbOrganizationPath = parser.get("dbOrganizationPath") + val workingDirPath = parser.get("targetPath") + + spark.read.load(dbDatasetPath).as[OafDataset] + .map(d =>DoiBoostMappingUtil.fixResult(d)) + .map(d=>DoiBoostMappingUtil.toActionSet(d))(Encoders.tuple(Encoders.STRING, Encoders.STRING)) + .write.mode(SaveMode.Overwrite).save(s"$workingDirPath/actionSet") + + spark.read.load(dbPublicationPath).as[Publication] + .map(d=>DoiBoostMappingUtil.toActionSet(d))(Encoders.tuple(Encoders.STRING, Encoders.STRING)) + .write.mode(SaveMode.Append).save(s"$workingDirPath/actionSet") + + spark.read.load(dbOrganizationPath).as[Organization] + .map(d=>DoiBoostMappingUtil.toActionSet(d))(Encoders.tuple(Encoders.STRING, Encoders.STRING)) + .write.mode(SaveMode.Append).save(s"$workingDirPath/actionSet") + + + spark.read.load(crossRefRelation).as[Relation] + .map(d=>DoiBoostMappingUtil.toActionSet(d))(Encoders.tuple(Encoders.STRING, Encoders.STRING)) + .write.mode(SaveMode.Append).save(s"$workingDirPath/actionSet") + + spark.read.load(dbaffiliationRelationPath).as[Relation] + .map(d=>DoiBoostMappingUtil.toActionSet(d))(Encoders.tuple(Encoders.STRING, Encoders.STRING)) + .write.mode(SaveMode.Append).save(s"$workingDirPath/actionSet") + + + val d: Dataset[(String, String)] =spark.read.load(s"$workingDirPath/actionSet").as[(String,String)] + + d.rdd.map(s => (new Text(s._1), new Text(s._2))).saveAsHadoopFile(s"$workingDirPath/rawset", classOf[Text], classOf[Text], classOf[SequenceFileOutputFormat[Text,Text]], classOf[GzipCodec]) + + + + + + + + + + } + +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/SparkGenerateDoiBoost.scala b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/SparkGenerateDoiBoost.scala new file mode 100644 index 000000000..772af010f --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/SparkGenerateDoiBoost.scala @@ -0,0 +1,140 @@ +package eu.dnetlib.doiboost + +import eu.dnetlib.dhp.application.ArgumentApplicationParser +import eu.dnetlib.dhp.schema.oaf.{Publication, Relation, Dataset => OafDataset, Organization} +import eu.dnetlib.doiboost.mag.ConversionUtil +import org.apache.commons.io.IOUtils +import org.apache.spark.SparkConf +import org.apache.spark.sql.functions.col +import org.apache.spark.sql.{Dataset, Encoder, Encoders, SaveMode, SparkSession} +import org.slf4j.{Logger, LoggerFactory} +import scala.collection.JavaConverters._ + +object SparkGenerateDoiBoost { + + def main(args: Array[String]): Unit = { + + val logger: Logger = LoggerFactory.getLogger(getClass) + val conf: SparkConf = new SparkConf() + val parser = new ArgumentApplicationParser(IOUtils.toString(getClass.getResourceAsStream("/eu/dnetlib/dhp/doiboost/generate_doiboost_params.json"))) + parser.parseArgument(args) + val spark: SparkSession = + SparkSession + .builder() + .config(conf) + .appName(getClass.getSimpleName) + .master(parser.get("master")).getOrCreate() + + import spark.implicits._ + + val hostedByMapPath = parser.get("hostedByMapPath") + val workingDirPath = parser.get("workingDirPath") + + + implicit val mapEncoderPub: Encoder[Publication] = Encoders.kryo[Publication] + implicit val mapEncoderOrg: Encoder[Organization] = Encoders.kryo[Organization] + implicit val mapEncoderDataset: Encoder[OafDataset] = Encoders.kryo[OafDataset] + implicit val tupleForJoinEncoder: Encoder[(String, Publication)] = Encoders.tuple(Encoders.STRING, mapEncoderPub) + implicit val mapEncoderRel: Encoder[Relation] = Encoders.kryo[Relation] + + logger.info("Phase 2) Join Crossref with UnpayWall") + + val crossrefPublication: Dataset[(String, Publication)] = spark.read.load(s"$workingDirPath/crossrefPublication").as[Publication].map(p => (p.getId, p)) + val uwPublication: Dataset[(String, Publication)] = spark.read.load(s"$workingDirPath/uwPublication").as[Publication].map(p => (p.getId, p)) + + def applyMerge(item:((String, Publication), (String, Publication))) : Publication = + { + val crossrefPub = item._1._2 + if (item._2!= null) { + val otherPub = item._2._2 + if (otherPub != null) { + crossrefPub.mergeFrom(otherPub) + } + } + crossrefPub + } + crossrefPublication.joinWith(uwPublication, crossrefPublication("_1").equalTo(uwPublication("_1")), "left").map(applyMerge).write.mode(SaveMode.Overwrite).save(s"$workingDirPath/firstJoin") + logger.info("Phase 3) Join Result with ORCID") + val fj: Dataset[(String, Publication)] = spark.read.load(s"$workingDirPath/firstJoin").as[Publication].map(p => (p.getId, p)) + val orcidPublication: Dataset[(String, Publication)] = spark.read.load(s"$workingDirPath/orcidPublication").as[Publication].map(p => (p.getId, p)) + fj.joinWith(orcidPublication, fj("_1").equalTo(orcidPublication("_1")), "left").map(applyMerge).write.mode(SaveMode.Overwrite).save(s"$workingDirPath/secondJoin") + + logger.info("Phase 3) Join Result with MAG") + val sj: Dataset[(String, Publication)] = spark.read.load(s"$workingDirPath/secondJoin").as[Publication].map(p => (p.getId, p)) + + val magPublication: Dataset[(String, Publication)] = spark.read.load(s"$workingDirPath/magPublication").as[Publication].map(p => (p.getId, p)) + sj.joinWith(magPublication, sj("_1").equalTo(magPublication("_1")), "left").map(applyMerge).write.mode(SaveMode.Overwrite).save(s"$workingDirPath/doiBoostPublication") + + + val doiBoostPublication: Dataset[(String,Publication)] = spark.read.load(s"$workingDirPath/doiBoostPublication").as[Publication].filter(p=>DoiBoostMappingUtil.filterPublication(p)).map(DoiBoostMappingUtil.toISSNPair)(tupleForJoinEncoder) + + val hostedByDataset : Dataset[(String, HostedByItemType)] = spark.createDataset(spark.sparkContext.textFile(hostedByMapPath).map(DoiBoostMappingUtil.toHostedByItem)) + + + doiBoostPublication.joinWith(hostedByDataset, doiBoostPublication("_1").equalTo(hostedByDataset("_1")), "left") + .map(DoiBoostMappingUtil.fixPublication) + .write.mode(SaveMode.Overwrite).save(s"$workingDirPath/doiBoostPublicationFiltered") + + val affiliationPath = parser.get("affiliationPath") + val paperAffiliationPath = parser.get("paperAffiliationPath") + + val affiliation = spark.read.load(affiliationPath).select(col("AffiliationId"), col("GridId"), col("OfficialPage"), col("DisplayName")) + + val paperAffiliation = spark.read.load(paperAffiliationPath).select(col("AffiliationId").alias("affId"), col("PaperId")) + + + val a:Dataset[DoiBoostAffiliation] = paperAffiliation + .joinWith(affiliation, paperAffiliation("affId").equalTo(affiliation("AffiliationId"))) + .select(col("_1.PaperId"), col("_2.AffiliationId"), col("_2.GridId"), col("_2.OfficialPage"), col("_2.DisplayName")).as[DoiBoostAffiliation] + + + + val magPubs:Dataset[(String,Publication)]= spark.read.load(s"$workingDirPath/doiBoostPublicationFiltered").as[Publication] + .map(p => (ConversionUtil.extractMagIdentifier(p.getOriginalId.asScala), p))(tupleForJoinEncoder).filter(s =>s._1!= null ) + + + magPubs.joinWith(a,magPubs("_1").equalTo(a("PaperId"))).flatMap(item => { + val pub:Publication = item._1._2 + val affiliation = item._2 + val affId:String = if (affiliation.GridId.isDefined) DoiBoostMappingUtil.generateGridAffiliationId(affiliation.GridId.get) else DoiBoostMappingUtil.generateMAGAffiliationId(affiliation.AffiliationId.toString) + val r:Relation = new Relation + r.setSource(pub.getId) + r.setTarget(affId) + r.setRelType("resultOrganization") + r.setRelClass("hasAuthorInstitution") + r.setSubRelType("affiliation") + r.setDataInfo(pub.getDataInfo) + r.setCollectedfrom(List(DoiBoostMappingUtil.createMAGCollectedFrom()).asJava) + val r1:Relation = new Relation + r1.setTarget(pub.getId) + r1.setSource(affId) + r1.setRelType("resultOrganization") + r1.setRelClass("isAuthorInstitutionOf") + r1.setSubRelType("affiliation") + r1.setDataInfo(pub.getDataInfo) + r1.setCollectedfrom(List(DoiBoostMappingUtil.createMAGCollectedFrom()).asJava) + List(r, r1) + })(mapEncoderRel).write.mode(SaveMode.Overwrite).save(s"$workingDirPath/doiBoostPublicationAffiliation") + + + magPubs.joinWith(a,magPubs("_1").equalTo(a("PaperId"))).map( item => { + val affiliation = item._2 + if (affiliation.GridId.isEmpty) { + val o = new Organization + o.setCollectedfrom(List(DoiBoostMappingUtil.createMAGCollectedFrom()).asJava) + o.setDataInfo(DoiBoostMappingUtil.generateDataInfo()) + o.setId(DoiBoostMappingUtil.generateMAGAffiliationId(affiliation.AffiliationId.toString)) + o.setOriginalId(List(affiliation.AffiliationId.toString).asJava) + if (affiliation.DisplayName.nonEmpty) + o.setLegalname(DoiBoostMappingUtil.asField(affiliation.DisplayName.get)) + if (affiliation.OfficialPage.isDefined) + o.setWebsiteurl(DoiBoostMappingUtil.asField(affiliation.OfficialPage.get)) + o.setCountry(DoiBoostMappingUtil.getUnknownCountry()) + o + } + else + null + }).filter(o=> o!=null).write.mode(SaveMode.Overwrite).save(s"$workingDirPath/doiBoostOrganization") + } + +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala new file mode 100644 index 000000000..cc2c9d586 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/crossref/Crossref2Oaf.scala @@ -0,0 +1,440 @@ +package eu.dnetlib.doiboost.crossref + +import eu.dnetlib.dhp.schema.oaf._ +import eu.dnetlib.dhp.utils.DHPUtils +import eu.dnetlib.doiboost.DoiBoostMappingUtil._ +import org.apache.commons.lang.StringUtils +import org.json4s +import org.json4s.DefaultFormats +import org.json4s.JsonAST._ +import org.json4s.jackson.JsonMethods._ +import org.slf4j.{Logger, LoggerFactory} + +import scala.collection.JavaConverters._ +import scala.collection.mutable +import scala.util.matching.Regex + +case class mappingAffiliation(name: String) {} + +case class mappingAuthor(given: Option[String], family: String, ORCID: Option[String], affiliation: Option[mappingAffiliation]) {} + +case class mappingFunder(name: String, DOI: Option[String], award: Option[List[String]]) {} + + +case object Crossref2Oaf { + val logger: Logger = LoggerFactory.getLogger(Crossref2Oaf.getClass) + + val mappingCrossrefType = Map( + "book-section" -> "publication", + "book" -> "publication", + "book-chapter" -> "publication", + "book-part" -> "publication", + "book-series" -> "publication", + "book-set" -> "publication", + "book-track" -> "publication", + "edited-book" -> "publication", + "reference-book" -> "publication", + "monograph" -> "publication", + "journal-article" -> "publication", + "dissertation" -> "publication", + "other" -> "publication", + "peer-review" -> "publication", + "proceedings" -> "publication", + "proceedings-article" -> "publication", + "reference-entry" -> "publication", + "report" -> "publication", + "report-series" -> "publication", + "standard" -> "publication", + "standard-series" -> "publication", + "posted-content" -> "publication", + "dataset" -> "dataset" + ) + + + val mappingCrossrefSubType = Map( + "book-section" -> "0013 Part of book or chapter of book", + "book" -> "0002 Book", + "book-chapter" -> "0013 Part of book or chapter of book", + "book-part" -> "0013 Part of book or chapter of book", + "book-series" -> "0002 Book", + "book-set" -> "0002 Book", + "book-track" -> "0002 Book", + "edited-book" -> "0002 Book", + "reference-book" -> "0002 Book", + "monograph" -> "0002 Book", + "journal-article" -> "0001 Article", + "dissertation" -> "0006 Doctoral thesis", + "other" -> "0038 Other literature type", + "peer-review" -> "0015 Review", + "proceedings" -> "0004 Conference object", + "proceedings-article" -> "0004 Conference object", + "reference-entry" -> "0013 Part of book or chapter of book", + "report" -> "0017 Report", + "report-series" -> "0017 Report", + "standard" -> "0038 Other literature type", + "standard-series" -> "0038 Other literature type", + "dataset" -> "0021 Dataset", + "preprint" -> "0016 Preprint", + "report" -> "0017 Report" + ) + + def mappingResult(result: Result, json: JValue, cobjCategory: String): Result = { + implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats + + //MAPPING Crossref DOI into PID + val doi: String = (json \ "DOI").extract[String] + result.setPid(List(createSP(doi, "doi", PID_TYPES)).asJava) + + //MAPPING Crossref DOI into OriginalId + //and Other Original Identifier of dataset like clinical-trial-number + val clinicalTrialNumbers = for (JString(ctr) <- json \ "clinical-trial-number") yield ctr + val alternativeIds = for (JString(ids) <- json \ "alternative-id") yield ids + val tmp = clinicalTrialNumbers ::: alternativeIds ::: List(doi) + + result.setOriginalId(tmp.filter(id => id != null).asJava) + + //Set identifier as {50|60} | doiboost____::md5(DOI) + result.setId(generateIdentifier(result, doi)) + + // Add DataInfo + result.setDataInfo(generateDataInfo()) + + result.setLastupdatetimestamp((json \ "indexed" \ "timestamp").extract[Long]) + result.setDateofcollection((json \ "indexed" \ "date-time").extract[String]) + + result.setCollectedfrom(List(createCrossrefCollectedFrom()).asJava) + + // Publisher ( Name of work's publisher mapped into Result/Publisher) + val publisher = (json \ "publisher").extractOrElse[String](null) + if (publisher!= null && publisher.nonEmpty) + result.setPublisher(asField(publisher)) + + + // TITLE + val mainTitles = for {JString(title) <- json \ "title" if title.nonEmpty} yield createSP(title, "main title", "dnet:dataCite_title") + val originalTitles = for {JString(title) <- json \ "original-title" if title.nonEmpty} yield createSP(title, "alternative title", "dnet:dataCite_title") + val shortTitles = for {JString(title) <- json \ "short-title" if title.nonEmpty} yield createSP(title, "alternative title", "dnet:dataCite_title") + val subtitles = for {JString(title) <- json \ "subtitle" if title.nonEmpty} yield createSP(title, "subtitle", "dnet:dataCite_title") + result.setTitle((mainTitles ::: originalTitles ::: shortTitles ::: subtitles).asJava) + + // DESCRIPTION + val descriptionList = for {JString(description) <- json \ "abstract"} yield asField(description) + result.setDescription(descriptionList.asJava) + + // Source + val sourceList = for {JString(source) <- json \ "source" if source!= null && source.nonEmpty} yield asField(source) + result.setSource(sourceList.asJava) + + //RELEVANT DATE Mapping + val createdDate = generateDate((json \ "created" \ "date-time").extract[String], (json \ "created" \ "date-parts").extract[List[List[Int]]], "created", "dnet:dataCite_date") + val postedDate = generateDate((json \ "posted" \ "date-time").extractOrElse[String](null), (json \ "posted" \ "date-parts").extract[List[List[Int]]], "available", "dnet:dataCite_date") + val acceptedDate = generateDate((json \ "accepted" \ "date-time").extractOrElse[String](null), (json \ "accepted" \ "date-parts").extract[List[List[Int]]], "accepted", "dnet:dataCite_date") + val publishedPrintDate = generateDate((json \ "published-print" \ "date-time").extractOrElse[String](null), (json \ "published-print" \ "date-parts").extract[List[List[Int]]], "published-print", "dnet:dataCite_date") + val publishedOnlineDate = generateDate((json \ "published-online" \ "date-time").extractOrElse[String](null), (json \ "published-online" \ "date-parts").extract[List[List[Int]]], "published-online", "dnet:dataCite_date") + + val issuedDate = extractDate((json \ "issued" \ "date-time").extractOrElse[String](null), (json \ "issued" \ "date-parts").extract[List[List[Int]]]) + if (StringUtils.isNotBlank(issuedDate)) { + result.setDateofacceptance(asField(issuedDate)) + } + else { + result.setDateofacceptance(asField(createdDate.getValue)) + } + result.setRelevantdate(List(createdDate, postedDate, acceptedDate, publishedOnlineDate, publishedPrintDate).filter(p => p != null).asJava) + + //Mapping Subject + val subjectList:List[String] = (json \ "subject").extractOrElse[List[String]](List()) + + if (subjectList.nonEmpty) { + result.setSubject(subjectList.map(s=> createSP(s, "keywords", "dnet:subject_classification_typologies")).asJava) + } + + + + //Mapping Author + val authorList: List[mappingAuthor] = (json \ "author").extractOrElse[List[mappingAuthor]](List()) + result.setAuthor(authorList.map(a => generateAuhtor(a.given.orNull, a.family, a.ORCID.orNull)).asJava) + + // Mapping instance + val instance = new Instance() + val license = for { + JString(lic) <- json \ "license" \ "URL" + } yield asField(lic) + val l = license.filter(d => StringUtils.isNotBlank(d.getValue)) + if (l.nonEmpty) + instance.setLicense(l.head) + + + val has_review = (json \ "relation" \"has-review" \ "id") + + if(has_review != JNothing) + instance.setRefereed(asField("peerReviewed")) + + + instance.setAccessright(getRestrictedQualifier()) + result.setInstance(List(instance).asJava) + instance.setInstancetype(createQualifier(cobjCategory.substring(0, 4), cobjCategory.substring(5), "dnet:publication_resource", "dnet:publication_resource")) + result.setResourcetype(createQualifier(cobjCategory.substring(0, 4),"dnet:dataCite_resource")) + + instance.setCollectedfrom(createCrossrefCollectedFrom()) + if (StringUtils.isNotBlank(issuedDate)) { + instance.setDateofacceptance(asField(issuedDate)) + } + val s: String = (json \ "URL").extract[String] + val links: List[String] = ((for {JString(url) <- json \ "link" \ "URL"} yield url) ::: List(s)).filter(p => p != null).distinct + if (links.nonEmpty) + instance.setUrl(links.asJava) + result + } + + + def generateAuhtor(given: String, family: String, orcid: String): Author = { + val a = new Author + a.setName(given) + a.setSurname(family) + a.setFullname(s"$given $family") + if (StringUtils.isNotBlank(orcid)) + a.setPid(List(createSP(orcid, ORCID, PID_TYPES)).asJava) + + a + } + + def convert(input: String): List[Oaf] = { + implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats + lazy val json: json4s.JValue = parse(input) + + var resultList: List[Oaf] = List() + + + val objectType = (json \ "type").extractOrElse[String](null) + val objectSubType = (json \ "subtype").extractOrElse[String](null) + if (objectType == null) + return resultList + + + val result = generateItemFromType(objectType, objectSubType) + if (result == null) + return List() + val cOBJCategory = mappingCrossrefSubType.getOrElse(objectType, mappingCrossrefSubType.getOrElse(objectSubType, "0038 Other literature type")); + mappingResult(result, json, cOBJCategory) + + + val funderList: List[mappingFunder] = (json \ "funder").extractOrElse[List[mappingFunder]](List()) + + if (funderList.nonEmpty) { + resultList = resultList ::: mappingFunderToRelations(funderList, result.getId, createCrossrefCollectedFrom(), result.getDataInfo, result.getLastupdatetimestamp) + } + + + result match { + case publication: Publication => convertPublication(publication, json, cOBJCategory) + case dataset: Dataset => convertDataset(dataset) + } + + resultList = resultList ::: List(result) + resultList + } + + + def mappingFunderToRelations(funders: List[mappingFunder], sourceId: String, cf: KeyValue, di: DataInfo, ts: Long): List[Relation] = { + + val queue = new mutable.Queue[Relation] + + + def snfRule(award:String): String = { + var tmp1 = StringUtils.substringAfter(award,"_") + val tmp2 = StringUtils.substringBefore(tmp1,"/") + logger.debug(s"From $award to $tmp2") + tmp2 + + + } + + + def extractECAward(award: String): String = { + val awardECRegex: Regex = "[0-9]{4,9}".r + if (awardECRegex.findAllIn(award).hasNext) + return awardECRegex.findAllIn(award).max + null + } + + + def generateRelation(sourceId:String, targetId:String, nsPrefix:String) :Relation = { + + val r = new Relation + r.setSource(sourceId) + r.setTarget(s"$nsPrefix::$targetId") + r.setRelType("resultProject") + r.setRelClass("isProducedBy") + r.setSubRelType("outcome") + r.setCollectedfrom(List(cf).asJava) + r.setDataInfo(di) + r.setLastupdatetimestamp(ts) + r + } + + + def generateSimpleRelationFromAward(funder: mappingFunder, nsPrefix: String, extractField: String => String): Unit = { + if (funder.award.isDefined && funder.award.get.nonEmpty) + funder.award.get.map(extractField).filter(a => a!= null && a.nonEmpty).foreach( + award => { + val targetId = DHPUtils.md5(award) + queue += generateRelation(sourceId, targetId, nsPrefix) + } + ) + } + + if (funders != null) + funders.foreach(funder => { + if (funder.DOI.isDefined && funder.DOI.get.nonEmpty) { + funder.DOI.get match { + case "10.13039/100010663" | + "10.13039/100010661" | + "10.13039/501100007601" | + "10.13039/501100000780" | + "10.13039/100010665" => generateSimpleRelationFromAward(funder, "corda__h2020", extractECAward) + case "10.13039/100011199" | + "10.13039/100004431" | + "10.13039/501100004963" | + "10.13039/501100000780" => generateSimpleRelationFromAward(funder, "corda_______", extractECAward) + case "10.13039/501100000781" => generateSimpleRelationFromAward(funder, "corda_______", extractECAward) + generateSimpleRelationFromAward(funder, "corda__h2020", extractECAward) + case "10.13039/100000001" => generateSimpleRelationFromAward(funder, "nsf_________", a => a) + case "10.13039/501100001665" => generateSimpleRelationFromAward(funder, "anr_________", a => a) + case "10.13039/501100002341" => generateSimpleRelationFromAward(funder, "aka_________", a => a) + case "10.13039/501100001602" => generateSimpleRelationFromAward(funder, "aka_________", a => a.replace("SFI", "")) + case "10.13039/501100000923" => generateSimpleRelationFromAward(funder, "arc_________", a => a) + case "10.13039/501100000038"=> queue += generateRelation(sourceId,"1e5e62235d094afd01cd56e65112fc63", "nserc_______" ) + case "10.13039/501100000155"=> queue += generateRelation(sourceId,"1e5e62235d094afd01cd56e65112fc63", "sshrc_______" ) + case "10.13039/501100000024"=> queue += generateRelation(sourceId,"1e5e62235d094afd01cd56e65112fc63", "cihr________" ) + case "10.13039/501100002848" => generateSimpleRelationFromAward(funder, "conicytf____", a => a) + case "10.13039/501100003448" => generateSimpleRelationFromAward(funder, "gsrt________", extractECAward) + case "10.13039/501100010198" => generateSimpleRelationFromAward(funder, "sgov________", a=>a) + case "10.13039/501100004564" => generateSimpleRelationFromAward(funder, "mestd_______", extractECAward) + case "10.13039/501100003407" => generateSimpleRelationFromAward(funder, "miur________", a=>a) + queue += generateRelation(sourceId,"1e5e62235d094afd01cd56e65112fc63", "miur________" ) + case "10.13039/501100006588" | + "10.13039/501100004488" => generateSimpleRelationFromAward(funder, "irb_hr______", a=>a.replaceAll("Project No.", "").replaceAll("HRZZ-","") ) + case "10.13039/501100006769"=> generateSimpleRelationFromAward(funder, "rsf_________", a=>a) + case "10.13039/501100001711"=> generateSimpleRelationFromAward(funder, "snsf________", snfRule) + case "10.13039/501100004410"=> generateSimpleRelationFromAward(funder, "tubitakf____", a =>a) + case "10.10.13039/100004440"=> generateSimpleRelationFromAward(funder, "wt__________", a =>a) + case "10.13039/100004440"=> queue += generateRelation(sourceId,"1e5e62235d094afd01cd56e65112fc63", "wt__________" ) + case _ => logger.debug("no match for "+funder.DOI.get ) + + + } + + + } else { + funder.name match { + case "European Union’s Horizon 2020 research and innovation program" => generateSimpleRelationFromAward(funder, "corda__h2020", extractECAward) + case "European Union's" => + generateSimpleRelationFromAward(funder, "corda__h2020", extractECAward) + generateSimpleRelationFromAward(funder, "corda_______", extractECAward) + case "The French National Research Agency (ANR)" | + "The French National Research Agency" => generateSimpleRelationFromAward(funder, "anr_________", a => a) + case "CONICYT, Programa de Formación de Capital Humano Avanzado" => generateSimpleRelationFromAward(funder, "conicytf____", extractECAward) + case "Wellcome Trust Masters Fellowship" => queue += generateRelation(sourceId,"1e5e62235d094afd01cd56e65112fc63", "wt__________" ) + case _ => logger.debug("no match for "+funder.name ) + + } + } + + } + ) + queue.toList + } + + def convertDataset(dataset: Dataset): Unit = { + // TODO check if there are other info to map into the Dataset + } + + + def convertPublication(publication: Publication, json: JValue, cobjCategory: String): Unit = { + implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats + val containerTitles = for {JString(ct) <- json \ "container-title"} yield ct + + + //Mapping book + if (cobjCategory.toLowerCase.contains("book")) { + val ISBN = for {JString(isbn) <- json \ "ISBN"} yield isbn + if (ISBN.nonEmpty && containerTitles.nonEmpty) { + val source = s"${containerTitles.head} ISBN: ${ISBN.head}" + if (publication.getSource != null) { + val l: List[Field[String]] = publication.getSource.asScala.toList + val ll: List[Field[String]] = l ::: List(asField(source)) + publication.setSource(ll.asJava) + } + else + publication.setSource(List(asField(source)).asJava) + } + } else { + // Mapping Journal + + val issnInfos = for {JArray(issn_types) <- json \ "issn-type" + JObject(issn_type) <- issn_types + JField("type", JString(tp)) <- issn_type + JField("value", JString(vl)) <- issn_type + } yield Tuple2(tp, vl) + + val volume = (json \ "volume").extractOrElse[String](null) + if (containerTitles.nonEmpty) { + val journal = new Journal + journal.setName(containerTitles.head) + if (issnInfos.nonEmpty) { + + issnInfos.foreach(tp => { + tp._1 match { + case "electronic" => journal.setIssnOnline(tp._2) + case "print" => journal.setIssnPrinted(tp._2) + } + }) + } + journal.setVol(volume) + val page = (json \ "page").extractOrElse[String](null) + if (page != null) { + val pp = page.split("-") + if (pp.nonEmpty) + journal.setSp(pp.head) + if (pp.size > 1) + journal.setEp(pp(1)) + } + publication.setJournal(journal) + } + } + } + + def extractDate(dt: String, datePart: List[List[Int]]): String = { + if (StringUtils.isNotBlank(dt)) + return dt + if (datePart != null && datePart.size == 1) { + val res = datePart.head + if (res.size == 3) { + val dp = f"${res.head}-${res(1)}%02d-${res(2)}%02d" + if (dp.length == 10) { + return dp + } + } + } + null + + } + + def generateDate(dt: String, datePart: List[List[Int]], classId: String, schemeId: String): StructuredProperty = { + val dp = extractDate(dt, datePart) + if (StringUtils.isNotBlank(dp)) + return createSP(dp, classId, schemeId) + null + } + + def generateItemFromType(objectType: String, objectSubType: String): Result = { + if (mappingCrossrefType.contains(objectType)) { + if (mappingCrossrefType(objectType).equalsIgnoreCase("publication")) + return new Publication() + if (mappingCrossrefType(objectType).equalsIgnoreCase("dataset")) + return new Dataset() + } + null + } + +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/crossref/CrossrefImporter.java b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/crossref/CrossrefImporter.java new file mode 100644 index 000000000..f69a05da1 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/crossref/CrossrefImporter.java @@ -0,0 +1,103 @@ + +package eu.dnetlib.doiboost.crossref; + +import java.io.ByteArrayOutputStream; +import java.util.zip.Inflater; + +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.io.IntWritable; +import org.apache.hadoop.io.SequenceFile; +import org.apache.hadoop.io.Text; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; + +public class CrossrefImporter { + + public static void main(String[] args) throws Exception { + + final ArgumentApplicationParser parser = new ArgumentApplicationParser( + IOUtils + .toString( + CrossrefImporter.class + .getResourceAsStream( + "/eu/dnetlib/dhp/doiboost/import_from_es.json"))); + + parser.parseArgument(args); + + final String hdfsuri = parser.get("namenode"); + System.out.println("HDFS URI" + hdfsuri); + Path hdfswritepath = new Path(parser.get("targetPath")); + System.out.println("TargetPath: " + hdfsuri); + + final Long timestamp = StringUtils.isNotBlank(parser.get("timestamp")) + ? Long.parseLong(parser.get("timestamp")) + : -1; + + if (timestamp > 0) + System.out.println("Timestamp added " + timestamp); + + // ====== Init HDFS File System Object + Configuration conf = new Configuration(); + // Set FileSystem URI + conf.set("fs.defaultFS", hdfsuri); + // Because of Maven + conf.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName()); + conf.set("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName()); + + ESClient client = timestamp > 0 + ? new ESClient("ip-90-147-167-25.ct1.garrservices.it", "crossref", timestamp) + : new ESClient("ip-90-147-167-25.ct1.garrservices.it", "crossref"); + + try (SequenceFile.Writer writer = SequenceFile + .createWriter( + conf, + SequenceFile.Writer.file(hdfswritepath), + SequenceFile.Writer.keyClass(IntWritable.class), + SequenceFile.Writer.valueClass(Text.class))) { + + int i = 0; + long start = System.currentTimeMillis(); + long end = 0; + final IntWritable key = new IntWritable(i); + final Text value = new Text(); + while (client.hasNext()) { + key.set(i++); + value.set(client.next()); + writer.append(key, value); + if (i % 100000 == 0) { + end = System.currentTimeMillis(); + final float time = (end - start) / 1000.0F; + System.out + .println( + String.format("Imported %d records last 100000 imported in %f seconds", i, time)); + start = System.currentTimeMillis(); + } + } + } + } + + public static String decompressBlob(final String blob) { + try { + byte[] byteArray = Base64.decodeBase64(blob.getBytes()); + final Inflater decompresser = new Inflater(); + decompresser.setInput(byteArray); + final ByteArrayOutputStream bos = new ByteArrayOutputStream(byteArray.length); + byte[] buffer = new byte[8192]; + while (!decompresser.finished()) { + int size = decompresser.inflate(buffer); + bos.write(buffer, 0, size); + } + byte[] unzippeddata = bos.toByteArray(); + decompresser.end(); + return new String(unzippeddata); + } catch (Throwable e) { + throw new RuntimeException("Wrong record:" + blob, e); + } + } +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/crossref/ESClient.java b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/crossref/ESClient.java new file mode 100644 index 000000000..e31ccf399 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/crossref/ESClient.java @@ -0,0 +1,114 @@ + +package eu.dnetlib.doiboost.crossref; + +import java.io.IOException; +import java.util.Iterator; +import java.util.List; + +import org.apache.commons.io.IOUtils; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.jayway.jsonpath.JsonPath; + +public class ESClient implements Iterator { + private static final Logger logger = LoggerFactory.getLogger(ESClient.class); + + static final String blobPath = "$.hits[*].hits[*]._source.blob"; + static final String scrollIdPath = "$._scroll_id"; + static final String JSON_NO_TS = "{\"size\":1000}"; + static final String JSON_WITH_TS = "{\"size\":1000, \"query\":{\"range\":{\"timestamp\":{\"gte\":%d}}}}"; + static final String JSON_SCROLL = "{\"scroll_id\":\"%s\",\"scroll\" : \"1m\"}"; + + private final String scrollId; + + private List buffer; + + private final String esHost; + + public ESClient(final String esHost, final String esIndex) throws IOException { + + this.esHost = esHost; + final String body = getResponse( + String.format("http://%s:9200/%s/_search?scroll=1m", esHost, esIndex), JSON_NO_TS); + scrollId = getJPathString(scrollIdPath, body); + buffer = getBlobs(body); + } + + public ESClient(final String esHost, final String esIndex, final long timestamp) + throws IOException { + this.esHost = esHost; + final String body = getResponse( + String.format("http://%s:9200/%s/_search?scroll=1m", esHost, esIndex), + String.format(JSON_WITH_TS, timestamp)); + scrollId = getJPathString(scrollIdPath, body); + buffer = getBlobs(body); + } + + private String getResponse(final String url, final String json) { + CloseableHttpClient client = HttpClients.createDefault(); + try { + + HttpPost httpPost = new HttpPost(url); + if (json != null) { + StringEntity entity = new StringEntity(json); + httpPost.setEntity(entity); + httpPost.setHeader("Accept", "application/json"); + httpPost.setHeader("Content-type", "application/json"); + } + CloseableHttpResponse response = client.execute(httpPost); + + return IOUtils.toString(response.getEntity().getContent()); + } catch (Throwable e) { + throw new RuntimeException("Error on executing request ", e); + } finally { + try { + client.close(); + } catch (IOException e) { + throw new RuntimeException("Unable to close client ", e); + } + } + } + + private String getJPathString(final String jsonPath, final String json) { + try { + Object o = JsonPath.read(json, jsonPath); + if (o instanceof String) + return (String) o; + return null; + } catch (Exception e) { + return ""; + } + } + + private List getBlobs(final String body) { + final List res = JsonPath.read(body, "$.hits.hits[*]._source.blob"); + return res; + } + + @Override + public boolean hasNext() { + return (buffer != null && !buffer.isEmpty()); + } + + @Override + public String next() { + final String nextItem = buffer.remove(0); + if (buffer.isEmpty()) { + + final String json_param = String.format(JSON_SCROLL, scrollId); + final String body = getResponse(String.format("http://%s:9200/_search/scroll", esHost), json_param); + try { + buffer = getBlobs(body); + } catch (Throwable e) { + logger.error("Error on get next page: body:" + body); + } + } + return nextItem; + } +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/crossref/SparkMapDumpIntoOAF.scala b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/crossref/SparkMapDumpIntoOAF.scala new file mode 100644 index 000000000..fac4c90b4 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/crossref/SparkMapDumpIntoOAF.scala @@ -0,0 +1,98 @@ +package eu.dnetlib.doiboost.crossref + +import eu.dnetlib.dhp.application.ArgumentApplicationParser +import eu.dnetlib.dhp.schema.oaf +import eu.dnetlib.dhp.schema.oaf.{Oaf, Publication, Relation, Dataset => OafDataset} +import org.apache.commons.io.IOUtils +import org.apache.hadoop.io.{IntWritable, Text} +import org.apache.spark.SparkConf +import org.apache.spark.rdd.RDD +import org.apache.spark.sql.{Dataset, Encoder, Encoders, SaveMode, SparkSession} +import org.slf4j.{Logger, LoggerFactory} + + +case class Reference(author: String, firstPage: String) {} + +object SparkMapDumpIntoOAF { + + def main(args: Array[String]): Unit = { + + + val logger: Logger = LoggerFactory.getLogger(SparkMapDumpIntoOAF.getClass) + val conf: SparkConf = new SparkConf() + val parser = new ArgumentApplicationParser(IOUtils.toString(SparkMapDumpIntoOAF.getClass.getResourceAsStream("/eu/dnetlib/dhp/doiboost/convert_map_to_oaf_params.json"))) + parser.parseArgument(args) + val spark: SparkSession = + SparkSession + .builder() + .config(conf) + .appName(SparkMapDumpIntoOAF.getClass.getSimpleName) + .master(parser.get("master")).getOrCreate() + + implicit val mapEncoderPubs: Encoder[Publication] = Encoders.kryo[Publication] + implicit val mapEncoderRelatons: Encoder[Relation] = Encoders.kryo[Relation] + implicit val mapEncoderDatasets: Encoder[oaf.Dataset] = Encoders.kryo[OafDataset] + + val sc = spark.sparkContext + val targetPath = parser.get("targetPath") + + + sc.sequenceFile(parser.get("sourcePath"), classOf[IntWritable], classOf[Text]) + .map(k => k._2.toString).map(CrossrefImporter.decompressBlob) + .flatMap(k => Crossref2Oaf.convert(k)).saveAsObjectFile(s"${targetPath}/mixObject") + + val inputRDD = sc.objectFile[Oaf](s"${targetPath}/mixObject").filter(p=> p!= null) + + val distinctPubs:RDD[Publication] = inputRDD.filter(k => k != null && k.isInstanceOf[Publication]) + .map(k => k.asInstanceOf[Publication]).map { p: Publication => Tuple2(p.getId, p) }.reduceByKey { case (p1: Publication, p2: Publication) => + var r = if (p1 == null) p2 else p1 + if (p1 != null && p2 != null) { + if (p1.getLastupdatetimestamp != null && p2.getLastupdatetimestamp != null) { + if (p1.getLastupdatetimestamp < p2.getLastupdatetimestamp) + r = p2 + else + r = p1 + } else { + r = if (p1.getLastupdatetimestamp == null) p2 else p1 + } + } + r + }.map(_._2) + + val pubs:Dataset[Publication] = spark.createDataset(distinctPubs) + pubs.write.mode(SaveMode.Overwrite).save(s"${targetPath}/publication") + + + val distincDatasets:RDD[OafDataset] = inputRDD.filter(k => k != null && k.isInstanceOf[OafDataset]) + .map(k => k.asInstanceOf[OafDataset]).map(p => Tuple2(p.getId, p)).reduceByKey { case (p1: OafDataset, p2: OafDataset) => + var r = if (p1 == null) p2 else p1 + if (p1 != null && p2 != null) { + if (p1.getLastupdatetimestamp != null && p2.getLastupdatetimestamp != null) { + if (p1.getLastupdatetimestamp < p2.getLastupdatetimestamp) + r = p2 + else + r = p1 + } else { + r = if (p1.getLastupdatetimestamp == null) p2 else p1 + } + } + r + }.map(_._2) + + spark.createDataset(distincDatasets).write.mode(SaveMode.Overwrite).save(s"${targetPath}/dataset") + + + + val distinctRels =inputRDD.filter(k => k != null && k.isInstanceOf[Relation]) + .map(k => k.asInstanceOf[Relation]).map(r=> (s"${r.getSource}::${r.getTarget}",r)) + .reduceByKey { case (p1: Relation, p2: Relation) => + if (p1 == null) p2 else p1 + }.map(_._2) + + val rels: Dataset[Relation] = spark.createDataset(distinctRels) + + rels.write.mode(SaveMode.Overwrite).save(s"${targetPath}/relations") + } + + +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/mag/MagDataModel.scala b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/mag/MagDataModel.scala new file mode 100644 index 000000000..1c6e1b0e6 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/mag/MagDataModel.scala @@ -0,0 +1,314 @@ +package eu.dnetlib.doiboost.mag + + +import eu.dnetlib.dhp.schema.oaf.{Instance, Journal, Publication, StructuredProperty} +import eu.dnetlib.doiboost.DoiBoostMappingUtil +import org.json4s +import org.json4s.DefaultFormats +import org.json4s.jackson.JsonMethods.parse +import eu.dnetlib.doiboost.DoiBoostMappingUtil._ + +import scala.collection.JavaConverters._ +import scala.collection.mutable +import scala.util.matching.Regex + + +case class MagPapers(PaperId: Long, Rank: Integer, Doi: String, + DocType: String, PaperTitle: String, OriginalTitle: String, + BookTitle: String, Year: Option[Integer], Date: Option[java.sql.Timestamp], Publisher: String, + JournalId: Option[Long], ConferenceSeriesId: Option[Long], ConferenceInstanceId: Option[Long], + Volume: String, Issue: String, FirstPage: String, LastPage: String, + ReferenceCount: Option[Long], CitationCount: Option[Long], EstimatedCitation: Option[Long], + OriginalVenue: String, FamilyId: Option[Long], CreatedDate: java.sql.Timestamp) {} + + +case class MagPaperAbstract(PaperId: Long, IndexedAbstract: String) {} + +case class MagAuthor(AuthorId: Long, Rank: Option[Int], NormalizedName: Option[String], DisplayName: Option[String], LastKnownAffiliationId: Option[Long], PaperCount: Option[Long], CitationCount: Option[Long], CreatedDate: Option[java.sql.Timestamp]) {} + +case class MagAffiliation(AffiliationId: Long, Rank: Int, NormalizedName: String, DisplayName: String, GridId: String, OfficialPage: String, WikiPage: String, PaperCount: Long, CitationCount: Long, Latitude: Option[Float], Longitude: Option[Float], CreatedDate: java.sql.Timestamp) {} + +case class MagPaperAuthorAffiliation(PaperId: Long, AuthorId: Long, AffiliationId: Option[Long], AuthorSequenceNumber: Int, OriginalAuthor: String, OriginalAffiliation: String) {} + + +case class MagAuthorAffiliation(author: MagAuthor, affiliation:String) + +case class MagPaperWithAuthorList(PaperId: Long, authors: List[MagAuthorAffiliation]) {} + +case class MagPaperAuthorDenormalized(PaperId: Long, author: MagAuthor, affiliation:String) {} + +case class MagPaperUrl(PaperId: Long, SourceType: Option[Int], SourceUrl: Option[String], LanguageCode: Option[String]) {} + +case class MagUrlInstance(SourceUrl:String){} + +case class MagUrl(PaperId: Long, instances: List[MagUrlInstance]) + +case class MagSubject(FieldOfStudyId:Long, DisplayName:String, MainType:Option[String], Score:Float){} + +case class MagFieldOfStudy(PaperId:Long, subjects:List[MagSubject]) {} + +case class MagJournal(JournalId: Long, Rank: Option[Int], NormalizedName: Option[String], DisplayName: Option[String], Issn: Option[String], Publisher: Option[String], Webpage: Option[String], PaperCount: Option[Long], CitationCount: Option[Long], CreatedDate: Option[java.sql.Timestamp]) {} + + +case class MagConferenceInstance(ci:Long, DisplayName:Option[String], Location:Option[String], StartDate:Option[java.sql.Timestamp], EndDate:Option[java.sql.Timestamp], PaperId:Long){} + +case object ConversionUtil { + + def extractMagIdentifier(pids:mutable.Buffer[String]) :String ={ + val magIDRegex: Regex = "^[0-9]+$".r + val s =pids.filter(p=> magIDRegex.findAllIn(p).hasNext) + + if (s.nonEmpty) + return s.head + null + } + + + def mergePublication(a: Publication, b:Publication) : Publication = { + if ((a != null) && (b != null)) { + a.mergeFrom(b) + a + } else { + if (a == null) b else a + } + + + } + + def choiceLatestMagArtitcle(p1: MagPapers, p2:MagPapers) :MagPapers = { + var r = if (p1 == null) p2 else p1 + if (p1 != null && p2 != null) { + if (p1.CreatedDate != null && p2.CreatedDate != null) { + if (p1.CreatedDate.before(p2.CreatedDate)) + r = p2 + else + r = p1 + } else { + r = if (p1.CreatedDate == null) p2 else p1 + } + } + r + + } + + + def updatePubsWithDescription(inputItem:((String, Publication), MagPaperAbstract)) : Publication = { + val pub = inputItem._1._2 + val abst = inputItem._2 + if (abst != null) { + pub.setDescription(List(asField(abst.IndexedAbstract)).asJava) + } + pub + + } + + + def updatePubsWithConferenceInfo(inputItem:((String, Publication), MagConferenceInstance)) : Publication = { + val publication:Publication= inputItem._1._2 + val ci:MagConferenceInstance = inputItem._2 + + if (ci!= null){ + + val j:Journal = new Journal + if (ci.Location.isDefined) + j.setConferenceplace(ci.Location.get) + j.setName(ci.DisplayName.get) + if (ci.StartDate.isDefined && ci.EndDate.isDefined) + { + j.setConferencedate(s"${ci.StartDate.get.toString.substring(0,10)} - ${ci.EndDate.get.toString.substring(0,10)}") + } + + publication.setJournal(j) + } + publication + } + + def updatePubsWithSubject(item:((String, Publication), MagFieldOfStudy)) : Publication = { + + val publication = item._1._2 + val fieldOfStudy = item._2 + if (fieldOfStudy != null && fieldOfStudy.subjects != null && fieldOfStudy.subjects.nonEmpty) { + val p: List[StructuredProperty] = fieldOfStudy.subjects.flatMap(s => { + val s1 = createSP(s.DisplayName, "keywords", "dnet:subject_classification_typologies") + val di = DoiBoostMappingUtil.generateDataInfo(s.Score.toString) + var resList: List[StructuredProperty] = List(s1) + if (s.MainType.isDefined) { + val maintp = s.MainType.get + val s2 = createSP(s.MainType.get, "keywords", "dnet:subject_classification_typologies") + s2.setDataInfo(di) + resList = resList ::: List(s2) + if (maintp.contains(".")) { + val s3 = createSP(maintp.split("\\.").head, "keywords", "dnet:subject_classification_typologies") + s3.setDataInfo(di) + resList = resList ::: List(s3) + } + } + resList + }) + publication.setSubject(p.asJava) + } + publication + } + + + + def addInstances(a: (Publication, MagUrl)): Publication = { + val pub = a._1 + val urls = a._2 + + + + val i = new Instance + + + if (urls!= null) { + + val l:List[String] = urls.instances.filter(k=>k.SourceUrl.nonEmpty).map(k=>k.SourceUrl):::List(s"https://academic.microsoft.com/#/detail/${extractMagIdentifier(pub.getOriginalId.asScala)}") + + i.setUrl(l.asJava) + } + else + i.setUrl(List(s"https://academic.microsoft.com/#/detail/${extractMagIdentifier(pub.getOriginalId.asScala)}").asJava) + + i.setCollectedfrom(createMAGCollectedFrom()) + pub.setInstance(List(i).asJava) + pub + } + + + def transformPaperAbstract(input: MagPaperAbstract): MagPaperAbstract = { + MagPaperAbstract(input.PaperId, convertInvertedIndexString(input.IndexedAbstract)) + } + + + def createOAFFromJournalAuthorPaper(inputParams: ((MagPapers, MagJournal), MagPaperWithAuthorList)): Publication = { + val paper = inputParams._1._1 + val journal = inputParams._1._2 + val authors = inputParams._2 + + val pub = new Publication + pub.setPid(List(createSP(paper.Doi.toLowerCase, "doi", PID_TYPES)).asJava) + pub.setOriginalId(List(paper.PaperId.toString, paper.Doi.toLowerCase).asJava) + + //Set identifier as {50|60} | doiboost____::md5(DOI) + pub.setId(generateIdentifier(pub, paper.Doi.toLowerCase)) + + val mainTitles = createSP(paper.PaperTitle, "main title", "dnet:dataCite_title") + val originalTitles = createSP(paper.OriginalTitle, "alternative title", "dnet:dataCite_title") + pub.setTitle(List(mainTitles, originalTitles).asJava) + + pub.setSource(List(asField(paper.BookTitle)).asJava) + + val authorsOAF = authors.authors.map { f: MagAuthorAffiliation => + + val a: eu.dnetlib.dhp.schema.oaf.Author = new eu.dnetlib.dhp.schema.oaf.Author + + a.setFullname(f.author.DisplayName.get) + + if(f.affiliation!= null) + a.setAffiliation(List(asField(f.affiliation)).asJava) + a.setPid(List(createSP(s"https://academic.microsoft.com/#/detail/${f.author.AuthorId}", "URL", PID_TYPES)).asJava) + a + } + pub.setAuthor(authorsOAF.asJava) + + + if (paper.Date != null && paper.Date.isDefined) { + pub.setDateofacceptance(asField(paper.Date.get.toString.substring(0,10))) + } + pub.setPublisher(asField(paper.Publisher)) + + + if (journal != null && journal.DisplayName.isDefined) { + val j = new Journal + + j.setName(journal.DisplayName.get) + j.setSp(paper.FirstPage) + j.setEp(paper.LastPage) + if (journal.Publisher.isDefined) + pub.setPublisher(asField(journal.Publisher.get)) + if (journal.Issn.isDefined) + j.setIssnPrinted(journal.Issn.get) + pub.setJournal(j) + } + pub.setCollectedfrom(List(createMAGCollectedFrom()).asJava) + pub.setDataInfo(generateDataInfo()) + pub + } + + + def createOAF(inputParams: ((MagPapers, MagPaperWithAuthorList), MagPaperAbstract)): Publication = { + + val paper = inputParams._1._1 + val authors = inputParams._1._2 + val description = inputParams._2 + + val pub = new Publication + pub.setPid(List(createSP(paper.Doi.toLowerCase, "doi", PID_TYPES)).asJava) + pub.setOriginalId(List(paper.PaperId.toString, paper.Doi.toLowerCase).asJava) + + //Set identifier as {50|60} | doiboost____::md5(DOI) + pub.setId(generateIdentifier(pub, paper.Doi.toLowerCase)) + + val mainTitles = createSP(paper.PaperTitle, "main title", "dnet:dataCite_title") + val originalTitles = createSP(paper.OriginalTitle, "alternative title", "dnet:dataCite_title") + pub.setTitle(List(mainTitles, originalTitles).asJava) + + pub.setSource(List(asField(paper.BookTitle)).asJava) + + + if (description != null) { + pub.setDescription(List(asField(description.IndexedAbstract)).asJava) + } + + + val authorsOAF = authors.authors.map { f: MagAuthorAffiliation => + + val a: eu.dnetlib.dhp.schema.oaf.Author = new eu.dnetlib.dhp.schema.oaf.Author + + a.setFullname(f.author.DisplayName.get) + + if(f.affiliation!= null) + a.setAffiliation(List(asField(f.affiliation)).asJava) + + + a.setPid(List(createSP(s"https://academic.microsoft.com/#/detail/${f.author.AuthorId}", "URL", PID_TYPES)).asJava) + + a + + } + + + if (paper.Date != null) { + pub.setDateofacceptance(asField(paper.Date.toString.substring(0,10))) + } + + pub.setAuthor(authorsOAF.asJava) + + + pub + + } + + + def convertInvertedIndexString(json_input: String): String = { + implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats + lazy val json: json4s.JValue = parse(json_input) + val idl = (json \ "IndexLength").extract[Int] + if (idl > 0) { + val res = Array.ofDim[String](idl) + + val iid = (json \ "InvertedIndex").extract[Map[String, List[Int]]] + + for {(k: String, v: List[Int]) <- iid} { + v.foreach(item => res(item) = k) + } + (0 until idl).foreach(i => { + if (res(i) == null) + res(i) = "" + }) + return res.mkString(" ") + } + "" + } +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/mag/SparkImportMagIntoDataset.scala b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/mag/SparkImportMagIntoDataset.scala new file mode 100644 index 000000000..f291a92f9 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/mag/SparkImportMagIntoDataset.scala @@ -0,0 +1,92 @@ +package eu.dnetlib.doiboost.mag + +import eu.dnetlib.dhp.application.ArgumentApplicationParser +import org.apache.commons.io.IOUtils +import org.apache.spark.SparkConf +import org.apache.spark.sql.{SaveMode, SparkSession} +import org.apache.spark.sql.types._ +import org.slf4j.{Logger, LoggerFactory} +import org.apache.spark.sql.functions._ + +object SparkImportMagIntoDataset { + val datatypedict = Map( + "int" -> IntegerType, + "uint" -> IntegerType, + "long" -> LongType, + "ulong" -> LongType, + "float" -> FloatType, + "string" -> StringType, + "DateTime" -> DateType + ) + + + val stream = Map( + "Affiliations" -> Tuple2("mag/Affiliations.txt", Seq("AffiliationId:long", "Rank:uint", "NormalizedName:string", "DisplayName:string", "GridId:string", "OfficialPage:string", "WikiPage:string", "PaperCount:long", "CitationCount:long", "Latitude:float?", "Longitude:float?", "CreatedDate:DateTime")), + "Authors" -> Tuple2("mag/Authors.txt", Seq("AuthorId:long", "Rank:uint", "NormalizedName:string", "DisplayName:string", "LastKnownAffiliationId:long?", "PaperCount:long", "CitationCount:long", "CreatedDate:DateTime")), + "ConferenceInstances" -> Tuple2("mag/ConferenceInstances.txt", Seq("ConferenceInstanceId:long", "NormalizedName:string", "DisplayName:string", "ConferenceSeriesId:long", "Location:string", "OfficialUrl:string", "StartDate:DateTime?", "EndDate:DateTime?", "AbstractRegistrationDate:DateTime?", "SubmissionDeadlineDate:DateTime?", "NotificationDueDate:DateTime?", "FinalVersionDueDate:DateTime?", "PaperCount:long", "CitationCount:long", "Latitude:float?", "Longitude:float?", "CreatedDate:DateTime")), + "ConferenceSeries" -> Tuple2("mag/ConferenceSeries.txt", Seq("ConferenceSeriesId:long", "Rank:uint", "NormalizedName:string", "DisplayName:string", "PaperCount:long", "CitationCount:long", "CreatedDate:DateTime")), + "EntityRelatedEntities" -> Tuple2("advanced/EntityRelatedEntities.txt", Seq("EntityId:long", "EntityType:string", "RelatedEntityId:long", "RelatedEntityType:string", "RelatedType:int", "Score:float")), + "FieldOfStudyChildren" -> Tuple2("advanced/FieldOfStudyChildren.txt", Seq("FieldOfStudyId:long", "ChildFieldOfStudyId:long")), + "FieldOfStudyExtendedAttributes" -> Tuple2("advanced/FieldOfStudyExtendedAttributes.txt", Seq("FieldOfStudyId:long", "AttributeType:int", "AttributeValue:string")), + "FieldsOfStudy" -> Tuple2("advanced/FieldsOfStudy.txt", Seq("FieldOfStudyId:long", "Rank:uint", "NormalizedName:string", "DisplayName:string", "MainType:string", "Level:int", "PaperCount:long", "CitationCount:long", "CreatedDate:DateTime")), + "Journals" -> Tuple2("mag/Journals.txt", Seq("JournalId:long", "Rank:uint", "NormalizedName:string", "DisplayName:string", "Issn:string", "Publisher:string", "Webpage:string", "PaperCount:long", "CitationCount:long", "CreatedDate:DateTime")), + "PaperAbstractsInvertedIndex" -> Tuple2("nlp/PaperAbstractsInvertedIndex.txt.*", Seq("PaperId:long", "IndexedAbstract:string")), + "PaperAuthorAffiliations" -> Tuple2("mag/PaperAuthorAffiliations.txt", Seq("PaperId:long", "AuthorId:long", "AffiliationId:long?", "AuthorSequenceNumber:uint", "OriginalAuthor:string", "OriginalAffiliation:string")), + "PaperCitationContexts" -> Tuple2("nlp/PaperCitationContexts.txt", Seq("PaperId:long", "PaperReferenceId:long", "CitationContext:string")), + "PaperExtendedAttributes" -> Tuple2("mag/PaperExtendedAttributes.txt", Seq("PaperId:long", "AttributeType:int", "AttributeValue:string")), + "PaperFieldsOfStudy" -> Tuple2("advanced/PaperFieldsOfStudy.txt", Seq("PaperId:long", "FieldOfStudyId:long", "Score:float")), + "PaperRecommendations" -> Tuple2("advanced/PaperRecommendations.txt", Seq("PaperId:long", "RecommendedPaperId:long", "Score:float")), + "PaperReferences" -> Tuple2("mag/PaperReferences.txt", Seq("PaperId:long", "PaperReferenceId:long")), + "PaperResources" -> Tuple2("mag/PaperResources.txt", Seq("PaperId:long", "ResourceType:int", "ResourceUrl:string", "SourceUrl:string", "RelationshipType:int")), + "PaperUrls" -> Tuple2("mag/PaperUrls.txt", Seq("PaperId:long", "SourceType:int?", "SourceUrl:string", "LanguageCode:string")), + "Papers" -> Tuple2("mag/Papers.txt", Seq("PaperId:long", "Rank:uint", "Doi:string", "DocType:string", "PaperTitle:string", "OriginalTitle:string", "BookTitle:string", "Year:int?", "Date:DateTime?", "Publisher:string", "JournalId:long?", "ConferenceSeriesId:long?", "ConferenceInstanceId:long?", "Volume:string", "Issue:string", "FirstPage:string", "LastPage:string", "ReferenceCount:long", "CitationCount:long", "EstimatedCitation:long", "OriginalVenue:string", "FamilyId:long?", "CreatedDate:DateTime")), + "RelatedFieldOfStudy" -> Tuple2("advanced/RelatedFieldOfStudy.txt", Seq("FieldOfStudyId1:long", "Type1:string", "FieldOfStudyId2:long", "Type2:string", "Rank:float")) + ) + + + def getSchema(streamName: String): StructType = { + var schema = new StructType() + val d: Seq[String] = stream(streamName)._2 + d.foreach { case t => + val currentType = t.split(":") + val fieldName: String = currentType.head + var fieldType: String = currentType.last + val nullable: Boolean = fieldType.endsWith("?") + if (nullable) + fieldType = fieldType.replace("?", "") + schema = schema.add(StructField(fieldName, datatypedict(fieldType), nullable)) + } + schema + } + + + def main(args: Array[String]): Unit = { + val logger: Logger = LoggerFactory.getLogger(getClass) + val conf: SparkConf = new SparkConf() + val parser = new ArgumentApplicationParser(IOUtils.toString(getClass.getResourceAsStream("/eu/dnetlib/dhp/doiboost/mag/convert_mag_to_oaf_params.json"))) + parser.parseArgument(args) + val spark: SparkSession = + SparkSession + .builder() + .config(conf) + .appName(getClass.getSimpleName) + .master(parser.get("master")).getOrCreate() + + + + stream.foreach { case (k, v) => + val s: StructType = getSchema(k) + val df = spark.read + .option("header", "false") + .option("charset", "UTF8") + .option("delimiter", "\t") + .schema(s) + .csv(s"${parser.get("sourcePath")}/${v._1}") + logger.info(s"Converting $k") + + df.write.mode(SaveMode.Overwrite).save(s"${parser.get("targetPath")}/$k") + } + + } + +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/mag/SparkPreProcessMAG.scala b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/mag/SparkPreProcessMAG.scala new file mode 100644 index 000000000..f3d051bd6 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/mag/SparkPreProcessMAG.scala @@ -0,0 +1,157 @@ +package eu.dnetlib.doiboost.mag + +import eu.dnetlib.dhp.application.ArgumentApplicationParser +import eu.dnetlib.dhp.schema.oaf.Publication +import org.apache.commons.io.IOUtils +import org.apache.spark.SparkConf +import org.apache.spark.rdd.RDD +import org.apache.spark.sql.functions._ +import org.apache.spark.sql._ +import org.slf4j.{Logger, LoggerFactory} + +import scala.collection.JavaConverters._ + +object SparkPreProcessMAG { + def main(args: Array[String]): Unit = { + + val logger: Logger = LoggerFactory.getLogger(getClass) + val conf: SparkConf = new SparkConf() + val parser = new ArgumentApplicationParser(IOUtils.toString(getClass.getResourceAsStream("/eu/dnetlib/dhp/doiboost/mag/preprocess_mag_params.json"))) + parser.parseArgument(args) + val spark: SparkSession = + SparkSession + .builder() + .config(conf) + .appName(getClass.getSimpleName) + .master(parser.get("master")).getOrCreate() + + val sourcePath = parser.get("sourcePath") + import spark.implicits._ + implicit val mapEncoderPubs: Encoder[Publication] = org.apache.spark.sql.Encoders.kryo[Publication] + implicit val tupleForJoinEncoder: Encoder[(String, Publication)] = Encoders.tuple(Encoders.STRING, mapEncoderPubs) + + logger.info("Phase 1) make uninque DOI in Papers:") + val d: Dataset[MagPapers] = spark.read.load(s"${parser.get("sourcePath")}/Papers").as[MagPapers] + + // Filtering Papers with DOI, and since for the same DOI we have multiple version of item with different PapersId we get the last one + val result: RDD[MagPapers] = d.where(col("Doi").isNotNull) + .rdd + .map{ p: MagPapers => Tuple2(p.Doi, p) } + .reduceByKey((p1:MagPapers,p2:MagPapers) => ConversionUtil.choiceLatestMagArtitcle(p1,p2)) + .map(_._2) + + val distinctPaper: Dataset[MagPapers] = spark.createDataset(result) + distinctPaper.write.mode(SaveMode.Overwrite).save(s"${parser.get("targetPath")}/Papers_distinct") + + logger.info("Phase 6) Enrich Publication with description") + val pa = spark.read.load(s"${parser.get("sourcePath")}/PaperAbstractsInvertedIndex").as[MagPaperAbstract] + pa.map(ConversionUtil.transformPaperAbstract).write.mode(SaveMode.Overwrite).save(s"${parser.get("targetPath")}/PaperAbstract") + + logger.info("Phase 3) Group Author by PaperId") + val authors = spark.read.load(s"$sourcePath/Authors").as[MagAuthor] + + val affiliation = spark.read.load(s"$sourcePath/Affiliations").as[MagAffiliation] + val paperAuthorAffiliation = spark.read.load(s"$sourcePath/PaperAuthorAffiliations").as[MagPaperAuthorAffiliation] + + paperAuthorAffiliation.joinWith(authors, paperAuthorAffiliation("AuthorId").equalTo(authors("AuthorId"))) + .map { case (a: MagPaperAuthorAffiliation, b: MagAuthor) => (a.AffiliationId, MagPaperAuthorDenormalized(a.PaperId, b, null)) } + .joinWith(affiliation, affiliation("AffiliationId").equalTo(col("_1")), "left") + .map(s => { + val mpa = s._1._2 + val af = s._2 + if (af != null) { + MagPaperAuthorDenormalized(mpa.PaperId, mpa.author, af.DisplayName) + } else + mpa + }).groupBy("PaperId").agg(collect_list(struct($"author", $"affiliation")).as("authors")) + .write.mode(SaveMode.Overwrite).save(s"${parser.get("targetPath")}/merge_step_1_paper_authors") + + logger.info("Phase 4) create First Version of publication Entity with Paper Journal and Authors") + + val journals = spark.read.load(s"$sourcePath/Journals").as[MagJournal] + + val papers = spark.read.load((s"${parser.get("targetPath")}/Papers_distinct")).as[MagPapers] + + val paperWithAuthors = spark.read.load(s"${parser.get("targetPath")}/merge_step_1_paper_authors").as[MagPaperWithAuthorList] + + val firstJoin = papers.joinWith(journals, papers("JournalId").equalTo(journals("JournalId")), "left") + firstJoin.joinWith(paperWithAuthors, firstJoin("_1.PaperId").equalTo(paperWithAuthors("PaperId")), "left") + .map { a => ConversionUtil.createOAFFromJournalAuthorPaper(a) } + .write.mode(SaveMode.Overwrite).save(s"${parser.get("targetPath")}/merge_step_2") + + + var magPubs: Dataset[(String, Publication)] = + spark.read.load(s"${parser.get("targetPath")}/merge_step_2").as[Publication] + .map(p => (ConversionUtil.extractMagIdentifier(p.getOriginalId.asScala), p)).as[(String, Publication)] + + + val conference = spark.read.load(s"$sourcePath/ConferenceInstances") + .select($"ConferenceInstanceId".as("ci"), $"DisplayName", $"Location", $"StartDate",$"EndDate" ) + val conferenceInstance = conference.joinWith(papers, papers("ConferenceInstanceId").equalTo(conference("ci"))) + .select($"_1.ci", $"_1.DisplayName", $"_1.Location", $"_1.StartDate",$"_1.EndDate", $"_2.PaperId").as[MagConferenceInstance] + + + magPubs.joinWith(conferenceInstance, col("_1").equalTo(conferenceInstance("PaperId")), "left") + .map(item => ConversionUtil.updatePubsWithConferenceInfo(item)) + .write + .mode(SaveMode.Overwrite) + .save(s"${parser.get("targetPath")}/merge_step_2_conference") + + + magPubs= spark.read.load(s"${parser.get("targetPath")}/merge_step_2_conference").as[Publication] + .map(p => (ConversionUtil.extractMagIdentifier(p.getOriginalId.asScala), p)).as[(String, Publication)] + + val paperUrlDataset = spark.read.load(s"$sourcePath/PaperUrls").as[MagPaperUrl].groupBy("PaperId").agg(collect_list(struct("sourceUrl")).as("instances")).as[MagUrl] + + + logger.info("Phase 5) enrich publication with URL and Instances") + magPubs.joinWith(paperUrlDataset, col("_1").equalTo(paperUrlDataset("PaperId")), "left") + .map { a: ((String, Publication), MagUrl) => ConversionUtil.addInstances((a._1._2, a._2)) } + .write.mode(SaveMode.Overwrite) + .save(s"${parser.get("targetPath")}/merge_step_3") + + +// logger.info("Phase 6) Enrich Publication with description") +// val pa = spark.read.load(s"${parser.get("sourcePath")}/PaperAbstractsInvertedIndex").as[MagPaperAbstract] +// pa.map(ConversionUtil.transformPaperAbstract).write.mode(SaveMode.Overwrite).save(s"${parser.get("targetPath")}/PaperAbstract") + + val paperAbstract = spark.read.load((s"${parser.get("targetPath")}/PaperAbstract")).as[MagPaperAbstract] + + + magPubs = spark.read.load(s"${parser.get("targetPath")}/merge_step_3").as[Publication] + .map(p => (ConversionUtil.extractMagIdentifier(p.getOriginalId.asScala), p)).as[(String, Publication)] + + magPubs.joinWith(paperAbstract, col("_1").equalTo(paperAbstract("PaperId")), "left") + .map(item => ConversionUtil.updatePubsWithDescription(item) + ).write.mode(SaveMode.Overwrite).save(s"${parser.get("targetPath")}/merge_step_4") + + + logger.info("Phase 7) Enrich Publication with FieldOfStudy") + + magPubs = spark.read.load(s"${parser.get("targetPath")}/merge_step_4").as[Publication] + .map(p => (ConversionUtil.extractMagIdentifier(p.getOriginalId.asScala), p)).as[(String, Publication)] + + val fos = spark.read.load(s"$sourcePath/FieldsOfStudy").select($"FieldOfStudyId".alias("fos"), $"DisplayName", $"MainType") + + val pfos = spark.read.load(s"$sourcePath/PaperFieldsOfStudy") + + val paperField = pfos.joinWith(fos, fos("fos").equalTo(pfos("FieldOfStudyId"))) + .select($"_1.FieldOfStudyId", $"_2.DisplayName", $"_2.MainType", $"_1.PaperId", $"_1.Score") + .groupBy($"PaperId").agg(collect_list(struct($"FieldOfStudyId", $"DisplayName", $"MainType", $"Score")).as("subjects")) + .as[MagFieldOfStudy] + + magPubs.joinWith(paperField, col("_1") + .equalTo(paperField("PaperId")), "left") + .map(item => ConversionUtil.updatePubsWithSubject(item)) + .write.mode(SaveMode.Overwrite) + .save(s"${parser.get("targetPath")}/mag_publication") + + + val s:RDD[Publication] = spark.read.load(s"${parser.get("targetPath")}/mag_publication").as[Publication] + .map(p=>Tuple2(p.getId, p)).rdd.reduceByKey((a:Publication, b:Publication) => ConversionUtil.mergePublication(a,b)) + .map(_._2) + + spark.createDataset(s).as[Publication].write.mode(SaveMode.Overwrite).save(s"${parser.get("targetPath")}/mag_publication_u") + + } +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/ActivitiesDecompressor.java b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/ActivitiesDecompressor.java new file mode 100644 index 000000000..570fdef17 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/ActivitiesDecompressor.java @@ -0,0 +1,146 @@ + +package eu.dnetlib.doiboost.orcid; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URI; + +import org.apache.commons.compress.archivers.tar.TarArchiveEntry; +import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.io.IOUtils; +import org.apache.hadoop.io.SequenceFile; +import org.apache.hadoop.io.Text; +import org.apache.hadoop.io.compress.CompressionCodec; +import org.apache.hadoop.io.compress.CompressionCodecFactory; +import org.mortbay.log.Log; + +import eu.dnetlib.doiboost.orcid.json.JsonWriter; +import eu.dnetlib.doiboost.orcid.model.WorkData; +import eu.dnetlib.doiboost.orcid.xml.XMLRecordParser; + +public class ActivitiesDecompressor { + + private static final int MAX_XML_WORKS_PARSED = -1; + private static final int XML_WORKS_PARSED_COUNTER_LOG_INTERVAL = 100000; + + public static void parseGzActivities(Configuration conf, String inputUri, Path outputPath) + throws Exception { + String uri = inputUri; + FileSystem fs = FileSystem.get(URI.create(uri), conf); + Path inputPath = new Path(uri); + CompressionCodecFactory factory = new CompressionCodecFactory(conf); + CompressionCodec codec = factory.getCodec(inputPath); + if (codec == null) { + System.err.println("No codec found for " + uri); + System.exit(1); + } + CompressionCodecFactory.removeSuffix(uri, codec.getDefaultExtension()); + InputStream gzipInputStream = null; + try { + gzipInputStream = codec.createInputStream(fs.open(inputPath)); + parseTarActivities(fs, conf, gzipInputStream, outputPath); + + } finally { + Log.debug("Closing gzip stream"); + IOUtils.closeStream(gzipInputStream); + } + } + + private static void parseTarActivities( + FileSystem fs, Configuration conf, InputStream gzipInputStream, Path outputPath) { + int counter = 0; + int doiFound = 0; + int errorFromOrcidFound = 0; + int xmlParserErrorFound = 0; + try (TarArchiveInputStream tais = new TarArchiveInputStream(gzipInputStream)) { + TarArchiveEntry entry = null; + + try (SequenceFile.Writer writer = SequenceFile + .createWriter( + conf, + SequenceFile.Writer.file(outputPath), + SequenceFile.Writer.keyClass(Text.class), + SequenceFile.Writer.valueClass(Text.class))) { + while ((entry = tais.getNextTarEntry()) != null) { + String filename = entry.getName(); + + try { + if (entry.isDirectory() || !filename.contains("works")) { + + } else { + Log.debug("XML work entry name: " + entry.getName()); + counter++; + BufferedReader br = new BufferedReader(new InputStreamReader(tais)); // Read directly from + // tarInput + String line; + StringBuffer buffer = new StringBuffer(); + while ((line = br.readLine()) != null) { + buffer.append(line); + } + WorkData workData = XMLRecordParser.VTDParseWorkData(buffer.toString().getBytes()); + if (workData != null) { + if (workData.getErrorCode() != null) { + errorFromOrcidFound += 1; + Log + .debug( + "error from Orcid with code " + + workData.getErrorCode() + + " for entry " + + entry.getName()); + continue; + } + if (workData.isDoiFound()) { + String jsonData = JsonWriter.create(workData); + Log.debug("oid: " + workData.getOid() + " data: " + jsonData); + + final Text key = new Text(workData.getOid()); + final Text value = new Text(jsonData); + + try { + writer.append(key, value); + } catch (IOException e) { + Log.debug("Writing to sequence file: " + e.getMessage()); + Log.debug(e); + throw new RuntimeException(e); + } + doiFound += 1; + } + + } else { + Log.warn("Data not retrievable [" + entry.getName() + "] " + buffer.toString()); + xmlParserErrorFound += 1; + } + } + } catch (Exception e) { + Log + .warn( + "Parsing work from tar archive and xml work: " + filename + " " + e.getMessage()); + Log.warn(e); + } + + if ((counter % XML_WORKS_PARSED_COUNTER_LOG_INTERVAL) == 0) { + Log.info("Current xml works parsed: " + counter); + } + + if ((MAX_XML_WORKS_PARSED > -1) && (counter > MAX_XML_WORKS_PARSED)) { + break; + } + } + } + } catch (IOException e) { + Log.warn("Parsing work from gzip archive: " + e.getMessage()); + Log.warn(e); + throw new RuntimeException(e); + } + Log.info("Activities parse completed"); + Log.info("Total XML works parsed: " + counter); + Log.info("Total doi found: " + doiFound); + Log.info("Error from Orcid found: " + errorFromOrcidFound); + Log.info("Error parsing xml work found: " + xmlParserErrorFound); + } +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/ORCIDToOAF.scala b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/ORCIDToOAF.scala new file mode 100644 index 000000000..7b344f4a5 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/ORCIDToOAF.scala @@ -0,0 +1,87 @@ +package eu.dnetlib.doiboost.orcid + +import java.io.IOException + +import eu.dnetlib.dhp.schema.oaf.{Author, Publication} +import eu.dnetlib.doiboost.DoiBoostMappingUtil +import eu.dnetlib.doiboost.DoiBoostMappingUtil.{ORCID, PID_TYPES, createSP, generateDataInfo, generateIdentifier} +import eu.dnetlib.doiboost.crossref.Crossref2Oaf +import org.apache.commons.lang.StringUtils +import org.codehaus.jackson.map.ObjectMapper +import org.json4s +import org.json4s.DefaultFormats +import org.json4s.jackson.JsonMethods.parse +import org.slf4j.{Logger, LoggerFactory} + +import scala.collection.JavaConverters._ + + +case class ORCIDItem(oid:String,name:String,surname:String,creditName:String,errorCode:String){} + + + +case class ORCIDElement(doi:String, authors:List[ORCIDItem]) {} +object ORCIDToOAF { + val logger: Logger = LoggerFactory.getLogger(Crossref2Oaf.getClass) + val mapper = new ObjectMapper + + def isJsonValid(inputStr: String): Boolean = { + import java.io.IOException + try { + mapper.readTree(inputStr) + true + } catch { + case e: IOException => + false + } + } + + def extractValueFromInputString(input: String): (String, String) = { + val i = input.indexOf('[') + if (i <5) { + return null + } + val orcidList = input.substring(i, input.length - 1) + val doi = input.substring(1, i - 1) + if (isJsonValid(orcidList)) { + (doi, orcidList) + } else null + } + + + def convertTOOAF(input:ORCIDElement) :Publication = { + val doi = input.doi + val pub:Publication = new Publication + pub.setPid(List(createSP(doi, "doi", PID_TYPES)).asJava) + pub.setDataInfo(generateDataInfo()) + pub.setId(generateIdentifier(pub, doi.toLowerCase)) + try{ + pub.setAuthor(input.authors.map(a=> { + generateAuhtor(a.name, a.surname, a.creditName, a.oid) + }).asJava) + pub.setCollectedfrom(List(DoiBoostMappingUtil.createORIDCollectedFrom()).asJava) + pub.setDataInfo(DoiBoostMappingUtil.generateDataInfo()) + pub + } catch { + case e: Throwable => + logger.info(s"ERROR ON GENERATE Publication from $input") + null + } + } + + def generateAuhtor(given: String, family: String, fullName:String, orcid: String): Author = { + val a = new Author + a.setName(given) + a.setSurname(family) + if (fullName!= null && fullName.nonEmpty) + a.setFullname(fullName) + else + a.setFullname(s"$given $family") + if (StringUtils.isNotBlank(orcid)) + a.setPid(List(createSP(orcid, ORCID, PID_TYPES)).asJava) + + a + } + + +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/OrcidAuthorsDOIsDataGen.java b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/OrcidAuthorsDOIsDataGen.java new file mode 100644 index 000000000..70528a8f6 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/OrcidAuthorsDOIsDataGen.java @@ -0,0 +1,51 @@ + +package eu.dnetlib.doiboost.orcid; + +import java.io.IOException; + +import org.apache.commons.io.IOUtils; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.mortbay.log.Log; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; + +public class OrcidAuthorsDOIsDataGen extends OrcidDSManager { + + private String activitiesFileNameTarGz; + private String outputAuthorsDOIsPath; + + public static void main(String[] args) throws IOException, Exception { + OrcidAuthorsDOIsDataGen orcidAuthorsDOIsDataGen = new OrcidAuthorsDOIsDataGen(); + orcidAuthorsDOIsDataGen.loadArgs(args); + orcidAuthorsDOIsDataGen.generateAuthorsDOIsData(); + } + + public void generateAuthorsDOIsData() throws Exception { + Configuration conf = initConfigurationObject(); + FileSystem fs = initFileSystemObject(conf); + String tarGzUri = hdfsServerUri.concat(hdfsOrcidDefaultPath).concat(activitiesFileNameTarGz); + Path outputPath = new Path(hdfsServerUri.concat(hdfsOrcidDefaultPath).concat(outputAuthorsDOIsPath)); + ActivitiesDecompressor.parseGzActivities(conf, tarGzUri, outputPath); + } + + private void loadArgs(String[] args) throws IOException, Exception { + final ArgumentApplicationParser parser = new ArgumentApplicationParser( + IOUtils + .toString( + OrcidAuthorsDOIsDataGen.class + .getResourceAsStream( + "/eu/dnetlib/dhp/doiboost/create_orcid_authors_dois_data.json"))); + parser.parseArgument(args); + + hdfsServerUri = parser.get("hdfsServerUri"); + Log.info("HDFS URI: " + hdfsServerUri); + hdfsOrcidDefaultPath = parser.get("hdfsOrcidDefaultPath"); + Log.info("Default Path: " + hdfsOrcidDefaultPath); + activitiesFileNameTarGz = parser.get("activitiesFileNameTarGz"); + Log.info("Activities File Name: " + activitiesFileNameTarGz); + outputAuthorsDOIsPath = parser.get("outputAuthorsDOIsPath"); + Log.info("Output Authors DOIs Data: " + outputAuthorsDOIsPath); + } +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/OrcidDSManager.java b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/OrcidDSManager.java new file mode 100644 index 000000000..4f846bdf3 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/OrcidDSManager.java @@ -0,0 +1,81 @@ + +package eu.dnetlib.doiboost.orcid; + +import java.io.IOException; +import java.net.URI; + +import org.apache.commons.io.IOUtils; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.mortbay.log.Log; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; + +public class OrcidDSManager { + + protected String hdfsServerUri; + protected String hdfsOrcidDefaultPath; + private String summariesFileNameTarGz; + private String outputAuthorsPath; + + public static void main(String[] args) throws IOException, Exception { + OrcidDSManager orcidDSManager = new OrcidDSManager(); + orcidDSManager.loadArgs(args); + orcidDSManager.generateAuthors(); + } + + public void generateAuthors() throws Exception { + Configuration conf = initConfigurationObject(); + FileSystem fs = initFileSystemObject(conf); + String tarGzUri = hdfsServerUri.concat(hdfsOrcidDefaultPath).concat(summariesFileNameTarGz); + Path outputPath = new Path( + hdfsServerUri + .concat(hdfsOrcidDefaultPath) + .concat(outputAuthorsPath) + .concat("authors.seq")); + SummariesDecompressor.parseGzSummaries(conf, tarGzUri, outputPath); + } + + protected Configuration initConfigurationObject() { + // ====== Init HDFS File System Object + Configuration conf = new Configuration(); + // Set FileSystem URI + conf.set("fs.defaultFS", hdfsServerUri.concat(hdfsOrcidDefaultPath)); + // Because of Maven + conf.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName()); + conf.set("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName()); + return conf; + } + + protected FileSystem initFileSystemObject(Configuration conf) { + // Get the filesystem - HDFS + FileSystem fs = null; + try { + fs = FileSystem.get(URI.create(hdfsServerUri.concat(hdfsOrcidDefaultPath)), conf); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return fs; + } + + private void loadArgs(String[] args) throws IOException, Exception { + final ArgumentApplicationParser parser = new ArgumentApplicationParser( + IOUtils + .toString( + OrcidDSManager.class + .getResourceAsStream( + "/eu/dnetlib/dhp/doiboost/create_orcid_authors_data.json"))); + parser.parseArgument(args); + + hdfsServerUri = parser.get("hdfsServerUri"); + Log.info("HDFS URI: " + hdfsServerUri); + hdfsOrcidDefaultPath = parser.get("hdfsOrcidDefaultPath"); + Log.info("Default Path: " + hdfsOrcidDefaultPath); + summariesFileNameTarGz = parser.get("summariesFileNameTarGz"); + Log.info("Summaries File Name: " + summariesFileNameTarGz); + outputAuthorsPath = parser.get("outputAuthorsPath"); + Log.info("Output Authors Data: " + outputAuthorsPath); + } +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/OrcidDownloader.java b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/OrcidDownloader.java new file mode 100644 index 000000000..2e1a199da --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/OrcidDownloader.java @@ -0,0 +1,203 @@ + +package eu.dnetlib.doiboost.orcid; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +import org.apache.commons.io.IOUtils; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FSDataInputStream; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.io.SequenceFile; +import org.apache.hadoop.io.Text; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.mortbay.log.Log; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; + +public class OrcidDownloader extends OrcidDSManager { + + static final int REQ_LIMIT = 24; +// static final int REQ_MAX_TEST = 100; + static final int RECORD_PARSED_COUNTER_LOG_INTERVAL = 10000; + static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; + static final String lastUpdate = "2019-09-30 00:00:00"; + private String lambdaFileName; + private String outputPath; + private String token; + + public static void main(String[] args) throws IOException, Exception { + OrcidDownloader orcidDownloader = new OrcidDownloader(); + orcidDownloader.loadArgs(args); + orcidDownloader.parseLambdaFile(); + } + + private String downloadRecord(String orcidId) { + try (CloseableHttpClient client = HttpClients.createDefault()) { + HttpGet httpGet = new HttpGet("https://api.orcid.org/v3.0/" + orcidId + "/record"); + httpGet.addHeader("Accept", "application/vnd.orcid+xml"); + httpGet.addHeader("Authorization", String.format("Bearer %s", token)); + CloseableHttpResponse response = client.execute(httpGet); + if (response.getStatusLine().getStatusCode() != 200) { + Log + .warn( + "Downloading " + orcidId + " status code: " + response.getStatusLine().getStatusCode()); + return new String(""); + } + return IOUtils.toString(response.getEntity().getContent()); + + } catch (Throwable e) { + Log.warn("Downloading " + orcidId, e.getMessage()); + + } + return new String(""); + } + + public void parseLambdaFile() throws Exception { + int parsedRecordsCounter = 0; + int downloadedRecordsCounter = 0; + int savedRecordsCounter = 0; + long startDownload = 0; + Configuration conf = initConfigurationObject(); + FileSystem fs = initFileSystemObject(conf); + String lambdaFileUri = hdfsServerUri.concat(hdfsOrcidDefaultPath).concat(lambdaFileName); + Path hdfsreadpath = new Path(lambdaFileUri); + FSDataInputStream lambdaFileStream = fs.open(hdfsreadpath); + Path hdfsoutputPath = new Path( + hdfsServerUri + .concat(hdfsOrcidDefaultPath) + .concat(outputPath) + .concat("orcid_records.seq")); + + try (SequenceFile.Writer writer = SequenceFile + .createWriter( + conf, + SequenceFile.Writer.file(hdfsoutputPath), + SequenceFile.Writer.keyClass(Text.class), + SequenceFile.Writer.valueClass(Text.class))) { + + try (BufferedReader br = new BufferedReader(new InputStreamReader(lambdaFileStream))) { + String line; + int nReqTmp = 0; + startDownload = System.currentTimeMillis(); + long startReqTmp = System.currentTimeMillis(); + while ((line = br.readLine()) != null) { + parsedRecordsCounter++; + // skip headers line + if (parsedRecordsCounter == 1) { + continue; + } + String[] values = line.split(","); + List recordInfo = Arrays.asList(values); + String orcidId = recordInfo.get(0); + if (isModified(orcidId, recordInfo.get(3))) { + String record = downloadRecord(orcidId); + downloadedRecordsCounter++; + if (!record.isEmpty()) { + String compressRecord = ArgumentApplicationParser.compressArgument(record); + final Text key = new Text(recordInfo.get(0)); + final Text value = new Text(compressRecord); + + try { + writer.append(key, value); + savedRecordsCounter++; + } catch (IOException e) { + Log.warn("Writing to sequence file: " + e.getMessage()); + Log.warn(e); + throw new RuntimeException(e); + } + } + } + long endReq = System.currentTimeMillis(); + nReqTmp++; + if (nReqTmp == REQ_LIMIT) { + long reqSessionDuration = endReq - startReqTmp; + if (reqSessionDuration <= 1000) { + Log + .warn( + "\nreqSessionDuration: " + + reqSessionDuration + + " nReqTmp: " + + nReqTmp + + " wait ...."); + Thread.sleep(1000 - reqSessionDuration); + } else { + nReqTmp = 0; + startReqTmp = System.currentTimeMillis(); + } + } + +// if (parsedRecordsCounter > REQ_MAX_TEST) { +// break; +// } + if ((parsedRecordsCounter % RECORD_PARSED_COUNTER_LOG_INTERVAL) == 0) { + Log + .info( + "Current parsed: " + + parsedRecordsCounter + + " downloaded: " + + downloadedRecordsCounter + + " saved: " + + savedRecordsCounter); +// if (parsedRecordsCounter > REQ_MAX_TEST) { +// break; +// } + } + } + long endDownload = System.currentTimeMillis(); + long downloadTime = endDownload - startDownload; + Log.info("Download time: " + ((downloadTime / 1000) / 60) + " minutes"); + } + } + lambdaFileStream.close(); + Log.info("Download started at: " + new Date(startDownload).toString()); + Log.info("Parsed Records Counter: " + parsedRecordsCounter); + Log.info("Downloaded Records Counter: " + downloadedRecordsCounter); + Log.info("Saved Records Counter: " + savedRecordsCounter); + } + + private void loadArgs(String[] args) throws IOException, Exception { + final ArgumentApplicationParser parser = new ArgumentApplicationParser( + IOUtils + .toString( + OrcidDownloader.class + .getResourceAsStream( + "/eu/dnetlib/dhp/doiboost/download_orcid_data.json"))); + parser.parseArgument(args); + + hdfsServerUri = parser.get("hdfsServerUri"); + Log.info("HDFS URI: " + hdfsServerUri); + hdfsOrcidDefaultPath = parser.get("hdfsOrcidDefaultPath"); + Log.info("Default Path: " + hdfsOrcidDefaultPath); + lambdaFileName = parser.get("lambdaFileName"); + Log.info("Lambda File Name: " + lambdaFileName); + outputPath = parser.get("outputPath"); + Log.info("Output Data: " + outputPath); + token = parser.get("token"); + } + + private boolean isModified(String orcidId, String modifiedDate) { + Date modifiedDateDt = null; + Date lastUpdateDt = null; + try { + if (modifiedDate.length() != 19) { + modifiedDate = modifiedDate.substring(0, 19); + } + modifiedDateDt = new SimpleDateFormat(DATE_FORMAT).parse(modifiedDate); + lastUpdateDt = new SimpleDateFormat(DATE_FORMAT).parse(lastUpdate); + } catch (Exception e) { + Log.warn("[" + orcidId + "] Parsing date: ", e.getMessage()); + return true; + } + return modifiedDateDt.after(lastUpdateDt); + } +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/SparkConvertORCIDToOAF.scala b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/SparkConvertORCIDToOAF.scala new file mode 100644 index 000000000..1cd9ba4d4 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/SparkConvertORCIDToOAF.scala @@ -0,0 +1,44 @@ +package eu.dnetlib.doiboost.orcid + +import eu.dnetlib.dhp.application.ArgumentApplicationParser +import eu.dnetlib.dhp.schema.oaf.Publication +import eu.dnetlib.doiboost.mag.ConversionUtil +import org.apache.commons.io.IOUtils +import org.apache.spark.SparkConf +import org.apache.spark.rdd.RDD +import org.apache.spark.sql.{Dataset, Encoder, Encoders, SaveMode, SparkSession} +import org.slf4j.{Logger, LoggerFactory} + +object SparkConvertORCIDToOAF { + + + + def main(args: Array[String]): Unit = { + + val logger: Logger = LoggerFactory.getLogger(SparkConvertORCIDToOAF.getClass) + val conf: SparkConf = new SparkConf() + val parser = new ArgumentApplicationParser(IOUtils.toString(SparkConvertORCIDToOAF.getClass.getResourceAsStream("/eu/dnetlib/dhp/doiboost/convert_map_to_oaf_params.json"))) + parser.parseArgument(args) + val spark: SparkSession = + SparkSession + .builder() + .config(conf) + .appName(getClass.getSimpleName) + .master(parser.get("master")).getOrCreate() + + implicit val mapEncoderPubs: Encoder[Publication] = Encoders.kryo[Publication] + implicit val tupleForJoinEncoder: Encoder[(String, Publication)] = Encoders.tuple(Encoders.STRING, mapEncoderPubs) + import spark.implicits._ + val sourcePath = parser.get("sourcePath") + val targetPath = parser.get("targetPath") + val dataset:Dataset[ORCIDElement] = spark.read.json(sourcePath).as[ORCIDElement] + + + logger.info("Converting ORCID to OAF") + val d:RDD[Publication] = dataset.map(o => ORCIDToOAF.convertTOOAF(o)).filter(p=>p!=null).map(p=>(p.getId,p)).rdd.reduceByKey(ConversionUtil.mergePublication) + .map(_._2) + + spark.createDataset(d).as[Publication].write.mode(SaveMode.Overwrite).save(targetPath) + } + +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/SparkGenerateDoiAuthorList.java b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/SparkGenerateDoiAuthorList.java new file mode 100644 index 000000000..b4239bba2 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/SparkGenerateDoiAuthorList.java @@ -0,0 +1,180 @@ + +package eu.dnetlib.doiboost.orcid; + +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; + +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.apache.commons.io.IOUtils; +import org.apache.hadoop.io.Text; +import org.apache.hadoop.io.compress.GzipCodec; +import org.apache.hadoop.mapreduce.Job; +import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaPairRDD; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.api.java.function.Function; +import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.sql.Dataset; +import org.apache.spark.sql.Encoders; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.esotericsoftware.minlog.Log; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.doiboost.orcid.model.AuthorData; +import eu.dnetlib.doiboost.orcid.model.WorkData; +import scala.Tuple2; + +public class SparkGenerateDoiAuthorList { + + public static void main(String[] args) throws IOException, Exception { + Logger logger = LoggerFactory.getLogger(SparkGenerateDoiAuthorList.class); + logger.info("[ SparkGenerateDoiAuthorList STARTED]"); + + final ArgumentApplicationParser parser = new ArgumentApplicationParser( + IOUtils + .toString( + SparkGenerateDoiAuthorList.class + .getResourceAsStream( + "/eu/dnetlib/dhp/doiboost/gen_doi_author_list_orcid_parameters.json"))); + parser.parseArgument(args); + Boolean isSparkSessionManaged = Optional + .ofNullable(parser.get("isSparkSessionManaged")) + .map(Boolean::valueOf) + .orElse(Boolean.TRUE); + logger.info("isSparkSessionManaged: {}", isSparkSessionManaged); + final String workingPath = parser.get("workingPath"); + logger.info("workingPath: ", workingPath); + final String outputDoiAuthorListPath = parser.get("outputDoiAuthorListPath"); + logger.info("outputDoiAuthorListPath: ", outputDoiAuthorListPath); + + SparkConf conf = new SparkConf(); + runWithSparkSession( + conf, + isSparkSessionManaged, + spark -> { + JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + + JavaPairRDD summariesRDD = sc + .sequenceFile(workingPath + "../orcid_summaries/output/authors.seq", Text.class, Text.class); + Dataset summariesDataset = spark + .createDataset( + summariesRDD.map(seq -> loadAuthorFromJson(seq._1(), seq._2())).rdd(), + Encoders.bean(AuthorData.class)); + + JavaPairRDD activitiesRDD = sc + .sequenceFile(workingPath + "/output/*.seq", Text.class, Text.class); + Dataset activitiesDataset = spark + .createDataset( + activitiesRDD.map(seq -> loadWorkFromJson(seq._1(), seq._2())).rdd(), + Encoders.bean(WorkData.class)); + + Function, Tuple2>> toAuthorListFunction = data -> { + try { + String doi = data._1(); + if (doi == null) { + return null; + } + AuthorData author = data._2(); + if (author == null) { + return null; + } + List toAuthorList = Arrays.asList(author); + return new Tuple2<>(doi, toAuthorList); + } catch (Exception e) { + Log.error("toAuthorListFunction ERROR", e); + return null; + } + }; + + JavaRDD>> doisRDD = activitiesDataset + .joinWith( + summariesDataset, + activitiesDataset.col("oid").equalTo(summariesDataset.col("oid")), "inner") + .map( + (MapFunction, Tuple2>) value -> { + WorkData w = value._1; + AuthorData a = value._2; + return new Tuple2<>(w.getDoi(), a); + }, + Encoders.tuple(Encoders.STRING(), Encoders.bean(AuthorData.class))) + .filter(Objects::nonNull) + .toJavaRDD() + .map(toAuthorListFunction); + + JavaPairRDD + .fromJavaRDD(doisRDD) + .reduceByKey((d1, d2) -> { + try { + if (d1 != null && d2 != null) { + Stream mergedStream = Stream + .concat( + d1.stream(), + d2.stream()); + List mergedAuthors = mergedStream.collect(Collectors.toList()); + return mergedAuthors; + } + if (d1 != null) { + return d1; + } + if (d2 != null) { + return d2; + } + } catch (Exception e) { + Log.error("mergeAuthorsFunction ERROR", e); + return null; + } + return null; + }) + .mapToPair( + s -> { + ObjectMapper mapper = new ObjectMapper(); + return new Tuple2<>(s._1(), mapper.writeValueAsString(s._2())); + }) + .repartition(10) + .saveAsTextFile(workingPath + outputDoiAuthorListPath); + }); + + } + + private static AuthorData loadAuthorFromJson(Text orcidId, Text json) { + AuthorData authorData = new AuthorData(); + authorData.setOid(orcidId.toString()); + JsonElement jElement = new JsonParser().parse(json.toString()); + authorData.setName(getJsonValue(jElement, "name")); + authorData.setSurname(getJsonValue(jElement, "surname")); + authorData.setCreditName(getJsonValue(jElement, "creditname")); + return authorData; + } + + private static WorkData loadWorkFromJson(Text orcidId, Text json) { + WorkData workData = new WorkData(); + workData.setOid(orcidId.toString()); + JsonElement jElement = new JsonParser().parse(json.toString()); + workData.setDoi(getJsonValue(jElement, "doi")); + return workData; + } + + private static String getJsonValue(JsonElement jElement, String property) { + if (jElement.getAsJsonObject().has(property)) { + JsonElement name = null; + name = jElement.getAsJsonObject().get(property); + if (name != null && !name.isJsonNull()) { + return name.getAsString(); + } + } + return null; + } +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/SparkOrcidGenerateAuthors.java b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/SparkOrcidGenerateAuthors.java new file mode 100644 index 000000000..4e18ab840 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/SparkOrcidGenerateAuthors.java @@ -0,0 +1,165 @@ + +package eu.dnetlib.doiboost.orcid; + +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; + +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Optional; + +import org.apache.commons.io.IOUtils; +import org.apache.hadoop.io.Text; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.api.java.function.Function; +import org.apache.spark.sql.Encoders; +import org.apache.spark.sql.SaveMode; +import org.apache.spark.util.LongAccumulator; +import org.mortbay.log.Log; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.doiboost.orcid.model.DownloadedRecordData; +import scala.Tuple2; + +public class SparkOrcidGenerateAuthors { + + static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; + static final String lastUpdate = "2019-09-30 00:00:00"; + + public static void main(String[] args) throws IOException, Exception { + Logger logger = LoggerFactory.getLogger(SparkOrcidGenerateAuthors.class); + logger.info("[ SparkOrcidGenerateAuthors STARTED]"); + + final ArgumentApplicationParser parser = new ArgumentApplicationParser( + IOUtils + .toString( + SparkOrcidGenerateAuthors.class + .getResourceAsStream( + "/eu/dnetlib/dhp/doiboost/gen_orcid_authors_parameters.json"))); + parser.parseArgument(args); + Boolean isSparkSessionManaged = Optional + .ofNullable(parser.get("isSparkSessionManaged")) + .map(Boolean::valueOf) + .orElse(Boolean.TRUE); + logger.info("isSparkSessionManaged: {}", isSparkSessionManaged); + final String workingPath = parser.get("workingPath"); + logger.info("workingPath: ", workingPath); + final String outputAuthorsPath = parser.get("outputAuthorsPath"); + logger.info("outputAuthorsPath: ", outputAuthorsPath); + final String token = parser.get("token"); + + SparkConf conf = new SparkConf(); + runWithSparkSession( + conf, + isSparkSessionManaged, + spark -> { + JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + + LongAccumulator parsedRecordsAcc = sc.sc().longAccumulator("parsedRecords"); + LongAccumulator modifiedRecordsAcc = sc.sc().longAccumulator("modifiedRecords"); + LongAccumulator downloadedRecordsAcc = sc.sc().longAccumulator("downloadedRecords"); + LongAccumulator alreadyDownloadedRecords = sc.sc().longAccumulator("alreadyDownloadedRecords"); + JavaRDD lamdaFileRDD = sc.textFile(workingPath + "lamdafiles"); + + JavaRDD downloadedRDD = sc.textFile(workingPath + "downloaded"); + Function getOrcidIdFunction = line -> { + try { + String[] values = line.split(","); + return values[0].substring(1); + } catch (Exception e) { + return new String(""); + } + }; + List downloadedRecords = downloadedRDD.map(getOrcidIdFunction).collect(); + + Function isModifiedAfterFilter = line -> { + String[] values = line.split(","); + String orcidId = values[0]; + parsedRecordsAcc.add(1); + if (isModified(orcidId, values[3])) { + modifiedRecordsAcc.add(1); + return true; + } + return false; + }; + Function isNotDownloadedFilter = line -> { + String[] values = line.split(","); + String orcidId = values[0]; + if (downloadedRecords.contains(orcidId)) { + alreadyDownloadedRecords.add(1); + return false; + } + return true; + }; + Function> downloadRecordFunction = line -> { + String[] values = line.split(","); + String orcidId = values[0]; + String modifiedDate = values[3]; + return downloadRecord(orcidId, modifiedDate, token, downloadedRecordsAcc); + }; + + lamdaFileRDD + .filter(isModifiedAfterFilter) + .filter(isNotDownloadedFilter) + .map(downloadRecordFunction) + .rdd() + .saveAsTextFile(workingPath.concat(outputAuthorsPath)); + }); + + } + + private static boolean isModified(String orcidId, String modifiedDate) { + Date modifiedDateDt = null; + Date lastUpdateDt = null; + try { + if (modifiedDate.length() != 19) { + modifiedDate = modifiedDate.substring(0, 19); + } + modifiedDateDt = new SimpleDateFormat(DATE_FORMAT).parse(modifiedDate); + lastUpdateDt = new SimpleDateFormat(DATE_FORMAT).parse(lastUpdate); + } catch (Exception e) { + Log.warn("[" + orcidId + "] Parsing date: ", e.getMessage()); + return true; + } + return modifiedDateDt.after(lastUpdateDt); + } + + private static Tuple2 downloadRecord(String orcidId, String modifiedDate, String token, + LongAccumulator downloadedRecordsAcc) { + final DownloadedRecordData data = new DownloadedRecordData(); + data.setOrcidId(orcidId); + data.setModifiedDate(modifiedDate); + try (CloseableHttpClient client = HttpClients.createDefault()) { + HttpGet httpGet = new HttpGet("https://api.orcid.org/v3.0/" + orcidId + "/record"); + httpGet.addHeader("Accept", "application/vnd.orcid+xml"); + httpGet.addHeader("Authorization", String.format("Bearer %s", token)); + CloseableHttpResponse response = client.execute(httpGet); + int statusCode = response.getStatusLine().getStatusCode(); + data.setStatusCode(statusCode); + if (statusCode != 200) { + Log + .warn( + "Downloading " + orcidId + " status code: " + response.getStatusLine().getStatusCode()); + return data.toTuple2(); + } + downloadedRecordsAcc.add(1); + data + .setCompressedData( + ArgumentApplicationParser.compressArgument(IOUtils.toString(response.getEntity().getContent()))); + } catch (Throwable e) { + Log.warn("Downloading " + orcidId, e.getMessage()); + data.setErrorMessage(e.getMessage()); + return data.toTuple2(); + } + return data.toTuple2(); + } +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/SparkPartitionLambdaFile.java b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/SparkPartitionLambdaFile.java new file mode 100644 index 000000000..ca6f0f6c4 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/SparkPartitionLambdaFile.java @@ -0,0 +1,50 @@ + +package eu.dnetlib.doiboost.orcid; + +import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; + +import java.io.IOException; +import java.util.Optional; + +import org.apache.commons.io.IOUtils; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; + +public class SparkPartitionLambdaFile { + + public static void main(String[] args) throws IOException, Exception { + Logger logger = LoggerFactory.getLogger(SparkOrcidGenerateAuthors.class); + + final ArgumentApplicationParser parser = new ArgumentApplicationParser( + IOUtils + .toString( + SparkOrcidGenerateAuthors.class + .getResourceAsStream( + "/eu/dnetlib/dhp/doiboost/gen_orcid_authors_parameters.json"))); + parser.parseArgument(args); + Boolean isSparkSessionManaged = Optional + .ofNullable(parser.get("isSparkSessionManaged")) + .map(Boolean::valueOf) + .orElse(Boolean.TRUE); + final String workingPath = parser.get("workingPath"); + + SparkConf conf = new SparkConf(); + runWithSparkSession( + conf, + isSparkSessionManaged, + spark -> { + JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + JavaRDD lamdaFileRDD = sc.textFile(workingPath + "last_modified.csv"); + + lamdaFileRDD + .repartition(20) + .saveAsTextFile(workingPath.concat("lamdafiles")); + }); + } + +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/SummariesDecompressor.java b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/SummariesDecompressor.java new file mode 100644 index 000000000..f0bbb5c32 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/SummariesDecompressor.java @@ -0,0 +1,158 @@ + +package eu.dnetlib.doiboost.orcid; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URI; + +import org.apache.commons.compress.archivers.tar.TarArchiveEntry; +import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.io.IOUtils; +import org.apache.hadoop.io.SequenceFile; +import org.apache.hadoop.io.Text; +import org.apache.hadoop.io.compress.CompressionCodec; +import org.apache.hadoop.io.compress.CompressionCodecFactory; +import org.mortbay.log.Log; + +import eu.dnetlib.doiboost.orcid.json.JsonWriter; +import eu.dnetlib.doiboost.orcid.model.AuthorData; +import eu.dnetlib.doiboost.orcid.xml.XMLRecordParser; + +public class SummariesDecompressor { + + private static final int MAX_XML_RECORDS_PARSED = -1; + + public static void parseGzSummaries(Configuration conf, String inputUri, Path outputPath) + throws Exception { + String uri = inputUri; + FileSystem fs = FileSystem.get(URI.create(uri), conf); + Path inputPath = new Path(uri); + CompressionCodecFactory factory = new CompressionCodecFactory(conf); + CompressionCodec codec = factory.getCodec(inputPath); + if (codec == null) { + System.err.println("No codec found for " + uri); + System.exit(1); + } + CompressionCodecFactory.removeSuffix(uri, codec.getDefaultExtension()); + InputStream gzipInputStream = null; + try { + gzipInputStream = codec.createInputStream(fs.open(inputPath)); + parseTarSummaries(fs, conf, gzipInputStream, outputPath); + + } finally { + Log.debug("Closing gzip stream"); + IOUtils.closeStream(gzipInputStream); + } + } + + private static void parseTarSummaries( + FileSystem fs, Configuration conf, InputStream gzipInputStream, Path outputPath) { + int counter = 0; + int nameFound = 0; + int surnameFound = 0; + int creditNameFound = 0; + int errorFromOrcidFound = 0; + int xmlParserErrorFound = 0; + try (TarArchiveInputStream tais = new TarArchiveInputStream(gzipInputStream)) { + TarArchiveEntry entry = null; + + try (SequenceFile.Writer writer = SequenceFile + .createWriter( + conf, + SequenceFile.Writer.file(outputPath), + SequenceFile.Writer.keyClass(Text.class), + SequenceFile.Writer.valueClass(Text.class))) { + while ((entry = tais.getNextTarEntry()) != null) { + String filename = entry.getName(); + try { + if (entry.isDirectory()) { + Log.debug("Directory entry name: " + entry.getName()); + } else { + Log.debug("XML record entry name: " + entry.getName()); + counter++; + BufferedReader br = new BufferedReader(new InputStreamReader(tais)); // Read directly from + // tarInput + String line; + StringBuffer buffer = new StringBuffer(); + while ((line = br.readLine()) != null) { + buffer.append(line); + } + AuthorData authorData = XMLRecordParser.VTDParseAuthorData(buffer.toString().getBytes()); + if (authorData != null) { + if (authorData.getErrorCode() != null) { + errorFromOrcidFound += 1; + Log + .debug( + "error from Orcid with code " + + authorData.getErrorCode() + + " for oid " + + entry.getName()); + continue; + } + String jsonData = JsonWriter.create(authorData); + Log.debug("oid: " + authorData.getOid() + " data: " + jsonData); + + final Text key = new Text(authorData.getOid()); + final Text value = new Text(jsonData); + + try { + writer.append(key, value); + } catch (IOException e) { + Log.debug("Writing to sequence file: " + e.getMessage()); + Log.debug(e); + throw new RuntimeException(e); + } + + if (authorData.getName() != null) { + nameFound += 1; + } + if (authorData.getSurname() != null) { + surnameFound += 1; + } + if (authorData.getCreditName() != null) { + creditNameFound += 1; + } + + } else { + Log.warn("Data not retrievable [" + entry.getName() + "] " + buffer.toString()); + xmlParserErrorFound += 1; + } + } + } catch (Exception e) { + Log + .warn( + "Parsing record from tar archive and xml record: " + + filename + + " " + + e.getMessage()); + Log.warn(e); + } + + if ((counter % 100000) == 0) { + Log.info("Current xml records parsed: " + counter); + } + + if ((MAX_XML_RECORDS_PARSED > -1) && (counter > MAX_XML_RECORDS_PARSED)) { + break; + } + } + } + } catch (IOException e) { + Log.warn("Parsing record from gzip archive: " + e.getMessage()); + Log.warn(e); + throw new RuntimeException(e); + } + Log.info("Summaries parse completed"); + Log.info("Total XML records parsed: " + counter); + Log.info("Name found: " + nameFound); + Log.info("Surname found: " + surnameFound); + Log.info("Credit name found: " + creditNameFound); + Log.info("Error from Orcid found: " + errorFromOrcidFound); + Log.info("Error parsing xml record found: " + xmlParserErrorFound); + } +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/json/JsonWriter.java b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/json/JsonWriter.java new file mode 100644 index 000000000..35676d5ba --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/json/JsonWriter.java @@ -0,0 +1,28 @@ + +package eu.dnetlib.doiboost.orcid.json; + +import com.google.gson.JsonObject; + +import eu.dnetlib.doiboost.orcid.model.AuthorData; +import eu.dnetlib.doiboost.orcid.model.WorkData; + +public class JsonWriter { + + public static String create(AuthorData authorData) { + JsonObject author = new JsonObject(); + author.addProperty("oid", authorData.getOid()); + author.addProperty("name", authorData.getName()); + author.addProperty("surname", authorData.getSurname()); + if (authorData.getCreditName() != null) { + author.addProperty("creditname", authorData.getCreditName()); + } + return author.toString(); + } + + public static String create(WorkData workData) { + JsonObject work = new JsonObject(); + work.addProperty("oid", workData.getOid()); + work.addProperty("doi", workData.getDoi()); + return work.toString(); + } +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/model/AuthorData.java b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/model/AuthorData.java new file mode 100644 index 000000000..29551c347 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/model/AuthorData.java @@ -0,0 +1,53 @@ + +package eu.dnetlib.doiboost.orcid.model; + +import java.io.Serializable; + +public class AuthorData implements Serializable { + + private String oid; + private String name; + private String surname; + private String creditName; + private String errorCode; + + public String getErrorCode() { + return errorCode; + } + + public void setErrorCode(String errorCode) { + this.errorCode = errorCode; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getSurname() { + return surname; + } + + public void setSurname(String surname) { + this.surname = surname; + } + + public String getCreditName() { + return creditName; + } + + public void setCreditName(String creditName) { + this.creditName = creditName; + } + + public String getOid() { + return oid; + } + + public void setOid(String oid) { + this.oid = oid; + } +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/model/DownloadedRecordData.java b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/model/DownloadedRecordData.java new file mode 100644 index 000000000..f66ef82a2 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/model/DownloadedRecordData.java @@ -0,0 +1,76 @@ + +package eu.dnetlib.doiboost.orcid.model; + +import java.io.Serializable; + +import org.apache.hadoop.io.Text; + +import com.google.gson.JsonObject; + +import scala.Tuple2; + +public class DownloadedRecordData implements Serializable { + + private String orcidId; + private String modifiedDate; + private String statusCode; + private String compressedData; + private String errorMessage; + + public Tuple2 toTuple2() { + JsonObject data = new JsonObject(); + data.addProperty("statusCode", getStatusCode()); + data.addProperty("modifiedDate", getModifiedDate()); + if (getCompressedData() != null) { + data.addProperty("compressedData", getCompressedData()); + } + if (getErrorMessage() != null) { + data.addProperty("errorMessage", getErrorMessage()); + } + return new Tuple2<>(orcidId, data.toString()); + } + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + + public String getOrcidId() { + return orcidId; + } + + public void setOrcidId(String orcidId) { + this.orcidId = orcidId; + } + + public int getStatusCode() { + try { + return Integer.parseInt(statusCode); + } catch (Exception e) { + return -2; + } + } + + public void setStatusCode(int statusCode) { + this.statusCode = Integer.toString(statusCode); + } + + public String getCompressedData() { + return compressedData; + } + + public void setCompressedData(String compressedData) { + this.compressedData = compressedData; + } + + public String getModifiedDate() { + return modifiedDate; + } + + public void setModifiedDate(String modifiedDate) { + this.modifiedDate = modifiedDate; + } +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/model/WorkData.java b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/model/WorkData.java new file mode 100644 index 000000000..db1728a9b --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/model/WorkData.java @@ -0,0 +1,45 @@ + +package eu.dnetlib.doiboost.orcid.model; + +import java.io.Serializable; + +public class WorkData implements Serializable { + + private String oid; + private String doi; + private boolean doiFound = false; + + public boolean isDoiFound() { + return doiFound; + } + + public void setDoiFound(boolean doiFound) { + this.doiFound = doiFound; + } + + public String getOid() { + return oid; + } + + public void setOid(String oid) { + this.oid = oid; + } + + public String getDoi() { + return doi; + } + + public void setDoi(String doi) { + this.doi = doi; + } + + public String getErrorCode() { + return errorCode; + } + + public void setErrorCode(String errorCode) { + this.errorCode = errorCode; + } + + private String errorCode; +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/xml/XMLRecordParser.java b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/xml/XMLRecordParser.java new file mode 100644 index 000000000..2e43f4d3e --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/orcid/xml/XMLRecordParser.java @@ -0,0 +1,123 @@ + +package eu.dnetlib.doiboost.orcid.xml; + +import java.util.Arrays; +import java.util.List; + +import com.ximpleware.AutoPilot; +import com.ximpleware.EOFException; +import com.ximpleware.EncodingException; +import com.ximpleware.EntityException; +import com.ximpleware.ParseException; +import com.ximpleware.VTDGen; +import com.ximpleware.VTDNav; + +import eu.dnetlib.dhp.parser.utility.VtdException; +import eu.dnetlib.dhp.parser.utility.VtdUtilityParser; +import eu.dnetlib.doiboost.orcid.model.AuthorData; +import eu.dnetlib.doiboost.orcid.model.WorkData; + +public class XMLRecordParser { + + private static final String NS_COMMON_URL = "http://www.orcid.org/ns/common"; + private static final String NS_COMMON = "common"; + private static final String NS_PERSON_URL = "http://www.orcid.org/ns/person"; + private static final String NS_PERSON = "person"; + private static final String NS_DETAILS_URL = "http://www.orcid.org/ns/personal-details"; + private static final String NS_DETAILS = "personal-details"; + private static final String NS_OTHER_URL = "http://www.orcid.org/ns/other-name"; + private static final String NS_OTHER = "other-name"; + private static final String NS_RECORD_URL = "http://www.orcid.org/ns/record"; + private static final String NS_RECORD = "record"; + private static final String NS_ERROR_URL = "http://www.orcid.org/ns/error"; + + private static final String NS_WORK = "work"; + private static final String NS_WORK_URL = "http://www.orcid.org/ns/work"; + + private static final String NS_ERROR = "error"; + + public static AuthorData VTDParseAuthorData(byte[] bytes) + throws VtdException, EncodingException, EOFException, EntityException, ParseException { + final VTDGen vg = new VTDGen(); + vg.setDoc(bytes); + vg.parse(true); + final VTDNav vn = vg.getNav(); + final AutoPilot ap = new AutoPilot(vn); + ap.declareXPathNameSpace(NS_COMMON, NS_COMMON_URL); + ap.declareXPathNameSpace(NS_PERSON, NS_PERSON_URL); + ap.declareXPathNameSpace(NS_DETAILS, NS_DETAILS_URL); + ap.declareXPathNameSpace(NS_OTHER, NS_OTHER_URL); + ap.declareXPathNameSpace(NS_RECORD, NS_RECORD_URL); + ap.declareXPathNameSpace(NS_ERROR, NS_ERROR_URL); + + AuthorData authorData = new AuthorData(); + final List errors = VtdUtilityParser.getTextValue(ap, vn, "//error:response-code"); + if (!errors.isEmpty()) { + authorData.setErrorCode(errors.get(0)); + return authorData; + } + + List recordNodes = VtdUtilityParser + .getTextValuesWithAttributes( + ap, vn, "//record:record", Arrays.asList("path")); + if (!recordNodes.isEmpty()) { + final String oid = (recordNodes.get(0).getAttributes().get("path")).substring(1); + authorData.setOid(oid); + } else { + return null; + } + + final List names = VtdUtilityParser.getTextValue(ap, vn, "//personal-details:given-names"); + if (!names.isEmpty()) { + authorData.setName(names.get(0)); + } + + final List surnames = VtdUtilityParser.getTextValue(ap, vn, "//personal-details:family-name"); + if (!surnames.isEmpty()) { + authorData.setSurname(surnames.get(0)); + } + + final List creditNames = VtdUtilityParser.getTextValue(ap, vn, "//personal-details:credit-name"); + if (!creditNames.isEmpty()) { + authorData.setCreditName(creditNames.get(0)); + } + return authorData; + } + + public static WorkData VTDParseWorkData(byte[] bytes) + throws VtdException, EncodingException, EOFException, EntityException, ParseException { + final VTDGen vg = new VTDGen(); + vg.setDoc(bytes); + vg.parse(true); + final VTDNav vn = vg.getNav(); + final AutoPilot ap = new AutoPilot(vn); + ap.declareXPathNameSpace(NS_COMMON, NS_COMMON_URL); + ap.declareXPathNameSpace(NS_WORK, NS_WORK_URL); + ap.declareXPathNameSpace(NS_ERROR, NS_ERROR_URL); + + WorkData workData = new WorkData(); + final List errors = VtdUtilityParser.getTextValue(ap, vn, "//error:response-code"); + if (!errors.isEmpty()) { + workData.setErrorCode(errors.get(0)); + return workData; + } + + List workNodes = VtdUtilityParser + .getTextValuesWithAttributes(ap, vn, "//work:work", Arrays.asList("path")); + if (!workNodes.isEmpty()) { + final String oid = (workNodes.get(0).getAttributes().get("path")).split("/")[1]; + workData.setOid(oid); + } else { + return null; + } + + final List dois = VtdUtilityParser + .getTextValue( + ap, vn, "//common:external-id-type[text()=\"doi\"]/../common:external-id-value"); + if (!dois.isEmpty()) { + workData.setDoi(dois.get(0)); + workData.setDoiFound(true); + } + return workData; + } +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/uw/SparkMapUnpayWallToOAF.scala b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/uw/SparkMapUnpayWallToOAF.scala new file mode 100644 index 000000000..a72e4b0d6 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/uw/SparkMapUnpayWallToOAF.scala @@ -0,0 +1,43 @@ +package eu.dnetlib.doiboost.uw + +import eu.dnetlib.dhp.application.ArgumentApplicationParser + +import eu.dnetlib.dhp.schema.oaf.Publication +import eu.dnetlib.doiboost.crossref.SparkMapDumpIntoOAF +import org.apache.commons.io.IOUtils +import org.apache.spark.SparkConf +import org.apache.spark.rdd.RDD +import org.apache.spark.sql.{Dataset, Encoder, Encoders, SaveMode, SparkSession} +import org.slf4j.{Logger, LoggerFactory} + + +object SparkMapUnpayWallToOAF { + + def main(args: Array[String]): Unit = { + + + val logger: Logger = LoggerFactory.getLogger(SparkMapDumpIntoOAF.getClass) + val conf: SparkConf = new SparkConf() + val parser = new ArgumentApplicationParser(IOUtils.toString(SparkMapDumpIntoOAF.getClass.getResourceAsStream("/eu/dnetlib/dhp/doiboost/convert_map_to_oaf_params.json"))) + parser.parseArgument(args) + val spark: SparkSession = + SparkSession + .builder() + .config(conf) + .appName(getClass.getSimpleName) + .master(parser.get("master")).getOrCreate() + + implicit val mapEncoderPubs: Encoder[Publication] = Encoders.kryo[Publication] + + + val sourcePath = parser.get("sourcePath") + val targetPath = parser.get("targetPath") + val inputRDD:RDD[String] = spark.sparkContext.textFile(s"$sourcePath") + + logger.info("Converting UnpayWall to OAF") + + val d:Dataset[Publication] = spark.createDataset(inputRDD.map(UnpayWallToOAF.convertToOAF).filter(p=>p!=null)).as[Publication] + d.write.mode(SaveMode.Overwrite).save(targetPath) + } + +} diff --git a/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/uw/UnpayWallToOAF.scala b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/uw/UnpayWallToOAF.scala new file mode 100644 index 000000000..08cd4ee8e --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/java/eu/dnetlib/doiboost/uw/UnpayWallToOAF.scala @@ -0,0 +1,63 @@ +package eu.dnetlib.doiboost.uw + +import eu.dnetlib.dhp.schema.oaf.{Instance, Publication} +import org.json4s +import org.json4s.DefaultFormats +import org.json4s.jackson.JsonMethods.parse +import org.slf4j.{Logger, LoggerFactory} + +import scala.collection.JavaConverters._ +import eu.dnetlib.doiboost.DoiBoostMappingUtil._ + + + +case class OALocation(evidence:Option[String], host_type:Option[String], is_best:Option[Boolean], license: Option[String], pmh_id:Option[String], updated:Option[String], + url:Option[String], url_for_landing_page:Option[String], url_for_pdf:Option[String], version:Option[String]) {} + + + + +object UnpayWallToOAF { + val logger: Logger = LoggerFactory.getLogger(getClass) + + def convertToOAF(input:String):Publication = { + val pub = new Publication + + implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats + lazy val json: json4s.JValue = parse(input) + + val doi = (json \"doi").extract[String] + + + val is_oa = (json\ "is_oa").extract[Boolean] + + val oaLocation:OALocation = (json \ "best_oa_location").extractOrElse[OALocation](null) + pub.setPid(List(createSP(doi, "doi", PID_TYPES)).asJava) + pub.setId(generateIdentifier(pub, doi.toLowerCase)) + + pub.setCollectedfrom(List(createUnpayWallCollectedFrom()).asJava) + pub.setDataInfo(generateDataInfo()) + + if (!is_oa) + return null + + if(oaLocation== null || oaLocation.url.isEmpty) + return null + val i :Instance= new Instance() + + i.setCollectedfrom(createUnpayWallCollectedFrom()) + i.setAccessright(getOpenAccessQualifier()) + i.setUrl(List(oaLocation.url.get).asJava) + + if (oaLocation.license.isDefined) + i.setLicense(asField(oaLocation.license.get)) + pub.setInstance(List(i).asJava) + + pub + + } + + + + +} diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/convert_map_to_oaf_params.json b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/convert_map_to_oaf_params.json new file mode 100644 index 000000000..312bd0751 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/convert_map_to_oaf_params.json @@ -0,0 +1,6 @@ +[ + {"paramName":"s", "paramLongName":"sourcePath", "paramDescription": "the path of the sequencial file to read", "paramRequired": true}, + {"paramName":"t", "paramLongName":"targetPath", "paramDescription": "the working dir path", "paramRequired": true}, + {"paramName":"m", "paramLongName":"master", "paramDescription": "the master name", "paramRequired": true} + +] \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/create_orcid_authors_data.json b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/create_orcid_authors_data.json new file mode 100644 index 000000000..bf992b508 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/create_orcid_authors_data.json @@ -0,0 +1,6 @@ +[ + {"paramName":"n", "paramLongName":"hdfsServerUri", "paramDescription": "the server uri", "paramRequired": true}, + {"paramName":"d", "paramLongName":"hdfsOrcidDefaultPath", "paramDescription": "the default work path", "paramRequired": true}, + {"paramName":"f", "paramLongName":"summariesFileNameTarGz", "paramDescription": "the name of the summaries orcid file", "paramRequired": true}, + {"paramName":"o", "paramLongName":"outputAuthorsPath", "paramDescription": "the relative folder of the sequencial file to write", "paramRequired": true} +] \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/create_orcid_authors_dois_data.json b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/create_orcid_authors_dois_data.json new file mode 100644 index 000000000..131c30125 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/create_orcid_authors_dois_data.json @@ -0,0 +1,6 @@ +[ + {"paramName":"n", "paramLongName":"hdfsServerUri", "paramDescription": "the server uri", "paramRequired": true}, + {"paramName":"d", "paramLongName":"hdfsOrcidDefaultPath", "paramDescription": "the default work path", "paramRequired": true}, + {"paramName":"f", "paramLongName":"activitiesFileNameTarGz", "paramDescription": "the name of the activities orcid file", "paramRequired": true}, + {"paramName":"o", "paramLongName":"outputAuthorsDOIsPath", "paramDescription": "the relative folder of the sequencial file to write", "paramRequired": true} +] \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/crossref/oozie_app/config-default.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/crossref/oozie_app/config-default.xml new file mode 100644 index 000000000..508202e30 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/crossref/oozie_app/config-default.xml @@ -0,0 +1,42 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + oozie.launcher.mapreduce.user.classpath.first + true + + + hive_metastore_uris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + spark2YarnHistoryServerAddress + http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 + + + spark2EventLogDir + /user/spark/spark2ApplicationHistory + + + spark2ExtraListeners + "com.cloudera.spark.lineage.NavigatorAppListener" + + + spark2SqlQueryExecutionListeners + "com.cloudera.spark.lineage.NavigatorQueryListener" + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/crossref/oozie_app/workflow.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/crossref/oozie_app/workflow.xml new file mode 100644 index 000000000..db4ac96f9 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/crossref/oozie_app/workflow.xml @@ -0,0 +1,80 @@ + + + + workingPath + the working dir base path + + + sparkDriverMemory + memory for driver process + + + sparkExecutorMemory + memory for individual executor + + + sparkExecutorCores + number of cores used by single executor + + + timestamp + Timestamp for incremental Harvesting + + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + + + + + + + + + + ${jobTracker} + ${nameNode} + eu.dnetlib.doiboost.crossref.CrossrefImporter + -t${workingPath}/input/crossref/index_dump + -n${nameNode} + -ts${timestamp} + + + + + + + + + yarn-cluster + cluster + ExtractCrossrefToOAF + eu.dnetlib.doiboost.crossref.SparkMapDumpIntoOAF + dhp-doiboost-${projectVersion}.jar + + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + ${sparkExtraOPT} + + --sourcePath${workingPath}/input/crossref/index_dump,${workingPath}/crossref/index_dump + --targetPath${workingPath}/input/crossref + --masteryarn-cluster + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/download_orcid_data.json b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/download_orcid_data.json new file mode 100644 index 000000000..444e487f7 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/download_orcid_data.json @@ -0,0 +1,7 @@ +[ + {"paramName":"n", "paramLongName":"hdfsServerUri", "paramDescription": "the server uri", "paramRequired": true}, + {"paramName":"d", "paramLongName":"hdfsOrcidDefaultPath", "paramDescription": "the default work path", "paramRequired": true}, + {"paramName":"f", "paramLongName":"lambdaFileName", "paramDescription": "the name of the lambda file", "paramRequired": true}, + {"paramName":"o", "paramLongName":"outputPath", "paramDescription": "the relative folder of the sequencial file to write", "paramRequired": true}, + {"paramName":"t", "paramLongName":"token", "paramDescription": "token to grant access", "paramRequired": true} +] \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/gen_doi_author_list_orcid_parameters.json b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/gen_doi_author_list_orcid_parameters.json new file mode 100644 index 000000000..b894177b3 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/gen_doi_author_list_orcid_parameters.json @@ -0,0 +1,3 @@ +[{"paramName":"w", "paramLongName":"workingPath", "paramDescription": "the working path", "paramRequired": true}, + {"paramName":"o", "paramLongName":"outputDoiAuthorListPath", "paramDescription": "the relative folder of the sequencial file to write the data", "paramRequired": true} +] \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/gen_orcid_authors_parameters.json b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/gen_orcid_authors_parameters.json new file mode 100644 index 000000000..35bfe1b41 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/gen_orcid_authors_parameters.json @@ -0,0 +1,4 @@ +[{"paramName":"w", "paramLongName":"workingPath", "paramDescription": "the working path", "paramRequired": true}, + {"paramName":"t", "paramLongName":"token", "paramDescription": "token to grant access", "paramRequired": true}, + {"paramName":"o", "paramLongName":"outputAuthorsPath", "paramDescription": "the relative folder of the sequencial file to write the authors data", "paramRequired": true} +] \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/generate_doiboost_as_params.json b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/generate_doiboost_as_params.json new file mode 100644 index 000000000..6eb1ec6f1 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/generate_doiboost_as_params.json @@ -0,0 +1,9 @@ +[ + {"paramName": "m", "paramLongName":"master", "paramDescription": "the master name", "paramRequired": true}, + {"paramName": "dp", "paramLongName":"dbPublicationPath", "paramDescription": "the Crossref Publication Path", "paramRequired": true}, + {"paramName": "dd", "paramLongName":"dbDatasetPath", "paramDescription": "the Crossref Dataset Path", "paramRequired": true}, + {"paramName": "cr", "paramLongName":"crossRefRelation", "paramDescription": "the UnpayWall Publication Path", "paramRequired": true}, + {"paramName": "da", "paramLongName":"dbaffiliationRelationPath", "paramDescription": "the MAG Publication Path", "paramRequired": true}, + {"paramName": "do", "paramLongName":"dbOrganizationPath", "paramDescription": "the MAG Publication Path", "paramRequired": true}, + {"paramName": "w", "paramLongName":"targetPath", "paramDescription": "the Working Path", "paramRequired": true} +] diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/generate_doiboost_params.json b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/generate_doiboost_params.json new file mode 100644 index 000000000..ea08f47d4 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/generate_doiboost_params.json @@ -0,0 +1,7 @@ +[ + {"paramName": "m", "paramLongName":"master", "paramDescription": "the master name", "paramRequired": true}, + {"paramName": "hb", "paramLongName":"hostedByMapPath", "paramDescription": "the hosted By Map Path", "paramRequired": true}, + {"paramName": "ap", "paramLongName":"affiliationPath", "paramDescription": "the Affliation Path", "paramRequired": true}, + {"paramName": "pa", "paramLongName":"paperAffiliationPath", "paramDescription": "the paperAffiliation Path", "paramRequired": true}, + {"paramName": "w", "paramLongName":"workingDirPath", "paramDescription": "the Working Path", "paramRequired": true} +] diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/import_from_es.json b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/import_from_es.json new file mode 100644 index 000000000..87a138d52 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/import_from_es.json @@ -0,0 +1,5 @@ +[ + {"paramName":"t", "paramLongName":"targetPath", "paramDescription": "the path of the sequencial file to write", "paramRequired": true}, + {"paramName":"n", "paramLongName":"namenode", "paramDescription": "the hive metastore uris", "paramRequired": true}, + {"paramName":"ts", "paramLongName":"timestamp", "paramDescription": "timestamp", "paramRequired": false} +] \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/intersection/oozie_app/config-default.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/intersection/oozie_app/config-default.xml new file mode 100644 index 000000000..cf617a84c --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/intersection/oozie_app/config-default.xml @@ -0,0 +1,38 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + hive_metastore_uris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + spark2YarnHistoryServerAddress + http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 + + + spark2EventLogDir + /user/spark/spark2ApplicationHistory + + + spark2ExtraListeners + "com.cloudera.spark.lineage.NavigatorAppListener" + + + spark2SqlQueryExecutionListeners + "com.cloudera.spark.lineage.NavigatorQueryListener" + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/intersection/oozie_app/workflow.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/intersection/oozie_app/workflow.xml new file mode 100644 index 000000000..34ba5d89d --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/intersection/oozie_app/workflow.xml @@ -0,0 +1,103 @@ + + + + hostedByMapPath + the Hosted By Map Path + + + affiliationPath + the Affliation Path + + + paperAffiliationPath + the paperAffiliation Path + + + workingDirPath + the Working Path + + + sparkDriverMemory + memory for driver process + + + sparkExecutorMemory + memory for individual executor + + + sparkExecutorCores + number of cores used by single executor + + + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + + + + + + + + yarn-cluster + cluster + Create DOIBoost Infospace + eu.dnetlib.doiboost.SparkGenerateDoiBoost + dhp-doiboost-${projectVersion}.jar + + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + --conf spark.sql.shuffle.partitions=3840 + ${sparkExtraOPT} + + --hostedByMapPath${hostedByMapPath} + --affiliationPath${affiliationPath} + --paperAffiliationPath${paperAffiliationPath} + --workingDirPath${workingDirPath} + --masteryarn-cluster + + + + + + + + + yarn-cluster + cluster + Generate DOIBoost ActionSet + eu.dnetlib.doiboost.SparkGenerateDOIBoostActionSet + dhp-doiboost-${projectVersion}.jar + + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + --conf spark.sql.shuffle.partitions=3840 + ${sparkExtraOPT} + + --dbPublicationPath${workingDirPath}/doiBoostPublicationFiltered + --dbDatasetPath${workingDirPath}/crossrefDataset + --crossRefRelation/data/doiboost/input/crossref/relations + --dbaffiliationRelationPath${workingDirPath}/doiBoostPublicationAffiliation + -do${workingDirPath}/doiBoostOrganization + --targetPath${workingDirPath}/actionDataSet + --masteryarn-cluster + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/mag/convert_mag_to_oaf_params.json b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/mag/convert_mag_to_oaf_params.json new file mode 100644 index 000000000..bf0b80f69 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/mag/convert_mag_to_oaf_params.json @@ -0,0 +1,6 @@ +[ + {"paramName":"s", "paramLongName":"sourcePath", "paramDescription": "the base path of MAG input", "paramRequired": true}, + {"paramName":"t", "paramLongName":"targetPath", "paramDescription": "the working dir path", "paramRequired": true}, + {"paramName":"m", "paramLongName":"master", "paramDescription": "the master name", "paramRequired": true} + +] \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/mag/oozie_app/config-default.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/mag/oozie_app/config-default.xml new file mode 100644 index 000000000..59e5c059f --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/mag/oozie_app/config-default.xml @@ -0,0 +1,42 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + oozie.wf.rerun.failnodes + false + + + hive_metastore_uris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + spark2YarnHistoryServerAddress + http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 + + + spark2EventLogDir + /user/spark/spark2ApplicationHistory + + + spark2ExtraListeners + "com.cloudera.spark.lineage.NavigatorAppListener" + + + spark2SqlQueryExecutionListeners + "com.cloudera.spark.lineage.NavigatorQueryListener" + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/mag/oozie_app/workflow.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/mag/oozie_app/workflow.xml new file mode 100644 index 000000000..2277b79b0 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/mag/oozie_app/workflow.xml @@ -0,0 +1,87 @@ + + + + sourcePath + the working dir base path + + + targetPath + the working dir base path + + + sparkDriverMemory + memory for driver process + + + sparkExecutorMemory + memory for individual executor + + + sparkExecutorCores + number of cores used by single executor + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + + + + + + + + yarn-cluster + cluster + Convert Mag to Dataset + eu.dnetlib.doiboost.mag.SparkImportMagIntoDataset + dhp-doiboost-${projectVersion}.jar + + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + ${sparkExtraOPT} + + --sourcePath${sourcePath} + --targetPath${targetPath} + --masteryarn-cluster + + + + + + + + + + yarn-cluster + cluster + Convert Mag to Dataset + eu.dnetlib.doiboost.mag.SparkPreProcessMAG + dhp-doiboost-${projectVersion}.jar + + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + --conf spark.sql.shuffle.partitions=3840 + ${sparkExtraOPT} + + --sourcePath${sourcePath} + --targetPath${targetPath} + --masteryarn-cluster + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/mag/preprocess_mag_params.json b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/mag/preprocess_mag_params.json new file mode 100644 index 000000000..bf0b80f69 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/mag/preprocess_mag_params.json @@ -0,0 +1,6 @@ +[ + {"paramName":"s", "paramLongName":"sourcePath", "paramDescription": "the base path of MAG input", "paramRequired": true}, + {"paramName":"t", "paramLongName":"targetPath", "paramDescription": "the working dir path", "paramRequired": true}, + {"paramName":"m", "paramLongName":"master", "paramDescription": "the master name", "paramRequired": true} + +] \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid/oozie_app/config-default.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid/oozie_app/config-default.xml new file mode 100644 index 000000000..5621415d9 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid/oozie_app/config-default.xml @@ -0,0 +1,22 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.action.sharelib.for.java + spark2 + + + oozie.launcher.mapreduce.user.classpath.first + true + + + oozie.launcher.mapreduce.map.java.opts + -Xmx4g + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid/oozie_app/workflow.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid/oozie_app/workflow.xml new file mode 100644 index 000000000..7a8d04187 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid/oozie_app/workflow.xml @@ -0,0 +1,41 @@ + + + + workingPath + the working dir base path + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + + + + + + + + + + ${jobTracker} + ${nameNode} + eu.dnetlib.doiboost.orcid.OrcidDSManager + -d${workingPath}/ + -n${nameNode} + -fORCID_2019_summaries.tar.gz + -ooutput/ + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_authors_dois_data/oozie_app/config-default.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_authors_dois_data/oozie_app/config-default.xml new file mode 100644 index 000000000..5621415d9 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_authors_dois_data/oozie_app/config-default.xml @@ -0,0 +1,22 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.action.sharelib.for.java + spark2 + + + oozie.launcher.mapreduce.user.classpath.first + true + + + oozie.launcher.mapreduce.map.java.opts + -Xmx4g + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_authors_dois_data/oozie_app/workflow.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_authors_dois_data/oozie_app/workflow.xml new file mode 100644 index 000000000..1c2ae89dd --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_authors_dois_data/oozie_app/workflow.xml @@ -0,0 +1,505 @@ + + + + workingPath_activities + the working dir base path + + + shell_cmd_0 + wget -O /tmp/ORCID_2019_activites_0.tar.gz https://orcid.figshare.com/ndownloader/files/18017660 ; hdfs dfs -copyFromLocal /tmp/ORCID_2019_activites_0.tar.gz /data/orcid_activities/ORCID_2019_activites_0.tar.gz + + the shell command that downloads and puts to hdfs orcid activity file 0 + + + shell_cmd_1 + wget -O /tmp/ORCID_2019_activites_1.tar.gz https://orcid.figshare.com/ndownloader/files/18017675 ; hdfs dfs -copyFromLocal /tmp/ORCID_2019_activites_1.tar.gz /data/orcid_activities/ORCID_2019_activites_1.tar.gz + + the shell command that downloads and puts to hdfs orcid activity file 1 + + + shell_cmd_2 + wget -O /tmp/ORCID_2019_activites_2.tar.gz https://orcid.figshare.com/ndownloader/files/18017717 ; hdfs dfs -copyFromLocal /tmp/ORCID_2019_activites_2.tar.gz /data/orcid_activities/ORCID_2019_activites_2.tar.gz + + the shell command that downloads and puts to hdfs orcid activity file 2 + + + shell_cmd_3 + wget -O /tmp/ORCID_2019_activites_3.tar.gz https://orcid.figshare.com/ndownloader/files/18017765 ; hdfs dfs -copyFromLocal /tmp/ORCID_2019_activites_3.tar.gz /data/orcid_activities/ORCID_2019_activites_3.tar.gz + + the shell command that downloads and puts to hdfs orcid activity file 3 + + + shell_cmd_4 + wget -O /tmp/ORCID_2019_activites_4.tar.gz https://orcid.figshare.com/ndownloader/files/18017831 ; hdfs dfs -copyFromLocal /tmp/ORCID_2019_activites_4.tar.gz /data/orcid_activities/ORCID_2019_activites_4.tar.gz + + the shell command that downloads and puts to hdfs orcid activity file 4 + + + shell_cmd_5 + wget -O /tmp/ORCID_2019_activites_5.tar.gz https://orcid.figshare.com/ndownloader/files/18017987 ; hdfs dfs -copyFromLocal /tmp/ORCID_2019_activites_5.tar.gz /data/orcid_activities/ORCID_2019_activites_5.tar.gz + + the shell command that downloads and puts to hdfs orcid activity file 5 + + + shell_cmd_6 + wget -O /tmp/ORCID_2019_activites_6.tar.gz https://orcid.figshare.com/ndownloader/files/18018053 ; hdfs dfs -copyFromLocal /tmp/ORCID_2019_activites_6.tar.gz /data/orcid_activities/ORCID_2019_activites_6.tar.gz + + the shell command that downloads and puts to hdfs orcid activity file 6 + + + shell_cmd_7 + wget -O /tmp/ORCID_2019_activites_7.tar.gz https://orcid.figshare.com/ndownloader/files/18018023 ; hdfs dfs -copyFromLocal /tmp/ORCID_2019_activites_7.tar.gz /data/orcid_activities/ORCID_2019_activites_7.tar.gz + + the shell command that downloads and puts to hdfs orcid activity file 7 + + + shell_cmd_8 + wget -O /tmp/ORCID_2019_activites_8.tar.gz https://orcid.figshare.com/ndownloader/files/18018248 ; hdfs dfs -copyFromLocal /tmp/ORCID_2019_activites_8.tar.gz /data/orcid_activities/ORCID_2019_activites_8.tar.gz + + the shell command that downloads and puts to hdfs orcid activity file 8 + + + shell_cmd_9 + wget -O /tmp/ORCID_2019_activites_9.tar.gz https://orcid.figshare.com/ndownloader/files/18018029 ; hdfs dfs -copyFromLocal /tmp/ORCID_2019_activites_9.tar.gz /data/orcid_activities/ORCID_2019_activites_9.tar.gz + + the shell command that downloads and puts to hdfs orcid activity file 9 + + + shell_cmd_X + wget -O /tmp/ORCID_2019_activites_X.tar.gz https://orcid.figshare.com/ndownloader/files/18018182 ; hdfs dfs -copyFromLocal /tmp/ORCID_2019_activites_X.tar.gz /data/orcid_activities/ORCID_2019_activites_X.tar.gz + + the shell command that downloads and puts to hdfs orcid activity file X + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${fs:exists(concat(workingPath_activities,'/ORCID_2019_activites_0.tar.gz'))} + + + + + + + + ${jobTracker} + ${nameNode} + bash + -c + ${shell_cmd_0} + + + + + + + + + ${jobTracker} + ${nameNode} + eu.dnetlib.doiboost.orcid.OrcidAuthorsDOIsDataGen + -d${workingPath_activities}/ + -n${nameNode} + -fORCID_2019_activites_0.tar.gz + -ooutput/authors_dois_0.seq + + + + + + + + + ${fs:exists(concat(workingPath_activities,'/ORCID_2019_activites_1.tar.gz'))} + + + + + + + + ${jobTracker} + ${nameNode} + bash + -c + ${shell_cmd_1} + + + + + + + + + ${jobTracker} + ${nameNode} + eu.dnetlib.doiboost.orcid.OrcidAuthorsDOIsDataGen + -d${workingPath_activities}/ + -n${nameNode} + -fORCID_2019_activites_1.tar.gz + -ooutput/authors_dois_1.seq + + + + + + + + + ${fs:exists(concat(workingPath_activities,'/ORCID_2019_activites_2.tar.gz'))} + + + + + + + + ${jobTracker} + ${nameNode} + bash + -c + ${shell_cmd_2} + + + + + + + + + ${jobTracker} + ${nameNode} + eu.dnetlib.doiboost.orcid.OrcidAuthorsDOIsDataGen + -d${workingPath_activities}/ + -n${nameNode} + -fORCID_2019_activites_2.tar.gz + -ooutput/authors_dois_2.seq + + + + + + + + + ${fs:exists(concat(workingPath_activities,'/ORCID_2019_activites_3.tar.gz'))} + + + + + + + + ${jobTracker} + ${nameNode} + bash + -c + ${shell_cmd_3} + + + + + + + + + ${jobTracker} + ${nameNode} + eu.dnetlib.doiboost.orcid.OrcidAuthorsDOIsDataGen + -d${workingPath_activities}/ + -n${nameNode} + -fORCID_2019_activites_3.tar.gz + -ooutput/authors_dois_3.seq + + + + + + + + + ${fs:exists(concat(workingPath_activities,'/ORCID_2019_activites_4.tar.gz'))} + + + + + + + + ${jobTracker} + ${nameNode} + bash + -c + ${shell_cmd_4} + + + + + + + + + ${jobTracker} + ${nameNode} + eu.dnetlib.doiboost.orcid.OrcidAuthorsDOIsDataGen + -d${workingPath_activities}/ + -n${nameNode} + -fORCID_2019_activites_4.tar.gz + -ooutput/authors_dois_4.seq + + + + + + + + + ${fs:exists(concat(workingPath_activities,'/ORCID_2019_activites_5.tar.gz'))} + + + + + + + + ${jobTracker} + ${nameNode} + bash + -c + ${shell_cmd_5} + + + + + + + + + ${jobTracker} + ${nameNode} + eu.dnetlib.doiboost.orcid.OrcidAuthorsDOIsDataGen + -d${workingPath_activities}/ + -n${nameNode} + -fORCID_2019_activites_5.tar.gz + -ooutput/authors_dois_5.seq + + + + + + + + + ${fs:exists(concat(workingPath_activities,'/ORCID_2019_activites_6.tar.gz'))} + + + + + + + + ${jobTracker} + ${nameNode} + bash + -c + ${shell_cmd_6} + + + + + + + + + ${jobTracker} + ${nameNode} + eu.dnetlib.doiboost.orcid.OrcidAuthorsDOIsDataGen + -d${workingPath_activities}/ + -n${nameNode} + -fORCID_2019_activites_6.tar.gz + -ooutput/authors_dois_6.seq + + + + + + + + + + ${fs:exists(concat(workingPath_activities,'/ORCID_2019_activites_7.tar.gz'))} + + + + + + + + ${jobTracker} + ${nameNode} + bash + -c + ${shell_cmd_7} + + + + + + + + + ${jobTracker} + ${nameNode} + eu.dnetlib.doiboost.orcid.OrcidAuthorsDOIsDataGen + -d${workingPath_activities}/ + -n${nameNode} + -fORCID_2019_activites_7.tar.gz + -ooutput/authors_dois_7.seq + + + + + + + + + ${fs:exists(concat(workingPath_activities,'/ORCID_2019_activites_8.tar.gz'))} + + + + + + + + ${jobTracker} + ${nameNode} + bash + -c + ${shell_cmd_8} + + + + + + + + + ${jobTracker} + ${nameNode} + eu.dnetlib.doiboost.orcid.OrcidAuthorsDOIsDataGen + -d${workingPath_activities}/ + -n${nameNode} + -fORCID_2019_activites_8.tar.gz + -ooutput/authors_dois_8.seq + + + + + + + + + ${fs:exists(concat(workingPath_activities,'/ORCID_2019_activites_9.tar.gz'))} + + + + + + + + ${jobTracker} + ${nameNode} + bash + -c + ${shell_cmd_9} + + + + + + + + + ${jobTracker} + ${nameNode} + eu.dnetlib.doiboost.orcid.OrcidAuthorsDOIsDataGen + -d${workingPath_activities}/ + -n${nameNode} + -fORCID_2019_activites_9.tar.gz + -ooutput/authors_dois_9.seq + + + + + + + + + ${fs:exists(concat(workingPath_activities,'/ORCID_2019_activites_X.tar.gz'))} + + + + + + + + ${jobTracker} + ${nameNode} + bash + -c + ${shell_cmd_X} + + + + + + + + + ${jobTracker} + ${nameNode} + eu.dnetlib.doiboost.orcid.OrcidAuthorsDOIsDataGen + -d${workingPath_activities}/ + -n${nameNode} + -fORCID_2019_activites_X.tar.gz + -ooutput/authors_dois_X.seq + + + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_doi_author_list/oozie_app/config-default.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_doi_author_list/oozie_app/config-default.xml new file mode 100644 index 000000000..3726022cb --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_doi_author_list/oozie_app/config-default.xml @@ -0,0 +1,18 @@ + + + jobTracker + hadoop-rm3.garr-pa1.d4science.org:8032 + + + nameNode + hdfs://hadoop-rm1.garr-pa1.d4science.org:8020 + + + queueName + default + + + oozie.action.sharelib.for.spark + spark2 + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_doi_author_list/oozie_app/workflow.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_doi_author_list/oozie_app/workflow.xml new file mode 100644 index 000000000..21d092a83 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_doi_author_list/oozie_app/workflow.xml @@ -0,0 +1,55 @@ + + + + workingPath + the working dir base path + + + sparkDriverMemory + memory for driver process + + + sparkExecutorMemory + memory for individual executor + + + sparkExecutorCores + number of cores used by single executor + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + + + + + + + ${jobTracker} + ${nameNode} + yarn + cluster + Gen_Doi_Author_List + eu.dnetlib.doiboost.orcid.SparkGenerateDoiAuthorList + dhp-doiboost-1.2.1-SNAPSHOT.jar + --num-executors 10 --conf spark.yarn.jars="hdfs://hadoop-rm1.garr-pa1.d4science.org:8020/user/oozie/share/lib/lib_20180405103059/spark2" --executor-memory=${sparkExecutorMemory} --executor-cores=${sparkExecutorCores} --driver-memory=${sparkDriverMemory} + + -w${workingPath}/ + -odoi_author_list/ + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_download/oozie_app/config-default.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_download/oozie_app/config-default.xml new file mode 100644 index 000000000..5621415d9 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_download/oozie_app/config-default.xml @@ -0,0 +1,22 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.action.sharelib.for.java + spark2 + + + oozie.launcher.mapreduce.user.classpath.first + true + + + oozie.launcher.mapreduce.map.java.opts + -Xmx4g + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_download/oozie_app/workflow.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_download/oozie_app/workflow.xml new file mode 100644 index 000000000..1f9adeb4d --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_download/oozie_app/workflow.xml @@ -0,0 +1,45 @@ + + + + workingPathOrcid + the working dir base path + + + token + access token + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + + + + + + + + ${jobTracker} + ${nameNode} + eu.dnetlib.doiboost.orcid.OrcidDownloader + -d${workingPathOrcid}/ + -n${nameNode} + -flast_modified.csv + -odownload/ + -t${token} + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_gen_authors/oozie_app/config-default.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_gen_authors/oozie_app/config-default.xml new file mode 100644 index 000000000..a720e7592 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_gen_authors/oozie_app/config-default.xml @@ -0,0 +1,22 @@ + + + jobTracker + hadoop-rm3.garr-pa1.d4science.org:8032 + + + nameNode + hdfs://hadoop-rm1.garr-pa1.d4science.org:8020 + + + queueName + default + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_gen_authors/oozie_app/workflow.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_gen_authors/oozie_app/workflow.xml new file mode 100644 index 000000000..7ebc5f0a0 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_gen_authors/oozie_app/workflow.xml @@ -0,0 +1,83 @@ + + + + workingPath + the working dir base path + + + token + access token + + + sparkDriverMemory + memory for driver process + + + sparkExecutorMemory + memory for individual executor + + + sparkExecutorCores + number of cores used by single executor + + + outputPath + the working dir base path + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + + + + + + + + + ${jobTracker} + ${nameNode} + yarn + cluster + Split_Lambda_File + eu.dnetlib.doiboost.orcid.SparkPartitionLambdaFile + dhp-doiboost-1.2.1-SNAPSHOT.jar + --num-executors 24 --conf spark.yarn.jars="hdfs://hadoop-rm1.garr-pa1.d4science.org:8020/user/oozie/share/lib/lib_20180405103059/spark2" --executor-memory=${sparkExecutorMemory} --executor-cores=${sparkExecutorCores} --driver-memory=${sparkDriverMemory} + + -w${workingPath}/ + -oauthors/ + -t${token} + + + + + + + + ${jobTracker} + ${nameNode} + yarn + cluster + Gen_Orcid_Authors + eu.dnetlib.doiboost.orcid.SparkOrcidGenerateAuthors + dhp-doiboost-1.2.1-SNAPSHOT.jar + --num-executors 20 --conf spark.yarn.jars="hdfs://hadoop-rm1.garr-pa1.d4science.org:8020/user/oozie/share/lib/lib_20180405103059/spark2" --executor-memory=${sparkExecutorMemory} --executor-cores=${sparkExecutorCores} --driver-memory=${sparkDriverMemory} + + -w${workingPath}/ + -oauthors/ + -t${token} + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_oaf/oozie_app/config-default.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_oaf/oozie_app/config-default.xml new file mode 100644 index 000000000..cf617a84c --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_oaf/oozie_app/config-default.xml @@ -0,0 +1,38 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + hive_metastore_uris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + spark2YarnHistoryServerAddress + http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 + + + spark2EventLogDir + /user/spark/spark2ApplicationHistory + + + spark2ExtraListeners + "com.cloudera.spark.lineage.NavigatorAppListener" + + + spark2SqlQueryExecutionListeners + "com.cloudera.spark.lineage.NavigatorQueryListener" + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_oaf/oozie_app/workflow.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_oaf/oozie_app/workflow.xml new file mode 100644 index 000000000..bffde793b --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/orcid_oaf/oozie_app/workflow.xml @@ -0,0 +1,55 @@ + + + + sourcePath + the working dir base path + + + targetPath + the working dir base path + + + sparkDriverMemory + memory for driver process + + + sparkExecutorMemory + memory for individual executor + + + sparkExecutorCores + number of cores used by single executor + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + yarn-cluster + cluster + Convert ORCID to Dataset + eu.dnetlib.doiboost.orcid.SparkConvertORCIDToOAF + dhp-doiboost-${projectVersion}.jar + + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + --conf spark.sql.shuffle.partitions=3840 + ${sparkExtraOPT} + + --sourcePath${sourcePath} + --targetPath${targetPath} + --masteryarn-cluster + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/unpaywall/oozie_app/config-default.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/unpaywall/oozie_app/config-default.xml new file mode 100644 index 000000000..cf617a84c --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/unpaywall/oozie_app/config-default.xml @@ -0,0 +1,38 @@ + + + jobTracker + yarnRM + + + nameNode + hdfs://nameservice1 + + + oozie.use.system.libpath + true + + + oozie.action.sharelib.for.spark + spark2 + + + hive_metastore_uris + thrift://iis-cdh5-test-m3.ocean.icm.edu.pl:9083 + + + spark2YarnHistoryServerAddress + http://iis-cdh5-test-gw.ocean.icm.edu.pl:18089 + + + spark2EventLogDir + /user/spark/spark2ApplicationHistory + + + spark2ExtraListeners + "com.cloudera.spark.lineage.NavigatorAppListener" + + + spark2SqlQueryExecutionListeners + "com.cloudera.spark.lineage.NavigatorQueryListener" + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/unpaywall/oozie_app/workflow.xml b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/unpaywall/oozie_app/workflow.xml new file mode 100644 index 000000000..d2a69752e --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/main/resources/eu/dnetlib/dhp/doiboost/unpaywall/oozie_app/workflow.xml @@ -0,0 +1,55 @@ + + + + sourcePath + the working dir base path + + + targetPath + the working dir base path + + + sparkDriverMemory + memory for driver process + + + sparkExecutorMemory + memory for individual executor + + + sparkExecutorCores + number of cores used by single executor + + + + + + + + Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}] + + + + + yarn-cluster + cluster + Convert UnpayWall to Dataset + eu.dnetlib.doiboost.uw.SparkMapUnpayWallToOAF + dhp-doiboost-${projectVersion}.jar + + --executor-memory=${sparkExecutorMemory} + --executor-cores=${sparkExecutorCores} + --driver-memory=${sparkDriverMemory} + --conf spark.sql.shuffle.partitions=3840 + ${sparkExtraOPT} + + --sourcePath${sourcePath}/uw_extracted + --targetPath${targetPath} + --masteryarn-cluster + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/dhp/doiboost/DoiBoostHostedByMapTest.scala b/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/dhp/doiboost/DoiBoostHostedByMapTest.scala new file mode 100644 index 000000000..4912648be --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/dhp/doiboost/DoiBoostHostedByMapTest.scala @@ -0,0 +1,70 @@ +package eu.dnetlib.dhp.doiboost + +import eu.dnetlib.dhp.schema.oaf.{Publication, Dataset => OafDataset} +import eu.dnetlib.doiboost.{DoiBoostMappingUtil, HostedByItemType} +import eu.dnetlib.doiboost.SparkGenerateDoiBoost.getClass +import eu.dnetlib.doiboost.mag.ConversionUtil +import eu.dnetlib.doiboost.orcid.ORCIDElement +import org.apache.spark.SparkConf +import org.apache.spark.rdd.RDD +import org.apache.spark.sql.{Dataset, Encoder, Encoders, SaveMode, SparkSession} +import org.codehaus.jackson.map.{ObjectMapper, SerializationConfig} +import org.junit.jupiter.api.Test + +import scala.io.Source + +class DoiBoostHostedByMapTest { + + + +// @Test +// def testMerge():Unit = { +// val conf: SparkConf = new SparkConf() +// val spark: SparkSession = +// SparkSession +// .builder() +// .config(conf) +// .appName(getClass.getSimpleName) +// .master("local[*]").getOrCreate() +// +// +// +// implicit val mapEncoderPub: Encoder[Publication] = Encoders.kryo[Publication] +// implicit val mapEncoderDataset: Encoder[OafDataset] = Encoders.kryo[OafDataset] +// implicit val tupleForJoinEncoder: Encoder[(String, Publication)] = Encoders.tuple(Encoders.STRING, mapEncoderPub) +// +// +// import spark.implicits._ +// val dataset:RDD[String]= spark.sparkContext.textFile("/home/sandro/Downloads/hbMap.gz") +// +// +// val hbMap:Dataset[(String, HostedByItemType)] =spark.createDataset(dataset.map(DoiBoostMappingUtil.toHostedByItem)) +// +// +// hbMap.show() +// +// +// +// +// +// +// +// +// +// +// } + + + @Test + def idDSGeneration():Unit = { + val s ="doajarticles::0066-782X" + + + + println(DoiBoostMappingUtil.generateDSId(s)) + + + } + + +} diff --git a/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/crossref/CrossrefMappingTest.scala b/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/crossref/CrossrefMappingTest.scala new file mode 100644 index 000000000..d31f80248 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/crossref/CrossrefMappingTest.scala @@ -0,0 +1,365 @@ +package eu.dnetlib.doiboost.crossref + +import eu.dnetlib.dhp.schema.oaf._ +import eu.dnetlib.dhp.utils.DHPUtils +import org.codehaus.jackson.map.{ObjectMapper, SerializationConfig} +import org.junit.jupiter.api.Assertions._ +import org.junit.jupiter.api.Test +import org.slf4j.{Logger, LoggerFactory} + +import scala.collection.JavaConverters._ +import scala.io.Source +import scala.util.matching.Regex + + +class CrossrefMappingTest { + + val logger: Logger = LoggerFactory.getLogger(Crossref2Oaf.getClass) + val mapper = new ObjectMapper() + + + @Test + def testFunderRelationshipsMapping(): Unit = { + val template = Source.fromInputStream(getClass.getResourceAsStream("article_funder_template.json")).mkString + val funder_doi = Source.fromInputStream(getClass.getResourceAsStream("funder_doi")).mkString + val funder_name = Source.fromInputStream(getClass.getResourceAsStream("funder_doi")).mkString + + + for (line <- funder_doi.lines) { + val json = template.replace("%s", line) + val resultList: List[Oaf] = Crossref2Oaf.convert(json) + assertTrue(resultList.nonEmpty) + checkRelation(resultList) + } + for (line <- funder_name.lines) { + val json = template.replace("%s", line) + val resultList: List[Oaf] = Crossref2Oaf.convert(json) + assertTrue(resultList.nonEmpty) + checkRelation(resultList) + } + } + + def checkRelation(generatedOAF: List[Oaf]): Unit = { + + val rels: List[Relation] = generatedOAF.filter(p => p.isInstanceOf[Relation]).asInstanceOf[List[Relation]] + assertFalse(rels.isEmpty) + rels.foreach(relation => { + val relJson = mapper.writeValueAsString(relation) + + assertNotNull(relation.getSource, s"Source of relation null $relJson") + assertNotNull(relation.getTarget, s"Target of relation null $relJson") + assertFalse(relation.getTarget.isEmpty, s"Target is empty: $relJson") + assertFalse(relation.getRelClass.isEmpty, s"RelClass is empty: $relJson") + assertFalse(relation.getRelType.isEmpty, s"RelType is empty: $relJson") + assertFalse(relation.getSubRelType.isEmpty, s"SubRelType is empty: $relJson") + + }) + + } + + + @Test + def testEmptyTitle() :Unit = { + val json = Source.fromInputStream(getClass.getResourceAsStream("empty_title.json")).mkString + + + assertNotNull(json) + assertFalse(json.isEmpty); + + val resultList: List[Oaf] = Crossref2Oaf.convert(json) + + assertTrue(resultList.nonEmpty) + + val items = resultList.filter(p => p.isInstanceOf[Result]) + + + mapper.getSerializationConfig.enable(SerializationConfig.Feature.INDENT_OUTPUT) + items.foreach(p => println(mapper.writeValueAsString(p))) + + + } + + + @Test + def testPeerReviewed(): Unit = { + val json = Source.fromInputStream(getClass.getResourceAsStream("prwTest.json")).mkString + mapper.getSerializationConfig.enable(SerializationConfig.Feature.INDENT_OUTPUT) + + assertNotNull(json) + assertFalse(json.isEmpty); + + val resultList: List[Oaf] = Crossref2Oaf.convert(json) + + assertTrue(resultList.nonEmpty) + + val items = resultList.filter(p => p.isInstanceOf[Result]) + + + items.foreach(p => logger.info(mapper.writeValueAsString(p))) + + + + + } + + def extractECAward(award: String): String = { + val awardECRegex: Regex = "[0-9]{4,9}".r + if (awardECRegex.findAllIn(award).hasNext) + return awardECRegex.findAllIn(award).max + null + } + + + @Test + def extractECTest(): Unit = { + val s = "FP7/2007-2013" + val awardExtracted = extractECAward(s) + println(awardExtracted) + + println(DHPUtils.md5(awardExtracted)) + + + } + + @Test + def testJournalRelation(): Unit = { + val json = Source.fromInputStream(getClass.getResourceAsStream("awardTest.json")).mkString + assertNotNull(json) + + assertFalse(json.isEmpty) + + val resultList: List[Oaf] = Crossref2Oaf.convert(json) + + assertTrue(resultList.nonEmpty) + val rels:List[Relation] = resultList.filter(p => p.isInstanceOf[Relation]).map(r=> r.asInstanceOf[Relation]) + + + + rels.foreach(s => logger.info(s.getTarget)) + assertEquals(rels.size, 3 ) + + + } + + + @Test + def testConvertBookFromCrossRef2Oaf(): Unit = { + val json = Source.fromInputStream(getClass.getResourceAsStream("book.json")).mkString + assertNotNull(json) + + assertFalse(json.isEmpty); + + val resultList: List[Oaf] = Crossref2Oaf.convert(json) + + assertTrue(resultList.nonEmpty) + + val items = resultList.filter(p => p.isInstanceOf[Result]) + + assert(items.nonEmpty) + assert(items.size == 1) + val result: Result = items.head.asInstanceOf[Result] + assertNotNull(result) + + logger.info(mapper.writeValueAsString(result)); + + assertNotNull(result.getDataInfo, "Datainfo test not null Failed"); + assertNotNull( + result.getDataInfo.getProvenanceaction, + "DataInfo/Provenance test not null Failed"); + assertFalse( + result.getDataInfo.getProvenanceaction.getClassid.isEmpty, + "DataInfo/Provenance/classId test not null Failed"); + assertFalse( + result.getDataInfo.getProvenanceaction.getClassname.isEmpty, + "DataInfo/Provenance/className test not null Failed"); + assertFalse( + result.getDataInfo.getProvenanceaction.getSchemeid.isEmpty, + "DataInfo/Provenance/SchemeId test not null Failed"); + assertFalse( + result.getDataInfo.getProvenanceaction.getSchemename.isEmpty, + "DataInfo/Provenance/SchemeName test not null Failed"); + + assertNotNull(result.getCollectedfrom, "CollectedFrom test not null Failed"); + assertFalse(result.getCollectedfrom.isEmpty); + + val collectedFromList = result.getCollectedfrom.asScala + assert(collectedFromList.exists(c => c.getKey.equalsIgnoreCase("10|openaire____::081b82f96300b6a6e3d282bad31cb6e2")), "Wrong collected from assertion") + + assert(collectedFromList.exists(c => c.getValue.equalsIgnoreCase("crossref")), "Wrong collected from assertion") + + + val relevantDates = result.getRelevantdate.asScala + + assert(relevantDates.exists(d => d.getQualifier.getClassid.equalsIgnoreCase("created")), "Missing relevant date of type created") + assert(relevantDates.exists(d => d.getQualifier.getClassid.equalsIgnoreCase("published-online")), "Missing relevant date of type published-online") + assert(relevantDates.exists(d => d.getQualifier.getClassid.equalsIgnoreCase("published-print")), "Missing relevant date of type published-print") + val rels = resultList.filter(p => p.isInstanceOf[Relation]) + assert(rels.isEmpty) + } + + + @Test + def testConvertPreprintFromCrossRef2Oaf(): Unit = { + val json = Source.fromInputStream(getClass.getResourceAsStream("preprint.json")).mkString + assertNotNull(json) + + assertFalse(json.isEmpty); + + val resultList: List[Oaf] = Crossref2Oaf.convert(json) + + assertTrue(resultList.nonEmpty) + + val items = resultList.filter(p => p.isInstanceOf[Publication]) + + assert(items.nonEmpty) + assert(items.size == 1) + val result: Result = items.head.asInstanceOf[Publication] + assertNotNull(result) + + logger.info(mapper.writeValueAsString(result)); + + assertNotNull(result.getDataInfo, "Datainfo test not null Failed"); + assertNotNull( + result.getDataInfo.getProvenanceaction, + "DataInfo/Provenance test not null Failed"); + assertFalse( + result.getDataInfo.getProvenanceaction.getClassid.isEmpty, + "DataInfo/Provenance/classId test not null Failed"); + assertFalse( + result.getDataInfo.getProvenanceaction.getClassname.isEmpty, + "DataInfo/Provenance/className test not null Failed"); + assertFalse( + result.getDataInfo.getProvenanceaction.getSchemeid.isEmpty, + "DataInfo/Provenance/SchemeId test not null Failed"); + assertFalse( + result.getDataInfo.getProvenanceaction.getSchemename.isEmpty, + "DataInfo/Provenance/SchemeName test not null Failed"); + + assertNotNull(result.getCollectedfrom, "CollectedFrom test not null Failed"); + assertFalse(result.getCollectedfrom.isEmpty); + + val collectedFromList = result.getCollectedfrom.asScala + assert(collectedFromList.exists(c => c.getKey.equalsIgnoreCase("10|openaire____::081b82f96300b6a6e3d282bad31cb6e2")), "Wrong collected from assertion") + + assert(collectedFromList.exists(c => c.getValue.equalsIgnoreCase("crossref")), "Wrong collected from assertion") + + + val relevantDates = result.getRelevantdate.asScala + + assert(relevantDates.exists(d => d.getQualifier.getClassid.equalsIgnoreCase("created")), "Missing relevant date of type created") + assert(relevantDates.exists(d => d.getQualifier.getClassid.equalsIgnoreCase("available")), "Missing relevant date of type available") + assert(relevantDates.exists(d => d.getQualifier.getClassid.equalsIgnoreCase("accepted")), "Missing relevant date of type accepted") + assert(relevantDates.exists(d => d.getQualifier.getClassid.equalsIgnoreCase("published-online")), "Missing relevant date of type published-online") + assert(relevantDates.exists(d => d.getQualifier.getClassid.equalsIgnoreCase("published-print")), "Missing relevant date of type published-print") + val rels = resultList.filter(p => p.isInstanceOf[Relation]) + assert(rels.isEmpty) + } + + + @Test + def testConvertDatasetFromCrossRef2Oaf(): Unit = { + val json = Source.fromInputStream(getClass.getResourceAsStream("dataset.json")).mkString + assertNotNull(json) + + assertFalse(json.isEmpty); + + val resultList: List[Oaf] = Crossref2Oaf.convert(json) + + assertTrue(resultList.nonEmpty) + + val items = resultList.filter(p => p.isInstanceOf[Dataset]) + + assert(items.nonEmpty) + assert(items.size == 1) + val result: Result = items.head.asInstanceOf[Dataset] + assertNotNull(result) + + logger.info(mapper.writeValueAsString(result)); + + assertNotNull(result.getDataInfo, "Datainfo test not null Failed"); + assertNotNull( + result.getDataInfo.getProvenanceaction, + "DataInfo/Provenance test not null Failed"); + assertFalse( + result.getDataInfo.getProvenanceaction.getClassid.isEmpty, + "DataInfo/Provenance/classId test not null Failed"); + assertFalse( + result.getDataInfo.getProvenanceaction.getClassname.isEmpty, + "DataInfo/Provenance/className test not null Failed"); + assertFalse( + result.getDataInfo.getProvenanceaction.getSchemeid.isEmpty, + "DataInfo/Provenance/SchemeId test not null Failed"); + assertFalse( + result.getDataInfo.getProvenanceaction.getSchemename.isEmpty, + "DataInfo/Provenance/SchemeName test not null Failed"); + + assertNotNull(result.getCollectedfrom, "CollectedFrom test not null Failed"); + assertFalse(result.getCollectedfrom.isEmpty); + } + + @Test + def testConvertArticleFromCrossRef2Oaf(): Unit = { + val json = Source.fromInputStream(getClass.getResourceAsStream("article.json")).mkString + assertNotNull(json) + + assertFalse(json.isEmpty); + + val resultList: List[Oaf] = Crossref2Oaf.convert(json) + + assertTrue(resultList.nonEmpty) + + val items = resultList.filter(p => p.isInstanceOf[Publication]) + + assert(items.nonEmpty) + assert(items.size == 1) + val result: Result = items.head.asInstanceOf[Publication] + assertNotNull(result) + + logger.info(mapper.writeValueAsString(result)); + + assertNotNull(result.getDataInfo, "Datainfo test not null Failed"); + assertNotNull( + result.getDataInfo.getProvenanceaction, + "DataInfo/Provenance test not null Failed"); + assertFalse( + result.getDataInfo.getProvenanceaction.getClassid.isEmpty, + "DataInfo/Provenance/classId test not null Failed"); + assertFalse( + result.getDataInfo.getProvenanceaction.getClassname.isEmpty, + "DataInfo/Provenance/className test not null Failed"); + assertFalse( + result.getDataInfo.getProvenanceaction.getSchemeid.isEmpty, + "DataInfo/Provenance/SchemeId test not null Failed"); + assertFalse( + result.getDataInfo.getProvenanceaction.getSchemename.isEmpty, + "DataInfo/Provenance/SchemeName test not null Failed"); + + assertNotNull(result.getCollectedfrom, "CollectedFrom test not null Failed"); + assertFalse(result.getCollectedfrom.isEmpty); + + val collectedFromList = result.getCollectedfrom.asScala + assert(collectedFromList.exists(c => c.getKey.equalsIgnoreCase("10|openaire____::081b82f96300b6a6e3d282bad31cb6e2")), "Wrong collected from assertion") + + assert(collectedFromList.exists(c => c.getValue.equalsIgnoreCase("crossref")), "Wrong collected from assertion") + + + val relevantDates = result.getRelevantdate.asScala + + assert(relevantDates.exists(d => d.getQualifier.getClassid.equalsIgnoreCase("created")), "Missing relevant date of type created") + + val rels = resultList.filter(p => p.isInstanceOf[Relation]).asInstanceOf[List[Relation]] + assertFalse(rels.isEmpty) + rels.foreach(relation => { + assertNotNull(relation) + assertFalse(relation.getSource.isEmpty) + assertFalse(relation.getTarget.isEmpty) + assertFalse(relation.getRelClass.isEmpty) + assertFalse(relation.getRelType.isEmpty) + assertFalse(relation.getSubRelType.isEmpty) + + }) + + + } + +} diff --git a/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/mag/MAGMappingTest.scala b/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/mag/MAGMappingTest.scala new file mode 100644 index 000000000..88b1669f4 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/mag/MAGMappingTest.scala @@ -0,0 +1,69 @@ +package eu.dnetlib.doiboost.mag + +import java.sql.Timestamp + +import eu.dnetlib.dhp.schema.oaf.Publication +import org.apache.htrace.fasterxml.jackson.databind.SerializationFeature +import org.apache.spark.SparkConf +import org.apache.spark.api.java.function.MapFunction +import org.apache.spark.sql.{Dataset, Encoder, Encoders, SaveMode, SparkSession} +import org.codehaus.jackson.map.{ObjectMapper, SerializationConfig} +import org.junit.jupiter.api.Test +import org.slf4j.{Logger, LoggerFactory} +import org.junit.jupiter.api.Assertions._ +import org.apache.spark.sql.functions._ + +import scala.collection.JavaConverters._ +import scala.io.Source +import scala.reflect.ClassTag +import scala.util.matching.Regex + + + +class MAGMappingTest { + + val logger: Logger = LoggerFactory.getLogger(getClass) + val mapper = new ObjectMapper() + + + + + @Test + def testSplitter():Unit = { + val s = "sports.team" + + + if (s.contains(".")) { + println(s.split("\\.")head) + } + + } + + + + @Test + def testDate() :Unit = { + + val p:Timestamp = Timestamp.valueOf("2011-10-02 00:00:00") + + println(p.toString.substring(0,10)) + + } + + + + @Test + def buildInvertedIndexTest(): Unit = { + val json_input = Source.fromInputStream(getClass.getResourceAsStream("invertedIndex.json")).mkString + val description = ConversionUtil.convertInvertedIndexString(json_input) + assertNotNull(description) + assertTrue(description.nonEmpty) + + logger.debug(description) + + } + + +} + + diff --git a/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/orcid/ElasticSearchTest.java b/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/orcid/ElasticSearchTest.java new file mode 100644 index 000000000..69a2547fd --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/orcid/ElasticSearchTest.java @@ -0,0 +1,192 @@ + +package eu.dnetlib.doiboost.orcid; + +import java.io.IOException; +import java.net.ConnectException; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + +import org.apache.commons.io.IOUtils; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.junit.jupiter.api.Test; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +public class ElasticSearchTest { + + private static final String BASE_CFG_URL = "http://%s:9200/%s/%s/%s?pretty"; + + private String indexHost; + private String indexName; + private String indexType; + private String record; + private int readTimeout = 30000; + + private int nThreads = 4; + private int nTasks = 150; + private ExecutorService executorService = Executors.newFixedThreadPool(nThreads); + private List> resList = Lists.newArrayList(); + + public void setup() { + indexHost = "ip-90-147-167-25.ct1.garrservices.it"; + indexName = "orcid_update"; + indexType = "record"; + record = "{\n" + + " \"timestamp\": 1540825815212,\n" + + " \"pid\": \"0000-0002-5214-479X\",\n" + + " \"blob\": \"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\"\n" + + " }"; + } + + // @Test + public void testSingleFeed() throws Exception { + setup(); + String url = String.format(BASE_CFG_URL, indexHost, indexName, indexType, "0000-0002-5214-479X"); + System.out.println("Sending to: " + url); + System.out.println("record: " + record); + + System.out.println("response from ES: " + getResponse(url, record)); + } + +// @Test + public void testMultipleFeed() throws Exception { + setup(); + String recordTemplate = "{\n" + + " \"timestamp\": 1540825815212,\n" + + " \"pid\": \"0000-0000-0000-%s\",\n" + + " \"blob\": \"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\"\n" + + " }"; + for (int i = 0; i < 10000; i++) { + String orcidId = String.format("0000-0000-0000-%s", Integer.toString(i)); + String url = String.format(BASE_CFG_URL, indexHost, indexName, indexType, orcidId); + String recordTs = String.format(recordTemplate, Integer.toString(i)); + getResponse(url, recordTs); + } + System.out.println(""); + } + + private String getResponse(final String url, final String json) { + CloseableHttpClient client = HttpClients.createDefault(); + try { + + HttpPost httpPost = new HttpPost(url); + if (json != null) { + StringEntity entity = new StringEntity(json); + httpPost.setEntity(entity); + httpPost.setHeader("Accept", "application/json"); + httpPost.setHeader("Content-type", "application/json"); + } + CloseableHttpResponse response = client.execute(httpPost); + + return IOUtils.toString(response.getEntity().getContent()); + } catch (Throwable e) { + throw new RuntimeException("Error on executing request ", e); + } finally { + try { + client.close(); + } catch (IOException e) { + throw new RuntimeException("Unable to close client ", e); + } + } + } + +// @Test + public void testMultiThreadFeed() throws Exception { + setup(); + int countAll = 0; + int countOk = 0; + int partial = 0; + String recordTemplate = "{\n" + + " \"timestamp\": 1540825815212,\n" + + " \"pid\": \"%s\",\n" + + " \"blob\": \"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\"\n" + + " }"; + Map errors = Maps.newHashMap(); + PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); + cm.setMaxTotal(nThreads); + CloseableHttpClient client = HttpClients.custom().setConnectionManager(cm).build(); + for (int i = 40000; i < 41000; i++) { + String orcidId = String.format("%s", i); + String record = String.format(recordTemplate, orcidId); + countAll++; + if (partial == nTasks) { + System.out + .println( + "Waiting for tasks to complete before resubmitting to executor (countAll = " + countAll + + ") . . . "); + System.out.println("Getting replies"); + long startWait = System.currentTimeMillis(); + for (Future res : resList) { + if (res.get() == 200) + countOk++; + } + resList.clear(); + partial = 0; + System.out + .println(". . . Ready to submit again after " + (System.currentTimeMillis() - startWait) + " ms"); + } + partial++; + Future res = executorService.submit(() -> { + CloseableHttpResponse responsePPOST = null; + try { + + String url = String.format(BASE_CFG_URL, indexHost, indexName, indexType, orcidId); + HttpPost post = new HttpPost(url); + post.setHeader("Accept", "application/json"); + post.setHeader("Content-type", "application/json"); + StringEntity entity = new StringEntity(record); + post.setEntity(entity); + responsePPOST = client.execute(post); + int statusCode = responsePPOST.getStatusLine().getStatusCode(); + switch (statusCode) { + case 200: + case 201: + return statusCode; + default: + System.out + .println( + responsePPOST.getStatusLine().getStatusCode() + ": " + + responsePPOST.getStatusLine().getReasonPhrase()); + System.out.println("Source record causing error: " + record); + errors.merge(statusCode, 1, Integer::sum); + return statusCode; + } + } catch (ConnectException ce) { + throw ce; + } catch (IOException e) { + e.printStackTrace(); + errors.merge(-1, 1, Integer::sum); + } finally { + if (responsePPOST != null) + responsePPOST.close(); + } + return -1; + }); + resList.add(res); + } + executorService.shutdown(); + + // now let's wait for the results. We can block ourselves here: we have nothing else to do + System.out.println("Waiting for responses"); + for (Future res : resList) { + if (res.get() == 200) + countOk++; + } + client.close(); + cm.shutdown(); + + System.out.println("countOk: " + countOk); + System.out.println("countAll: " + countAll); + System.out.println("errors count: " + errors.size()); + } +} diff --git a/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/orcid/MappingORCIDToOAFTest.scala b/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/orcid/MappingORCIDToOAFTest.scala new file mode 100644 index 000000000..158746ab5 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/orcid/MappingORCIDToOAFTest.scala @@ -0,0 +1,30 @@ +package eu.dnetlib.doiboost.orcid + +import eu.dnetlib.dhp.schema.oaf.Publication +import eu.dnetlib.doiboost.crossref.Crossref2Oaf +import org.codehaus.jackson.map.{ObjectMapper, SerializationConfig} +import org.junit.jupiter.api.Test +import org.slf4j.{Logger, LoggerFactory} +import org.junit.jupiter.api.Assertions._ + +import scala.io.Source + +class MappingORCIDToOAFTest { + val logger: Logger = LoggerFactory.getLogger(Crossref2Oaf.getClass) + val mapper = new ObjectMapper() + + @Test + def testExtractData():Unit ={ + val json = Source.fromInputStream(getClass.getResourceAsStream("dataOutput")).mkString + assertNotNull(json) + assertFalse(json.isEmpty) + json.lines.foreach(s => { + assertNotNull(ORCIDToOAF.extractValueFromInputString(s)) + }) + } + + + + + +} diff --git a/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/orcid/OrcidClientTest.java b/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/orcid/OrcidClientTest.java new file mode 100644 index 000000000..75f857ca4 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/orcid/OrcidClientTest.java @@ -0,0 +1,136 @@ + +package eu.dnetlib.doiboost.orcid; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +import org.apache.commons.io.IOUtils; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.junit.jupiter.api.Test; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; + +public class OrcidClientTest { + final String orcidId = "0000-0001-7291-3210"; + final int REQ_LIMIT = 24; + final int REQ_MAX_TEST = 100; + final int RECORD_DOWNLOADED_COUNTER_LOG_INTERVAL = 10; + final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; + final String toRetrieveDate = "2020-05-06 23:59:46.031145"; + String toNotRetrieveDate = "2019-09-29 23:59:59.000000"; + String lastUpdate = "2019-09-30 00:00:00"; + String shortDate = "2020-05-06 16:06:11"; + +// curl -i -H "Accept: application/vnd.orcid+xml" +// -H 'Authorization: Bearer 78fdb232-7105-4086-8570-e153f4198e3d' +// 'https://api.orcid.org/v3.0/0000-0001-7291-3210/record' + + public String testDownloadRecord(String orcidId) throws Exception { + try (CloseableHttpClient client = HttpClients.createDefault()) { + HttpGet httpGet = new HttpGet("https://api.orcid.org/v3.0/" + orcidId + "/record"); + httpGet.addHeader("Accept", "application/vnd.orcid+xml"); + httpGet.addHeader("Authorization", "Bearer 78fdb232-7105-4086-8570-e153f4198e3d"); + CloseableHttpResponse response = client.execute(httpGet); + if (response.getStatusLine().getStatusCode() != 200) { + System.out + .println("Downloading " + orcidId + " status code: " + response.getStatusLine().getStatusCode()); + } + return IOUtils.toString(response.getEntity().getContent()); + } catch (Throwable e) { + e.printStackTrace(); + } + return new String(""); + } + +// @Test + public void testLambdaFileParser() throws Exception { + try (BufferedReader br = new BufferedReader( + new InputStreamReader(this.getClass().getResourceAsStream("last_modified.csv")))) { + String line; + int counter = 0; + int nReqTmp = 0; + long startDownload = System.currentTimeMillis(); + long startReqTmp = System.currentTimeMillis(); + while ((line = br.readLine()) != null) { + counter++; +// skip headers line + if (counter == 1) { + continue; + } + String[] values = line.split(","); + List recordInfo = Arrays.asList(values); + testDownloadRecord(recordInfo.get(0)); + long endReq = System.currentTimeMillis(); + nReqTmp++; + if (nReqTmp == REQ_LIMIT) { + long reqSessionDuration = endReq - startReqTmp; + if (reqSessionDuration <= 1000) { + System.out + .println( + "\nreqSessionDuration: " + reqSessionDuration + " nReqTmp: " + nReqTmp + " wait ...."); + Thread.sleep(1000 - reqSessionDuration); + } else { + nReqTmp = 0; + startReqTmp = System.currentTimeMillis(); + } + } + + if (counter > REQ_MAX_TEST) { + break; + } + if ((counter % RECORD_DOWNLOADED_COUNTER_LOG_INTERVAL) == 0) { + System.out.println("Current record downloaded: " + counter); + } + } + long endDownload = System.currentTimeMillis(); + long downloadTime = endDownload - startDownload; + System.out.println("Download time: " + ((downloadTime / 1000) / 60) + " minutes"); + } + } + +// @Test + public void getRecordDatestamp() throws ParseException { + Date toRetrieveDateDt = new SimpleDateFormat(DATE_FORMAT).parse(toRetrieveDate); + Date toNotRetrieveDateDt = new SimpleDateFormat(DATE_FORMAT).parse(toNotRetrieveDate); + Date lastUpdateDt = new SimpleDateFormat(DATE_FORMAT).parse(lastUpdate); + assertTrue(toRetrieveDateDt.after(lastUpdateDt)); + assertTrue(!toNotRetrieveDateDt.after(lastUpdateDt)); + } + + public void testDate(String value) throws ParseException { + System.out.println(value.toString()); + if (value.length() != 19) { + value = value.substring(0, 19); + } + Date valueDt = new SimpleDateFormat(DATE_FORMAT).parse(value); + System.out.println(valueDt.toString()); + } + +// @Test + public void testModifiedDate() throws ParseException { + testDate(toRetrieveDate); + testDate(toNotRetrieveDate); + testDate(shortDate); + } + +// @Test + public void testReadBase64CompressedRecord() throws Exception { + final String base64CompressedRecord = IOUtils + .toString(getClass().getResourceAsStream("0000-0001-6645-509X.compressed.base64")); + final String recordFromSeqFile = ArgumentApplicationParser.decompressValue(base64CompressedRecord); + System.out.println(recordFromSeqFile); + final String downloadedRecord = testDownloadRecord("0000-0001-6645-509X"); + assertTrue(recordFromSeqFile.equals(downloadedRecord)); + } +} diff --git a/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/orcid/xml/XMLRecordParserTest.java b/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/orcid/xml/XMLRecordParserTest.java new file mode 100644 index 000000000..d5da4eec0 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/orcid/xml/XMLRecordParserTest.java @@ -0,0 +1,58 @@ + +package eu.dnetlib.doiboost.orcid.xml; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.apache.commons.io.IOUtils; +import org.junit.jupiter.api.Test; + +import eu.dnetlib.doiboost.orcid.model.AuthorData; +import eu.dnetlib.doiboost.orcid.model.WorkData; + +public class XMLRecordParserTest { + + @Test + public void testOrcidAuthorDataXMLParser() throws Exception { + + String xml = IOUtils.toString(this.getClass().getResourceAsStream("summary_0000-0001-6828-479X.xml")); + + XMLRecordParser p = new XMLRecordParser(); + + AuthorData authorData = p.VTDParseAuthorData(xml.getBytes()); + assertNotNull(authorData); + assertNotNull(authorData.getName()); + System.out.println("name: " + authorData.getName()); + assertNotNull(authorData.getSurname()); + System.out.println("surname: " + authorData.getSurname()); + } + + @Test + public void testOrcidXMLErrorRecordParser() throws Exception { + + String xml = IOUtils.toString(this.getClass().getResourceAsStream("summary_error.xml")); + + XMLRecordParser p = new XMLRecordParser(); + + AuthorData authorData = p.VTDParseAuthorData(xml.getBytes()); + assertNotNull(authorData); + assertNotNull(authorData.getErrorCode()); + System.out.println("error: " + authorData.getErrorCode()); + } + + @Test + public void testOrcidWorkDataXMLParser() throws Exception { + + String xml = IOUtils + .toString( + this.getClass().getResourceAsStream("activity_work_0000-0002-5982-8983.xml")); + + XMLRecordParser p = new XMLRecordParser(); + + WorkData workData = p.VTDParseWorkData(xml.getBytes()); + assertNotNull(workData); + assertNotNull(workData.getOid()); + System.out.println("oid: " + workData.getOid()); + assertNotNull(workData.getDoi()); + System.out.println("doi: " + workData.getDoi()); + } +} diff --git a/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/uw/UnpayWallMappingTest.scala b/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/uw/UnpayWallMappingTest.scala new file mode 100644 index 000000000..8a6dd279b --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/java/eu/dnetlib/doiboost/uw/UnpayWallMappingTest.scala @@ -0,0 +1,49 @@ +package eu.dnetlib.doiboost.uw + +import org.codehaus.jackson.map.{ObjectMapper, SerializationConfig} +import org.junit.jupiter.api.Test + +import scala.io.Source +import org.junit.jupiter.api.Assertions._ +import org.slf4j.{Logger, LoggerFactory} + +class UnpayWallMappingTest { + + val logger: Logger = LoggerFactory.getLogger(getClass) + val mapper = new ObjectMapper() + + + @Test + def testMappingToOAF():Unit ={ + + val Ilist = Source.fromInputStream(getClass.getResourceAsStream("input.json")).mkString + + + for (line <-Ilist.lines) { + + + val p = UnpayWallToOAF.convertToOAF(line) + + if(p!= null) { + assertTrue(p.getPid.size()==1) + logger.info(p.getId) + } + assertNotNull(line) + assertTrue(line.nonEmpty) + } + mapper.getSerializationConfig.enable(SerializationConfig.Feature.INDENT_OUTPUT) + + + val l = Ilist.lines.next() + + logger.info(mapper.writeValueAsString(UnpayWallToOAF.convertToOAF(l))) + + + + + + + + } + +} diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/dhp/doiboost/publicationInput.json b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/dhp/doiboost/publicationInput.json new file mode 100644 index 000000000..4e6db2a12 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/dhp/doiboost/publicationInput.json @@ -0,0 +1,20 @@ +[{"journal":{"issnOnline":null,"vol":"37","issnLinking":null,"edition":null,"issnPrinted":"2415-8038","dataInfo":null,"conferencedate":null,"iss":null,"ep":"34","sp":"30","conferenceplace":null,"name":"Scientific Herald of Uzhhorod University.Series Physics"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"description":[],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Instability"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Softening"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Composite material"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Self-organization"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Materials science"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Crystalline materials"}],"author":[{"surname":"Мар’ян","affiliation":null,"fullname":"М. І. Мар’ян","rank":null,"pid":null,"name":"М. І."},{"surname":"Юркович","affiliation":null,"fullname":"Н. В. Юркович","rank":null,"pid":null,"name":"Н. В."}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Dynamic instability and self-organization processes in the temperature interval of softening non-crystalline materials"},{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"dynamic instability and self organization processes in the temperature interval of softening non crystalline materials"},{"qualifier":{"blank":false,"classid":"alternative title","classname":"alternative title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Dynamic instability and self-organization processes in the temperature interval of softening non-crystalline materials"}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2017-09-29T13:48:31Z"},{"qualifier":{"blank":false,"classid":"published-online","classname":"published-online","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2015-06-01"}],"dateofacceptance":{"dataInfo":null,"value":"2015-06-01"},"publisher":{"dataInfo":null,"value":"Uzhhorod National University"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":null,"instancetype":{"blank":false,"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["http://dx.doi.org/10.24144/2415-8038.2015.37.30-34"],"dateofacceptance":{"dataInfo":null,"value":"2015-06-01"},"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["https://academic.microsoft.com/#/detail/2760156017"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["10.24144/2415-8038.2015.37.30-34","2760156017"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.24144/2415-8038.2015.37.30-34"}],"dateofcollection":"2019-02-18T14:04:00Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::000212f083136806ae4d90079543ef29","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1550498640287} +,{"journal":{"issnOnline":null,"vol":"58","issnLinking":null,"edition":null,"issnPrinted":"1554-0138","dataInfo":null,"conferencedate":null,"iss":null,"ep":null,"sp":null,"conferenceplace":null,"name":"PsycCRITIQUES"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"description":[],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Self"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Trajectory"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Cognitive psychology"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Psychology"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Applied psychology"}],"author":[{"surname":"Cook","affiliation":null,"fullname":"Mary Ann Cook","rank":null,"pid":null,"name":"Mary Ann"}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"The Trajectory of the Self"},{"qualifier":{"blank":false,"classid":"alternative title","classname":"alternative title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"The trajectory of the self."}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2013-09-03T15:05:24Z"},{"qualifier":{"blank":false,"classid":"published-online","classname":"published-online","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2013-09-04"}],"dateofacceptance":{"dataInfo":null,"value":"2013-09-03T15:05:24Z"},"publisher":{"dataInfo":null,"value":"Portico"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":null,"instancetype":{"blank":false,"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["http://dx.doi.org/10.1037/a0033963"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["http://content.apa.org/reviews/a0033963","https://academic.microsoft.com/#/detail/2332131917"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["10.1037/a0033963","2332131917"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.1037/a0033963"}],"dateofcollection":"2019-11-23T21:36:18Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::0004e9dc4961ffe3db4f3b29869447b2","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1574544978268} +,{"journal":{"issnOnline":null,"vol":"27","issnLinking":null,"edition":null,"issnPrinted":"0904-2512","dataInfo":null,"conferencedate":null,"iss":null,"ep":"129","sp":"124","conferenceplace":null,"name":"Journal of Oral Pathology & Medicine"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"description":[{"dataInfo":null,"value":"Previous studies on the frequency of mast cells (MCs) in recurrent aphthous ulcers (RAU) have yielded conflicting results. Monoclonal antibodies specific for tryptase (AA1) and anti-IgE (polyclonal antibody) were used to identify density and distribution of MCs in an immunohistochemical study of RAU (n=15), induced oral traumatic ulcers (TUs) (n=9), and control clinically healthy oral mucosa (n=15). Results were quantified by means of a VIDAS image analyzer. In all sections studied, IgE-positive cells showed similar frequency and distribution to tryptase-positive MCs. In RAU lesions, numerous tryptase-positive MCs were found in the sub-epithelial lamina propria, but MC numbers in the epithelium were low and present only in some RAU biopsies. MCs were also more numerous in RAU-inflammatory infiltrates (118+/-31 cells/mm2) than those seen in TU-inflammatory infiltrates (75+/-18 cells/mm2, P<0.001). MC activation/degranulation, as judged by diffuse extracellular tryptase staining, was a common feature within RAU-inflammatory infiltrates and at RAU-inflammatory infiltrates-connective tissue interfaces, which were often associated with connective tissue disruption. MC counts in the RAU connective tissue, lateral to the inflammatory infiltrates, were significantly greater than in the connective tissue of TUs and of control biopsies (124+/-36 vs 73+/-13 vs 69+/-21 cells/mm2, respectively; P<0.001). Overall, MCs were significantly increased in aphthae (116+/-26 cells/mm2) compared with TU lesions (72+/-11 cells/mm2, P<0.001) and controls (71+/-16 cells/mm2, P<0.001). In conclusion, MC numbers are increased in a typical topographical pattern, and the local MCs show signs of activation/degranulation suggesting active involvement of this cell type in RAU pathogenesis."}],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Pathology and Forensic Medicine"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Cancer Research"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Oral Surgery"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Otorhinolaryngology"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Periodontics"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Tryptase"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.5225649"},"value":"biology.protein"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.5225649"},"value":"biology"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Biopsy"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.48158374"},"value":"medicine.diagnostic_test"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.48158374"},"value":"medicine"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Oral mucosa"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.51747984"},"value":"medicine.anatomical_structure"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Lamina propria"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Connective tissue"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Immunoglobulin E"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Basement membrane"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Degranulation"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.32854074"},"value":"business.industry"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.32854074"},"value":"business"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Pathology"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.43155256"},"value":"medicine.medical_specialty"}],"author":[{"surname":"Natah","affiliation":null,"fullname":"Sirajedin S. Natah","rank":null,"pid":null,"name":"Sirajedin S."},{"surname":"Häyrinen-Immonen","affiliation":null,"fullname":"Ritva Häyrinen-Immonen","rank":null,"pid":null,"name":"Ritva"},{"surname":"Hietanen","affiliation":null,"fullname":"Jarkko Hietanen","rank":null,"pid":null,"name":"Jarkko"},{"surname":"Malmström","affiliation":null,"fullname":"Maria Malmström","rank":null,"pid":null,"name":"Maria"},{"surname":"Konttinen","affiliation":null,"fullname":"Yrjö T. Konttinen","rank":null,"pid":null,"name":"Yrjö T."}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Quantitative assessment of mast cells in recurrent aphthous ulcers (RAU)"},{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"quantitative assessment of mast cells in recurrent aphthous ulcers rau"},{"qualifier":{"blank":false,"classid":"alternative title","classname":"alternative title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Quantitative assessment of mast cells in recurrent aphthous ulcers (RAU)."}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2010-08-12T11:53:06Z"},{"qualifier":{"blank":false,"classid":"published-online","classname":"published-online","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2007-02-27"}],"dateofacceptance":{"dataInfo":null,"value":"2007-02-27"},"publisher":{"dataInfo":null,"value":"Wiley"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":{"dataInfo":null,"value":"http://doi.wiley.com/10.1002/tdm_license_1.1"},"instancetype":{"blank":false,"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["https://api.wiley.com/onlinelibrary/tdm/v1/articles/10.1111%2Fj.1600-0714.1998.tb01927.x","http://dx.doi.org/10.1111/j.1600-0714.1998.tb01927.x"],"dateofacceptance":{"dataInfo":null,"value":"2007-02-27"},"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["http://onlinelibrary.wiley.com/doi/10.1111/j.1600-0714.1998.tb01927.x/abstract","https://www.ncbi.nlm.nih.gov/pubmed/9563804","http://europepmc.org/abstract/MED/9563804","https://academic.microsoft.com/#/detail/2166339459"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["10.1111/j.1600-0714.1998.tb01927.x","2166339459"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.1111/j.1600-0714.1998.tb01927.x"}],"dateofcollection":"2019-03-21T12:03:27Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::0007c6d579668132b5bdb5e340f114d2","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1553169807945} +,{"journal":{"issnOnline":"1933-169X","vol":"11","issnLinking":null,"edition":null,"issnPrinted":"1933-1681","dataInfo":null,"conferencedate":null,"iss":null,"ep":"328","sp":"309","conferenceplace":null,"name":"Journal of Information Technology & Politics"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"description":[{"dataInfo":null,"value":"AbstractThis study examines the role of online networking in a grassroots movement in China. Drawing on Manuel Castells’s theory of communication power in the network society, we argue that microblogs can facilitate China’s mass self-communication in a network environment, even under authoritarian control, and are able to challenge the power of agenda setting, which has been mainly dominated by the state and the state media. We study a grassroots movement in China and examine the ways in which messages were communicated and people were connected into a network. Thus we investigate the role of online communication in reconfiguring the balance of power between the authority and Chinese citizens. Using systematic data collection and social network analysis, we characterize the microbloggers who contributed to the process, the network configuration, and the interplays between different stakeholders."}],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"General Computer Science"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Sociology and Political Science"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Public Administration"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Social network analysis"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Data collection"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Social media"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Microblogging"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Authoritarianism"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Communication theory"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"China"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Sociology"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Grassroots"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Social science"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Network society"}],"author":[{"surname":"Fu","affiliation":null,"fullname":"King-wa Fu","rank":null,"pid":null,"name":"King-wa"},{"surname":"Chau","affiliation":null,"fullname":"Michael Chau","rank":null,"pid":null,"name":"Michael"}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Use of Microblogs in Grassroots Movements in China: Exploring the Role of Online Networking in Agenda Setting"},{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"use of microblogs in grassroots movements in china exploring the role of online networking in agenda setting"}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2014-04-07T20:00:40Z"},{"qualifier":{"blank":false,"classid":"published-print","classname":"published-print","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2014-07-03"}],"dateofacceptance":{"dataInfo":null,"value":"2014-07-03"},"publisher":{"dataInfo":null,"value":"Informa UK Limited"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":null,"instancetype":{"blank":false,"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["http://www.tandfonline.com/doi/pdf/10.1080/19331681.2014.909344","http://dx.doi.org/10.1080/19331681.2014.909344"],"dateofacceptance":{"dataInfo":null,"value":"2014-07-03"},"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["https://www.tandfonline.com/doi/abs/10.1080/19331681.2014.909344","https://core.ac.uk/display/38056217","http://hub.hku.hk/handle/10722/203542","http://www.tandfonline.com/doi/full/10.1080/19331681.2014.909344","https://academic.microsoft.com/#/detail/2070515339"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["10.1080/19331681.2014.909344","2070515339"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.1080/19331681.2014.909344"}],"dateofcollection":"2019-11-25T18:51:18Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::00091e97b547d64358f7286c6003a70f","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"ORCID","key":"10|openaire____::806360c771262b4d6770e7cdf04b5c5a"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1574707878233} +,{"journal":{"issnOnline":"1573-9171","vol":"20","issnLinking":null,"edition":null,"issnPrinted":"0568-5230","dataInfo":null,"conferencedate":null,"iss":null,"ep":"1654","sp":"1650","conferenceplace":null,"name":"Bulletin of the Academy of Sciences of the USSR Division of Chemical Science"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"description":[{"dataInfo":null,"value":"1.\r\n\r\nA study was made of the sulfonation of the 2-phenyl-, 2-(4′-alkylphenyl)-2-(4′-methoxyphenyl)-, 2-(3′,4′-dimethoxyphenyl)-, and 2-(4′-hydroxyphenyl)-3-hydroxypyridines.\r\n\r\n\r\n\r\n\r\n2.\r\n\r\nIn the case of 2-phenyl-3-hydroxypyridine the substitution was directed to the p-position of the phenyl ring, whereas in the p-aryl-substituted 3-hydroxypyridines the sulfo group substitutes in the mposition of the phenyl ring.\r\n\r\n\r\n\r\n\r\n3.\r\n\r\nA comparison of the conditions for the sulfonation of benzene and 2-phenyl-3-hydroxypyridine discloses that the presence of a heterocyclic ring as a substituent in the phenyl ring lowers the reactivity of the latter in sulfonation reactions.\r\n\r\n\r\n\r\n\r\n4.\r\n\r\nThe insertion of alkyl groups (with the exception of tert-butyl), methoxy, and hydroxy groups in the phenyl ring facilitates sulfonation.\r\n\r\n\r\n\r\n\r\n5.\r\n\r\n2-(3′-Hydroxy-4′-alkylphenyl)-3-hydroxypyridines were synthesized by the alkaline fusion of sulfo acids of the 2-(4′-alkylphenyl)-3-hydroxypyridine series."}],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"General Chemistry"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Substituent"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.56475383"},"value":"chemistry.chemical_compound"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.56475383"},"value":"chemistry"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Polymer chemistry"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Organic chemistry"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Alkyl"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.5366165"},"value":"chemistry.chemical_classification"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Benzene"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Aryl"}],"author":[{"surname":"Smirnov","affiliation":null,"fullname":"L. D. Smirnov","rank":null,"pid":null,"name":"L. D."},{"surname":"Kuz'min","affiliation":null,"fullname":"V. I. Kuz'min","rank":null,"pid":null,"name":"V. I."},{"surname":"Mikhailova","affiliation":null,"fullname":"L. M. Mikhailova","rank":null,"pid":null,"name":"L. M."},{"surname":"Lezina","affiliation":null,"fullname":"V. P. Lezina","rank":null,"pid":null,"name":"V. P."},{"surname":"Dyumaev","affiliation":null,"fullname":"K. M. Dyumaev","rank":null,"pid":null,"name":"K. M."}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Chemistry of 2-aryl-substituted 3-hydroxypyridines communication 3. Sulfonation of 2-aryl-3-hydroxypyridines"},{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"chemistry of 2 aryl substituted 3 hydroxypyridines communication 3 sulfonation of 2 aryl 3 hydroxypyridines"}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2005-01-08T02:10:56Z"}],"dateofacceptance":{"dataInfo":null,"value":"2005-01-08T02:10:56Z"},"publisher":{"dataInfo":null,"value":"Springer Science and Business Media LLC"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":{"dataInfo":null,"value":"http://www.springer.com/tdm"},"instancetype":{"blank":false,"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["http://link.springer.com/content/pdf/10.1007/BF00860021.pdf","http://link.springer.com/article/10.1007/BF00860021/fulltext.html","http://link.springer.com/content/pdf/10.1007/BF00860021","http://dx.doi.org/10.1007/bf00860021"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["https://link.springer.com/article/10.1007/BF00860021","https://academic.microsoft.com/#/detail/214895358"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["BF00860021","10.1007/bf00860021","214895358"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.1007/bf00860021"}],"dateofcollection":"2019-04-26T20:11:56Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::00120b3e4e3ad02db2318298308c46d1","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1556309516404} +,{"journal":{"issnOnline":"1521-3870","vol":"49","issnLinking":null,"edition":null,"issnPrinted":"0942-5616","dataInfo":null,"conferencedate":null,"iss":null,"ep":"108","sp":"101","conferenceplace":null,"name":"MLQ"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"description":[{"dataInfo":null,"value":"Continuing the earlier research in [1] and [4] we work out a class of interstices in countable arithmetically saturated models of PA in which selective types are realized and a class of interstices in which 2-indiscernible types are realized (and hence, there exist elements whose stabilizers are strongly maximal)"}],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Discrete mathematics"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Countable set"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Mathematics"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Peano axioms"}],"author":[{"surname":"Bigorajska","affiliation":null,"fullname":"Teresa Bigorajska","rank":null,"pid":null,"name":"Teresa"}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Strongly maximal subgroups determined by elements in interstices"}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2003-01-17T16:43:11Z"}],"dateofacceptance":{"dataInfo":null,"value":"2003-01-17T16:43:11Z"},"publisher":{"dataInfo":null,"value":"Wiley"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":{"dataInfo":null,"value":"http://doi.wiley.com/10.1002/tdm_license_1.1"},"instancetype":{"blank":false,"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["https://api.wiley.com/onlinelibrary/tdm/v1/articles/10.1002%2Fmalq.200310010","https://onlinelibrary.wiley.com/doi/full/10.1002/malq.200310010","http://dx.doi.org/10.1002/malq.200310010"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["https://onlinelibrary.wiley.com/doi/abs/10.1002/malq.200310010","https://academic.microsoft.com/#/detail/2093896874"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["10.1002/malq.200310010","2093896874"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.1002/malq.200310010"}],"dateofcollection":"2019-02-13T17:19:35Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::0012695bd163a2fa841fee8c9002bb50","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1550078375948} +,{"journal":{"issnOnline":"1808-057X","vol":null,"issnLinking":null,"edition":null,"issnPrinted":"1519-7077","dataInfo":null,"conferencedate":null,"iss":null,"ep":null,"sp":null,"conferenceplace":null,"name":"Revista Contabilidade & Finanças"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"description":[{"dataInfo":null,"value":"Abstract This essay presents recommendations in regard to accounting for operations that involve bitcoins, in compliance with the International Financial Reporting Standards (IFRS), and analyzes their main tax aspects. There is no specific pronouncement on the part of the International Accounting Standards Board (IASB) or from the Brazilian Accounting Pronouncements Committee (CPC) regarding the accounting treatment to be applied in operations that use these currencies. Bitcoin is of interest to economists as a virtual currency with the potential to disrupt existing payment systems and even monetary systems. This essay offers a contribution for standard-setters and the tax authority (fisco) by providing the basis for possible guidelines to be issued on the accounting treatment of bitcoin operations, as well as by defining the appropriate tax treatment; in addition, it makes a contribution for accounting professionals by suggesting the accounting policy to be adopted in these operations. Here, the analysis of the characteristics of bitcoins is compared with the guidelines and concepts of IFRS, in order to elaborate the recommendation for accounting treatment, and it suggests that the most adequate procedure would be that of foreign currency, which would go against the tax treatment adopted up until now by the Brazilian Internal Revenue Service (Receita Federal) or the Internal Revenue Service (IRS) of the United States of America (USA), which suggest treating virtual currencies as goods and not as currencies. It warrants mentioning that this contradiction may cause tax risks for taxpayers."}],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Economics"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Accounting"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.44534323"},"value":"business.industry"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.44534323"},"value":"business"}],"author":[{"surname":"Pelucio-Grecco","affiliation":null,"fullname":"Marta Cristina Pelucio-Grecco","rank":null,"pid":[{"qualifier":{"blank":false,"classid":"ORCID","classname":"ORCID","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"http://orcid.org/0000-0001-6994-4219"}],"name":"Marta Cristina"},{"surname":"Santos Neto","affiliation":null,"fullname":"Jacinto Pedro dos Santos Neto","rank":null,"pid":[{"qualifier":{"blank":false,"classid":"ORCID","classname":"ORCID","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"http://orcid.org/0000-0002-2106-8800"}],"name":"Jacinto Pedro dos"},{"surname":"Constancio","affiliation":null,"fullname":"Diego Constancio","rank":null,"pid":[{"qualifier":{"blank":false,"classid":"ORCID","classname":"ORCID","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"http://orcid.org/0000-0002-2659-0884"}],"name":"Diego"}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Accounting for bitcoins in light of IFRS and tax aspects"}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2020-01-31T09:33:16Z"},{"qualifier":{"blank":false,"classid":"published-online","classname":"published-online","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2020-01-31"}],"dateofacceptance":{"dataInfo":null,"value":"2020-01-31"},"publisher":{"dataInfo":null,"value":"FapUNIFESP (SciELO)"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":{"dataInfo":null,"value":"http://creativecommons.org/licenses/by/4.0/"},"instancetype":{"blank":false,"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["http://www.scielo.br/pdf/rcf/2020nahead/1808-057X-rcf-1808-057x201909110.pdf","http://dx.doi.org/10.1590/1808-057x201909110"],"dateofacceptance":{"dataInfo":null,"value":"2020-01-31"},"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":{"dataInfo":null,"value":"cc-by"},"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Open","classname":"Open","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["http://www.scielo.br/pdf/rcf/2020nahead/1808-057X-rcf-1808-057x201909110.pdf"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"UnpayWall","key":"10|openaire____::8ac8380272269217cb09a928c8caa993"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["http://www.scielo.br/scielo.php?script=sci_arttext&pid=S1519-70772020005001202&lng=pt&tlng=pt","https://academic.microsoft.com/#/detail/3003918216"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["S1519-70772020005001202","10.1590/1808-057x201909110","3003918216"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.1590/1808-057x201909110"}],"dateofcollection":"2020-03-23T23:40:24Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::0012dde1ec8595555eb3f0117a5f0ce6","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"UnpayWall","key":"10|openaire____::8ac8380272269217cb09a928c8caa993"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1585006824804} +,{"journal":{"issnOnline":null,"vol":"184","issnLinking":null,"edition":null,"issnPrinted":"0927-7765","dataInfo":null,"conferencedate":null,"iss":null,"ep":null,"sp":"110503","conferenceplace":null,"name":"Colloids and Surfaces B: Biointerfaces"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"description":[{"dataInfo":null,"value":"Abstract In this work, highly lubricous hyaluronic acid-silica (HA-SiO2) nanohybrid coatings were fabricated through a sequential process consisting of a sol-gel followed by electrophoretic deposition (EPD). SiO2 nanoparticles were uniformly distributed in the coating layers, and the coating thickness was identified as approximately 1–2 μm regardless of the amount of SiO2. Incorporation of SiO2 into the HA polymer matrix enhanced the mechanical stability of the nanohybrid coatings, indicating greater interfacial bonding strength compared to HA coating layers alone. In addition, due to improved stability, the nanohybrid coatings showed excellent biolubrication properties, which were evaluated with a tribological experiment. These results indicate that the nanohybrid coatings have great potential to be used in biomedical applications that require superior biolubrication properties."}],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Biotechnology"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Physical and Theoretical Chemistry"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Colloid and Surface Chemistry"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Surfaces and Interfaces"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"General Medicine"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Organic chemistry"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Polymer"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.4843148"},"value":"chemistry.chemical_classification"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.4843148"},"value":"chemistry"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Coating"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.53945994"},"value":"engineering.material"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.53945994"},"value":"engineering"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Mechanical stability"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Nanoparticle"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Chemical engineering"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Hyaluronic acid"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.41162413"},"value":"chemistry.chemical_compound"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Electrophoretic deposition"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Tribology"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Self-healing hydrogels"}],"author":[{"surname":"Hwang","affiliation":null,"fullname":"Changha Hwang","rank":null,"pid":null,"name":"Changha"},{"surname":"Min","affiliation":null,"fullname":"YouJin Min","rank":null,"pid":null,"name":"YouJin"},{"surname":"Seong","affiliation":null,"fullname":"Yun-Jeong Seong","rank":null,"pid":null,"name":"Yun-Jeong"},{"surname":"Kim","affiliation":null,"fullname":"Dae-Eun Kim","rank":null,"pid":null,"name":"Dae-Eun"},{"surname":"Kim","affiliation":null,"fullname":"Hyoun-Ee Kim","rank":null,"pid":null,"name":"Hyoun-Ee"},{"surname":"Jeong","affiliation":null,"fullname":"Seol-Ha Jeong","rank":null,"pid":[{"qualifier":{"blank":false,"classid":"ORCID","classname":"ORCID","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"http://orcid.org/0000-0003-3210-9580"}],"name":"Seol-Ha"}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Enhanced biolubrication on biomedical devices using hyaluronic acid-silica nanohybrid hydrogels"},{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"enhanced biolubrication on biomedical devices using hyaluronic acid silica nanohybrid hydrogels"}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2019-09-26T21:12:12Z"}],"dateofacceptance":{"dataInfo":null,"value":"2019-09-26T21:12:12Z"},"publisher":{"dataInfo":null,"value":"Elsevier BV"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":{"dataInfo":null,"value":"https://www.elsevier.com/tdm/userlicense/1.0/"},"instancetype":{"blank":false,"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["https://api.elsevier.com/content/article/PII:S0927776519306472?httpAccept=text/xml","https://api.elsevier.com/content/article/PII:S0927776519306472?httpAccept=text/plain","http://dx.doi.org/10.1016/j.colsurfb.2019.110503"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["https://www.sciencedirect.com/science/article/pii/S0927776519306472","https://academic.microsoft.com/#/detail/2976422802"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["S0927776519306472","10.1016/j.colsurfb.2019.110503","2976422802"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.1016/j.colsurfb.2019.110503"}],"dateofcollection":"2019-12-23T12:10:24Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::001311f85afceb7f157e9c756c0bc817","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"ORCID","key":"10|openaire____::806360c771262b4d6770e7cdf04b5c5a"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1577103024594} +,{"journal":{"issnOnline":"1680-7324","vol":"16","issnLinking":null,"edition":null,"issnPrinted":null,"dataInfo":null,"conferencedate":null,"iss":null,"ep":"3902","sp":"3881","conferenceplace":null,"name":"Atmospheric Chemistry and Physics"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"description":[{"dataInfo":null,"value":"Abstract. We use the Weather Research and Forecast (WRF) model to simulate a large-scale tropical tropopause layer (TTL) cirrus in order to understand the formation and life cycle of the cloud. This cirrus event has been previously described through satellite observations by Taylor et al. (2011). Comparisons of the simulated and observed cirrus show a fair agreement and validate the reference simulation regarding cloud extension, location and life time. The validated simulation is used to understand the causes of cloud formation. It is shown that several cirrus clouds successively form in the region due to adiabatic cooling and large-scale uplift rather than from convective anvils. The structure of the uplift is tied to the equatorial response (equatorial wave excitation) to a potential vorticity intrusion from the midlatitudes. Sensitivity tests are then performed to assess the relative importance of the choice of the microphysics parameterization and of the initial and boundary conditions. The initial dynamical conditions (wind and temperature) essentially control the horizontal location and area of the cloud. However, the choice of the microphysics scheme influences the ice water content and the cloud vertical position. Last, the fair agreement with the observations allows to estimate the cloud impact in the TTL in the simulations. The cirrus clouds have a small but not negligible impact on the radiative budget of the local TTL. However, for this particular case, the cloud radiative heating does not significantly influence the simulated dynamics. This result is due to (1) the lifetime of air parcels in the cloud system, which is too short to significantly influence the dynamics, and (2) the fact that induced vertical motions would be comparable to or smaller than the typical mesoscale motions present. Finally, the simulation also provides an estimate of the vertical redistribution of water by the cloud and the results emphasize the importance in our case of both rehydration and dehydration in the vicinity of the cirrus.\n "}],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Atmospheric Science"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Cirrus"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Weather Research and Forecasting Model"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Cloud height"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Chemistry"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Atmospheric sciences"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Meteorology"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Microphysics"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Mesoscale meteorology"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Radiative transfer"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Liquid water content"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Climatology"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Potential vorticity"}],"author":[{"surname":"Podglajen","affiliation":null,"fullname":"Aurélien Podglajen","rank":null,"pid":[{"qualifier":{"blank":false,"classid":"ORCID","classname":"ORCID","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"http://orcid.org/0000-0001-9768-3511"}],"name":"Aurélien"},{"surname":"Plougonven","affiliation":null,"fullname":"Riwal Plougonven","rank":null,"pid":[{"qualifier":{"blank":false,"classid":"ORCID","classname":"ORCID","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"http://orcid.org/0000-0003-3310-8280"}],"name":"Riwal"},{"surname":"Hertzog","affiliation":null,"fullname":"Albert Hertzog","rank":null,"pid":null,"name":"Albert"},{"surname":"Legras","affiliation":null,"fullname":"Bernard Legras","rank":null,"pid":[{"qualifier":{"blank":false,"classid":"ORCID","classname":"ORCID","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"http://orcid.org/0000-0002-3756-7794"}],"name":"Bernard"}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"A modelling case study of a large-scale cirrus in the tropical tropopause layer"},{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"a modelling case study of a large scale cirrus in the tropical tropopause layer"}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2016-03-23T09:58:39Z"},{"qualifier":{"blank":false,"classid":"published-online","classname":"published-online","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2016-03-23"}],"dateofacceptance":{"dataInfo":null,"value":"2016-03-23"},"publisher":{"dataInfo":null,"value":"Copernicus GmbH"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":{"dataInfo":null,"value":"https://creativecommons.org/licenses/by/3.0/"},"instancetype":{"blank":false,"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["https://www.atmos-chem-phys.net/16/3881/2016/acp-16-3881-2016.pdf","http://dx.doi.org/10.5194/acp-16-3881-2016"],"dateofacceptance":{"dataInfo":null,"value":"2016-03-23"},"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":{"dataInfo":null,"value":"cc-by"},"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Open","classname":"Open","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["https://www.atmos-chem-phys.net/16/3881/2016/acp-16-3881-2016.pdf"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"UnpayWall","key":"10|openaire____::8ac8380272269217cb09a928c8caa993"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["https://www.atmos-chem-phys.net/16/3881/2016/acp-16-3881-2016.pdf","https://www.atmos-chem-phys.net/16/3881/2016/","https://ui.adsabs.harvard.edu/abs/2015ACPD...1531089P/abstract","https://noa.gwlb.de/receive/cop_mods_00043829","https://academic.microsoft.com/#/detail/2135547990"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["10.5194/acp-16-3881-2016","2135547990"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.5194/acp-16-3881-2016"}],"dateofcollection":"2019-10-25T10:40:21Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::00182898f6c9a64b1256cbafaad5db16","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"UnpayWall","key":"10|openaire____::8ac8380272269217cb09a928c8caa993"},{"blank":false,"dataInfo":null,"value":"ORCID","key":"10|openaire____::806360c771262b4d6770e7cdf04b5c5a"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1572000021163} +,{"journal":{"issnOnline":"2067-9440","vol":"9","issnLinking":null,"edition":null,"issnPrinted":null,"dataInfo":null,"conferencedate":null,"iss":null,"ep":"58","sp":"47","conferenceplace":null,"name":"Valahian Journal of Economic Studies"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"description":[{"dataInfo":null,"value":"Abstract\nProcurement management is a function for B2B market and a complex concept based on a continuous buying cycle and supposes: determining the need, taking the decision of buying, identification of sources, selecting and choosing the right suppliers, contracting, and maintaining the relationships with the future contractors.\nSupplier selection is a challenging task along supply chain and is based on some important criteria in order to choose the right supplier and maintain with it a long and prosper relationship. In order to select the right supplier, the buyer may use quantitative and qualitative methods. In this article we present the importance of supplier selection along supply chain and the used criteria to do this. We also present a supplier selection method based on mathematical models, especially on regression function and time series analysis, in order to show that they bring important benefits for the companies which used them."}],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Industrial organization"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Procurement"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Supply chain"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Procurement process"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Business informatics"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Economics"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Marketing"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Business management"}],"author":[{"surname":"Duica","affiliation":null,"fullname":"Mircea Constantin Duica","rank":null,"pid":null,"name":"Mircea Constantin"},{"surname":"Florea","affiliation":null,"fullname":"Nicoleta Valentina Florea","rank":null,"pid":null,"name":"Nicoleta Valentina"},{"surname":"Duica","affiliation":null,"fullname":"Anisoara Duica","rank":null,"pid":null,"name":"Anisoara"}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Selecting the Right Suppliers in Procurement Process along Supply Chain-a Mathematical Modeling Approach"},{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"selecting the right suppliers in procurement process along supply chain a mathematical modeling approach"}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2018-12-04T13:44:24Z"},{"qualifier":{"blank":false,"classid":"published-print","classname":"published-print","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2018-04-01"}],"dateofacceptance":{"dataInfo":null,"value":"2018-04-01"},"publisher":{"dataInfo":null,"value":"Walter de Gruyter GmbH"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":{"dataInfo":null,"value":"http://creativecommons.org/licenses/by-nc-nd/3.0"},"instancetype":{"blank":false,"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["https://content.sciendo.com/view/journals/vjes/9/1/article-p47.xml","http://dx.doi.org/10.2478/vjes-2018-0005"],"dateofacceptance":{"dataInfo":null,"value":"2018-04-01"},"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":{"dataInfo":null,"value":"cc-by-nc-nd"},"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Open","classname":"Open","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["https://content.sciendo.com/downloadpdf/journals/vjes/9/1/article-p47.pdf"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"UnpayWall","key":"10|openaire____::8ac8380272269217cb09a928c8caa993"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["https://content.sciendo.com/view/journals/vjes/9/1/article-p47.xml?lang=en","https://ideas.repec.org/a/vrs/vaecst/v9y2018i1p47-58n5.html","https://academic.microsoft.com/#/detail/2902900408"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["10.2478/vjes-2018-0005","2902900408"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.2478/vjes-2018-0005"}],"dateofcollection":"2019-10-01T15:05:24Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::001ad8f51e226b3f37d4544647524460","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"UnpayWall","key":"10|openaire____::8ac8380272269217cb09a928c8caa993"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1569942324370} +,{"journal":{"issnOnline":"1529-2401","vol":"25","issnLinking":null,"edition":null,"issnPrinted":"0270-6474","dataInfo":null,"conferencedate":null,"iss":null,"ep":"2061","sp":"2050","conferenceplace":null,"name":"Journal of Neuroscience"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"description":[{"dataInfo":null,"value":"Neurogenesis requires factors that regulate the decision of dividing progenitors to leave the cell cycle and activate the neuronal differentiation program. It is shown here that the murine runt -related gene Runx1 is expressed in proliferating cells on the basal side of the olfactory epithelium. These include both Mash1+ olfactory receptor neuron (ORN) progenitors and NeuroD+ ORN precursors. Disruption of Runx1 function in vivo does not cause a change in Mash1 expression but leads to a decrease in the number of NeuroD+ neuronal precursors and an increase in differentiated ORNs. These effects result in premature and ectopic ORN differentiation. It is shown further that exogenous Runx1 expression in cultured olfactory neural progenitors causes an expansion of the mitotic cell population. In agreement with these findings, exogenous Runx1 expression also promotes cortical neural progenitor cell proliferation without inhibiting neuronal differentiation. These effects are phenocopied by a chimeric protein containing ETO, the eight twenty one transcriptional repressor, fused to the Runx1 DNA-binding domain, which suggests the involvement of transcription repression mechanisms. Consistent with this possibility, Runx1 represses transcription driven by the promoter of the cell cycle inhibitor p21 Cip 1 in cortical progenitors. Together, these findings suggest a previously unrecognized role for Runx1 in coordinating the proliferation and neuronal differentiation of selected populations of neural progenitors."}],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"General Neuroscience"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Cancer research"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Progenitor cell"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"RUNX1"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.51708895"},"value":"chemistry.chemical_compound"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.51708895"},"value":"chemistry"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Cell cycle"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Olfactory epithelium"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.53877425"},"value":"medicine.anatomical_structure"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.53877425"},"value":"medicine"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Population"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.50842315"},"value":"education.field_of_study"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.50842315"},"value":"education"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Neurogenesis"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"NeuroD"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Anatomy"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Olfactory receptor neuron"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Biology"}],"author":[{"surname":"Theriault","affiliation":null,"fullname":"F. M. Theriault","rank":null,"pid":null,"name":"F. M."}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Role for Runx1 in the Proliferation and Neuronal Differentiation of Selected Progenitor Cells in the Mammalian Nervous System"}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2005-02-23T22:18:03Z"},{"qualifier":{"blank":false,"classid":"published-print","classname":"published-print","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2005-02-23"}],"dateofacceptance":{"dataInfo":null,"value":"2005-02-23"},"publisher":{"dataInfo":null,"value":"Society for Neuroscience"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":null,"instancetype":{"blank":false,"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["http://dx.doi.org/10.1523/jneurosci.5108-04.2005"],"dateofacceptance":{"dataInfo":null,"value":"2005-02-23"},"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Open","classname":"Open","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["http://www.jneurosci.org/content/jneuro/25/8/2050.full.pdf"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"UnpayWall","key":"10|openaire____::8ac8380272269217cb09a928c8caa993"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["https://www.jneurosci.org/content/25/8/2050","https://www.jneurosci.org/content/jneuro/25/8/2050.full.pdf","https://www.ncbi.nlm.nih.gov/pubmed/15728845","http://www.jneurosci.org/content/25/8/2050.full","https://academic.microsoft.com/#/detail/2083575840"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["10.1523/jneurosci.5108-04.2005","2083575840"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.1523/jneurosci.5108-04.2005"}],"dateofcollection":"2019-11-18T22:18:00Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::001aefea47c1b834ee7b9653a69dc497","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"UnpayWall","key":"10|openaire____::8ac8380272269217cb09a928c8caa993"},{"blank":false,"dataInfo":null,"value":"ORCID","key":"10|openaire____::806360c771262b4d6770e7cdf04b5c5a"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1574115480119} +,{"journal":{"issnOnline":"2372-9708","vol":"39","issnLinking":null,"edition":null,"issnPrinted":"0160-5976","dataInfo":null,"conferencedate":null,"iss":null,"ep":"343","sp":"342","conferenceplace":null,"name":"Humanity & Society"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"description":[],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Media studies"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Social science"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Environmental justice"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Sociology"}],"author":[{"surname":"Denning","affiliation":null,"fullname":"C. Holly Denning","rank":null,"pid":null,"name":"C. Holly"}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Book Review: Our Roots Run as Deep as Ironweed: Appalachian Women and the Fight for Environmental Justice"},{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"book review our roots run as deep as ironweed appalachian women and the fight for environmental justicebellelizabeth shannon 2013 our roots run as deep as ironweed appalachian women and the fight for environmental justice champaign il university of illinois press 210 pp 25 00 isbn 978 0 252 07946 7"},{"qualifier":{"blank":false,"classid":"alternative title","classname":"alternative title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Book Review: Our Roots Run as Deep as Ironweed: Appalachian Women and the Fight for Environmental JusticeBellElizabeth Shannon. 2013. Our Roots Run as Deep as Ironweed: Appalachian Women and the Fight for Environmental Justice. Champaign, IL: University of Illinois Press. 210 pp.$25.00. ISBN: 978-0-252-07946-7."}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2015-04-15T00:11:03Z"},{"qualifier":{"blank":false,"classid":"published-online","classname":"published-online","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2015-04-13"}],"dateofacceptance":{"dataInfo":null,"value":"2015-04-13"},"publisher":{"dataInfo":null,"value":"SAGE Publications"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":{"dataInfo":null,"value":"http://journals.sagepub.com/page/policies/text-and-data-mining-license"},"instancetype":{"blank":false,"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["http://journals.sagepub.com/doi/pdf/10.1177/0160597615579703","http://journals.sagepub.com/doi/full-xml/10.1177/0160597615579703","http://dx.doi.org/10.1177/0160597615579703"],"dateofacceptance":{"dataInfo":null,"value":"2015-04-13"},"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["http://journals.sagepub.com/doi/10.1177/0160597615579703","https://academic.microsoft.com/#/detail/2318726924"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["10.1177/0160597615579703","2318726924"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.1177/0160597615579703"}],"dateofcollection":"2019-02-14T22:24:27Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::001fc2f1ea9b2bcd3163d68a983127c2","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1550183067815} +,{"journal":{"issnOnline":"1432-122X","vol":"21","issnLinking":null,"edition":null,"issnPrinted":"0170-6012","dataInfo":null,"conferencedate":null,"iss":null,"ep":"88","sp":"84","conferenceplace":null,"name":"Informatik-Spektrum"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"description":[],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Information Systems"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Computer Science Applications"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Software engineering"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.40795562"},"value":"business.industry"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.40795562"},"value":"business"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Computer science"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Von Neumann architecture"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.58637065"},"value":"symbols.namesake"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.58637065"},"value":"symbols"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Programming language"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.4103477"},"value":"computer.software_genre"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.4103477"},"value":"computer"}],"author":[{"surname":"Bauer","affiliation":null,"fullname":"Friedrich L. Bauer","rank":null,"pid":null,"name":"Friedrich L."}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Wer erfand den von-Neumann-Rechner?"},{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"wer erfand den von neumann rechner"}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2002-08-25T08:03:26Z"},{"qualifier":{"blank":false,"classid":"published-print","classname":"published-print","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"1998-04-20"}],"dateofacceptance":{"dataInfo":null,"value":"1998-04-20"},"publisher":{"dataInfo":null,"value":"Springer Science and Business Media LLC"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":{"dataInfo":null,"value":"http://www.springer.com/tdm"},"instancetype":{"blank":false,"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["http://link.springer.com/content/pdf/10.1007/s002870050091.pdf","http://link.springer.com/article/10.1007/s002870050091/fulltext.html","http://link.springer.com/content/pdf/10.1007/s002870050091","http://dx.doi.org/10.1007/s002870050091"],"dateofacceptance":{"dataInfo":null,"value":"1998-04-20"},"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["https://link.springer.com/article/10.1007%2Fs002870050091","https://rd.springer.com/article/10.1007/s002870050091","https://academic.microsoft.com/#/detail/146127379"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["309TM8JWRUL76A3R","10.1007/s002870050091","146127379"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.1007/s002870050091"}],"dateofcollection":"2019-11-18T18:08:53Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::0023d75771ba51300426f53f3d9944ea","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1574100533227} +,{"journal":{"issnOnline":null,"vol":null,"issnLinking":null,"edition":null,"issnPrinted":null,"dataInfo":null,"conferencedate":null,"iss":null,"ep":null,"sp":null,"conferenceplace":null,"name":"Canadian Conference on Electrical and Computer Engineering 2004 (IEEE Cat. No.04CH37513)"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"description":[{"dataInfo":null,"value":"In this paper, we develop an algorithm to cope with the sensor placement problem for target location under constraints of cost limitation and complete coverage. We adopt the grid-based placement scenario that deploys exact one sensor in one grid point at most. A target in a grid point can be positioned by a set of sensors whose transmission radius covers the grid point. The optimal sensor placement for target location is to find a sensor deployment such that targets can be positioned in any grid point of the sensor fields. However, due to the cost limitation, the optimal sensor deployment cannot be achieved frequently. Consequently, the positioning accuracy is the major issue of the problem. The distance error is one of the most natural criteria to measure the positioning accuracy. In this paper, the distance error of two indistinguishable grid points is defined as the Euclidean distance between them. We formulate the sensor placement problem as a combinatorial optimization problem for minimizing the maximum distance error in the sensor field under constraints. The sensor placement problem is NP-complete for arbitrary sensor fields. We present an efficient algorithm that is based on the simulated annealing approach to address the problem. We first compare our algorithm with the brute force approach in the case of smaller sensor fields. The evidence indicates that our algorithm can find the optimal sensor placement under the minimum cost limitation. Moreover, the simulation results also show that the proposed algorithm is very superior in terms of the positioning accuracy even in the case of larger sensor fields."}],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Intelligent sensor"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Algorithm"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Computer science"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Brooks–Iyengar algorithm"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Euclidean distance"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Grid"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Electronic engineering"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Simulated annealing"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Mathematical optimization"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Wireless sensor network"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Software deployment"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Constrained optimization"}],"author":[{"surname":"Chiu","affiliation":null,"fullname":"P.L. Chiu","rank":null,"pid":null,"name":"P.L."},{"surname":"Lin","affiliation":null,"fullname":"F.Y.S. Lin","rank":null,"pid":null,"name":"F.Y.S."}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"A simulated annealing algorithm to support the sensor placement for target location"}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2004-11-13T00:14:59Z"}],"dateofacceptance":{"dataInfo":null,"value":"2004-11-13T00:14:59Z"},"publisher":{"dataInfo":null,"value":"IEEE"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":null,"instancetype":{"blank":false,"classid":"0004","classname":"Conference object","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["http://xplorestaging.ieee.org/ielx5/9317/29619/01345252.pdf?arnumber=1345252","http://dx.doi.org/10.1109/ccece.2004.1345252"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["https://ieeexplore.ieee.org/document/1345252/","http://ieeexplore.ieee.org/iel5/9317/29619/01345252.pdf?arnumber=1345252","https://academic.microsoft.com/#/detail/2158831329"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["10.1109/ccece.2004.1345252","2158831329"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.1109/ccece.2004.1345252"}],"dateofcollection":"2019-02-14T15:17:01Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::0029fa2e4d799451deaf3c562ce98d3b","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1550157421738} +,{"journal":{"issnOnline":"1476-3567","vol":"59","issnLinking":null,"edition":null,"issnPrinted":"0365-0340","dataInfo":null,"conferencedate":null,"iss":null,"ep":"1321","sp":"1311","conferenceplace":null,"name":"Archives of Agronomy and Soil Science"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"description":[{"dataInfo":null,"value":"Nutrient management plays an important role in yield and quality of tomatoes. A field experiment was conducted during the years 2008–09 and 2009–10 to analyze the effect of organic and conventional sources of fertilizer on yield and quality of tomatoes in an acid lateritic soil of India. The organic sources of fertilizer were vermicompost (VC), crop residue (CR), vermiwash (VW) and biofertilizer (BF). The conventional input was chemical fertilizer (CF) applied at recommended dose of 100:80:60 kg ha−1 of N:P2O5:K2O for the tomato. The organic source VC was used to supply 100% N recommendation as single source or 50% N recommendation when combined with CF or organic sources. Maximum fruit yield was recorded when CF was applied at full dose, which was on a par with VC at full recommendation. A higher percentage of large-size fruits (>7 cm) was obtained in VC-based treatments compared with CF treatment. Vermicompost at full dose increased ascorbic acid, beta carotene, total soluble solids and color value comp..."}],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Agronomy and Crop Science"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Soil Science"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Agronomy"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Nutrient management"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Agroforestry"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Field experiment"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Biofertilizer"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Fertilizer"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.5152762"},"value":"engineering.material"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.5152762"},"value":"engineering"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Crop residue"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Ascorbic acid"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Vermicompost"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Biology"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Organic fertilizer"}],"author":[{"surname":"Murmu","affiliation":null,"fullname":"Kanu Murmu","rank":null,"pid":null,"name":"Kanu"},{"surname":"Ghosh","affiliation":null,"fullname":"Bijoy Chandra Ghosh","rank":null,"pid":null,"name":"Bijoy Chandra"},{"surname":"Swain","affiliation":null,"fullname":"Dillip Kumar Swain","rank":null,"pid":null,"name":"Dillip Kumar"}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Yield and quality of tomato grown under organic and conventional nutrient management"}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2012-08-14T07:07:44Z"}],"dateofacceptance":{"dataInfo":null,"value":"2012-08-14T07:07:44Z"},"publisher":{"dataInfo":null,"value":"Informa UK Limited"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":null,"instancetype":{"blank":false,"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["http://www.tandfonline.com/doi/pdf/10.1080/03650340.2012.711472","http://dx.doi.org/10.1080/03650340.2012.711472"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["https://www.tandfonline.com/doi/abs/10.1080/03650340.2012.711472","https://academic.microsoft.com/#/detail/2031565734"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["10.1080/03650340.2012.711472","2031565734"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.1080/03650340.2012.711472"}],"dateofcollection":"2019-07-02T21:10:18Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::002ad37d986a5e92b346e8da92096ad5","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"ORCID","key":"10|openaire____::806360c771262b4d6770e7cdf04b5c5a"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1562101818154} +,{"journal":{"issnOnline":"2044-5377","vol":"94-B","issnLinking":null,"edition":null,"issnPrinted":"0301-620X","dataInfo":null,"conferencedate":null,"iss":null,"ep":"847","sp":"842","conferenceplace":null,"name":"The Journal of Bone and Joint Surgery. British volume"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"description":[{"dataInfo":null,"value":"We present our early experience of arthroscopic reduction of the dislocated hip in very young infants with developmental dysplasia of the hip (DDH).\n\nEight dislocated hips, which had failed attempts at closed reduction, were treated by arthroscopy of the hip in five children with a mean age of 5.8 months (4 to 7). A two-portal technique was used, with a medial sub-adductor portal for a 2.7 mm cannulated system with a 70° arthroscope and an anterolateral portal for the instruments. Following evaluation of the key intra-articular structures, the hypertrophic ligamentum teres and acetabular pulvinar were resected, and a limited release of the capsule was performed prior to reduction of the hip. All hips were reduced by a single arthroscopic procedure, the reduction being confirmed on MRI scan. None of the hips had an inverted labrum. The greatest obstacle to reduction was a constriction of the capsule. At a mean follow-up of 13.2 months (9 to 24), all eight hips remained stable. Three developed avascular necrosis. The mean acetabular index decreased from 35.5° (30° to 40°) pre-operatively to 23.3° (17° to 28°).\n\nThis study demonstrates that arthroscopic reduction is feasible using two standardised portals. Longer follow-up studies are necessary to evaluate the functional results."}],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Surgery"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Orthopedics and Sports Medicine"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.43935013"},"value":"medicine.medical_specialty"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.43935013"},"value":"medicine"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Avascular necrosis"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.5198782"},"value":"medicine.disease"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Hip arthroscopy"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Capsule"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Arthroscopy"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.528666"},"value":"medicine.diagnostic_test"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Constriction"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Young infants"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Dysplasia"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.35628062"},"value":"business.industry"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.35628062"},"value":"business"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Labrum"}],"author":[{"surname":"Eberhardt","affiliation":null,"fullname":"O. Eberhardt","rank":null,"pid":null,"name":"O."},{"surname":"Fernandez","affiliation":null,"fullname":"F. F. Fernandez","rank":null,"pid":null,"name":"F. F."},{"surname":"Wirth","affiliation":null,"fullname":"T. Wirth","rank":null,"pid":null,"name":"T."}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Arthroscopic reduction of the dislocated hip in infants"}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2012-05-24T15:25:59Z"}],"dateofacceptance":{"dataInfo":null,"value":"2012-05-24T15:25:59Z"},"publisher":{"dataInfo":null,"value":"British Editorial Society of Bone & Joint Surgery"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":null,"instancetype":{"blank":false,"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["https://syndication.highwire.org/content/doi/10.1302/0301-620X.94B6.28161","http://dx.doi.org/10.1302/0301-620x.94b6.28161"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["https://www.ncbi.nlm.nih.gov/pubmed/22628603","http://online.boneandjoint.org.uk/doi/10.1302/0301-620X.94B6.28161","https://academic.microsoft.com/#/detail/2016293216"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["10.1302/0301-620X.94B6.28161","10.1302/0301-620x.94b6.28161","2016293216"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.1302/0301-620x.94b6.28161"}],"dateofcollection":"2019-09-05T05:23:31Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::0040a9baf091fd13ed2deccf705271dd","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1567661011266} +,{"journal":{"issnOnline":"1748-880X","vol":"77","issnLinking":null,"edition":null,"issnPrinted":"0007-1285","dataInfo":null,"conferencedate":null,"iss":null,"ep":"S175","sp":"S167","conferenceplace":null,"name":"The British Journal of Radiology"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"description":[{"dataInfo":null,"value":"fMRI (functional magnetic resonance imaging) is a powerful non-invasive tool in the study of the function of the brain, used, for example, by psychologists, psychiatrists and neurologists. fMRI can give high quality visualization of the location of activity in the brain resulting from sensory stimulation or cognitive function. It therefore allows the study of how the healthy brain functions, how it is affected by different diseases, how it attempts to recover after damage and how drugs can modulate activity or post-damage recovery. After an fMRI experiment has been designed and carried out, the resulting data must be passed through various analysis steps before the experimenter can get answers to questions about experimentally related activations at the individual or multi-subject level. This paper gives a brief overview of the most commonly used analysis pipeline: data pre-processing, temporal linear modelling and activation thresholding. For more details, see Jezzard et al [1]. fMRI Data In a typical fMRI session a low-resolution functional volume is acquired every few seconds. (MR volumes are often also referred to as ‘‘images’’ or ‘‘scans’’). Over the course of the experiment, 100 volumes or more are typically recorded. In the simplest possible experiment, some images will be taken whilst stimulation (for the remainder of this chapter, reference to ‘‘stimulation’’ should be taken to include also the carrying out of physical or cognitive activity) is applied, and some will be taken with the subject at rest. Because the images are taken using an MR sequence which is sensitive to changes in local blood oxygenation level (BOLD imaging; see Chapters 2 and 3 in Jezzard et al [1]), parts of the images taken during stimulation should show increased intensity, compared with those taken whilst at rest. The parts of these images that show increased intensity should correspond to the brain areas which are activated by the stimulation. The goal of fMRI analysis is to detect, in a robust, sensitive and valid way, those parts of the brain that show increased intensity at the points in time that stimulation was applied. A single volume is made up of individual cuboid elements called voxels (Figure 1). An fMRI data set from a single session can either be thought of as t volumes, one taken every few seconds, or as v voxels, each with an associated time series of t time points. It is important to be able to conceptualize both of these representations, as some analysis steps make more sense when thinking of the data in one way, and others make more sense the other way. An example time-series from a single voxel is shown in Figure 2. Image intensity is shown on the y axis, and time (in scans) on the x axis. As described above, for some of the time points, stimulation was applied, (the higher intensity periods), and at some time points the subject was at rest. As well as the effect of the stimulation being clear, the high frequency noise is also apparent. The aim of fMRI analysis is to identify in which voxels’ time-series the signal of interest is significantly greater than the noise level."}],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Radiology"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.32073238"},"value":"medicine.medical_specialty"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.32073238"},"value":"medicine"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Voxel"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.51576644"},"value":"computer.software_genre"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.51576644"},"value":"computer"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Nuclear medicine"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.32511315"},"value":"business.industry"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.32511315"},"value":"business"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Sensory stimulation therapy"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Visualization"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Cognition"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Functional magnetic resonance imaging"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.5011593"},"value":"medicine.diagnostic_test"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Artificial intelligence"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Pattern recognition"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Stimulation"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Cuboid"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Thresholding"}],"author":[{"surname":"Smith","affiliation":null,"fullname":"S M Smith","rank":null,"pid":null,"name":"S M"}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Overview of fMRI analysis"},{"qualifier":{"blank":false,"classid":"alternative title","classname":"alternative title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Overview of fMRI analysis."}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2005-01-27T19:53:02Z"}],"dateofacceptance":{"dataInfo":null,"value":"2005-01-27T19:53:02Z"},"publisher":{"dataInfo":null,"value":"British Institute of Radiology"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":null,"instancetype":{"blank":false,"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["http://www.birpublications.org/doi/pdf/10.1259/bjr/33553595","http://dx.doi.org/10.1259/bjr/33553595"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["https://cfn.upenn.edu/stslab/wiki/lib/exe/fetch.php/fmri_club:preprocess1:smith_2004_brjrad.pdf","https://www.birpublications.org/doi/abs/10.1259/bjr/33553595","https://www.ncbi.nlm.nih.gov/pubmed/15677358","https://www.neuroscience.ox.ac.uk/publications/116696","https://www.ndcn.ox.ac.uk/publications/116696","http://www.birpublications.org/doi/figure/10.1259/bjr/33553595","https://academic.microsoft.com/#/detail/2033777218"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["10.1259/bjr/33553595","2033777218"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.1259/bjr/33553595"}],"dateofcollection":"2019-12-20T11:23:26Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::0041552fcee851b1e7dfe74119ee44f0","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"ORCID","key":"10|openaire____::806360c771262b4d6770e7cdf04b5c5a"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1576841006413} +,{"journal":{"issnOnline":"1573-4803","vol":"29","issnLinking":null,"edition":null,"issnPrinted":"0022-2461","dataInfo":null,"conferencedate":null,"iss":null,"ep":"1718","sp":"1714","conferenceplace":null,"name":"Journal of Materials Science"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":null}],"description":[{"dataInfo":null,"value":"Chemical and structural properties of the system (1−x)Fe2O3 + xNd2O3, 0≤x≤1, were investigated using X-ray diffraction, 57Fe Mossbauer spectroscopy and Fourier transform-infrared (FT-IR) spectroscopy. The samples were prepared by the chemical coprecipitation and thermal treatment of Fe(OH)3/Nd(OH)3 coprecipitates. X-ray diffraction showed the presence of oxide phases α-Fe2O3 + NdFeO3 in the Fe2O3-rich region, and the oxide phases Nd2O3 + NdFeO3 in the Nd2O3-rich region. 57Fe Mossbauer spectra were characterized with one sextet of spectral lines at room temperature. Mathematical evaluation of the Mossbauer spectra showed distinct regularities in the changes of Mossbauer parameters, thus indicating the presence of two subspectra with very similar spectral behaviour. High sensitivity of the Nd2O3 phase to the moisture and atmosphere CO2 was demonstrated by FT-IR spectroscopy."}],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Mechanical Engineering"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"General Materials Science"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Mechanics of Materials"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Coprecipitation"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Materials science"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Spectral line"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Mössbauer spectroscopy"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"X-ray crystallography"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Solid solution"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Infrared spectroscopy"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Oxide"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.50058734"},"value":"chemistry.chemical_compound"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.50058734"},"value":"chemistry"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Spectroscopy"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Analytical chemistry"}],"author":[{"surname":"Musić","affiliation":null,"fullname":"S. Musić","rank":null,"pid":null,"name":"S."},{"surname":"Popović","affiliation":null,"fullname":"S. Popović","rank":null,"pid":null,"name":"S."},{"surname":"Ristić","affiliation":null,"fullname":"M. Ristić","rank":null,"pid":null,"name":"M."},{"surname":"Sepiol","affiliation":null,"fullname":"B. Sepiol","rank":null,"pid":null,"name":"B."}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Chemical and structural properties of the system Fe2O3-Nd2O3"},{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"chemical and structural properties of the system fe2o3 in2o3"},{"qualifier":{"blank":false,"classid":"alternative title","classname":"alternative title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Chemical and structural properties of the system Fe2O3-In2O3"}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2004-10-30T20:17:56Z"},{"qualifier":{"blank":false,"classid":"published-online","classname":"published-online","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2004-09-12"}],"dateofacceptance":{"dataInfo":null,"value":"2004-10-30T20:17:56Z"},"publisher":{"dataInfo":null,"value":"Springer Science and Business Media LLC"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":{"dataInfo":null,"value":"http://www.springer.com/tdm"},"instancetype":{"blank":false,"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["http://link.springer.com/content/pdf/10.1007/BF00351287.pdf","http://link.springer.com/article/10.1007/BF00351287/fulltext.html","http://link.springer.com/content/pdf/10.1007/BF00351287","http://dx.doi.org/10.1007/bf00351287"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["https://ui.adsabs.harvard.edu/abs/1993JMatS..28..632M/abstract","https://link.springer.com/article/10.1007/BF02402973","https://rd.springer.com/article/10.1007/BF00351287","https://academic.microsoft.com/#/detail/2039099087"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["BF00351287","10.1007/bf00351287","2039099087"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.1007/bf00351287"}],"dateofcollection":"2019-09-13T05:40:02Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::0042dc76d02068f81d6a764a71d146df","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"ORCID","key":"10|openaire____::806360c771262b4d6770e7cdf04b5c5a"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1568353202504} +,{"journal":null,"format":[],"source":[{"dataInfo":null,"value":"Crossref"},{"dataInfo":null,"value":"Unfettering Poetry ISBN: 9781349528738"},{"dataInfo":null,"value":null}],"description":[{"dataInfo":null,"value":"Philosophers, theorists, reviewers, and literary critics from the French Revolution to the present have sought to devise strategies to displace or disarm the power of the Fancy. This skepticism, or what I have called “fanciphobia,” adopts or takes several forms: (1) The Fancy is trivialized (associated with escape and unreality). (2) The Fancy is subordinated to the Imagination as a poetic faculty (i.e., it is honored but kept under control). (3) It is associated with the carefree nature of childhood or with an apparently simpler historical past (and thus it becomes irrelevant to the present). (4) After childhood and adolescence, the Fancy becomes the object of a “mature” person’s skepticism about its viability in the real world of getting and spending. Skepticism toward the Fancy’s dominance in mental life expresses the successful maturation of the adult. (5) It is considered a gatherer of “raw materials” that are to be shaped into something permanent and beautiful by the Imagination."}],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Literary criticism"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Aesthetics"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Skepticism"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.601421"},"value":"media_common.quotation_subject"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.601421"},"value":"media_common"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"French revolution"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Mental life"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Art"},{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Poetry"}],"author":[{"surname":"Robinson","affiliation":null,"fullname":"Jeffrey C. Robinson","rank":null,"pid":null,"name":"Jeffrey C."}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Fanciphobia: A History of Skepticism about the Fancy"},{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"fanciphobia a history of skepticism about the fancy"}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2016-05-21T05:28:48Z"}],"dateofacceptance":{"dataInfo":null,"value":"2016-05-21T05:28:48Z"},"publisher":{"dataInfo":null,"value":"Palgrave Macmillan US"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":{"dataInfo":null,"value":"http://www.springer.com/tdm"},"instancetype":{"blank":false,"classid":"0013","classname":"Part of book or chapter of book","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["http://link.springer.com/content/pdf/10.1057/9781403982834_2","http://dx.doi.org/10.1057/9781403982834_2"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":null,"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":null,"url":["https://link.springer.com/chapter/10.1057/9781403982834_2","https://academic.microsoft.com/#/detail/2501403633"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["10.1057/9781403982834_2","2501403633"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.1057/9781403982834_2"}],"dateofcollection":"2019-05-08T15:42:45Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::0046ca097e625d3c0dea887b63aa5105","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"microsoft","key":"10|openaire____::5f532a3fc4f1ea403f37070f59a7a53a"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1557330165026} +,{"journal":{"issnOnline":"2005-8330","vol":"19","issnLinking":null,"edition":null,"issnPrinted":"1229-6929","dataInfo":null,"conferencedate":null,"iss":null,"ep":null,"sp":"368","conferenceplace":null,"name":"Korean Journal of Radiology"},"format":[],"source":[{"dataInfo":null,"value":"Crossref"}],"description":[],"subject":[{"qualifier":{"blank":false,"classid":"keywords","classname":"keywords","schemeid":"dnet:subject_classification_typologies","schemename":"dnet:subject_classification_typologies"},"dataInfo":null,"value":"Radiology Nuclear Medicine and imaging"}],"author":[{"surname":"Chae","affiliation":null,"fullname":"Kum Ju Chae","rank":null,"pid":null,"name":"Kum Ju"},{"surname":"Goo","affiliation":null,"fullname":"Jin Mo Goo","rank":null,"pid":null,"name":"Jin Mo"},{"surname":"Ahn","affiliation":null,"fullname":"Su Yeon Ahn","rank":null,"pid":null,"name":"Su Yeon"},{"surname":"Yoo","affiliation":null,"fullname":"Jin Young Yoo","rank":null,"pid":null,"name":"Jin Young"},{"surname":"Yoon","affiliation":null,"fullname":"Soon Ho Yoon","rank":null,"pid":null,"name":"Soon Ho"}],"resulttype":{"blank":false,"classid":"publication","classname":"publication","schemeid":"dnet:result_typologies","schemename":"dnet:result_typologies"},"title":[{"qualifier":{"blank":false,"classid":"main title","classname":"main title","schemeid":"dnet:dataCite_title","schemename":"dnet:dataCite_title"},"dataInfo":null,"value":"Erratum: Application of Deconvolution Algorithm of Point Spread Function in Improving Image Quality: An Observer Preference Study on Chest Radiography"}],"relevantdate":[{"qualifier":{"blank":false,"classid":"created","classname":"created","schemeid":"dnet:dataCite_date","schemename":"dnet:dataCite_date"},"dataInfo":null,"value":"2018-03-02T12:04:55Z"}],"dateofacceptance":{"dataInfo":null,"value":"2018-03-02T12:04:55Z"},"publisher":{"dataInfo":null,"value":"The Korean Society of Radiology (KAMJE)"},"embargoenddate":null,"fulltext":[],"contributor":[],"resourcetype":null,"coverage":[],"bestaccessright":null,"externalReference":[],"language":null,"instance":[{"license":{"dataInfo":null,"value":"http://creativecommons.org/licenses/by-nc/4.0/"},"instancetype":{"blank":false,"classid":"0001","classname":"Article","schemeid":"dnet:publication_resource","schemename":"dnet:publication_resource"},"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Restricted","classname":"Restricted","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["https://synapse.koreamed.org/pdf/10.3348/kjr.2018.19.2.368","https://synapse.koreamed.org/DOIx.php?id=10.3348/kjr.2018.19.2.368","http://dx.doi.org/10.3348/kjr.2018.19.2.368"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null},{"license":{"dataInfo":null,"value":"cc-by-nc"},"instancetype":null,"hostedby":null,"distributionlocation":null,"accessright":{"blank":false,"classid":"Open","classname":"Open","schemeid":"dnet:access_modes","schemename":"dnet:access_modes"},"url":["http://europepmc.org/articles/pmc5840068?pdf=render"],"dateofacceptance":null,"collectedfrom":{"blank":false,"dataInfo":null,"value":"UnpayWall","key":"10|openaire____::8ac8380272269217cb09a928c8caa993"},"processingchargeamount":null,"processingchargecurrency":null,"refereed":null}],"context":[],"country":[],"originalId":["10.3348/kjr.2018.19.2.368"],"pid":[{"qualifier":{"blank":false,"classid":"doi","classname":"doi","schemeid":"dnet:pid_types","schemename":"dnet:pid_types"},"dataInfo":null,"value":"10.3348/kjr.2018.19.2.368"}],"dateofcollection":"2019-11-26T21:53:29Z","dateoftransformation":null,"extraInfo":[],"oaiprovenance":null,"id":"50|doiboost____::00474983edc459df6a662f3970b8430b","collectedfrom":[{"blank":false,"dataInfo":null,"value":"Crossref","key":"10|openaire____::081b82f96300b6a6e3d282bad31cb6e2"},{"blank":false,"dataInfo":null,"value":"UnpayWall","key":"10|openaire____::8ac8380272269217cb09a928c8caa993"}],"dataInfo":{"invisible":false,"inferred":false,"deletedbyinference":false,"inferenceprovenance":null,"provenanceaction":{"blank":false,"classid":"sysimport:actionset","classname":"sysimport:actionset","schemeid":"dnet:provenanceActions","schemename":"dnet:provenanceActions"},"trust":"0.9"},"lastupdatetimestamp":1574805209002}] \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/dhp/doiboost/publication_merge b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/dhp/doiboost/publication_merge new file mode 100644 index 000000000..f47449f8d --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/dhp/doiboost/publication_merge @@ -0,0 +1,3 @@ +{"context": [], "dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "sysimport:crosswalk:datasetarchive", "classname": "sysimport:crosswalk:datasetarchive", "schemename": "dnet:provenanceActions", "schemeid": "dnet:provenanceActions"}, "inferred": false, "inferenceprovenance": "dedup-similarity-result-levenstein", "invisible": false, "trust": "0.95"}, "resourcetype": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "pid": [], "contributor": [], "resulttype": {"classid": "publication", "classname": "publication", "schemename": "dnet:result_typologies", "schemeid": "dnet:result_typologies"}, "relevantdate": [], "collectedfrom": [{"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": "Journal.fi", "key": "10|openaire____::6eef8049d0feedc089ee009abca55e35"}], "id": "50|a89337edbe55::4930db9e954866d70916cbfba9f81f97", "subject": [], "instance": [{"refereed": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": ""}, "hostedby": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": "Journal.fi", "key": "10|openaire____::6eef8049d0feedc089ee009abca55e35"}, "processingchargeamount": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": ""}, "license": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": ""}, "url": [], "distributionlocation": "", "processingchargecurrency": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": ""}, "dateofacceptance": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": "2016-01-01"}, "collectedfrom": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": "Journal.fi", "key": "10|openaire____::6eef8049d0feedc089ee009abca55e35"}, "accessright": {"classid": "OPEN", "classname": "Open Access", "schemename": "dnet:access_modes", "schemeid": "dnet:access_modes"}, "instancetype": {"classid": "0001", "classname": "Article", "schemename": "dnet:dataCite_resource", "schemeid": "dnet:dataCite_resource"}}], "embargoenddate": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": ""}, "lastupdatetimestamp": 0, "author": [{"surname": "Go\\u0308tz", "name": "Julia", "pid": [], "rank": 5, "affiliation": [], "fullname": "G\\u00f6tz, Julia"}, {"surname": "Wolff", "name": "Stephan", "pid": [], "rank": 6, "affiliation": [], "fullname": "Wolff, Stephan"}, {"surname": "Jansen", "name": "Olav", "pid": [], "rank": 7, "affiliation": [], "fullname": "Jansen, Olav"}, {"surname": "Dressler", "name": "Dirk", "pid": [{"qualifier": {"classid": "ORCID", "classname": "ORCID"}, "value": "0000-0000-0656-9999"},{"qualifier": {"classid": "id", "classname": "id"}, "value": "987654321"}], "rank": 8, "affiliation": [], "fullname": "Dressler, Dirk"}, {"surname": "Schneider", "name": "Susanne A.", "pid": [], "rank": 9, "affiliation": [], "fullname": "Schneider, Susanne A."}], "source": [], "dateofcollection": "2019-11-05T14:49:22.351Z", "fulltext": [], "dateoftransformation": "2019-11-05T16:10:58.988Z", "description": [], "format": [], "journal": {"issnPrinted": "1459-6067", "conferencedate": "", "conferenceplace": "", "name": "Agricultural and Food Science", "edition": "", "iss": "3", "sp": "", "vol": "27", "dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "issnOnline": "1795-1895", "ep": "", "issnLinking": ""}, "coverage": [], "publisher": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": ""}, "language": {"classid": "eng", "classname": "English", "schemename": "dnet:languages", "schemeid": "dnet:languages"}, "bestaccessright": {"classid": "OPEN", "classname": "Open Access", "schemename": "dnet:access_modes", "schemeid": "dnet:access_modes"}, "country": [], "extraInfo": [], "originalId": [], "dateofacceptance": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": "2018-09-30"}, "title": [{"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "qualifier": {"classid": "main title", "classname": "main title", "schemename": "dnet:dataCite_title", "schemeid": "dnet:dataCite_title"}, "value": null}]} +{"context": [], "dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "sysimport:crosswalk:repository", "classname": "sysimport:crosswalk:repository", "schemename": "dnet:provenanceActions", "schemeid": "dnet:provenanceActions"}, "inferred": true, "inferenceprovenance": "dedup-similarity-result-levenstein", "invisible": false, "trust": "0.9"}, "resourcetype": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "pid": [{"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "qualifier": {"classid": "doi", "classname": "doi", "schemename": "dnet:pid_types", "schemeid": "dnet:pid_types"}, "value": "10.1016/j.nicl.2015.11.006"}], "contributor": [], "resulttype": {"classid": "publication", "classname": "publication", "schemename": "dnet:result_typologies", "schemeid": "dnet:result_typologies"}, "relevantdate": [], "collectedfrom": [{"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": "BASE (Open Access Aggregator)", "key": "10|openaire____::df45502607927471ecf8a6ae83683ff5"}], "id": "50|a89337edbe55::4930db9e954866d70916cbfba9f81f97", "subject": [], "instance": [{"refereed": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": ""}, "hostedby": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": "NeuroImage: Clinical", "key": "10|doajarticles::0c0e74daa5d95504eade9c81ebbd5b8a"}, "processingchargeamount": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": ""}, "license": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": "http://creativecommons.org/licenses/by-nc-nd/4.0/"}, "url": ["http://dx.doi.org/10.1016/j.nicl.2015.11.006"], "distributionlocation": "", "processingchargecurrency": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": ""}, "dateofacceptance": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": "2016-01-01"}, "collectedfrom": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": "BASE (Open Access Aggregator)", "key": "10|openaire____::df45502607927471ecf8a6ae83683ff5"}, "accessright": {"classid": "OPEN", "classname": "Open Access", "schemename": "dnet:access_modes", "schemeid": "dnet:access_modes"}, "instancetype": {"classid": "0001", "classname": "Article", "schemename": "dnet:publication_resource", "schemeid": "dnet:publication_resource"}}], "embargoenddate": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": ""}, "lastupdatetimestamp": 0, "author": [{"surname": "Zeuner", "name": "Kirsten E.", "pid": [], "rank": 1, "affiliation": [], "fullname": "Zeuner, Kirsten E."}, {"surname": "Knutzen", "name": "Arne", "pid": [], "rank": 2, "affiliation": [], "fullname": "Knutzen, Arne"}, {"surname": "Granert", "name": "Oliver", "pid": [{"qualifier": {"classid": "ORCID", "classname": "ORCID"}, "value": "0000-0002-0656-1023"}], "rank": 3, "affiliation": [], "fullname": "Granert, Oliver"}, {"surname": "Sablowsky", "name": "Simone", "pid": [], "rank": 4, "affiliation": [], "fullname": "Sablowsky, Simone"}, {"surname": "Go\\u0308tz", "name": "Julia", "pid": [], "rank": 5, "affiliation": [], "fullname": "G\\u00f6tz, Julia"}, {"surname": "Wolff", "name": "Stephan", "pid": [], "rank": 6, "affiliation": [], "fullname": "Wolff, Stephan"}, {"surname": "Jansen", "name": "Olav", "pid": [], "rank": 7, "affiliation": [], "fullname": "Jansen, Olav"}, {"surname": "Dressler", "name": "Dirk", "pid": [], "rank": 8, "affiliation": [], "fullname": "Dressler, Dirk"}, {"surname": "Schneider", "name": "Susanne A.", "pid": [], "rank": 9, "affiliation": [], "fullname": "Schneider, Susanne A."}, {"surname": "Klein", "name": "Christine", "pid": [], "rank": 10, "affiliation": [], "fullname": "Klein, Christine"}, {"surname": "Deuschl", "name": "Gu\\u0308nther", "pid": [], "rank": 11, "affiliation": [], "fullname": "Deuschl, G\\u00fcnther"}, {"surname": "Eimeren", "name": "Thilo", "pid": [], "rank": 12, "affiliation": [], "fullname": "van Eimeren, Thilo"}, {"surname": "Witt", "name": "Karsten", "pid": [], "rank": 13, "affiliation": [], "fullname": "Witt, Karsten"}], "source": [], "dateofcollection": "2017-07-27T19:04:09.131Z", "fulltext": [], "dateoftransformation": "2019-01-23T10:15:19.582Z", "description": [], "format": [], "journal": {"issnPrinted": "2213-1582", "conferencedate": "", "conferenceplace": "", "name": "NeuroImage: Clinical", "edition": "", "iss": "", "sp": "63", "vol": "10", "dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "issnOnline": "", "ep": "70", "issnLinking": ""}, "coverage": [], "publisher": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": "Elsevier BV"}, "language": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "bestaccessright": {"classid": "OPEN", "classname": "Open Access", "schemename": "dnet:access_modes", "schemeid": "dnet:access_modes"}, "country": [{"classid": "IT", "classname": "Italy", "schemeid": "dnet:countries", "schemename": "dnet:countries"}], "extraInfo": [], "originalId": ["10.1016/j.nicl.2015.11.006"], "dateofacceptance": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": "2016-01-01"}, "title": [{"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "qualifier": {"classid": "main title", "classname": "main title", "schemename": "dnet:dataCite_title", "schemeid": "dnet:dataCite_title"}, "value": null}]} +{"context": [], "dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "sysimport:crosswalk:datasetarchive", "classname": "sysimport:crosswalk:datasetarchive", "schemename": "dnet:provenanceActions", "schemeid": "dnet:provenanceActions"}, "inferred": true, "inferenceprovenance": "dedup-similarity-result-levenstein", "invisible": false, "trust": "0.9"}, "resourcetype": {"classid": "0004", "classname": "Conference object", "schemename": "dnet:dataCite_resource", "schemeid": "dnet:dataCite_resource"}, "pid": [], "contributor": [], "resulttype": {"classid": "publication", "classname": "publication", "schemename": "dnet:result_typologies", "schemeid": "dnet:result_typologies"}, "relevantdate": [], "collectedfrom": [{"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": "CRIS UNS (Current Research Information System University of Novi Sad)", "key": "10|CRIS_UNS____::f66f1bd369679b5b077dcdf006089556"}], "id": "50|a89337edbe55::4930db9e954866d70916cbfba9f81f97", "subject": [], "instance": [{"refereed": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": ""}, "hostedby": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": "CRIS UNS (Current Research Information System University of Novi Sad)", "key": "10|CRIS_UNS____::f66f1bd369679b5b077dcdf006089556"}, "processingchargeamount": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": ""}, "license": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": ""}, "url": ["https://www.cris.uns.ac.rs/record.jsf?recordId=113444&source=OpenAIRE&language=en"], "distributionlocation": "", "processingchargecurrency": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": ""}, "dateofacceptance": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": "2019-01-01"}, "collectedfrom": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": "CRIS UNS (Current Research Information System University of Novi Sad)", "key": "10|CRIS_UNS____::f66f1bd369679b5b077dcdf006089556"}, "accessright": {"classid": "UNKNOWN", "classname": "UNKNOWN", "schemename": "dnet:access_modes", "schemeid": "dnet:access_modes"}, "instancetype": {"classid": "0004", "classname": "Conference object", "schemename": "dnet:dataCite_resource", "schemeid": "dnet:dataCite_resource"}}], "embargoenddate": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": ""}, "lastupdatetimestamp": 0, "author": [{"surname": "Zeuner", "name": "Kirsten E.", "pid": [], "rank": 1, "affiliation": [], "fullname": "Zeuner, Kirsten E."}, {"surname": "Knutzen", "name": "Arne", "pid": [], "rank": 2, "affiliation": [], "fullname": "Knutzen, Arne"}, {"surname": "Granert", "name": "Oliver", "pid": [{"qualifier": {"classid": "ORCID", "classname": "ORCID"}, "value": "0000-0002-0656-1023"}, {"qualifier": {"classid": "pubmed", "classname": "pubmed"}, "value": "pubmed.it"}], "rank": 3, "affiliation": [], "fullname": "Granert, Oliver"}, {"surname": "Sablowsky", "name": "Simone", "pid": [{"qualifier": {"classid": "id", "classname": "id"}, "value": "12345678"}], "rank": 4, "affiliation": [], "fullname": "Sablowsky, Simone"}, {"surname": "Go\\u0308tz", "name": "Julia", "pid": [], "rank": 5, "affiliation": [], "fullname": "G\\u00f6tz, Julia"}, {"surname": "Wolff", "name": "Stephan", "pid": [], "rank": 6, "affiliation": [], "fullname": "Wolff, Stephan"}, {"surname": "Jansen", "name": "Olav", "pid": [{"qualifier": {"classid": "ORCID", "classname": "ORCID"}, "value": "0000-0000-0656-1023"},{"qualifier": {"classid": "id", "classname": "id"}, "value": "987654321"}], "rank": 7, "affiliation": [], "fullname": "Jansen, Olav"}, {"surname": "Dressler", "name": "Dirk", "pid": [], "rank": 8, "affiliation": [], "fullname": "Dressler, Dirk"}, {"surname": "Schneider", "name": "Susanne A.", "pid": [], "rank": 9, "affiliation": [], "fullname": "Schneider, Susanne A."}], "source": [], "dateofcollection": "2020-03-10T15:05:38.685Z", "fulltext": [], "dateoftransformation": "2020-03-11T20:11:13.15Z", "description": [], "format": [], "journal": {"issnPrinted": "", "conferencedate": "", "conferenceplace": "", "name": "", "edition": "", "iss": "", "sp": "", "vol": "", "dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "issnOnline": "", "ep": "", "issnLinking": ""}, "coverage": [], "publisher": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": ""}, "language": {"classid": "en", "classname": "en", "schemename": "dnet:languages", "schemeid": "dnet:languages"}, "bestaccessright": {"classid": "UNKNOWN", "classname": "not available", "schemename": "dnet:access_modes", "schemeid": "dnet:access_modes"}, "country": [{"classid": "FI", "classname": "Finland", "schemeid": "dnet:countries", "schemename": "dnet:countries"}], "extraInfo": [], "originalId": ["(BISIS)113444", "https://www.cris.uns.ac.rs/record.jsf?recordId=113444&source=OpenAIRE&language=en"], "dateofacceptance": {"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "value": "2016-01-01"}, "title": [{"dataInfo": {"deletedbyinference": false, "provenanceaction": {"classid": "", "classname": "", "schemename": "", "schemeid": ""}, "inferred": false, "inferenceprovenance": "", "invisible": false, "trust": ""}, "qualifier": {"classid": "test title", "classname": "test title", "schemename": "dnet:dataCite_title", "schemeid": "dnet:dataCite_title"}, "value": "Antichains of copies of ultrahomogeneous structures"}]} \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/article.json b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/article.json new file mode 100644 index 000000000..e0dc0db39 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/article.json @@ -0,0 +1,175 @@ +{ + "DOI": "10.26850/1678-4618eqj.v35.1.2010.p41-46", + "issued": { + "date-parts": [ + [ + 2018, + 1, + 15 + ] + ] + }, + "abstract": "A qualitative spot-test and tandem quantitative analysis of dipyrone in the bulk drugand in pharmaceutical preparations is proposed. The formation of a reddish-violet\u00a0 color indicates a positive result. In sequence a quantitative procedure can be performed in the same flask. The quantitative results obtained were statistically compared with those obtained with the method indicated by the Brazilian\u00a0 Pharmacopoeia, using the Student\u2019s t and the F tests. Considering the concentration in a 100 \u03bcL aliquot, the qualitative visual limit of detection is about 5\u00d710-6 g; instrumental LOD \u2245 1.4\u00d710-4 mol L-1 ; LOQ \u2245 4.5\u00d710-4 mol L-1.", + "prefix": "10.26850", + "author": [ + { + "authenticated-orcid": false, + "given": "Matthieu", + "family": "Tubino", + "sequence": "first", + "affiliation": [], + "ORCID": "http://orcid.org/0000-0002-1987-3907" + }, + { + "affiliation": [], + "given": "A. C.", + "family": "Biondo", + "sequence": "additional" + }, + { + "authenticated-orcid": false, + "given": "Marta Maria Duarte Carvalho", + "family": "Vila", + "sequence": "additional", + "affiliation": [], + "ORCID": "http://orcid.org/0000-0002-0198-7076" + }, + { + "authenticated-orcid": false, + "given": "Leonardo", + "family": "Pezza", + "sequence": "additional", + "affiliation": [], + "ORCID": "http://orcid.org/0000-0003-0197-7369" + }, + { + "authenticated-orcid": false, + "given": "Helena Redigolo", + "family": "Pezza", + "sequence": "additional", + "affiliation": [], + "ORCID": "http://orcid.org/0000-0001-5564-1639" + } + ], + "reference-count": 0, + "ISSN": [ + "1678-4618" + ], + "member": "11395", + "source": "Crossref", + "score": 1.0, + "deposited": { + "timestamp": 1540823529000, + "date-time": "2018-10-29T14:32:09Z", + "date-parts": [ + [ + 2018, + 10, + 29 + ] + ] + }, + "indexed": { + "timestamp": 1540825815212, + "date-time": "2018-10-29T15:10:15Z", + "date-parts": [ + [ + 2018, + 10, + 29 + ] + ] + }, + "type": "journal-article", + "published-online": { + "date-parts": [ + [ + 2018, + 1, + 15 + ] + ] + }, + "URL": "http://dx.doi.org/10.26850/1678-4618eqj.v35.1.2010.p41-46", + "is-referenced-by-count": 0, + "volume": "35", + "issn-type": [ + { + "type": "electronic", + "value": "1678-4618" + } + ], + "link": [ + { + "URL": "http://revista.iq.unesp.br/ojs/index.php/ecletica/article/viewFile/191/149", + "intended-application": "text-mining", + "content-version": "vor", + "content-type": "application/pdf" + }, + { + "URL": "http://revista.iq.unesp.br/ojs/index.php/ecletica/article/viewFile/191/149", + "intended-application": "similarity-checking", + "content-version": "vor", + "content-type": "unspecified" + } + ], + "journal-issue": { + "issue": "1", + "published-online": { + "date-parts": [ + [ + 2018, + 1, + 15 + ] + ] + } + }, + "references-count": 0, + "short-container-title": [ + "Eclet. Quim. J." + ], + "publisher": "Ecletica Quimica Journal", + "content-domain": { + "domain": [], + "crossmark-restriction": false + }, + "license": [ + { + "URL": "http://creativecommons.org/licenses/by/4.0", + "start": { + "timestamp": 1515974400000, + "date-time": "2018-01-15T00:00:00Z", + "date-parts": [ + [ + 2018, + 1, + 15 + ] + ] + }, + "content-version": "unspecified", + "delay-in-days": 0 + } + ], + "created": { + "timestamp": 1517590842000, + "date-time": "2018-02-02T17:00:42Z", + "date-parts": [ + [ + 2018, + 2, + 2 + ] + ] + }, + "issue": "1", + "title": [ + "Spot-test identification and rapid quantitative sequential analys is of dipyrone" + ], + "container-title": [ + "Ecl\u00e9tica Qu\u00edmica Journal" + ], + "page": "41-50", + "funder": [{"DOI": "10.13039/100010663","name": "H2020 European Research Council","doi-asserted-by": "publisher","award": ["677749"]}] +} \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/article_funder_template.json b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/article_funder_template.json new file mode 100644 index 000000000..1a49109ec --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/article_funder_template.json @@ -0,0 +1,175 @@ +{ + "DOI": "10.26850/1678-4618eqj.v35.1.2010.p41-46", + "issued": { + "date-parts": [ + [ + 2018, + 1, + 15 + ] + ] + }, + "abstract": "A qualitative spot-test and tandem quantitative analysis of dipyrone in the bulk drugand in pharmaceutical preparations is proposed. The formation of a reddish-violet\u00a0 color indicates a positive result. In sequence a quantitative procedure can be performed in the same flask. The quantitative results obtained were statistically compared with those obtained with the method indicated by the Brazilian\u00a0 Pharmacopoeia, using the Student\u2019s t and the F tests. Considering the concentration in a 100 \u03bcL aliquot, the qualitative visual limit of detection is about 5\u00d710-6 g; instrumental LOD \u2245 1.4\u00d710-4 mol L-1 ; LOQ \u2245 4.5\u00d710-4 mol L-1.", + "prefix": "10.26850", + "author": [ + { + "authenticated-orcid": false, + "given": "Matthieu", + "family": "Tubino", + "sequence": "first", + "affiliation": [], + "ORCID": "http://orcid.org/0000-0002-1987-3907" + }, + { + "affiliation": [], + "given": "A. C.", + "family": "Biondo", + "sequence": "additional" + }, + { + "authenticated-orcid": false, + "given": "Marta Maria Duarte Carvalho", + "family": "Vila", + "sequence": "additional", + "affiliation": [], + "ORCID": "http://orcid.org/0000-0002-0198-7076" + }, + { + "authenticated-orcid": false, + "given": "Leonardo", + "family": "Pezza", + "sequence": "additional", + "affiliation": [], + "ORCID": "http://orcid.org/0000-0003-0197-7369" + }, + { + "authenticated-orcid": false, + "given": "Helena Redigolo", + "family": "Pezza", + "sequence": "additional", + "affiliation": [], + "ORCID": "http://orcid.org/0000-0001-5564-1639" + } + ], + "reference-count": 0, + "ISSN": [ + "1678-4618" + ], + "member": "11395", + "source": "Crossref", + "score": 1.0, + "deposited": { + "timestamp": 1540823529000, + "date-time": "2018-10-29T14:32:09Z", + "date-parts": [ + [ + 2018, + 10, + 29 + ] + ] + }, + "indexed": { + "timestamp": 1540825815212, + "date-time": "2018-10-29T15:10:15Z", + "date-parts": [ + [ + 2018, + 10, + 29 + ] + ] + }, + "type": "journal-article", + "published-online": { + "date-parts": [ + [ + 2018, + 1, + 15 + ] + ] + }, + "URL": "http://dx.doi.org/10.26850/1678-4618eqj.v35.1.2010.p41-46", + "is-referenced-by-count": 0, + "volume": "35", + "issn-type": [ + { + "type": "electronic", + "value": "1678-4618" + } + ], + "link": [ + { + "URL": "http://revista.iq.unesp.br/ojs/index.php/ecletica/article/viewFile/191/149", + "intended-application": "text-mining", + "content-version": "vor", + "content-type": "application/pdf" + }, + { + "URL": "http://revista.iq.unesp.br/ojs/index.php/ecletica/article/viewFile/191/149", + "intended-application": "similarity-checking", + "content-version": "vor", + "content-type": "unspecified" + } + ], + "journal-issue": { + "issue": "1", + "published-online": { + "date-parts": [ + [ + 2018, + 1, + 15 + ] + ] + } + }, + "references-count": 0, + "short-container-title": [ + "Eclet. Quim. J." + ], + "publisher": "Ecletica Quimica Journal", + "content-domain": { + "domain": [], + "crossmark-restriction": false + }, + "license": [ + { + "URL": "http://creativecommons.org/licenses/by/4.0", + "start": { + "timestamp": 1515974400000, + "date-time": "2018-01-15T00:00:00Z", + "date-parts": [ + [ + 2018, + 1, + 15 + ] + ] + }, + "content-version": "unspecified", + "delay-in-days": 0 + } + ], + "created": { + "timestamp": 1517590842000, + "date-time": "2018-02-02T17:00:42Z", + "date-parts": [ + [ + 2018, + 2, + 2 + ] + ] + }, + "issue": "1", + "title": [ + "Spot-test identification and rapid quantitative sequential analys is of dipyrone" + ], + "container-title": [ + "Ecl\u00e9tica Qu\u00edmica Journal" + ], + %s + "page": "41-50" +} \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/awardTest.json b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/awardTest.json new file mode 100644 index 000000000..7c6e7beb9 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/awardTest.json @@ -0,0 +1,193 @@ +{ + "DOI": "10.1016/j.infbeh.2016.11.001", + "issued": { + "date-parts": [ + [ + 2017, + 8 + ] + ] + }, + "update-policy": "http://dx.doi.org/10.1016/elsevier_cm_policy", + "prefix": "10.1016", + "subject": [ + "Developmental and Educational Psychology" + ], + "author": [ + { + "affiliation": [], + "given": "Dora", + "family": "Kampis", + "sequence": "first" + }, + { + "affiliation": [], + "given": "D\u00f3ra", + "family": "Fogd", + "sequence": "additional" + }, + { + "affiliation": [], + "given": "\u00c1gnes Melinda", + "family": "Kov\u00e1cs", + "sequence": "additional" + } + ], + "reference-count": 109, + "ISSN": [ + "0163-6383" + ], + "assertion": [ + { + "name": "publisher", + "value": "Elsevier", + "label": "This article is maintained by" + }, + { + "name": "articletitle", + "value": "Nonverbal components of Theory of Mind in typical and atypical development", + "label": "Article Title" + }, + { + "name": "journaltitle", + "value": "Infant Behavior and Development", + "label": "Journal Title" + }, + { + "name": "articlelink", + "value": "https://doi.org/10.1016/j.infbeh.2016.11.001", + "label": "CrossRef DOI link to publisher maintained version" + }, + { + "name": "content_type", + "value": "article", + "label": "Content Type" + }, + { + "name": "copyright", + "value": "\u00a9 2016 Elsevier Inc. All rights reserved.", + "label": "Copyright" + } + ], + "member": "78", + "source": "Crossref", + "score": 1.0, + "deposited": { + "timestamp": 1565383284000, + "date-parts": [ + [ + 2019, + 8, + 9 + ] + ], + "date-time": "2019-08-09T20:41:24Z" + }, + "indexed": { + "timestamp": 1565385055278, + "date-parts": [ + [ + 2019, + 8, + 9 + ] + ], + "date-time": "2019-08-09T21:10:55Z" + }, + "type": "journal-article", + "URL": "http://dx.doi.org/10.1016/j.infbeh.2016.11.001", + "is-referenced-by-count": 1, + "volume": "48", + "issn-type": [ + { + "type": "print", + "value": "0163-6383" + } + ], + "link": [ + { + "URL": "https://api.elsevier.com/content/article/PII:S0163638315300059?httpAccept=text/xml", + "intended-application": "text-mining", + "content-version": "vor", + "content-type": "text/xml" + }, + { + "URL": "https://api.elsevier.com/content/article/PII:S0163638315300059?httpAccept=text/plain", + "intended-application": "text-mining", + "content-version": "vor", + "content-type": "text/plain" + } + ], + "published-print": { + "date-parts": [ + [ + 2017, + 8 + ] + ] + }, + "references-count": 109, + "short-container-title": [ + "Infant Behavior and Development" + ], + "publisher": "Elsevier BV", + "content-domain": { + "domain": [ + "elsevier.com", + "sciencedirect.com" + ], + "crossmark-restriction": true + }, + "license": [ + { + "URL": "https://www.elsevier.com/tdm/userlicense/1.0/", + "start": { + "timestamp": 1501545600000, + "date-parts": [ + [ + 2017, + 8, + 1 + ] + ], + "date-time": "2017-08-01T00:00:00Z" + }, + "content-version": "tdm", + "delay-in-days": 0 + } + ], + "language": "en", + "created": { + "timestamp": 1479142046000, + "date-parts": [ + [ + 2016, + 11, + 14 + ] + ], + "date-time": "2016-11-14T16:47:26Z" + }, + "title": [ + "Nonverbal components of Theory of Mind in typical and atypical development" + ], + "alternative-id": [ + "S0163638315300059" + ], + "container-title": [ + "Infant Behavior and Development" + ], + "funder": [ + { + "DOI": "10.13039/501100001711", + "name": "Swiss National Science Foundation (Schweizerische Nationalfonds)", + "doi-asserted-by": "publisher", + "award": [ + "CR32I3_156724", + "31003A_173281/1", + "200021_165850" + ] + } + ], + "page": "54-62" +} diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/book.json b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/book.json new file mode 100644 index 000000000..ab422b6f3 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/book.json @@ -0,0 +1,104 @@ +{ + "DOI": "10.17848/9780880992299.vol1ch4", + "ISBN": [ + "9780880992299" + ], + "issued": { + "date-parts": [ + [ + 2001, + 12, + 1 + ] + ] + }, + "prefix": "10.17848", + "author": [ + { + "affiliation": [ + ], + "given": "William E.", + "family": "Even", + "authenticated-orcid": false + }, + { + "affiliation": [ + ], + "given": "David A.", + "family": "Macpherson" + } + ], + "reference-count": 0, + "member": "7312", + "source": "Crossref", + "score": 1.0, + "deposited": { + "timestamp": 1461687244000, + "date-parts": [ + [ + 2016, + 4, + 26 + ] + ], + "date-time": "2016-04-26T16:14:04Z" + }, + "indexed": { + "timestamp": 1502548826285, + "date-parts": [ + [ + 2017, + 8, + 12 + ] + ], + "date-time": "2017-08-12T14:40:26Z" + }, + "type": "book-chapter", + "published-online": { + "date-parts": [ + [ + 2010, + 5, + 27 + ] + ] + }, + "URL": "http://dx.doi.org/10.17848/9780880992299.vol1ch4", + "is-referenced-by-count": 0, + "download_ts": 1508079092.874343, + "published-print": { + "date-parts": [ + [ + 2001, + 12, + 1 + ] + ] + }, + "references-count": 0, + "publisher": "W.E. Upjohn Institute", + "content-domain": { + "domain": [ + ], + "crossmark-restriction": false + }, + "created": { + "timestamp": 1434034139000, + "date-parts": [ + [ + 2015, + 6, + 11 + ] + ], + "date-time": "2015-06-11T14:48:59Z" + }, + "title": [ + "Children\\'s Effects on Women\\'s Labor Market Attachment and Earnings" + ], + "container-title": [ + "Working Time in Comparative Perspective - Volume II: Life-Cycle Working Time and Nonstandard Hours" + ], + "page": "99-128" +} \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/dataset.json b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/dataset.json new file mode 100644 index 000000000..5c4b8c5a2 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/dataset.json @@ -0,0 +1,105 @@ +{ + "DOI": "10.1037/e522512014-096", + "subtitle": [ + "(522512014-096)" + ], + "issued": { + "date-parts": [ + [ + 2012 + ] + ] + }, + "prefix": "10.1037", + "author": [ + { + "affiliation": [], + "given": "Jessica", + "family": "Trudeau", + "sequence": "first" + }, + { + "affiliation": [], + "given": "Amy", + "family": "McShane", + "sequence": "additional" + }, + { + "affiliation": [], + "given": "Renee", + "family": "McDonald", + "sequence": "additional" + } + ], + "reference-count": 0, + "member": "15", + "source": "Crossref", + "score": 1.0, + "deposited": { + "timestamp": 1413827035000, + "date-parts": [ + [ + 2014, + 10, + 20 + ] + ], + "date-time": "2014-10-20T17:43:55Z" + }, + "indexed": { + "timestamp": 1550142454710, + "date-parts": [ + [ + 2019, + 2, + 14 + ] + ], + "date-time": "2019-02-14T11:07:34Z" + }, + "type": "dataset", + "URL": "http://dx.doi.org/10.1037/e522512014-096", + "is-referenced-by-count": 0, + "published-print": { + "date-parts": [ + [ + 2012 + ] + ] + }, + "references-count": 0, + "institution": { + "acronym": [ + "APA" + ], + "place": [ + "-" + ], + "name": "American Psychological Association" + }, + "publisher": "American Psychological Association (APA)", + "content-domain": { + "domain": [], + "crossmark-restriction": false + }, + "created": { + "timestamp": 1413826121000, + "date-parts": [ + [ + 2014, + 10, + 20 + ] + ], + "date-time": "2014-10-20T17:28:41Z" + }, + "title": [ + "Project Support: A Randomized Control Study to Evaluate the Translation of an Evidence- Based Program" + ], + "alternative-id": [ + "522512014-096" + ], + "container-title": [ + "PsycEXTRA Dataset" + ] +} \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/empty_title.json b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/empty_title.json new file mode 100644 index 000000000..2d274f885 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/empty_title.json @@ -0,0 +1,121 @@ +{ + "indexed": { + "date-parts": [ + [ + 2020, + 4, + 7 + ] + ], + "date-time": "2020-04-07T15:54:28Z", + "timestamp": 1586274868901 + }, + "reference-count": 0, + "publisher": "Japan Society of Mechanical Engineers", + "issue": "432", + "content-domain": { + "domain": [], + "crossmark-restriction": false + }, + "short-container-title": [ + "JSMET" + ], + "published-print": { + "date-parts": [ + [ + 1982 + ] + ] + }, + "DOI": "10.1299\/kikaib.48.1474", + "type": "journal-article", + "created": { + "date-parts": [ + [ + 2011, + 9, + 13 + ] + ], + "date-time": "2011-09-13T05:59:01Z", + "timestamp": 1315893541000 + }, + "page": "1474-1482", + "source": "Crossref", + "is-referenced-by-count": 0, + "title": [ + "" + ], + "prefix": "10.1299", + "volume": "48", + "author": [ + { + "given": "Hiroshi", + "family": "KATO", + "sequence": "first", + "affiliation": [] + }, + { + "given": "Yoshichika", + "family": "MIZUNO", + "sequence": "additional", + "affiliation": [] + } + ], + "member": "124", + "container-title": [ + "Transactions of the Japan Society of Mechanical Engineers Series B" + ], + "original-title": [ + "\u5e0c\u8584\u9ad8\u5206\u5b50\u6eb6\u6db2\u4e2d\u306e\u6709\u9650\u9577\u5186\u67f1\u306e\u62b5\u6297" + ], + "language": "ja", + "deposited": { + "date-parts": [ + [ + 2011, + 9, + 13 + ] + ], + "date-time": "2011-09-13T06:01:33Z", + "timestamp": 1315893693000 + }, + "score": 1.0, + "subtitle": [], + "short-title": [], + "issued": { + "date-parts": [ + [ + 1982 + ] + ] + }, + "references-count": 0, + "journal-issue": { + "published-print": { + "date-parts": [ + [ + 1982 + ] + ] + }, + "issue": "432" + }, + "URL": "http:\/\/dx.doi.org\/10.1299\/kikaib.48.1474", + "relation": {}, + "ISSN": [ + "0387-5016", + "1884-8346" + ], + "issn-type": [ + { + "value": "0387-5016", + "type": "print" + }, + { + "value": "1884-8346", + "type": "electronic" + } + ] +} \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/funder_doi b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/funder_doi new file mode 100644 index 000000000..4183b3b2d --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/funder_doi @@ -0,0 +1,34 @@ +"funder": [{"DOI": "10.13039/100010663","name": "H2020 European Research Council","doi-asserted-by": "publisher","award": ["677749"]}], +"funder": [{"name": "European Union’s Horizon 2020 research and innovation program","award": ["296801","304995","675395"]}], +"funder": [{"DOI": "10.13039/100010661","name": "Horizon 2020 Framework Programme","doi-asserted-by": "publisher","award": ["722467", "H2020-FETOPEN-2015-CSA 712689","773830 (2018–2022)"]}], +"funder": [{"DOI": "10.13039/501100007601","name": "Horizon 2020","doi-asserted-by": "publisher","award": ["645119"]}], +"funder": [{"DOI": "10.13039/100010665","name": "H2020 Marie Skłodowska-Curie Actions","doi-asserted-by": "publisher","award": ["840267"]}], +"funder": [{"DOI": "10.13039/100011199","name": "FP7 Ideas: European Research Council","doi-asserted-by": "publisher","award": ["226438"]}], +"funder": [{"DOI": "10.13039/100004431","name": "Directorate-General for Research and Innovation","doi-asserted-by": "publisher","award": ["321427"]}], +"funder": [{"DOI": "10.13039/501100004963","name": "Seventh Framework Programme","doi-asserted-by": "publisher","award": ["287818","612538"]}], +"funder": [{"DOI": "10.13039/501100000781","name": "European Research Council","doi-asserted-by": "publisher","award": ["340185"]}], +"funder": [{"name": "European Union's","award": ["763909"]}], +"funder": [{"DOI": "10.13039/501100000780","name": "European Commission","doi-asserted-by": "publisher","award": ["645119", "H2020-FETOPEN-2015-CSA_712689"]}], +"funder": [{"DOI": "10.13039/100000001","name": "National Science Foundation","doi-asserted-by": "publisher","award": ["1639552,1634422","ID0EEMBI7182"]}], +"funder": [{"name": "The French National Research Agency (ANR)","award": ["ID0E4QBI7183","ANR-11-JS56-01501","ID0E3VBI7184","ANR-13-BS06-0008"]}], +"funder": [{"DOI": "10.13039/501100001665","name": "Agence Nationale de la Recherche","doi-asserted-by": "publisher","award": ["ANR-14-ASTR-0004-01"]}], +"funder": [{"DOI": "10.13039/501100002341","name": "Academy of Finland","doi-asserted-by": "publisher","award": ["294337","292335","31444","250114","292482"]}], +"funder": [{"DOI": "10.13039/501100001602","name": "Science Foundation Ireland","doi-asserted-by": "publisher","award": ["16/SP/3829","12/RC/2302_P2","SFI/09/IN.I/12974"]}], +"funder": [{"DOI": "10.13039/501100000923","name": "Australian Research Council","doi-asserted-by": "publisher","award": ["LP110200134"]}], +"funder": [{"DOI": "10.13039/501100000038","name": "NSERC","doi-asserted-by": "crossref","award": []}], +"funder": [{"DOI": "10.13039/501100000155","name": "Social Sciences and Humanities Research Council of Canada","doi-asserted-by": "publisher","award": []}], +"funder": [{"DOI": "10.13039/501100000024","name": "Canadian Institutes for Health Research","doi-asserted-by": "crossref","award": ["HIB-126784","HHP-111405"]}], +"funder": [{"DOI": "10.13039/501100002848","name": "Comisión Nacional de Investigación Científica y Tecnológica","doi-asserted-by": "publisher","award": ["15130011"]}], +"funder": [{"DOI": "10.13039/501100003448","name": "General Secretariat for Research and Technology","doi-asserted-by": "publisher","award": ["MIS: 380170"]}], +"funder": [{"DOI": "10.13039/501100010198","name": "Ministerio de Economía, Industria y Competitividad, Gobierno de España","doi-asserted-by": "publisher","award": ["ECO2017-89715-P"]}], +"funder": [{"DOI": "10.13039/501100004564","name": "Ministarstvo Prosvete, Nauke i Tehnološkog Razvoja","doi-asserted-by": "publisher","award": ["TR34008"]}], +"funder": [{"DOI": "10.13039/501100003407","name": "MIUR","doi-asserted-by": "publisher","award": ["20158A9CBM"]}], +"funder": [{"DOI": "10.13039/501100003407","name": "MIUR","doi-asserted-by": "publisher","award": []}], +"funder": [{"DOI": "10.13039/501100006588","name": "Ministarstvo Znanosti, Obrazovanja i Sporta","doi-asserted-by": "publisher","award": ["037-0372790-2799", "Project No. 125-1253008-1350"]}], +"funder": [{"DOI": "10.13039/501100006588","name": "Ministry of Science, Education and Sports","doi-asserted-by": "publisher","award": ["181-1811096-1093"]}], +"funder": [{"DOI": "10.13039/501100004488","name": "Hrvatska Zaklada za Znanost","doi-asserted-by": "publisher","award": ["HRZZ-IP-2013-11-3013", "UIP-2014-09-4744"]}], +"funder": [{"DOI": "10.13039/501100006769","name": "Russian Science Foundation","doi-asserted-by": "publisher","award": ["17-11-01027"]}], +"funder": [{"DOI": "10.13039/501100001711","name": "Swiss National Science Foundation (Schweizerische Nationalfonds)","doi-asserted-by": "publisher","award": ["CR32I3_156724", "31003A_173281/1"]}], +"funder": [{"DOI": "10.13039/501100004410","name": "Türkiye Bilimsel ve Teknolojik Araştirma Kurumu","doi-asserted-by": "publisher","award": ["113M552"]}], +"funder": [{"DOI": "10.13039/100004440","name": "Wellcome Trust","doi-asserted-by": "crossref","award": ["095127","079080"]}], +"funder": [{"DOI": "10.13039/100004440","name": "Wellcome Trust","doi-asserted-by": "crossref","award": []}], \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/funder_name b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/funder_name new file mode 100644 index 000000000..b5c9232ac --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/funder_name @@ -0,0 +1,5 @@ +"funder": [{"name": "Wellcome Trust Masters Fellowship","award": ["090633"]}], +"funder": [{"name": "CONICYT, Programa de Formación de Capital Humano Avanzado","award": ["#72140079"]}], +"funder": [{"name": "European Union's","award": ["763909"]}], +"funder": [{"name": "European Union’s Horizon 2020 research and innovation program","award": ["296801","304995","675395"]}], +"funder": [{"name": "The French National Research Agency (ANR)","award": ["ID0E4QBI7183","ANR-11-JS56-01501","ID0E3VBI7184","ANR-13-BS06-0008"]}], diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/preprint.json b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/preprint.json new file mode 100644 index 000000000..13b2fea84 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/preprint.json @@ -0,0 +1,146 @@ +{ + "DOI": "10.1101/030080", + "issued": { + "date-parts": [ + [ + 2015, + 10, + 28 + ] + ] + }, + "abstract": "Abstract Key MessageAgrobacterium tumefacienswas used to transform radiata pine shoots and to efficiently produce stable genetically modified pine plants. Abstract Micropropagated shoot explants fromPinus radiataD. Don were used to produce stable transgenic plants byAgrobacterium tumefaciensmediated transformation. Using this method any genotype that can be micropropagated could produce stable transgenic lines. As over 80% ofP. radiatagenotypes tested can be micropropagated, this effectively means that any line chosen for superior characteristics could be transformed. There are well established protocols for progressing such germplasm to field deployment. Here we used open and control pollinated seed lines and embryogenic clones. The method developed was faster than other methods previously developed using mature cotyledons. PCR positive shoots could be obtain within 6 months ofAgrobacteriumcocultivation compared with 12 months for cotyledon methods. Transformed shoots were obtained using either kanamycin or geneticin as the selectable marker gene. Shoots were recovered from selection, were tested and were not chimeric, indicating that the selection pressure was optimal for this explant type. GFP was used as a vital marker, and the bar gene, (for resistance to the herbicide Buster\\u00ae/Basta\\u00ae) was used to produce lines that could potentially be used in commercial application. As expected, a range of expression phenotypes were identified for both these reporter genes and the analyses for expression were relatively easy.", + "prefix": "10.1101", + "author": [ + { + "affiliation": [], + "given": "Jan E", + "family": "Grant", + "sequence": "first" + }, + { + "affiliation": [], + "given": "Pauline A", + "family": "Cooper", + "sequence": "additional" + }, + { + "affiliation": [], + "given": "Tracy M", + "family": "Dale", + "sequence": "additional" + } + ], + "reference-count": 0, + "member": "246", + "source": "Crossref", + "score": 1.0, + "deposited": { + "timestamp": 1483495053000, + "date-time": "2017-01-04T01:57:33Z", + "date-parts": [ + [ + 2017, + 1, + 4 + ] + ] + }, + "indexed": { + "timestamp": 1550234353119, + "date-time": "2019-02-15T12:39:13Z", + "date-parts": [ + [ + 2019, + 2, + 15 + ] + ] + }, + "type": "posted-content", + "URL": "http://dx.doi.org/10.1101/030080", + "is-referenced-by-count": 2, + "link": [ + { + "URL": "https://syndication.highwire.org/content/doi/10.1101/030080", + "intended-application": "similarity-checking", + "content-version": "vor", + "content-type": "unspecified" + } + ], + "accepted": { + "date-parts": [ + [ + 2015, + 10, + 28 + ] + ] + }, + "references-count": 0, + "institution": { + "acronym": [ + "-" + ], + "place": [ + "-" + ], + "name": "bioRxiv" + }, + "posted": { + "date-parts": [ + [ + 2015, + 10, + 28 + ] + ] + }, + "publisher": "Cold Spring Harbor Laboratory", + "content-domain": { + "domain": [], + "crossmark-restriction": false + }, + "created": { + "timestamp": 1446095513000, + "date-time": "2015-10-29T05:11:53Z", + "date-parts": [ + [ + 2015, + 10, + 29 + ] + ] + }, + "published-print": { + "timestamp": 1446095513000, + "date-time": "2015-10-29T05:11:53Z", + "date-parts": [ + [ + 2015, + 2, + 29 + ] + ] + }, + "published-online": { + "date-parts": [ + [ + 2015, + 2, + 2 + ] + ] + }, + "title": [ + "Genetic transformation of micropropagated shoots ofPinus radiataD.Don" + ], + "original-title": [ + "OR TITLE" + ], + "short-title": [ + "SHORT TITLE" + ], + "group-title": "Plant Biology", + "subtype": "preprint" +} \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/prwTest.json b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/prwTest.json new file mode 100644 index 000000000..756ee6dda --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/prwTest.json @@ -0,0 +1,1029 @@ +{ + "indexed": { + "date-parts": [ + [ + 2020, + 5, + 5 + ] + ], + "date-time": "2020-05-05T11:24:12Z", + "timestamp": 1588677852676 + }, + "reference-count": 59, + "publisher": "eLife Sciences Publications, Ltd", + "license": [ + { + "URL": "http:\/\/creativecommons.org\/licenses\/by\/3.0\/", + "start": { + "date-parts": [ + [ + 2014, + 3, + 18 + ] + ], + "date-time": "2014-03-18T00:00:00Z", + "timestamp": 1395100800000 + }, + "delay-in-days": 0, + "content-version": "vor" + }, + { + "URL": "http:\/\/creativecommons.org\/licenses\/by\/3.0\/", + "start": { + "date-parts": [ + [ + 2014, + 3, + 18 + ] + ], + "date-time": "2014-03-18T00:00:00Z", + "timestamp": 1395100800000 + }, + "delay-in-days": 0, + "content-version": "am" + }, + { + "URL": "http:\/\/creativecommons.org\/licenses\/by\/3.0\/", + "start": { + "date-parts": [ + [ + 2014, + 3, + 18 + ] + ], + "date-time": "2014-03-18T00:00:00Z", + "timestamp": 1395100800000 + }, + "delay-in-days": 0, + "content-version": "tdm" + }, + { + "URL": "http:\/\/creativecommons.org\/licenses\/by\/3.0\/", + "start": { + "date-parts": [ + [ + 2014, + 3, + 18 + ] + ], + "date-time": "2014-03-18T00:00:00Z", + "timestamp": 1395100800000 + }, + "delay-in-days": 0, + "content-version": "vor" + }, + { + "URL": "http:\/\/creativecommons.org\/licenses\/by\/3.0\/", + "start": { + "date-parts": [ + [ + 2014, + 3, + 18 + ] + ], + "date-time": "2014-03-18T00:00:00Z", + "timestamp": 1395100800000 + }, + "delay-in-days": 0, + "content-version": "am" + }, + { + "URL": "http:\/\/creativecommons.org\/licenses\/by\/3.0\/", + "start": { + "date-parts": [ + [ + 2014, + 3, + 18 + ] + ], + "date-time": "2014-03-18T00:00:00Z", + "timestamp": 1395100800000 + }, + "delay-in-days": 0, + "content-version": "tdm" + } + ], + "funder": [ + { + "DOI": "10.13039\/100000002", + "name": "National Institutes of Health", + "doi-asserted-by": "crossref", + "award": [ + "GM56169", + "AG39420", + "T32 GM007276" + ] + }, + { + "DOI": "10.13039\/100000968", + "name": "American Heart Association", + "doi-asserted-by": "crossref", + "award": [ + "Postdoctoral Fellowship" + ] + }, + { + "DOI": "10.13039\/501100000024", + "name": "Canadian Institutes of Health Research", + "doi-asserted-by": "crossref", + "award": [ + "Postdoctoral Fellowship" + ] + }, + { + "DOI": "10.13039\/100000002", + "name": "National Institutes of Health", + "doi-asserted-by": "publisher", + "award": [ + "GM56169", + "AG39420", + "T32 GM007276" + ] + }, + { + "DOI": "10.13039\/100000968", + "name": "American Heart Association", + "doi-asserted-by": "publisher", + "award": [ + "Postdoctoral Fellowship" + ] + }, + { + "DOI": "10.13039\/501100000024", + "name": "Canadian Institutes of Health Research", + "doi-asserted-by": "publisher", + "award": [ + "Postdoctoral Fellowship" + ] + } + ], + "content-domain": { + "domain": [ + "www.elifesciences.org" + ], + "crossmark-restriction": false + }, + "short-container-title": [], + "abstract": "Glycogen synthase kinase-3 (GSK-3) is a key regulator of many cellular signaling pathways. Unlike most kinases, GSK-3 is controlled by inhibition rather than by specific activation. In the insulin and several other signaling pathways, phosphorylation of a serine present in a conserved sequence near the amino terminus of GSK-3 generates an auto-inhibitory peptide. In contrast, Wnt\/\u03b2-catenin signal transduction requires phosphorylation of Ser\/Pro rich sequences present in the Wnt co-receptors LRP5\/6, and these motifs inhibit GSK-3 activity. We present crystal structures of GSK-3 bound to its phosphorylated N-terminus and to two of the phosphorylated LRP6 motifs. A conserved loop unique to GSK-3 undergoes a dramatic conformational change that clamps the bound pseudo-substrate peptides, and reveals the mechanism of primed substrate recognition. The structures rationalize target sequence preferences and suggest avenues for the design of inhibitors selective for a subset of pathways regulated by GSK-3.<\/jats:p>", + "DOI": "10.7554\/elife.01998", + "type": "journal-article", + "created": { + "date-parts": [ + [ + 2014, + 3, + 18 + ] + ], + "date-time": "2014-03-18T15:23:32Z", + "timestamp": 1395156212000 + }, + "source": "Crossref", + "is-referenced-by-count": 56, + "title": [ + "Structural basis of GSK-3 inhibition by N-terminal phosphorylation and by the Wnt receptor LRP6" + ], + "prefix": "10.7554", + "volume": "3", + "author": [ + { + "given": "Jennifer L", + "family": "Stamos", + "sequence": "first", + "affiliation": [ + { + "name": "Department of Structural Biology, Stanford University, Stanford, United States" + }, + { + "name": "Department of Molecular and Cellular Physiology, Stanford University, Stanford, United States" + } + ] + }, + { + "given": "Matthew Ling-Hon", + "family": "Chu", + "sequence": "additional", + "affiliation": [ + { + "name": "Department of Structural Biology, Stanford University, Stanford, United States" + }, + { + "name": "Department of Molecular and Cellular Physiology, Stanford University, Stanford, United States" + } + ] + }, + { + "given": "Michael D", + "family": "Enos", + "sequence": "additional", + "affiliation": [ + { + "name": "Department of Structural Biology, Stanford University, Stanford, United States" + }, + { + "name": "Department of Molecular and Cellular Physiology, Stanford University, Stanford, United States" + } + ] + }, + { + "given": "Niket", + "family": "Shah", + "sequence": "additional", + "affiliation": [ + { + "name": "Department of Structural Biology, Stanford University, Stanford, United States" + }, + { + "name": "Department of Molecular and Cellular Physiology, Stanford University, Stanford, United States" + } + ] + }, + { + "given": "William I", + "family": "Weis", + "sequence": "additional", + "affiliation": [ + { + "name": "Department of Structural Biology, Stanford University, Stanford, United States" + }, + { + "name": "Department of Molecular and Cellular Physiology, Stanford University, Stanford, United States" + } + ] + } + ], + "member": "4374", + "published-online": { + "date-parts": [ + [ + 2014, + 3, + 18 + ] + ] + }, + "reference": [ + { + "key": "bib1", + "doi-asserted-by": "publisher", + "first-page": "213", + "DOI": "10.1107\/S0907444909052925", + "article-title": "PHENIX: a comprehensive Python-based system for macromolecular structure solution", + "volume": "66", + "author": "Adams", + "year": "2010", + "journal-title": "Acta Crystallographica Section D Biological Crystallography" + }, + { + "key": "bib2", + "doi-asserted-by": "publisher", + "first-page": "2527", + "DOI": "10.1021\/cr000110o", + "article-title": "Glycogen synthase kinase-3: properties, functions, and regulation", + "volume": "101", + "author": "Ali", + "year": "2001", + "journal-title": "Chemical Reviews" + }, + { + "key": "bib3", + "doi-asserted-by": "publisher", + "first-page": "2264", + "DOI": "10.2174\/138161211797052484", + "article-title": "The possible involvement of glycogen synthase kinase-3 (GSK-3) in diabetes, cancer and central nervous system diseases", + "volume": "17", + "author": "Amar", + "year": "2011", + "journal-title": "Current Pharmaceutical Design" + }, + { + "key": "bib4", + "doi-asserted-by": "publisher", + "first-page": "1143", + "DOI": "10.1016\/S0969-2126(01)00679-7", + "article-title": "The structure of phosphorylated GSK-3beta complexed with a peptide, FRATtide, that inhibits beta-catenin phosphorylation", + "volume": "9", + "author": "Bax", + "year": "2001", + "journal-title": "Structure" + }, + { + "key": "bib5", + "doi-asserted-by": "publisher", + "first-page": "393", + "DOI": "10.1016\/j.jmb.2003.08.031", + "article-title": "Structural characterization of the GSK-3beta active site using selective and non-selective ATP-mimetic inhibitors", + "volume": "333", + "author": "Bertrand", + "year": "2003", + "journal-title": "Journal of Molecular Biology" + }, + { + "key": "bib6", + "doi-asserted-by": "publisher", + "first-page": "1619", + "DOI": "10.1126\/science.1137065", + "article-title": "Wnt induces LRP6 signalosomes and promotes dishevelled-dependent LRP6 phosphorylation", + "volume": "316", + "author": "Bilic", + "year": "2007", + "journal-title": "Science" + }, + { + "key": "bib7", + "doi-asserted-by": "publisher", + "first-page": "438", + "DOI": "10.1038\/15674", + "article-title": "The structural basis for specificity of substrate and recruitment peptides for cyclin-dependent kinases", + "volume": "1", + "author": "Brown", + "year": "1999", + "journal-title": "Nature Cell Biology" + }, + { + "key": "bib8", + "doi-asserted-by": "publisher", + "first-page": "179", + "DOI": "10.1128\/MCB.00550-10", + "article-title": "Mitogen-activated protein kinases promote WNT\/\u03b2-catenin signaling via phosphorylation of LRP6", + "volume": "31", + "author": "Cervenka", + "year": "2011", + "journal-title": "Molecular and Cellular Biology" + }, + { + "key": "bib9", + "doi-asserted-by": "publisher", + "first-page": "35040", + "DOI": "10.1074\/jbc.M109.047456", + "article-title": "G Protein-coupled receptor kinases phosphorylate LRP6 in the Wnt pathway", + "volume": "284", + "author": "Chen", + "year": "2009", + "journal-title": "The Journal of Biological Chemistry" + }, + { + "key": "bib10", + "doi-asserted-by": "publisher", + "first-page": "12", + "DOI": "10.1107\/S0907444909042073", + "article-title": "MolProbity: all-atom structure validation for macromolecular crystallography", + "volume": "66", + "author": "Chen", + "year": "2010", + "journal-title": "Acta Crystallographica Section D Biological Crystallography" + }, + { + "key": "bib11", + "doi-asserted-by": "publisher", + "first-page": "1188", + "DOI": "10.1101\/gr.849004", + "article-title": "WebLogo: a sequence logo generator", + "volume": "14", + "author": "Crooks", + "year": "2004", + "journal-title": "Genome Research" + }, + { + "key": "bib12", + "doi-asserted-by": "publisher", + "first-page": "785", + "DOI": "10.1038\/378785a0", + "article-title": "Inhibition of glycogen synthase kinase-3 by insulin mediated by protein kinase B", + "volume": "378", + "author": "Cross", + "year": "1995", + "journal-title": "Nature" + }, + { + "key": "bib13", + "doi-asserted-by": "publisher", + "first-page": "494", + "DOI": "10.1093\/emboj\/cdg068", + "article-title": "Structural basis for recruitment of glycogen synthase kinase 3beta to the axin-APC scaffold complex", + "volume": "22", + "author": "Dajani", + "year": "2003", + "journal-title": "The EMBO Journal" + }, + { + "key": "bib14", + "doi-asserted-by": "publisher", + "first-page": "721", + "DOI": "10.1016\/S0092-8674(01)00374-9", + "article-title": "Crystal structure of glycogen synthase kinase 3 beta: structural basis for phosphate-primed substrate specificity and autoinhibition", + "volume": "105", + "author": "Dajani", + "year": "2001", + "journal-title": "Cell" + }, + { + "key": "bib15", + "doi-asserted-by": "publisher", + "first-page": "867", + "DOI": "10.1038\/nature04170", + "article-title": "Casein kinase 1 gamma couples Wnt receptor activation to cytoplasmic signal transduction", + "volume": "438", + "author": "Davidson", + "year": "2005", + "journal-title": "Nature" + }, + { + "key": "bib16", + "doi-asserted-by": "publisher", + "first-page": "4395", + "DOI": "10.1111\/j.1742-4658.2009.07147.x", + "article-title": "Structural recognition of an optimized substrate for the ephrin family of receptor tyrosine kinaes", + "volume": "276", + "author": "Davis", + "year": "2009", + "journal-title": "The FEBS Journal" + }, + { + "key": "bib17", + "doi-asserted-by": "publisher", + "first-page": "32475", + "DOI": "10.1074\/jbc.M005342200", + "article-title": "Differential regulation of glycogen synthase kinase 3beta by insulin and Wnt signaling", + "volume": "275", + "author": "Ding", + "year": "2000", + "journal-title": "The Journal of Biological Chemistry" + }, + { + "key": "bib18", + "doi-asserted-by": "publisher", + "first-page": "957", + "DOI": "10.1016\/j.devcel.2007.04.001", + "article-title": "Functional redundancy of GSK-3alpha and GSK-3beta in Wnt\/beta-catenin signaling shown by using an allelic series of embryonic stem cell lines", + "volume": "12", + "author": "Doble", + "year": "2007", + "journal-title": "Developmental Cell" + }, + { + "key": "bib19", + "doi-asserted-by": "publisher", + "first-page": "2126", + "DOI": "10.1107\/S0907444904019158", + "article-title": "Coot: model-building tools for molecular graphics", + "volume": "60", + "author": "Emsley", + "year": "2004", + "journal-title": "Acta Crystallographica Section D Biological Crystallography" + }, + { + "key": "bib20", + "doi-asserted-by": "publisher", + "first-page": "1204", + "DOI": "10.1107\/S0907444913000061", + "article-title": "How good are my data and what is the resolution?", + "volume": "69", + "author": "Evans", + "year": "2013", + "journal-title": "Acta Crystallographica Section D Biological Crystallography" + }, + { + "key": "bib21", + "first-page": "14042", + "article-title": "Formation of protein kinase recognition sites by covalent modification of the substrate. Molecular mechanism for the synergistic action of casein kinase II and glycogen synthase kinase 3", + "volume": "262", + "author": "Fiol", + "year": "1987", + "journal-title": "The Journal of Biological Chemistry" + }, + { + "key": "bib22", + "doi-asserted-by": "publisher", + "first-page": "1", + "DOI": "10.1042\/0264-6021:3590001", + "article-title": "GSK3 takes centre stage more than 20 years after its discovery", + "volume": "359", + "author": "Frame", + "year": "2001", + "journal-title": "Biochemical Journal" + }, + { + "key": "bib23", + "doi-asserted-by": "publisher", + "first-page": "1321", + "DOI": "10.1016\/j.febslet.2006.06.035", + "article-title": "A common phosphate binding site explains the unique substrate specificity of GSK3 and its inactivation by phosphorylation", + "volume": "7", + "author": "Frame", + "year": "2001", + "journal-title": "Molecular Cell" + }, + { + "key": "bib24", + "doi-asserted-by": "publisher", + "first-page": "5572", + "DOI": "10.1093\/emboj\/16.18.5572", + "article-title": "Crystal structure of the activated insulin receptor tyrosine kinase in complex with peptide substrate and ATP analog", + "volume": "16", + "author": "Hubbard", + "year": "1997", + "journal-title": "The EMBO Journal" + }, + { + "key": "bib25", + "doi-asserted-by": "publisher", + "first-page": "30621", + "DOI": "10.1074\/jbc.M604633200", + "article-title": "Identification of novel glycogen synthase kinase-3beta substrate-interacting residues suggests a common mechanism for substrate recognition", + "volume": "281", + "author": "Ilouz", + "year": "2006", + "journal-title": "The Journal of Biological Chemistry" + }, + { + "key": "bib26", + "doi-asserted-by": "publisher", + "first-page": "95", + "DOI": "10.1016\/j.tibs.2003.12.004", + "article-title": "The glamour and gloom of glycogen synthase kinase-3", + "volume": "29", + "author": "Jope", + "year": "2004", + "journal-title": "Trends in Biochemical Sciences" + }, + { + "key": "bib27", + "doi-asserted-by": "publisher", + "first-page": "9", + "DOI": "10.1016\/j.molcel.2011.03.004", + "article-title": "Catalytic control in the EGF receptor and its connection to general kinase regulatory mechanisms", + "volume": "42", + "author": "Jura", + "year": "2011", + "journal-title": "Molecular Cell" + }, + { + "key": "bib28", + "doi-asserted-by": "publisher", + "first-page": "125", + "DOI": "10.1107\/S0907444909047337", + "article-title": "Xds", + "volume": "66", + "author": "Kabsch", + "year": "2010", + "journal-title": "Acta Crystallographica Section D Biological Crystallography" + }, + { + "key": "bib29", + "doi-asserted-by": "publisher", + "first-page": "35", + "DOI": "10.1186\/1756-6606-2-35", + "article-title": "Abnormalities in brain structure and behavior in GSK-3alpha mutant mice", + "volume": "2", + "author": "Kaidanovich-Beilin", + "year": "2009", + "journal-title": "Molecular Brain" + }, + { + "key": "bib30", + "doi-asserted-by": "publisher", + "first-page": "40", + "DOI": "10.3389\/fnmol.2011.00040", + "article-title": "GSK-3: functional insights from cell biology and animal models", + "volume": "4", + "author": "Kaidanovich-Beilin", + "year": "2011", + "journal-title": "Frontiers in Molecular Neuroscience" + }, + { + "key": "bib31", + "doi-asserted-by": "publisher", + "first-page": "735", + "DOI": "10.1016\/j.bbrc.2013.03.103", + "article-title": "Development of Akt-activated GSK3beta inhibitory peptide", + "volume": "434", + "author": "Kim", + "year": "2013a", + "journal-title": "Biochemical and Biophysical Research" + }, + { + "key": "bib32", + "doi-asserted-by": "publisher", + "first-page": "867", + "DOI": "10.1126\/science.1232389", + "article-title": "Wnt stabilization of beta-catenin reveals principles for morphogen receptor-scaffold assemblies", + "volume": "340", + "author": "Kim", + "year": "2013b", + "journal-title": "Science" + }, + { + "key": "bib33", + "doi-asserted-by": "publisher", + "first-page": "3359", + "DOI": "10.1016\/j.bmcl.2008.04.034", + "article-title": "Synthesis and structure based optimization of novel Akt inhibitors", + "volume": "18", + "author": "Lippa", + "year": "2008", + "journal-title": "Bioorganic & Medicinal Chemistry Letters" + }, + { + "key": "bib34", + "doi-asserted-by": "publisher", + "first-page": "627", + "DOI": "10.1016\/j.molcel.2006.10.009", + "article-title": "A chaperone-dependent GSK3beta transitional intermediate mediates activation-loop autophosphorylation", + "volume": "24", + "author": "Lochhead", + "year": "2006", + "journal-title": "Molecular Cell" + }, + { + "key": "bib35", + "doi-asserted-by": "publisher", + "first-page": "3171", + "DOI": "10.1096\/fj.09-143743", + "article-title": "New potent dual inhibitors of CK2 and Pim kinases: discovery and structural insights", + "volume": "24", + "author": "Lopez-Ramos", + "year": "2010", + "journal-title": "The FASEB Journal" + }, + { + "key": "bib36", + "doi-asserted-by": "publisher", + "first-page": "6646", + "DOI": "10.1093\/emboj\/16.22.6646", + "article-title": "The crystal structure of a phosphorylase kinase peptide substrate complex: kinase substrate recognition", + "volume": "16", + "author": "Lowe", + "year": "1997", + "journal-title": "The EMBO Journal" + }, + { + "key": "bib37", + "doi-asserted-by": "publisher", + "first-page": "a007880", + "DOI": "10.1101\/cshperspect.a007880", + "article-title": "Frizzled and LRP5\/6 receptors for Wnt\/beta-catenin signaling", + "volume": "4", + "author": "MacDonald", + "year": "2012", + "journal-title": "Cold Spring Harbour Perspectives in Biology" + }, + { + "key": "bib38", + "doi-asserted-by": "publisher", + "first-page": "16115", + "DOI": "10.1074\/jbc.M800327200", + "article-title": "Wnt signal amplification via activity, cooperativity, and regulation of multiple intracellular PPPSP motifs in the Wnt co-receptor LRP6", + "volume": "283", + "author": "MacDonald", + "year": "2008", + "journal-title": "The Journal of Biological Chemistry" + }, + { + "key": "bib39", + "doi-asserted-by": "publisher", + "first-page": "273", + "DOI": "10.1038\/nsb780", + "article-title": "Crystal structure of a transition state mimic of the catalytic subunit of cAMP-dependent protein kinase", + "volume": "9", + "author": "Madhusudan", + "year": "2002", + "journal-title": "Nature Structural Biology" + }, + { + "key": "bib40", + "doi-asserted-by": "publisher", + "first-page": "176", + "DOI": "10.1002\/pro.5560030203", + "article-title": "cAMP-dependent protein kinase: crystallographic insights into substrate recognition and phosphotransfer", + "volume": "3", + "author": "Madhusudan", + "year": "1994", + "journal-title": "Protein Science" + }, + { + "key": "bib41", + "doi-asserted-by": "publisher", + "first-page": "821", + "DOI": "10.1038\/nchembio.452", + "article-title": "Dynamics connect substrate recognition to catalysis in protein kinase A", + "volume": "6", + "author": "Masterson", + "year": "2010", + "journal-title": "Nature Chemical Biology" + }, + { + "key": "bib42", + "doi-asserted-by": "publisher", + "first-page": "6969", + "DOI": "10.1073\/pnas.1102701108", + "article-title": "Dynamically committed, uncommitted, and quenched states encoded in protein kinase A revealed by NMR spectroscopy", + "volume": "108", + "author": "Masterson", + "year": "2011", + "journal-title": "Proceedings of the National Academy of Sciences of the United States of America" + }, + { + "key": "bib43", + "doi-asserted-by": "publisher", + "first-page": "1571", + "DOI": "10.1038\/sj.emboj.7600633", + "article-title": "Role that phosphorylation of GSK3 plays in insulin and Wnt signalling defined by knockin analysis", + "volume": "24", + "author": "McManus", + "year": "2005", + "journal-title": "The EMBO Journal" + }, + { + "key": "bib44", + "first-page": "533", + "article-title": "Glycogen synthase kinase-3 (GSK-3) inhibitors reach the clinic", + "volume": "11", + "author": "Medina", + "year": "2008", + "journal-title": "Current Opinion in Drug Discovery and Development" + }, + { + "key": "bib45", + "doi-asserted-by": "publisher", + "first-page": "921", + "DOI": "10.1016\/S0969-2126(97)00246-3", + "article-title": "A binary complex of the catalytic subunit of cAMP-dependent protein kinase and adenosine further defines conformational flexibility", + "volume": "5", + "author": "Narayana", + "year": "1997", + "journal-title": "Structure" + }, + { + "key": "bib46", + "doi-asserted-by": "publisher", + "first-page": "2551", + "DOI": "10.1007\/s00018-010-0329-3", + "article-title": "Regulation of Lrp6 phosphorylation", + "volume": "67", + "author": "Niehrs", + "year": "2010", + "journal-title": "Cellular and Molecular Life Sciences" + }, + { + "key": "bib47", + "doi-asserted-by": "publisher", + "first-page": "6314", + "DOI": "10.1128\/MCB.00763-08", + "article-title": "Tissue-specific role of glycogen synthase kinase 3beta in glucose homeostasis and insulin action", + "volume": "28", + "author": "Patel", + "year": "2008", + "journal-title": "Molecular and Cellular Biology" + }, + { + "key": "bib48", + "doi-asserted-by": "publisher", + "first-page": "e4046", + "DOI": "10.1371\/journal.pone.0004046", + "article-title": "Direct inhibition of GSK3beta by the phosphorylated cytoplasmic domain of LRP6 in Wnt\/beta-catenin signaling", + "volume": "3", + "author": "Piao", + "year": "2008", + "journal-title": "PLOS ONE" + }, + { + "key": "bib49", + "doi-asserted-by": "publisher", + "first-page": "986", + "DOI": "10.1016\/j.str.2013.03.012", + "article-title": "Structures of Down syndrome kinases, DYRKs, reveal mechanisms of kinase activation and substrate recognition", + "volume": "21", + "author": "Soundararajan", + "year": "2013", + "journal-title": "Structure" + }, + { + "key": "bib50", + "doi-asserted-by": "publisher", + "first-page": "a007898", + "DOI": "10.1101\/cshperspect.a007898", + "article-title": "The beta-catenin destruction complex", + "volume": "5", + "author": "Stamos", + "year": "2013", + "journal-title": "Cold Spring Harbour Perspectives in Biology" + }, + { + "key": "bib51", + "doi-asserted-by": "publisher", + "first-page": "505607", + "DOI": "10.4061\/2011\/505607", + "article-title": "What are the bona fide GSK3 substrates?", + "volume": "2011", + "author": "Sutherland", + "year": "2011", + "journal-title": "International Journal of Alzheimer\u2019s Disease" + }, + { + "key": "bib52", + "doi-asserted-by": "publisher", + "first-page": "9312", + "DOI": "10.1021\/jm301034u", + "article-title": "Selectivity, cocrystal structures, and neuroprotective properties of leucettines, a family of protein kinase inhibitors derived from the marine sponge alkaloid leucettamine B", + "volume": "55", + "author": "Tahtouh", + "year": "2012", + "journal-title": "Journal of Medicinal Chemistry" + }, + { + "key": "bib53", + "doi-asserted-by": "publisher", + "first-page": "179", + "DOI": "10.1254\/jphs.08R28FM", + "article-title": "Drug development targeting the glycogen synthase kinase-3beta (GSK-3beta)-mediated signal transduction pathway: inhibitors of the Wnt\/beta-catenin signaling pathway as novel anticancer drugs", + "volume": "109", + "author": "Takahashi-Yanaga", + "year": "2009", + "journal-title": "Journal of Pharmacological Sciences" + }, + { + "key": "bib54", + "doi-asserted-by": "publisher", + "first-page": "593", + "DOI": "10.1038\/89624", + "article-title": "Structure of GSK3beta reveals a primed phosphorylation mechanism", + "volume": "8", + "author": "ter Haar", + "year": "2001", + "journal-title": "Nature Structural Biology" + }, + { + "key": "bib55", + "doi-asserted-by": "publisher", + "first-page": "1558", + "DOI": "10.2741\/3324", + "article-title": "GSK-3 inhibitors and insulin receptor signaling in health, disease, and therapeutics", + "volume": "14", + "author": "Wada", + "year": "2009", + "journal-title": "Frontiers in Bioscience" + }, + { + "key": "bib56", + "first-page": "14566", + "article-title": "Glycogen synthase kinase-3 beta is a dual specificity kinase differentially regulated by tyrosine and serine\/threonine phosphorylation", + "volume": "269", + "author": "Wang", + "year": "1994", + "journal-title": "The Journal of Biological Chemistry" + }, + { + "key": "bib57", + "doi-asserted-by": "publisher", + "first-page": "e4926", + "DOI": "10.1371\/journal.pone.0004926", + "article-title": "Inhibition of GSK3 phosphorylation of beta-catenin via phosphorylated PPPSPXS motifs of Wnt coreceptor LRP6", + "volume": "4", + "author": "Wu", + "year": "2009", + "journal-title": "PLOS ONE" + }, + { + "key": "bib58", + "doi-asserted-by": "publisher", + "first-page": "873", + "DOI": "10.1038\/nature04185", + "article-title": "A dual-kinase mechanism for Wnt co-receptor phosphorylation and activation", + "volume": "438", + "author": "Zeng", + "year": "2005", + "journal-title": "Nature" + }, + { + "key": "bib59", + "doi-asserted-by": "publisher", + "first-page": "7797", + "DOI": "10.1074\/jbc.272.12.7797", + "article-title": "Target protease specificity of the viral serpin CrmA. Analysis of five caspases", + "volume": "272", + "author": "Zhou", + "year": "1997", + "journal-title": "The Journal of Biological Chemistry" + } + ], + "container-title": [ + "eLife" + ], + "original-title": [], + "language": "en", + "link": [ + { + "URL": "https:\/\/cdn.elifesciences.org\/articles\/01998\/elife-01998-v1.pdf", + "content-type": "application\/pdf", + "content-version": "vor", + "intended-application": "text-mining" + }, + { + "URL": "https:\/\/cdn.elifesciences.org\/articles\/01998\/elife-01998-v1.xml", + "content-type": "application\/xml", + "content-version": "vor", + "intended-application": "text-mining" + } + ], + "deposited": { + "date-parts": [ + [ + 2018, + 8, + 23 + ] + ], + "date-time": "2018-08-23T13:49:30Z", + "timestamp": 1535032170000 + }, + "score": 1.0, + "subtitle": [], + "short-title": [], + "issued": { + "date-parts": [ + [ + 2014, + 3, + 18 + ] + ] + }, + "references-count": 59, + "alternative-id": [ + "10.7554\/eLife.01998" + ], + "URL": "http:\/\/dx.doi.org\/10.7554\/elife.01998", + "archive": [ + "CLOCKSS" + ], + "relation": { + "has-review": [ + { + "id-type": "doi", + "id": "10.7554\/eLife.01998.014", + "asserted-by": "object" + }, + { + "id-type": "doi", + "id": "10.7554\/eLife.01998.015", + "asserted-by": "object" + } + ], + "cites": [] + }, + "ISSN": [ + "2050-084X" + ], + "issn-type": [ + { + "value": "2050-084X", + "type": "electronic" + } + ], + "subject": [ + "General Biochemistry, Genetics and Molecular Biology", + "General Immunology and Microbiology", + "General Neuroscience", + "General Medicine" + ], + "assertion": [ + { + "value": "2013-12-03", + "order": 0, + "name": "received", + "label": "Received", + "group": { + "name": "publication_history", + "label": "Publication History" + } + }, + { + "value": "2014-02-17", + "order": 1, + "name": "accepted", + "label": "Accepted", + "group": { + "name": "publication_history", + "label": "Publication History" + } + }, + { + "value": "2014-03-18", + "order": 2, + "name": "published", + "label": "Published", + "group": { + "name": "publication_history", + "label": "Publication History" + } + } + ] +} diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/response.json b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/response.json new file mode 100644 index 000000000..3249e312f --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/response.json @@ -0,0 +1,127 @@ +{ + "_scroll_id": "DnF1ZXJ5VGhlbkZldGNo8AEAAAAAAAJmvhYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAAB38Wa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAeBFmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAAHiRZrdjMxVmw2R1JicURDbHdrRHo0Q1VRAAAAAAAAB4QWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAeAFmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAAHkRZrdjMxVmw2R1JicURDbHdrRHo0Q1VRAAAAAAAAB4IWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAd-Fmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAAHhxZrdjMxVmw2R1JicURDbHdrRHo0Q1VRAAAAAAACZr8WM2xZTUt5OWtUaE9kRFZFb2JYRnlCUQAAAAAAAAeDFmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAJmwBYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAACZsEWM2xZTUt5OWtUaE9kRFZFb2JYRnlCUQAAAAAAAAk7Fmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAAHiBZrdjMxVmw2R1JicURDbHdrRHo0Q1VRAAAAAAAAB4UWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAeGFmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAJmxRYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAAB44Wa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAeKFmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAAJPRZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAACZscWM2xZTUt5OWtUaE9kRFZFb2JYRnlCUQAAAAAAAmbEFjNsWU1LeTlrVGhPZERWRW9iWEZ5QlEAAAAAAAAHjBZrdjMxVmw2R1JicURDbHdrRHo0Q1VRAAAAAAAAB4sWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAeNFmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAAJRBZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAAAB5cWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAeSFmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAAJPxZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAACZskWM2xZTUt5OWtUaE9kRFZFb2JYRnlCUQAAAAAAAAeTFmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAJmyxYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAAB5UWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAmbGFjNsWU1LeTlrVGhPZERWRW9iWEZ5QlEAAAAAAAJmyBYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAAB5QWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAlAFmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAJmzBYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAACTwWaXNrV3hWNXZUNUtjLVVYNDVoRFZvQQAAAAAAAAmrFkR4bkItaG5ZUzhXVWFrVnlDdks3WlEAAAAAAAAJrhZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAAACbEWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAmbCFjNsWU1LeTlrVGhPZERWRW9iWEZ5QlEAAAAAAAAJrBZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAAACbAWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAmbDFjNsWU1LeTlrVGhPZERWRW9iWEZ5QlEAAAAAAAAJqxZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAACbIWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAAmtFkR4bkItaG5ZUzhXVWFrVnlDdks3WlEAAAAAAAAHjxZrdjMxVmw2R1JicURDbHdrRHo0Q1VRAAAAAAAAB5AWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAeWFmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAAJPhZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAACZsoWM2xZTUt5OWtUaE9kRFZFb2JYRnlCUQAAAAAAAAmsFnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAALfRY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACa8WRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAmWHFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAAJQRZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAACZZEWVEdlbjFkaEVSdU9tcEJaU2FYX2RhZwAAAAAAAAlCFmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAJmzRYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAACa0WcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAt-FjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAJsxZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAAAB5gWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAArHFjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAJljBZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACUMWaXNrV3hWNXZUNUtjLVVYNDVoRFZvQQAAAAAAAAeZFmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAAJrhZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAAC4EWOUdGNk1zckRTN21CZDBxOEpFUGZjUQAAAAAAAAm1FkR4bkItaG5ZUzhXVWFrVnlDdks3WlEAAAAAAAJliBZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACskWMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAmWLFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAAJRRZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAACZs4WM2xZTUt5OWtUaE9kRFZFb2JYRnlCUQAAAAAAAAmvFnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAALfxY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACbQWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAAeaFmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAAKyBYyclYweFFkTlJVdTRGb3BhUjVBRTRBAAAAAAACZYkWVEdlbjFkaEVSdU9tcEJaU2FYX2RhZwAAAAAAAAlGFmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAJmzxYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAACbAWcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAuAFjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAJthZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAAACbIWcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAArMFjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAJlihZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACUcWaXNrV3hWNXZUNUtjLVVYNDVoRFZvQQAAAAAAAAmxFnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAAJsxZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAAC4IWOUdGNk1zckRTN21CZDBxOEpFUGZjUQAAAAAAAAm3FkR4bkItaG5ZUzhXVWFrVnlDdks3WlEAAAAAAAAK0hYyclYweFFkTlJVdTRGb3BhUjVBRTRBAAAAAAAACsoWMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAmWPFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAAJSBZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAAAC4MWOUdGNk1zckRTN21CZDBxOEpFUGZjUQAAAAAAAAm0FnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAALhBY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACbgWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAAuFFjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAKyxYyclYweFFkTlJVdTRGb3BhUjVBRTRBAAAAAAACZZIWVEdlbjFkaEVSdU9tcEJaU2FYX2RhZwAAAAAAAAlJFmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAJm0BYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAACbYWcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAuGFjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAJuRZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAACZZAWVEdlbjFkaEVSdU9tcEJaU2FYX2RhZwAAAAAAAArQFjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAJljRZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACUoWaXNrV3hWNXZUNUtjLVVYNDVoRFZvQQAAAAAAAmbRFjNsWU1LeTlrVGhPZERWRW9iWEZ5QlEAAAAAAAAJtRZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAAC4cWOUdGNk1zckRTN21CZDBxOEpFUGZjUQAAAAAAAArPFjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAAKzRYyclYweFFkTlJVdTRGb3BhUjVBRTRBAAAAAAAACs4WMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAmWdFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAJljhZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACbcWcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAm4FnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAALiBY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACboWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAAm7FkR4bkItaG5ZUzhXVWFrVnlDdks3WlEAAAAAAAAK0RYyclYweFFkTlJVdTRGb3BhUjVBRTRBAAAAAAACZZQWVEdlbjFkaEVSdU9tcEJaU2FYX2RhZwAAAAAAAAlLFmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAJm0hYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAACbkWcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAuJFjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAJvBZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAAAC4oWOUdGNk1zckRTN21CZDBxOEpFUGZjUQAAAAAAAArUFjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAJlmRZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACUwWaXNrV3hWNXZUNUtjLVVYNDVoRFZvQQAAAAAAAmbTFjNsWU1LeTlrVGhPZERWRW9iWEZ5QlEAAAAAAAAJuhZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAAC4sWOUdGNk1zckRTN21CZDBxOEpFUGZjUQAAAAAAAmWTFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAALjBY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACtUWMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAmWfFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAAJvRZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAAACb4WRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAAm7FnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAALjRY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACb8WRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAAm8FnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAAK0xYyclYweFFkTlJVdTRGb3BhUjVBRTRBAAAAAAACZZUWVEdlbjFkaEVSdU9tcEJaU2FYX2RhZwAAAAAAAAlNFmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAAJvRZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAACb4WcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAuOFjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAJwBZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAAACb8WcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAArYFjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAJllxZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACU4WaXNrV3hWNXZUNUtjLVVYNDVoRFZvQQAAAAAAAmbUFjNsWU1LeTlrVGhPZERWRW9iWEZ5QlEAAAAAAAAJwBZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAAC48WOUdGNk1zckRTN21CZDBxOEpFUGZjUQAAAAAAAAnBFkR4bkItaG5ZUzhXVWFrVnlDdks3WlEAAAAAAAALkBY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACtYWMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAmWWFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAAJTxZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAACZtUWM2xZTUt5OWtUaE9kRFZFb2JYRnlCUQAAAAAAAAnBFnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAALkRY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACcIWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAAuSFjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAK1xYyclYweFFkTlJVdTRGb3BhUjVBRTRBAAAAAAACZZgWVEdlbjFkaEVSdU9tcEJaU2FYX2RhZwAAAAAAAAlQFmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAJm1hYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAACcIWcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAuTFjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAJlmhZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAAB5sWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAArZFjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAJlmxZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACVEWaXNrV3hWNXZUNUtjLVVYNDVoRFZvQQAAAAAAAAuUFjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAJwxZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAAC5UWOUdGNk1zckRTN21CZDBxOEpFUGZjUQAAAAAAAAnDFkR4bkItaG5ZUzhXVWFrVnlDdks3WlEAAAAAAAAJUxZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAAACtsWMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAmWcFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAAJUhZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAAACtoWMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAAnEFnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAALlhY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACcQWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAArcFjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAAK3RYyclYweFFkTlJVdTRGb3BhUjVBRTRBAAAAAAACZZ4WVEdlbjFkaEVSdU9tcEJaU2FYX2RhZwAAAAAAAAlUFmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAJm1xYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAACcUWcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAuXFjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAJxRZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAAACt4WMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAArfFjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAJloBZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACVUWaXNrV3hWNXZUNUtjLVVYNDVoRFZvQQAAAAAAAArgFjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAAJxhZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAAC5gWOUdGNk1zckRTN21CZDBxOEpFUGZjUQAAAAAAAAnGFkR4bkItaG5ZUzhXVWFrVnlDdks3WlEAAAAAAAAJxxZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAAACuQWMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAmWhFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAAJVhZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAACZtgWM2xZTUt5OWtUaE9kRFZFb2JYRnlCUQAAAAAAAAnHFnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAALmRY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACuIWMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAmWiFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAAK4RYyclYweFFkTlJVdTRGb3BhUjVBRTRBAAAAAAACZaMWVEdlbjFkaEVSdU9tcEJaU2FYX2RhZwAAAAAAAAlXFmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAJm2RYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAACcgWcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAuaFjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAJyBZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAACZtoWM2xZTUt5OWtUaE9kRFZFb2JYRnlCUQAAAAAAAArjFjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAJlpBZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACVgWaXNrV3hWNXZUNUtjLVVYNDVoRFZvQQAAAAAAAmbbFjNsWU1LeTlrVGhPZERWRW9iWEZ5QlE=", + "took": 89, + "timed_out": false, + "_shards": { + "total": 240, + "successful": 240, + "skipped": 0, + "failed": 0 + }, + "hits": { + "total": 113109351, + "max_score": 1.0, + "hits": [ + { + "_index": "crossref", + "_type": "item", + "_id": "10.26850/1678-4618eqj.v35.1.2010.p41-46", + "_score": 1.0, + "_source": { + "timestamp": 1540825815212, + "pid": "10.26850/1678-4618eqj.v35.1.2010.p41-46", + "blob": "eF69V9tyE0cQ/ZUpPXsvs9rVDSpVYIeKKSdc7OQhhIfRbksae2+emRUWFP+e07OSLYFNMFWEMiDP9HSf7j590afByavTwUwMZBwmo0kWR3I0ngTpSE7o+jJcD7NQhkmM2zaVOB4ciYG2tqMCjz4NCuUoaJVxFr++ewfByZGQ+Mnev/8MUTW3zqjcsYWnl8rZWfvLM3HdqVI75fSahG0bFziyTqi6EA7/UMUCtdtJqFqVG6utaBai0O3GNDUJXQu3IjHvyitRmG7Jj3HWrpSpVE6d07kqRWsI4GCoqa2AhtY0bWOpCMUFHi8ayPIda1bCUFFouwrWuinJ/dPFsYpF3pSNgeYC+oASYlCgPXJDtitdKE5rYem6ozonXB9Ah72cis6QyFUt5iRaMmyVPFh2wKoKQEplr3pMB897C3B87pSu8egDQZXlyFnvYLkBwAou8p12K6iEe3vy/RmJinDDRns/CjHfePPPjfqoS63qrbuv+/ghSqTVkeisrpde8Nx1BdWIClI8tWKbLVy8EJw8G4pjxFgXZHYv8gYBqZF9H2G4q4SMYwFDw3l+JsCA665xR177PiHW2oIeotSVdj7l5CjvdSD886ZzImO0xVjGwUgsn0A3SNZVMIZ3Z69OYCNJ0kzIML0VTEXV4DKQ4glE3uxE0vBO161I+DTaUpXZDg4t9M1+ifCp6hBQw6T/5D/DuGdIETQm11wcC1VaguQSXKn5+e/KuZWmjp8vVKXLDZ9edHNdN3y2IxGfLrSxzttZLDg/7D8be4+jV2+PT09YaOVcO4sibzBszDKK8SfA3ySQ08k4GE7j8QBVCIRfa7mF9QypCw8xPYe14itMCuXBOFS5Vfq9bhunxO/KaCVOOrQKEsfKrFW58hbuIvGXLtWXcdiz+ePBAGMnwTgejx6F+4zgqunDcAfyNX38+DNQDgOgHAfj4Wj6KJS/UUm1Em+p0Eu0qsOI/iywMsiyURrI0RBgmZIoEXQm1HuQN13N3T7G6en5+R9M2sHtSBmwcEXVnLh0BlIOp5lPedOZnPjo2DTWQp0/zRvDhzJkbQX5zrsdPE5XaDuqavk+S+NJMsySKbjPkjyUWIAV8kgK0CmS6YVMZ8NkFk//ZuX3Ty48T6b96EKvpJsHrWUTmSUy+Za1bCbjmcy+z5rbtB7uJSKBCgtQJzoviZG23bzEXOLWUpcYAxD778H759szVrdtEcVNWDTa94hHzfngNrFFMN8cJHfdlGi5bGPoU4iloA62XqAn7vwBPXOHia1zFkLVd/7NHSM8f+DWFY7x7hC3IUwDp0J9HXY12Tacm6i5tJHPTdiu2ogQJO680TZg0VrThxe6pEhOZSTTqcdWO8KLIlBtW3Kb7rvpwNGNCypdY2SxGCYW5FywJmO3Emv0+L2bnVd7eqK2WPQV+79CtxiPJXqqQ1ZWlF892oWuti3leqFBcZ+DHfP8duc5tvs0kD9GQ14AbwlkD9hjMTwdTjCywWiDanUgO/eKXzmhoXjT6SoUL0PfMXYV4JuGF0ASvQj//7Ivmf08FU0FvX2h7D762Zlze6mUuQKzsTRov1hAzg9rxgt6UG09lC/JmBvyKys2rgq7jq+mrbiN5psoDWPGAL4a7oCogYMeJbPpOE15RN/fo2IZyOwijmf+5xtd4267voew+2kFmIJKtQl0HRRqwyt67FPtPbm3tclxNo0nafIgyCSIkws5ZpBp8jBINMZk20a3dOpJdJfn89u9H0sjlqfFti791wCjWl0crtL9duQ0Vrz+CwHv83vfCDxRHiAUb4E03ZLG/1IcMMdzTC19Z0rl4PO/owMhhQ==" + } + }, + { + "_index": "crossref", + "_type": "item", + "_id": "10.18410/jebmh/2018/575", + "_score": 1.0, + "_source": { + "timestamp": 1541495459193, + "pid": "10.18410/jebmh/2018/575", + "blob": "eF6dVNtO4zAQ/RXLz02TlKa0fQslQFYlrXrRakEImcRpDUmctZ0KVPHvO5NQKKsu2903ezyey5kzZ0vPJyEdEuo6bbffdR37kT/ka7vjuH3bO/Voi1ChdcUTcNrShBlulUwZDdfbW/RqkUGLdLy7u1dwLRVPxfN+PAzAKrOWCn9sKUtTkQlmhCzQcAfPK7HheKG+2ogiwR8py0X2grYZy9Gg+c+KFzFHUyqUNvQVv0I6rtBuxbIqDLw6YA3n8wiD085Jd2B1vF4HQ7xdTh2KP3OeP3CsiZ6ednt1ClmpJsFISa0hdG2NpcKsbhsjJ7yUWpg3NIzIuTYsL/Hd67rdQdfr9Byn9kSk0AFTIE6W61pOb+H0h5437PRuMPhBOF23RXoNnIAGf/5jMq/rDdzByVfJBkPXGXqDo5KZl7Iu9hFwKFhmwZRFnHGss6weMqHXPLFkkYkC3f7OheVsjOHWxpRD206e24kUbalW9pdUs95HmlgPL5/GupFZ1eC5o2VhvRUNxNqVXyoBRICiNyyrGvTfWQAU/XDkGY+NkoWID3kDTWqGQbtPyKUt3etHQ0P1nrRjmdtMa260DcNk92WS2r5iyON7oO69dX8RRv64DXbMAqVxmGlisbLMRLxbA6oF8J0pYaDjNY+fRLFC91iiv7E2XOlmYegGFmnvZdd1VeiSxyIVwJa67o+RNYAcM7Hd5OuFr2e8O9Gu8988+OdKUEjeWaA/UUAqsRJITiMMUBN3PChWyM16qTXIjIEPhWHAUrXnVU+r9tmVU+/+mG94RpYlOas0/NCajABv0IU9iBOZQ7SG8rtjrVsxykTO1BNwVhsl4jdRS1mmOTYRKw4q0CjnQa3wjtIK76j1/W1UHwD5ZL5Ynv8gk4iMxmEUjvwxmc4mF+E4IH50Tq79yL8MroNoQSYXZOovQjjO8XwVzKbBnNxM5otgRibTq8WVP74OR8s5CSNyvpxd+tPlrEW+B/MFOQuiS39cQ3xoAN8aVSEyJcFGJKjZ5IxpnpBrnogYwCesSMgVZ5lZxww0tx4WWzUr3Hf6VqfvuvT1F2Qb/lQ=" + } + }, + { + "_index": "crossref", + "_type": "item", + "_id": "10.26686/lew.v0i0.1330", + "_score": 1.0, + "_source": { + "timestamp": 1543961469345, + "pid": "10.26686/lew.v0i0.1330", + "blob": "eF61Vu9v2zYQ/VcIoQU2wLIl+UdtY9iAdR3aIeuAOl2AFvlASyeLiURqJGVHC/q/7x1tZ07gdNuHAf4gU6e7d+/e3fE++um3d9FSRGkyzGaz+WxU0264TVQyTMfjJBqISDnXUQGb+6iQnuJWWu/w9/PndPEqGYgUv+vrL7CUa+etzD37++5Gerdsv7+sSLynnfhEspa6EI3SqukasZMbEhb+RCWdsJST9nUv6K4lq0jnVAgpXOe8VBrPfGoKYUqxsWbnK+Er6UVtzK0TjrzwRuRGe6U7Ep0uyMKARN5ZC7/iQq5NZ+MajjZmS1Y3OB2KlUIckSVJFqxl0dX+GYCwtCQdHKx7kc1fitKaRryYC86pgnNGcBoypAa4L5jY6VBcVgppKkdC6WD4iAjmwHQe9Km25dQBkgliltxA7CqVV/jwBEM6fSk4leDLyYYOFB0itRKMic6RCwanFXhrcFyZujjQIn42FjSsOrulPuSjvBPvdG7gdNW1bU1MFyeoCjyosn8MfmfsLVkXPi3I5VatiaMqi7+N2VjZAn94fWPWIq8kiwQFdV7lbohQgjWl8q6WdhDw7uHTnQRLSAGfaBBxpO6JB6b5EZtHQGvyOyK9rzCHR6lRil9PJXiwHRzJRJX2WhsIaaFQqqVXW4I0e9PpjfgmkC6h2roMFqhQIdJZnE1FT9K6bweitVQYIJJB0iU1siYUETQpeOBcY69ALkNiF7W65QAgGMRR09amh0/oRIoV2a3KkTrbruCHewWQ8N7kedcCnIEdF20vqw+EjqnDyVvjWuVlrXyPtwV6CZ0Fvn88RwvTDig7CFHi2RLFJWvkKLqjf4fqBWGHBuYwDo1t+5Aeq+CgEcUqdmfrcr4CHIDrI3aMw9VqUzF7wMB8I05jnlJ1ZBZKBakIuFOYDNzPZ0X1AL2RFkwUh8og4cagLmclVJhuzWODAZwwpJ/n5aybQ3HeYggCITt7bZqm01yahxIfatRjoOXe2OF3o8MM5SkMTZXq7nRS86nsfGUsD+P7SJalqlUQBB9c4/UGyuU/0S/S4RQnJTqq7vnoUjWA6vjQ0R8dj1w+LpV1PvrCXyMiSoHzOIf0eapj2kfvVqv37D/KJrNxnM2SJGLjhpo1MZIoTbNsEtxiLO6dvrbGObgLpznqCLt0yN4Kao1TkDNO7iPuCkz8puX308l4MV3MX02TJFjy7mEDjpEl6TxOsziZXGbpcjJZjqef2PmTBcVm2E7ZQEz2GwoU091zwWbpZLYYT6ZfC5Yt03SZLP5VMN+3AewNeNCyjsOMqylUE6pSrqIiNrrGiAvZ/8N2/fjhgr1V3rfL0ai4GxZGDY3djL62uuOHIhbxun9USOx1HR8wQj5HtFRDfdZolTPQray7PeMP1Q7aAOhboMF3J7AccJkbN8TEgn6VHMp8qP8cXby5Gh1yHxVmp2sjixHfLkZputhfMbQnVKaIJbaNyo8ajjzd+ZgbSm8YDG94LKAYE9jtVR5tof6TN8ckTvyM2qKMcDv5f5E6hb6SFv0c5xXlPOj/G+JOu5ZyVWIuPek+96hqDv3ucaLDxciiIzwkxf0ImkMnHrUVmvH3QynER41ZANowcDC8r6hGBTceu+NCrS3m9ylaLC8432vy+BjmSc59jOl5C1nxNskPw6aUtSO+AfIF5XwzZ+NFOklm8+eaOZnE6YybOXu1nMyf768J+nm2b+a/Uz9u9CveSVfHRaRPrz1LcVWZsG0xxvsfAlNnWQxXxYF4E9ZwuPjwuGanvKFOLlLR9Ze/AK09uI8=" + } + }, + { + "_index": "crossref", + "_type": "item", + "_id": "10.30707/etd2017.mckinnis.r", + "_score": 1.0, + "_source": { + "timestamp": 1544632883454, + "pid": "10.30707/etd2017.mckinnis.r", + "blob": "eF69VE1v2zAM/SuCz3FiO9++DdulWIoWSXtZkINi0wlRWdIkOYgR5L+PtNMCLdZtpwE2LNOk3uPToy+RbfYK/RFclIvoTinUBr3YBBlAPGs8gfMY2mggosLoADrEpaklakq/RG/L7Y4TnPG+lu4lduCDwyKg4bxKKg9XSvj2cMcoaTIcJ/NkPoJQZkk6H9bFC2qNfugYx0EFDnQBPi5MowOVJBQu4eAA6GUb3W8ixpNNOBrmvb1EsqpQobwhdnQORJ7hozWgUq1YyVYDA1SyRtXyl/viewfMUQ8/G0bleIXOh+jKuzyvVxw5hmDz0ag8D0uDQ+MOo790gd43UFIpqURaxla64JnrVjdK7Xasx1un7xotHFBBXxqwJillbakynU4ms3EynmZJ0gnC23IC8yMdF3Ga0fWUTvPpMk+zH9zVB2xOG4g047vngJ5O6yZ4Ge/bd1Sktc6cft8Gn9xALAciW/Y71VDvexulWTqbd5qaxvWKfmVvEBBHLT3xzKxfNexyC+O4lXTYn7Y1ZLz/J4Mu4fwpWrZYjCfTyZ9En+WTNM/G/yZ6wKB6K2+KI5QNTd1BrIEs73PxCKSZZSd78VCJVaOLozOmFpvGgjuhN84PxBNIKuXVF12KR4e6QCtVNxihtZ0pSjIhOBplnkOKo/aE3NyGhIaGJla3NbsyirtKq2R3Xq/vWvb2+vzHcL3+ApKoSns=" + } + }, + { + "_index": "crossref", + "_type": "item", + "_id": "10.5209/rev_esmp.2001.v17.n1.13", + "_score": 1.0, + "_source": { + "timestamp": 1502718217884, + "pid": "10.5209/rev_esmp.2001.v17.n1.13", + "blob": "eF6NlG9v0zAQxr+KlVcgNZmdpM2ftxsvJm2AGBMSo5rc+Lp5OHZkO2XTtO/OXdptFIrgXes73z1+7nd5TE4+nCYtSwTP5jlvjjxsriH0Q5ZzLrKNqDIrMlEkM5boEEZQmPyYKBkhHaSPAf9eXeVciBkTfMbK5fIJUwcPa33/S126H8bVHXSRbiTHru9HqzsZtbPJEqNyjLfOU/Axkeu1NnobwwMK3+gNWCp4Aisvqdxa9to80NEXCFEakzxRInYGD7aDtHOjpW4oKzm9uHg/NRZNXaf5ollQCSGKMhWLvJkU9NCvgBQkhVg0k2I3+g7o5Ni7ELD0dNo5T4cio8oKBhd03BkTdU9i+oHiZV4v8qqaN5xPmX+YNkfDyLcltZ/CdJ/6oaPzlKM4/pmLludt0XxNyFltFdwfajbneSXqXFR1jTUPNKtmrMZmOKEDzaqU16koP4uiLYu2qLbN4sMwqblDH6w0KQ5cdwbIhGFcGR1uQaXOGm0p7d9YXH46o3K3MQ7t0ZG6z5TTmfM3R/9FX/oyWpWuHvbGu3Fm3Bonqh2qNt2pR56e3zF4jUSg+o004/SyVwLQ3NdEMAiqdwjofvYLPBNqyv2wxkl1Pa2BmPOa13neNBmfl1WOCS+Cw57agKBHPLFRonMehx7RVKLzXYijytg52CDvgH0Er53KJjqfDZ8AvbS4Dj5oJRXDVRrMGPEKMAXsXCqvFXtzeXz+lsRTG7AxVa7HbtsxPf+cNqsjtHvpv6O/IXrdTSvZsrU0AQi5zgOiuV38Pb4LUdfzxaJEvA/zvfsoiOogcwLpTkVFzPGy5XwHOH1lptGQ+ldrziRzK9g+Wdu1tFEbBpYZyfBrg34xCIP8NnK+Fs7IybO/WqxdYMGtPDAwv7lNFUAFBN0ly6eflnaEwg==" + } + }, + { + "_index": "crossref", + "_type": "item", + "_id": "10.1345/1542-6270(2001)035<1096:rahcri>2.0.co;2", + "_score": 1.0, + "_source": { + "timestamp": 1502583760457, + "pid": "10.1345/1542-6270(2001)035<1096:rahcri>2.0.co;2", + "blob": "eF6dVG1r2zAQ/ivCn1qIUsmvsTcGIRttx7qWJGOwUoYiK7U6xzKS3CWU/vfdOUlLRtfCEn+wT/fo3p7nHoKPl+dBQQLOhjyKkxOexCFNw4wdhYzxYxYl7znL08KKSlr9IRyyoTTvwmBAAu1cp0oAPwSl8Iq2wnoHn9fXCB2Q/ObmEdxaq5Z6vY/BswyxrlvcKenRO7iqhF0JaWpzuyFHK1VqKerj4AbcROcrY9HrIRDLpa618No0aMDjW32v8CO4MJUAIBnj3Uux0vUGzZcrYQPI4XXwZ4A6cnUI/a5rB4HeBM8FxBBkdoiemHXwiBlC7cqqRioqTddgvQys57PZ1750zlJGWThiCH9qfV/6Sq0WCksPeJb3LTOdlQoNE2ucg5t7qzQWjXyIF5eqNU773VS8hsK8WLV4HoejNIyilMEPPf+eGE8GJO6Htj9FOIYLGU8oiynL52FUxHkRsh/YmEA3pVq/FCthYTKKspTFSfZiLLCOBoRHLwbLKBtRHs0ZK8KwiHfB/Kbts7mDNjSipkA2LWuFPfg2/YInlfdtcXJSroel0UNjb0/+i9T0aWYlXWye5ga9Ce5N3W17EiUYGBTQ0F1iwNB9iq3VMGr0F3XXJ/08555Qe0dVgwasabQ89N5rcMuh0vxuaiPKn726eMJG+A/5cJSDZHOI03aLWrtKlXQb+i1JPlXoDmi5v6Zn3Wx8+olc4cWy15zDFKVpvGo8Lc1KaFQeSH//2itSIjVBEb+gi85bLXdyXYraKeSMtAqYt90aB/xkcZamuDj+wU8WDQg8PH6JMyyi8PB4zrOCR0XItwT12gNDUGjTSiwg042pN047IpqSnF2c0okZk6kqO+mFU+S8qfRCe2PddvnUXgHVPCwZqjFj1OvrW3I6PptMz/stObmELdm3BHoGzVKWPqczrxQZN0BjR8yS7Begr5QV7aZHteJ2x5w8pZyzLHj8A8nNo4g=" + } + }, + { + "_index": "crossref", + "_type": "item", + "_id": "10.15707/disem.2015.26.3.002", + "_score": 1.0, + "_source": { + "timestamp": 1502556112306, + "pid": "10.15707/disem.2015.26.3.002", + "blob": "eF6NVE1vnDAQ/SsWh54W1jYYA7eq6SHql9SkhzZZVcY2CQ1gBCbNKsp/74x3Nx/qVukFwczzm8fMG99HJ19Oo4pEjCZMSCrXpp1tn3DKRMLzJE0o5dGKRO08L9YA8j4yytt4VJOf4fPiAqErUmw2DwAbJ9u0d88J8bBa/LWbEH0fqaZpu1b51g0Y2EC6UX3bbfHQdzVcrciZczfxJ2sjYHzlwOWiC5pdLnVqSniXUv/fIckpwEuNz5yy6AF1gHY72UHbWLtl8CCIQvT07OwzKo1YKfM4KySLENzbvrb4T1GeAQFEZrdM2mLk3eTmGdhCVLsJgyxBMmNHN7d+30nf9nb2qh8xn4mC84yXOaUB+VeX8xVJV4TJDZYPaTyP9WAEeUzTmMlzllWsqFj+A/sQtYOxd8eKCcqFyBnjKQXaI8UkjBSK8aPFZEyLmPFzllcZqwTfFfPbMaj5BX0YVBeDQ1rdWWzCt68fMXPt/Vit1+YuMa5N3HS1ft128eNUTFxvX0zm1nXLvgFi79Eh3qsApx30jFMLwwQVt6pbgsKnSYa5G/d76JwyP4OjmaAFlTCGLEmLXHAGiHGpu3a+tibekb22Bo+a5xeCZ9gCD5HBq3awE8zPQ3/QW7B1qoa98Fvbj53b9hYko7ZD5eC0D2AlRd4/IsjbK7DrljRuIv7akhNk6axZP4Oc2FvbuREJyekwQ8nFh5mgDAjGxvWgBuhhsw+vYS01urhX0w2MYPZTq/c726hutuguDWqOWzmjAjv4TyvjhbEiPD/qLoHu4vk5LStKK3qwMl5A2IQUxT91Drde6cvF5AKetW7gNtCFhMVWuhEQF6IkT7tucOMLhtBUA1RpSjEtFWC1yDEtZYFPUWBCaEjUdYq0nEHCiAKuGiDXmGaBymYhrTII1aWGEEhghxpaGKxR1w3yWgHPmpeIxbsHGZUgFXwqbcOFpPAuKxqkgcvliDzEGszXBf61lmXQvVO8k8+NwZpBmTIC8nUpg+SSQU3NbTiY7kmC2Y45M3gqOJO8eWa9nTnV1W4kIs7K6OEPZADnVg==" + } + }, + { + "_index": "crossref", + "_type": "item", + "_id": "10.2202/1234-1234.1004", + "_score": 1.0, + "_source": { + "timestamp": 1502749524652, + "pid": "10.2202/1234-1234.1004", + "blob": "eF6VVGFP2zAQ/StWPuxT09pO0ib5yhAwsYFWpklD1eQmbmNw7Mh2gArx33fnliEm2DSpSpPz+d7zu3d+TD5enCU1SRidck75jPEsT/ExZZTmyYQkyvtRtpDzmLQiyHQQLnj4vL7mlC4mhMFvtXqCzMHJjXo4VGMFK3C7H9c3sgm4IVnaRllttzsiTEsurVZBNUKTZaOkaSSmn4v7ZAX/YgyddbjrMRGbjdJKBGUNBnB5q+4kfiSfRq0kOepU2u1igY3old7h0nK8TZ4wGWhJhwBpY0eDVChEz5bLL5EVq7Iy5UVeROBe9muJwEm2iOf3dnTADQJHznoPxWK0sQ6DbIq1WjlYr8JBpqB66YPoB1zPqzzL5gsQl8bMPyVkIGExIdUKweMqbkc4TtkipUVKqyuW1RmvKf+RoM7KtPLhLayC8kVeFTyfF/w9rBLalb8HVqYsv+K85kXN8z1Y2A2RzQ3IYIROofuq0VHqYVxr5TvZptZoZTDtnx759vUcq3UhDPVs1j5MW6um1m1nfzNg+ruDbbreverindXjXi52MKtJD5TBOc/kpQYLOmtUg0l3Qo/xTC+djz5p7b3RVrQ/o79ZQUtazvN5OZ1nOSugTy9O8q9IeLBqgIgJAmRw0MEACqG3wM7kAzkOnWo8sRtyOvbCkK9q2wEGYj5rGB33XeggHWklOXHjDl9P+vUpUsba0oS0tT1A7IV+fo0D0aA3e+FuQSsfnGoO07IR2ks0TeMkmGs/x68MyhYFzXlWVu8YFGc8mxBevmUaCg7NUl5eUVpnVZ1XB4finREVRvIvchzDOWyvGnIxDCDZaOACkD7eBqGT5NLZAI2COUetPitjnQo7ci7MdhRbuVfs/2V++gUcDnPL" + } + }, + { + "_index": "crossref", + "_type": "item", + "_id": "10.2202/1234-1234.1006", + "_score": 1.0, + "_source": { + "timestamp": 1502749524653, + "pid": "10.2202/1234-1234.1006", + "blob": "eF6VVF1r2zAU/SvCD3uqEkmWEsdvYxttofsg6RishKHYSqJOloIsdw2l/333KmlLR7sxCI59dHXP8blHvivefz4valJwNhKCiTEXpaR4GXHGJsUJKWzfD6aFmrui1cnQnY6ph8erK8HY9IRw+C2X91C5i2Ztb4/duOIKt/fD6to0CTcUi9DY4MJmT7RvyZfgbLKNdmTRWOMbg+UX+lexhH89pG2IuOuu0Ou1dVYnGzwCuLyxNwYfircOQADWurNuj8iZjsYV91gFekzEzrQJg0cNDNDzxeJTlsNnZUWFkiozdqZbGWQsyqnMysMQQRQA72Loe2iW0SZEBPkIe7VmF3qbjv4k25k+6W6H63ImS8lLMInlyj+94+CdOiGzJZLnVdyOdILxKWWKstkll7Wsasm+F2iw9a25fYlLMTGVMyXkRJWvcVUwJ/kaWUW5vBSiFqoW8kCW9rus5hps8NpRGLttXB7Sblg5229NS4N31mPZP8PxdX6B3bYp7erxuL0dtcGOQtyM/5Y8+jjBlq72z6Z4E9xwsIsfU+rpUTJE5kG8cZC9GLxtsOhGuyG/09Pkc07a8Mu7oNsfOdhcsYpVEzmpRpNSqukEKh519M9E9JDRBIhPGmyIMMEEDmG2IMfkDfmQtrbpSViTs6HTnsztZgscyPngYU7cN+2SiaQ15DQOe7w97VZnKBl7G59oGzqgOBj9cJtPQoPZ7HT8CV71KdrmeEzW2vUGQ9NEA+E6HOBnAeVTxaSQTL0SUDzckCZRvRQaBgktqaguGYN41kwdE4ofi+wwin+yY242g4MT7DfkY2hB6J7ODQAGPgNRg+bGHGz5fy/vfwMeHmcs" + } + }, + { + "_index": "crossref", + "_type": "item", + "_id": "10.5433/1980-511.2008v3n1p107", + "_score": 1.0, + "_source": { + "timestamp": 1502757844220, + "pid": "10.5433/1980-511.2008v3n1p107", + "blob": "eF6NVNtu2zAM/RXBz7Ej2Vac+G1r91Cg2IpegGFdMCiWkmqTJU+Ss17Qfx9pJ72h7fZgQKYoHvLwkHfJ4ZejpCYJoxkvi2LKFnOacsaynNL5trCsY7RKJiTRIfRKgutdIkVUaSd8DPB7eYmeE1JNCOPL5T24dl6t9fWTqPhe9PHKeXxwl4j1WhstonYWDUu43uitwp/kwOsQtbCOfPQ6Ony6Fq02N3h5rG0gBy5EkQDQ+4E+WOm/95SqBTl3RskXoU6d9HrTq9vkHvEhZeWVbVTauN5GAKNgPTo7+4wZJntavibo3Kp2pbCWpOCcY4rB9b5RY/4uBIg2WBvn0cgyDCZV54KOOxKjbhXU0XZ4X7JZnlcMmKSD50uCWQnsMviqJeIP9xgAAXPKypSxlFXnLK9zXuf0G7KTaCvV9WtonOYVr+Zlmeevo0EvoaPYzlfAqpTOU8bPKa3LsqblCBZvuiGbn0CEFSYFdejGKGSh61dGhyslU2eNtuj2bw1dnB5juKsYu3o6ldeZdDpzfjP9D6GmD82U6ermWUO3zvQjbcVO1DbdpQ663BehjGqid1Y36LQVph9qexTBIBnp/ljjhPwxzAHjdE7nszmbZbSYFXwGHg95hGdJBBiECBYbBdDhoZMRmEKZnaptRg61z8gJkta4QW57AgfFXViYFB+0FFKRT6Ag2QtD4HzsQPDaCkwZYysbU+lagBgJ3x+HcWs8qLQV/hdwFaLXzW4W18IEheJpvAKRjfP+TKrFgi/yGePsHakWE5K/pVRapDkotagZrznbKRV3y8AwJv9Ix8FugCUsAixRtzBBcAxu5RXpvJN9dIGA0HssQhh9KyQYwNOGvoVT41oizLAG5O/eRUFulR9ZfYN/2D6CSIddUAh7go/X4kk3xGbMFfbi/V9eupFL" + } + } + ] + } +} diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/s.json b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/s.json new file mode 100644 index 000000000..a201d51a0 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/crossref/s.json @@ -0,0 +1,4 @@ +{ + "scroll_id": "DnF1ZXJ5VGhlbkZldGNo8AEAAAAAAAJmBRYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAAByUWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAckFmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAAHPBZrdjMxVmw2R1JicURDbHdrRHo0Q1VRAAAAAAAABykWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAcqFmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAAHKBZrdjMxVmw2R1JicURDbHdrRHo0Q1VRAAAAAAAABycWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAc6Fmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAAHJhZrdjMxVmw2R1JicURDbHdrRHo0Q1VRAAAAAAACZgcWM2xZTUt5OWtUaE9kRFZFb2JYRnlCUQAAAAAAAAcrFmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAJmBhYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAACZggWM2xZTUt5OWtUaE9kRFZFb2JYRnlCUQAAAAAAAAjjFmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAAHLRZrdjMxVmw2R1JicURDbHdrRHo0Q1VRAAAAAAAABywWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAcvFmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAJmCxYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAABz0Wa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAcuFmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAAI4hZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAACZgkWM2xZTUt5OWtUaE9kRFZFb2JYRnlCUQAAAAAAAmYPFjNsWU1LeTlrVGhPZERWRW9iWEZ5QlEAAAAAAAAHMxZrdjMxVmw2R1JicURDbHdrRHo0Q1VRAAAAAAAABzAWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAc0Fmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAAI5BZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAAABzEWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAcyFmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAAI5RZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAACZg4WM2xZTUt5OWtUaE9kRFZFb2JYRnlCUQAAAAAAAAc1Fmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAJmERYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAABzYWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAmYSFjNsWU1LeTlrVGhPZERWRW9iWEZ5QlEAAAAAAAJmDBYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAABzcWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAjmFmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAJmExYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAACOEWaXNrV3hWNXZUNUtjLVVYNDVoRFZvQQAAAAAAAAlVFkR4bkItaG5ZUzhXVWFrVnlDdks3WlEAAAAAAAAJUhZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAAACVEWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAmYKFjNsWU1LeTlrVGhPZERWRW9iWEZ5QlEAAAAAAAAJUxZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAAACVcWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAmYNFjNsWU1LeTlrVGhPZERWRW9iWEZ5QlEAAAAAAAAJURZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAACVQWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAAlWFkR4bkItaG5ZUzhXVWFrVnlDdks3WlEAAAAAAAAHOBZrdjMxVmw2R1JicURDbHdrRHo0Q1VRAAAAAAAABzkWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAc7Fmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAAI5xZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAACZhAWM2xZTUt5OWtUaE9kRFZFb2JYRnlCUQAAAAAAAAlSFnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAALIxY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACVoWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAmTOFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAAI6BZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAACZM8WVEdlbjFkaEVSdU9tcEJaU2FYX2RhZwAAAAAAAAjpFmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAJmFBYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAACVMWcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAskFjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAJWBZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAAABz4Wa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAptFjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAJk0BZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACOoWaXNrV3hWNXZUNUtjLVVYNDVoRFZvQQAAAAAAAAc_Fmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAAJVRZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAACyUWOUdGNk1zckRTN21CZDBxOEpFUGZjUQAAAAAAAAlZFkR4bkItaG5ZUzhXVWFrVnlDdks3WlEAAAAAAAJk0hZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACm4WMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAmTRFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAAI6xZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAACZhUWM2xZTUt5OWtUaE9kRFZFb2JYRnlCUQAAAAAAAAlUFnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAALJhY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACVsWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAAdAFmt2MzFWbDZHUmJxRENsd2tEejRDVVEAAAAAAAAKbxYyclYweFFkTlJVdTRGb3BhUjVBRTRBAAAAAAACZNMWVEdlbjFkaEVSdU9tcEJaU2FYX2RhZwAAAAAAAAjsFmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAJmFhYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAACVYWcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAsnFjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAJXBZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAAACVcWcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAApwFjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAJk1BZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACO0WaXNrV3hWNXZUNUtjLVVYNDVoRFZvQQAAAAAAAAlYFnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAAJWRZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAACygWOUdGNk1zckRTN21CZDBxOEpFUGZjUQAAAAAAAAldFkR4bkItaG5ZUzhXVWFrVnlDdks3WlEAAAAAAAAKchYyclYweFFkTlJVdTRGb3BhUjVBRTRBAAAAAAAACnEWMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAmTVFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAAI7hZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAAACykWOUdGNk1zckRTN21CZDBxOEpFUGZjUQAAAAAAAAlbFnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAALLRY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACV4WRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAAssFjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAKcxYyclYweFFkTlJVdTRGb3BhUjVBRTRBAAAAAAACZNYWVEdlbjFkaEVSdU9tcEJaU2FYX2RhZwAAAAAAAAjvFmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAJmFxYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAACVoWcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAsqFjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAJXxZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAACZNcWVEdlbjFkaEVSdU9tcEJaU2FYX2RhZwAAAAAAAAp0FjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAJk2BZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACPAWaXNrV3hWNXZUNUtjLVVYNDVoRFZvQQAAAAAAAmYYFjNsWU1LeTlrVGhPZERWRW9iWEZ5QlEAAAAAAAAJXBZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAACysWOUdGNk1zckRTN21CZDBxOEpFUGZjUQAAAAAAAAp1FjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAAKdxYyclYweFFkTlJVdTRGb3BhUjVBRTRBAAAAAAAACnYWMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAmTZFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAJk2hZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACV0WcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAleFnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAALLhY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACWEWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAAlgFkR4bkItaG5ZUzhXVWFrVnlDdks3WlEAAAAAAAAKeRYyclYweFFkTlJVdTRGb3BhUjVBRTRBAAAAAAACZNsWVEdlbjFkaEVSdU9tcEJaU2FYX2RhZwAAAAAAAAjxFmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAJmGRYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAACV8WcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAsvFjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAJYhZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAAACzAWOUdGNk1zckRTN21CZDBxOEpFUGZjUQAAAAAAAAp4FjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAJk3BZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACPIWaXNrV3hWNXZUNUtjLVVYNDVoRFZvQQAAAAAAAmYaFjNsWU1LeTlrVGhPZERWRW9iWEZ5QlEAAAAAAAAJYBZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAACzEWOUdGNk1zckRTN21CZDBxOEpFUGZjUQAAAAAAAmTfFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAALMhY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACnoWMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAmTdFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAAJYxZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAAACWQWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAAlhFnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAALMxY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACWUWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAAliFnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAAKexYyclYweFFkTlJVdTRGb3BhUjVBRTRBAAAAAAACZN4WVEdlbjFkaEVSdU9tcEJaU2FYX2RhZwAAAAAAAAjzFmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAAJZhZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAACWMWcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAs0FjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAJZhZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAAACWQWcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAp8FjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAJk4BZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACPQWaXNrV3hWNXZUNUtjLVVYNDVoRFZvQQAAAAAAAmYbFjNsWU1LeTlrVGhPZERWRW9iWEZ5QlEAAAAAAAAJZRZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAACzUWOUdGNk1zckRTN21CZDBxOEpFUGZjUQAAAAAAAAlnFkR4bkItaG5ZUzhXVWFrVnlDdks3WlEAAAAAAAALNhY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACn0WMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAmThFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAAI9RZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAACZhwWM2xZTUt5OWtUaE9kRFZFb2JYRnlCUQAAAAAAAAlnFnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAALNxY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACWgWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAAs4FjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAKfhYyclYweFFkTlJVdTRGb3BhUjVBRTRBAAAAAAACZOUWVEdlbjFkaEVSdU9tcEJaU2FYX2RhZwAAAAAAAAj2Fmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAJmHRYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAACWgWcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAs5FjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAJk4xZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAAB0EWa3YzMVZsNkdSYnFEQ2x3a0R6NENVUQAAAAAAAAp_FjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAJk4hZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACPcWaXNrV3hWNXZUNUtjLVVYNDVoRFZvQQAAAAAAAAs6FjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAJaRZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAACzsWOUdGNk1zckRTN21CZDBxOEpFUGZjUQAAAAAAAAlpFkR4bkItaG5ZUzhXVWFrVnlDdks3WlEAAAAAAAAI-BZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAAACoAWMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAmTkFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAAI-RZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAAACoEWMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAAlqFnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAALPBY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACWoWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAAqCFjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAAKgxYyclYweFFkTlJVdTRGb3BhUjVBRTRBAAAAAAACZOYWVEdlbjFkaEVSdU9tcEJaU2FYX2RhZwAAAAAAAAj6Fmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAJmHhYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAACWsWcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAs9FjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAJaxZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAAACoQWMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAAqFFjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAJk5xZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACPsWaXNrV3hWNXZUNUtjLVVYNDVoRFZvQQAAAAAAAAqKFjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAAJbBZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAACz4WOUdGNk1zckRTN21CZDBxOEpFUGZjUQAAAAAAAAlsFkR4bkItaG5ZUzhXVWFrVnlDdks3WlEAAAAAAAAJbRZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAAACoYWMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAmToFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAAI_BZpc2tXeFY1dlQ1S2MtVVg0NWhEVm9BAAAAAAACZh8WM2xZTUt5OWtUaE9kRFZFb2JYRnlCUQAAAAAAAAltFnBoOUROcnhqUkN5Rlh0aUtyT1dDd0EAAAAAAAALPxY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNRAAAAAAAACocWMnJWMHhRZE5SVXU0Rm9wYVI1QUU0QQAAAAAAAmTpFlRHZW4xZGhFUnVPbXBCWlNhWF9kYWcAAAAAAAAKiRYyclYweFFkTlJVdTRGb3BhUjVBRTRBAAAAAAACZOoWVEdlbjFkaEVSdU9tcEJaU2FYX2RhZwAAAAAAAAj9Fmlza1d4VjV2VDVLYy1VWDQ1aERWb0EAAAAAAAJmIBYzbFlNS3k5a1RoT2REVkVvYlhGeUJRAAAAAAAACW4WcGg5RE5yeGpSQ3lGWHRpS3JPV0N3QQAAAAAAAAtAFjlHRjZNc3JEUzdtQmQwcThKRVBmY1EAAAAAAAAJbhZEeG5CLWhuWVM4V1Vha1Z5Q3ZLN1pRAAAAAAACZiEWM2xZTUt5OWtUaE9kRFZFb2JYRnlCUQAAAAAAAAqIFjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAJk6xZUR2VuMWRoRVJ1T21wQlpTYVhfZGFnAAAAAAAACP4WaXNrV3hWNXZUNUtjLVVYNDVoRFZvQQAAAAAAAmYiFjNsWU1LeTlrVGhPZERWRW9iWEZ5QlE=", + "size": 100 +} diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/mag/invertedIndex.json b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/mag/invertedIndex.json new file mode 100644 index 000000000..0a84e330d --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/mag/invertedIndex.json @@ -0,0 +1,334 @@ +{ + "IndexLength": 139, + "InvertedIndex": { + "The": [ + 0, + 23, + 47 + ], + "invention": [ + 1, + 53 + ], + "discloses": [ + 2 + ], + "a": [ + 3, + 10, + 71, + 81, + 121 + ], + "treatment": [ + 4, + 69, + 85, + 96 + ], + "method": [ + 5, + 24, + 49 + ], + "of": [ + 6, + 9, + 19, + 57, + 84, + 117, + 120 + ], + "waste": [ + 7, + 118 + ], + "mash": [ + 8, + 119 + ], + "cane": [ + 11, + 122 + ], + "sugar": [ + 12, + 123 + ], + "factory,": [ + 13 + ], + "belonging": [ + 14 + ], + "to": [ + 15 + ], + "the": [ + 16, + 26, + 52, + 55, + 66, + 93, + 115, + 135 + ], + "technical": [ + 17, + 48 + ], + "field": [ + 18 + ], + "industrial": [ + 20 + ], + "wastewater": [ + 21 + ], + "treatment.": [ + 22 + ], + "comprises": [ + 25 + ], + "following": [ + 27 + ], + "steps": [ + 28 + ], + "of:": [ + 29 + ], + "(1)": [ + 30 + ], + "pretreatment;": [ + 31 + ], + "(2)": [ + 32 + ], + "primary": [ + 33 + ], + "concentration;": [ + 34 + ], + "(3)": [ + 35 + ], + "cooling": [ + 36 + ], + "sedimentation": [ + 37 + ], + "and": [ + 38, + 45, + 62, + 80, + 86, + 114, + 134 + ], + "dense": [ + 39 + ], + "slurry": [ + 40 + ], + "drying;": [ + 41 + ], + "(4)": [ + 42 + ], + "secondary": [ + 43 + ], + "concentration": [ + 44 + ], + "drying.": [ + 46 + ], + "disclosed": [ + 50 + ], + "by": [ + 51 + ], + "has": [ + 54 + ], + "advantages": [ + 56 + ], + "small": [ + 58 + ], + "investment,": [ + 59 + ], + "simple": [ + 60 + ], + "equipment": [ + 61 + ], + "easiness": [ + 63 + ], + "in": [ + 64, + 132 + ], + "popularization;": [ + 65 + ], + "product": [ + 67 + ], + "after": [ + 68 + ], + "is": [ + 70, + 91, + 98, + 102, + 112, + 130, + 137 + ], + "high-quality": [ + 72 + ], + "high": [ + 73 + ], + "value-added": [ + 74 + ], + "(fully": [ + 75 + ], + "water-soluble)": [ + 76 + ], + "potassium": [ + 77 + ], + "humate": [ + 78 + ], + "product,": [ + 79 + ], + "new": [ + 82 + ], + "mode": [ + 83 + ], + "profit": [ + 87 + ], + "enabling": [ + 88 + ], + "sustainable": [ + 89 + ], + "development": [ + 90 + ], + "realized;": [ + 92 + ], + "environmental": [ + 94 + ], + "protection": [ + 95 + ], + "effect": [ + 97 + ], + "good,": [ + 99 + ], + "water": [ + 100, + 106 + ], + "balance": [ + 101 + ], + "realized": [ + 103 + ], + "through": [ + 104 + ], + "final": [ + 105 + ], + "quality": [ + 107 + ], + "treatment,": [ + 108 + ], + "real": [ + 109 + ], + "zero": [ + 110 + ], + "emission": [ + 111 + ], + "realized,": [ + 113 + ], + "problem": [ + 116 + ], + "factory": [ + 124 + ], + "can": [ + 125 + ], + "be": [ + 126 + ], + "solved": [ + 127 + ], + "fundamentally;": [ + 128 + ], + "energy": [ + 129 + ], + "saved": [ + 131 + ], + "operation,": [ + 133 + ], + "feasibility": [ + 136 + ], + "high.": [ + 138 + ] + } +} \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/orcid/0000-0001-6645-509X.compressed.base64 b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/orcid/0000-0001-6645-509X.compressed.base64 new file mode 100644 index 000000000..1b088e061 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/orcid/0000-0001-6645-509X.compressed.base64 @@ -0,0 +1 @@ +H4sIAAAAAAAAAO1a227bOBB9z1cIepd18SW24aho0wTbAgEWjRdY9I2RaJtbSdSSkhP165eURIm6kHa2SbCLNkBiWDxzhhxyZg7tbN49xZFxhIQinFyZ7sQxDZgEOETJ/sr8Y3trLU2DZiAJQYQTeGUWkJrv/IsNgQEm4bp6MVKQHa5M22E/Fvt1rcViNrfmzupP02AOErpGSQZJAqIr85Bl6dq2Hx8fJ5gEKGR/93ZCbYEQFjDMA5CV01KZNBBhEyKaoSTQW0mgxg6mbCUgg6HGrMEIK5wdILESEEO1VYsRVjGMH1i8DyhVW7WYJhqEYKKJBB8W2ADHsS4A1bhAV1uoRlfjAp2yaWG2S1YIM4AiqrbrIwXDN1g8ah3WgGblMbPWrJwPN9in6gxZKIRJhnYI6mI2BAueXZ5UGaCyrQFNVAjcQcISB+oC0oKEHQhDAqnGpga0WXRE7ABaKaZIf8j7SMHAIvtNbcVHBfLA0gSTQg2uAe0+pREuYhZK3WYJjLD6OwcRC/2pTO/AhC2F5IgCTfLVgO7ZPXVim71hFYLFEOm2tMW02UQhIAFP+pxojm0X186QvSfwiOCjbpoNSNg95JFmV/lof36MgOKc6KI3gJr+hcF+NlX9WJdgKXmqURmRE+RzdsroW+qRLrGxJYsBDe8uvs6qBAzMDphmfuO2AZePq4XY2pVspISVM1zyJCMiHIAI+jDZ2COPa4dayk2dUSL1JEdiJCCwTAErhtkBh/5d2SiskonAcGOrgEMqmj/EiPK+b4Wsq/me464sZ2l53tadrmeLtXc58ZbLry1n32IQ8QjQzIqZeGBBDAWrx7Ztbrnu1puu59P11JksPfdrE/sRm5FlRwDFMPQzkkNpjfXTIZ4Jmoqv7A49s96gxjolKAak0LN0QfU+j+7kpiowdR3SiCZRieSTVplyIWEcEUUPKEIZK85p/hChwKzJxgRYSyJvVXk+2k0abv187rWb1EGP8o1u/QlW3dZLi24lxHqPjjAp1RT1twgkRb4Z6IwO6ATfDsQoKkqs/xmBETIZ0e6GLW2H9LgVe5I2pLqNlmCmLTF120Ovq2gZe9AOa3lEK0Gl5ag0lWxZ6xAhWPSLEqJFJqhFnVB/WnuB6c59qNbG5J5+XSN44aTZ0+qlftg2eEkPWDSPecprY9Aqg2fUyZnlTLfObD2brZ3pZHm5OLNOStOUbjfaWMi47la3XM39Sh/VBqXkaWTfiWPXwFRMte7W0giMiqMvjbVkA7CKtb2yafkkmIpJ0ndaKhmn4uroZi1bF6niG2jCs2pRi1bx1kpdyyYwKg5+edESlABFP3zplOxPbk9wnnaHX9u9zC9VPjpEKZDjQAXYyooU+iFGzfwGg8+iO4Ioh77rTFzXWdnvr69v7u8nPCYTb7X0PNcZ9VNZPctRgknMjv53GBoZAQlF5Q2Wiz2zcQ8Cdu7oafct1/PmwDp1c1FiISyvSc9dOud4llMCoyrZWTHyKYx2o7Qd1PjJGTEbOYkjqJGjuOFJWqZy22XzzApwyG6qly67kCxWjnkqy+0WOSaWWe9LI1BYKAnhE1PNpj4lelqZp+XUmjpbz1szYTt3JjP38hyt3Od9raSXfVR19/TBqHBWEPHjr8192Wr8gl+RSJuzWi5nlrtyp+P3fJ2H3t1/yNS9++uoTn4eMGpsPztAvZCWd4Rrgillt/Q+XfcCoXGsAJXZkqEsOmOLK9g9K1CR9ZFdnBN+kzdu2WnNCTTuQEbQk3HNMp3VvlIXGnflZwfGDhPjI6y+FDC+wBQyJnbHMm7Ze0iMO3yElba7JTg2biIYZATzzzXSA4jwnoDYuEd7lvK0WZRmyhv71KLOb2oK9Hnn5YWam4ryVRqcytlbNznVPF690akcv1SzK/nPangq5An99W8jpIxKXSP4Gf2LlRI+CUAyFERQZJry+DZFuOyb1eeJ6pYjWxRM95fNrJlf+UQfpPPcVOsRS6nKxKebmxvjfXl+60V1x0fUyEBn9LS7rRfvP6rt64/GVlt3vnYXa8ebLJz5T6jt53ObB8OeLl2m2WZvJurP8fviav4cpz+BjF+4znzqzd3TMr5FvryMP5GBPyjjXyC/ZR+/ZPwvGd+Rzh8IQIl1jWOWVkyDf+L/PLMDATSuDyBJYGTdQ67DuYq/ZxUwg/vC+AAoq4fsyXuWtwVF1MA74+bIA/GFlwc2+BHSIgkOBCfoe1kvjC1OuYRPD4WBSi78DRq/szGu+H/p+ddqaiovb9bYVBN4veam8vj/l+6q0PwnNbu7OkOzy3bslxf3ZWNWPThpF4LC91or/va17gefq3e83v0GQZQdAkCgcZPsUQIhQcn+DW4NnbHyqwjxxaP2S0b/YmN3/tnSv/gH9+klwrUpAAA= \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/orcid/dataOutput b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/orcid/dataOutput new file mode 100644 index 000000000..54ed4adae --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/orcid/dataOutput @@ -0,0 +1,309 @@ +(10.1109/JPHOT.2018.2880319,[{"oid":"0000-0002-1473-2224","name":"zhong","surname":"chen","creditName":null,"errorCode":null},{"oid":"0000-0002-5739-2127","name":"Yue","surname":"Lin","creditName":null,"errorCode":null}]) +(10.1073/pnas.1816459115,[{"oid":"0000-0001-6260-4326","name":"Igor","surname":"Sokolov","creditName":null,"errorCode":null},{"oid":"0000-0001-6260-4326","name":"Igor","surname":"Sokolov","creditName":null,"errorCode":null}]) +(10.1016/j.mjafi.2016.05.007,[{"oid":"0000-0002-4342-6656","name":"Anoop","surname":"Sharma","creditName":null,"errorCode":null}]) +(10.1152/japplphysiol.00476.2016,[{"oid":"0000-0001-9039-0302","name":"Graeme","surname":"Zosky","creditName":"Graeme R. Zosky","errorCode":null},{"oid":"0000-0001-8355-7362","name":"Stephen","surname":"Dubsky","creditName":"Stephen Eric Dubsky","errorCode":null}]) +(10.1111/j.1365-2621.1995.tb09798.x,[{"oid":"0000-0001-6457-4044","name":"jose martin","surname":"yañez limon","creditName":null,"errorCode":null},{"oid":"0000-0002-7108-8447","name":"Orlando","surname":"Zelaya-Angel","creditName":null,"errorCode":null},{"oid":"0000-0002-9267-4621","name":"Jean","surname":"Martinez","creditName":null,"errorCode":null},{"oid":"0000-0003-3060-2638","name":"Juan Jose","surname":"Alvarado-Gil","creditName":null,"errorCode":null}]) +(10.1007/s10461-019-02391-1,[{"oid":"0000-0003-4375-7452","name":"Cathy","surname":"Reback","creditName":null,"errorCode":null}]) +(10.1039/C4TA03030C,[{"oid":"0000-0003-1615-5034","name":"Jihong","surname":"Yu","creditName":null,"errorCode":null}]) +(10.1016/0306-4522(89)90381-3,[{"oid":"0000-0002-7272-8370","name":"PAOLA","surname":"D'ASCANIO","creditName":null,"errorCode":null}]) +(10.1016/S0921-4526(01)00945-0,[{"oid":"0000-0002-5360-1008","name":"Tomasz","surname":"Nowak","creditName":null,"errorCode":null},{"oid":"0000-0001-5554-8178","name":"Pawel","surname":"Olko","creditName":null,"errorCode":null},{"oid":"0000-0002-1993-9320","name":"Michael","surname":"Waligorski","creditName":null,"errorCode":null},{"oid":"0000-0002-1993-9320","name":"Michael","surname":"Waligorski","creditName":null,"errorCode":null}]) +(10.1074/jbc.m312875200,[{"oid":"0000-0003-3631-2252","name":"Isabelle","surname":"Dugail","creditName":null,"errorCode":null},{"oid":"0000-0001-6577-9009","name":"Bruno","surname":"Feve","creditName":null,"errorCode":null},{"oid":"0000-0002-4502-3543","name":"Martine","surname":"GLORIAN","creditName":"GLORIAN","errorCode":null},{"oid":"0000-0002-1275-9861","name":"KHADIJA","surname":"EL HADRI","creditName":null,"errorCode":null}]) +(10.1038/nrc3802,[{"oid":"0000-0001-7427-4651","name":"William","surname":"Foulkes","creditName":null,"errorCode":null},{"oid":"0000-0001-7427-4651","name":"William","surname":"Foulkes","creditName":null,"errorCode":null}]) +(10.1186/s12974-018-1125-5,[{"oid":"0000-0001-5270-9888","name":"I-Chen","surname":"Yu","creditName":null,"errorCode":null}]) +(10.4997/JRCPE.2016.310,[{"oid":"0000-0001-7658-1209","name":"David","surname":"Burn","creditName":null,"errorCode":null}]) +(10.13140/RG.2.2.20772.48006,[{"oid":"0000-0003-2825-5884","name":"Abdelkader","surname":"Mezghani","creditName":null,"errorCode":null}]) +(10.1039/c8ay00816g,[{"oid":"0000-0002-5444-7276","name":"Torbjörn","surname":"Pettersson","creditName":null,"errorCode":null}]) +(10.2147/dhps.s6226,[{"oid":"0000-0001-8558-3396","name":"Mario Francisco","surname":"Juruena","creditName":"JURUENA OR JURUENA M OR JURUENA M F OR OR JURUENA MARIO OR JURUENA MARIO F OR JURUENA MARIO FRANCISCO OR JURUENA MF","errorCode":null}]) +(10.1007/s00415-004-0351-1,[{"oid":"0000-0002-2737-3662","name":"Gian Domenico","surname":"Borasio","creditName":null,"errorCode":null}]) +(10.1088/0967-3334/23/1/318,[{"oid":"0000-0002-3549-4309","name":"Gavin","surname":"Screaton","creditName":null,"errorCode":null},{"oid":"0000-0002-0124-5072","name":"Carlos-Augusto","surname":"Gonzalez-Correa","creditName":null,"errorCode":null}]) +(10.1111/aogs.13316,[{"oid":"0000-0002-1241-9875","name":"Lena","surname":"Liljestrom","creditName":null,"errorCode":null}]) +(10.1038/sj.thj.6200111,[{"oid":"0000-0001-6115-8790","name":"Felipe","surname":"Prosper","creditName":null,"errorCode":null},{"oid":"0000-0001-6115-8790","name":"Felipe","surname":"Prosper","creditName":null,"errorCode":null},{"oid":"0000-0002-9467-932X","name":"Maria J","surname":"Terol","creditName":null,"errorCode":null},{"oid":"0000-0001-9622-1649","name":"María del Mar","surname":"Tormo Díaz","creditName":"Mar Tormo","errorCode":null},{"oid":"0000-0002-7938-3950","name":"Jose A","surname":"Martinez-Climent","creditName":null,"errorCode":null}]) +(10.1021/jo052299f,[{"oid":"0000-0002-2419-0705","name":"Per-Ola","surname":"Norrby","creditName":null,"errorCode":null},{"oid":"0000-0002-2548-7025","name":"Mogens","surname":"Johannsen","creditName":null,"errorCode":null},{"oid":"0000-0002-2548-7025","name":"Mogens","surname":"Johannsen","creditName":null,"errorCode":null}]) +(10.1182/blood-2014-04-569392,[{"oid":"0000-0003-1680-5295","name":"X. Long","surname":"Zheng","creditName":null,"errorCode":null},{"oid":"0000-0003-1680-5295","name":"X. Long","surname":"Zheng","creditName":null,"errorCode":null}]) +(10.1194/jlr.M030049,[{"oid":"0000-0003-4488-7734","name":"Sander","surname":"Kersten","creditName":null,"errorCode":null}]) +(10.1006/jcis.1998.6070,[{"oid":"0000-0003-1407-6498","name":"Anna Luisa","surname":"Costa","creditName":null,"errorCode":null},{"oid":"0000-0002-7892-2836","name":"Carmen","surname":"Galassi","creditName":null,"errorCode":null}]) +(10.1002/ange.201707070,[{"oid":"0000-0002-2516-084X","name":"tao","surname":"xiong","creditName":null,"errorCode":null}]) +(10.1056/NEJMc1502191,[{"oid":"0000-0003-0893-9015","name":"David","surname":"Stoltz","creditName":null,"errorCode":null},{"oid":"0000-0003-1552-3253","name":"David","surname":"Meyerholz","creditName":"David K. Meyerholz","errorCode":null}]) +(10.1300/J017v21n03_01,[{"oid":"0000-0002-6132-5883","name":"Stephen","surname":"Butler","creditName":null,"errorCode":null}]) +(10.4028/www.scientific.net/SSP.227.47,[{"oid":"0000-0001-5648-222X","name":"Pawel","surname":"Rokicki","creditName":null,"errorCode":null}]) +(10.1002/1521-3935(20000801)201:12<1329::AID-MACP1329>3.0.CO;2-8,[{"oid":"0000-0003-4175-4741","name":"Zhiyuan","surname":"Zhong","creditName":null,"errorCode":null}]) +(10.1111/j.1365-2966.2006.11355.x,[{"oid":"0000-0002-1967-2849","name":"Sunil","surname":"Maharaj","creditName":null,"errorCode":null}]) +(10.1021/acs.jpca.6b01563,[{"oid":"0000-0002-5301-6730","name":"Stefano","surname":"Falcinelli","creditName":null,"errorCode":null},{"oid":"0000-0002-5301-6730","name":"Stefano","surname":"Falcinelli","creditName":null,"errorCode":null},{"oid":"0000-0003-1934-7891","name":"Piergiorgio","surname":"Casavecchia","creditName":null,"errorCode":null},{"oid":"0000-0002-3961-5710","name":"Astrid","surname":"Bergeat","creditName":null,"errorCode":null},{"oid":"0000-0001-5121-5683","name":"Nadia","surname":"Balucani","creditName":null,"errorCode":null}]) +(10.1017/S1431927608089332,[{"oid":"0000-0003-4670-4516","name":"Sónia","surname":"Simões","creditName":"Sónia Simões","errorCode":null},{"oid":"0000-0003-4670-4516","name":"Sónia","surname":"Simões","creditName":"Sónia Simões","errorCode":null},{"oid":"0000-0002-2894-771X","name":"Filomena","surname":"Viana","creditName":"F. Viana","errorCode":null},{"oid":"0000-0002-8486-5436","name":"Ana Sofia","surname":"Ramos","creditName":"A.S. Ramos","errorCode":null},{"oid":"0000-0002-8486-5436","name":"Ana Sofia","surname":"Ramos","creditName":"A.S. Ramos","errorCode":null}]) +(10.1063/1.1452737,[{"oid":"0000-0002-4041-7631","name":"Thierry","surname":"Visart de Bocarmé","creditName":null,"errorCode":null}]) +(10.1056/nejmp1014255,[{"oid":"0000-0002-9354-5389","name":"Salal","surname":"Humair","creditName":null,"errorCode":null}]) +(10.1007/978-3-531-19249-9,[{"oid":"0000-0002-3497-6947","name":"Jan W.","surname":"van Deth","creditName":null,"errorCode":null}]) +(10.1080/00397910903291129,[{"oid":"0000-0003-3602-7400","name":"Hayreddin","surname":"Gezegen","creditName":null,"errorCode":null}]) +(10.1002/lite.201400037,[{"oid":"0000-0001-8347-8496","name":"James","surname":"Kenar","creditName":null,"errorCode":null},{"oid":"0000-0001-8347-8496","name":"James","surname":"Kenar","creditName":null,"errorCode":null}]) +(10.1109/ICACCS.2017.8014639,[{"oid":"0000-0001-9570-1077","name":"Gadadhar","surname":"Sahoo","creditName":null,"errorCode":null}]) +(10.18632/oncotarget.4840,[{"oid":"0000-0002-5664-7781","name":"Brian","surname":"McStay","creditName":null,"errorCode":null}]) +(10.1016/j.palaeo.2010.12.015,[{"oid":"0000-0001-6088-3261","name":"Michael","surname":"Joachimski","creditName":null,"errorCode":null}]) +(10.1016/S0927-0256(97)00020-7,[{"oid":"0000-0002-0604-6590","name":"Ilja","surname":"Turek","creditName":null,"errorCode":null}]) +(10.1074/jbc.M111.222364,[{"oid":"0000-0002-5441-5709","name":"Khortnal","surname":"Delvecchio","creditName":null,"errorCode":null}]) +(10.1007/s00468-014-1099-6,[{"oid":"0000-0002-7441-2070","name":"Tingfa","surname":"Dong","creditName":"Tingfa Dong","errorCode":null}]) +(10.1055/s-0029-1241171,[{"oid":"0000-0003-2795-6013","name":"Alessandro","surname":"Mussa","creditName":null,"errorCode":null}]) +(10.1016/j.conb.2013.01.010,[{"oid":"0000-0003-3044-9565","name":"Jonathan","surname":"Britt","creditName":null,"errorCode":null},{"oid":"0000-0003-3044-9565","name":"Jonathan","surname":"Britt","creditName":null,"errorCode":null},{"oid":"0000-0003-3044-9565","name":"Jonathan","surname":"Britt","creditName":null,"errorCode":null}]) +(10.1061/(ASCE)CC.1943-5614.0000977,[{"oid":"0000-0003-1663-7535","name":"CHRISTIAN","surname":"CARLONI","creditName":null,"errorCode":null}]) +(10.1177/0146167211399101,[{"oid":"0000-0001-6060-8083","name":"Kristof","surname":"Dhont","creditName":null,"errorCode":null},{"oid":"0000-0001-5814-1189","name":"Arne","surname":"Roets","creditName":null,"errorCode":null}]) +(10.1007/s00441-005-1096-6,[{"oid":"0000-0002-0240-7416","name":"Wee-Ming","surname":"Boon","creditName":null,"errorCode":null},{"oid":"0000-0002-8085-0034","name":"Karen","surname":"Moritz","creditName":null,"errorCode":null}]) +(10.1080/01468039308204227,[{"oid":"0000-0002-5148-6624","name":"Miguel A.","surname":"Muriel","creditName":"Miguel A. Muriel","errorCode":null},{"oid":"0000-0002-5148-6624","name":"Miguel A.","surname":"Muriel","creditName":"Miguel A. Muriel","errorCode":null}]) +(10.1111/ijfs.14302,[{"oid":"0000-0002-5053-6378","name":"Mariana","surname":"Blanco Massani","creditName":null,"errorCode":null},{"oid":"0000-0002-5053-6378","name":"Mariana","surname":"Blanco Massani","creditName":null,"errorCode":null}]) +(10.1016/j.nanoen.2016.08.017,[{"oid":"0000-0002-4115-3287","name":"Xiaofeng","surname":"Li","creditName":null,"errorCode":null}]) +(10.1073/pnas.1402739111,[{"oid":"0000-0001-5933-6463","name":"Anselm","surname":"Enders","creditName":null,"errorCode":null},{"oid":"0000-0003-3922-6376","name":"Dan","surname":"Andrews","creditName":null,"errorCode":null}]) +(10.1128/JVI.01432-15,[{"oid":"0000-0002-9141-8001","name":"Markus","surname":"Cornberg","creditName":null,"errorCode":null},{"oid":"0000-0002-6993-4333","name":"Liisa","surname":"Selin","creditName":null,"errorCode":null}]) +(10.1097/PCC.0000000000001178,[{"oid":"0000-0003-3089-0318","name":"Sapna","surname":"Kudchadkar","creditName":"Sapna R. Kudchadkar","errorCode":null}]) +(10.3866/pku.whxb20001113,[{"oid":"0000-0002-6469-0376","name":"jingfang","surname":"zhou","creditName":null,"errorCode":null}]) +(10.1109/JSEN.2019.2912827,[{"oid":"0000-0003-4870-8473","name":"Fengde","surname":"Jia","creditName":null,"errorCode":null}]) +(10.1007/978-3-642-23430-9_65,[{"oid":"0000-0002-0663-3437","name":"Heppenstall","surname":"Alison","creditName":null,"errorCode":null},{"oid":"0000-0002-0650-6606","name":"Dianna","surname":"Smith","creditName":"Dianna M Smith","errorCode":null}]) +(10.3389/fenrg.2019.00056,[{"oid":"0000-0003-4222-6975","name":"andrea","surname":"saltelli","creditName":null,"errorCode":null},{"oid":"0000-0002-2625-483X","name":"Samuele","surname":"Lo Piano","creditName":null,"errorCode":null}]) +(10.1007/s00701-015-2639-6,[{"oid":"0000-0001-8914-5086","name":"Samuel","surname":"Lenell","creditName":null,"errorCode":null}]) +(10.4111/kju.2013.54.9.638,[{"oid":"0000-0002-7467-5954","name":"Jae Min","surname":"Chung","creditName":null,"errorCode":null}]) +(10.1136/eb-2015-102104,[{"oid":"0000-0001-6330-3314","name":"Paulo","surname":"Menezes","creditName":null,"errorCode":null},{"oid":"0000-0002-3403-5792","name":"Andrea","surname":"Silva","creditName":"Andréa Tenório C da Silva","errorCode":null}]) +(10.1016/j.compositesb.2016.03.046,[{"oid":"0000-0003-4867-1404","name":"Sergey","surname":"Vakhrushev","creditName":null,"errorCode":null},{"oid":"0000-0003-1929-032X","name":"Alexander","surname":"Naberezhnov","creditName":null,"errorCode":null},{"oid":"0000-0002-0830-272X","name":"Ewa","surname":"Rysiakiewicz-Pasek","creditName":null,"errorCode":null}]) +(10.1038/s41598-018-33547-z,[{"oid":"0000-0002-2080-1695","name":"Nadeem Ahmad","surname":"Sheikh","creditName":null,"errorCode":null}]) +(10.1016/j.ecl.2012.04.016,[{"oid":"0000-0001-8107-7947","name":"Ignacio","surname":"Torres Aleman","creditName":null,"errorCode":null},{"oid":"0000-0001-8107-7947","name":"Ignacio","surname":"Torres Aleman","creditName":null,"errorCode":null}]) +(10.4102/hts.v64i1.33,[{"oid":"0000-0003-3810-4190","name":"Ernest","surname":"van Eck","creditName":null,"errorCode":null}]) +(10.3233/JAD-2010-100675,[{"oid":"0000-0003-2298-615X","name":"Monica","surname":"Di Luca","creditName":null,"errorCode":null},{"oid":"0000-0003-4598-5563","name":"Fabrizio","surname":"Gardoni","creditName":null,"errorCode":null}]) +(10.1039/c3dt51431e,[{"oid":"0000-0002-0675-2057","name":"Balasubramanian","surname":"Murugesapandian","creditName":null,"errorCode":null},{"oid":"0000-0001-5221-9459","name":"Mrituanjay D","surname":"Pandey","creditName":null,"errorCode":null}]) +(10.1159/000356772,[{"oid":"0000-0002-8803-4496","name":"Takashi","surname":"Matsukura","creditName":null,"errorCode":null}]) +(10.1111/j.1469-8137.2011.03973.x,[{"oid":"0000-0003-4801-4412","name":"Julianne","surname":"O'Reilly-Wapstra","creditName":null,"errorCode":null},{"oid":"0000-0003-4801-4412","name":"Julianne","surname":"O'Reilly-Wapstra","creditName":null,"errorCode":null},{"oid":"0000-0002-9383-667X","name":"Mark","surname":"Genung","creditName":null,"errorCode":null},{"oid":"0000-0001-8249-8057","name":"Jennifer","surname":"Rowntree","creditName":null,"errorCode":null},{"oid":"0000-0001-6244-289X","name":"Brad","surname":"Potts","creditName":"Brad M Potts","errorCode":null}]) +(10.1103/physreva.78.021401,[{"oid":"0000-0002-1228-5029","name":"Michael","surname":"Martins","creditName":null,"errorCode":null}]) +(10.1109/tencon.2011.6129079,[{"oid":"0000-0003-2519-0130","name":"Mustarum","surname":"Musaruddin","creditName":null,"errorCode":null}]) +(10.1016/s0956-053x(01)00047-2,[{"oid":"0000-0002-5719-8076","name":"Michael","surname":"Frisch","creditName":null,"errorCode":null}]) +(10.1200/JCO.2005.04.3216,[{"oid":"0000-0001-8530-780X","name":"Claus","surname":"Garbe","creditName":null,"errorCode":null}]) +(10.1016/j.carbon.2018.04.084,[{"oid":"0000-0003-2149-4479","name":"Vincent","surname":"Chan","creditName":null,"errorCode":null}]) +(10.1037/0278-7393.28.3.497,[{"oid":"0000-0002-8868-7067","name":"Norbert","surname":"Schwarz","creditName":null,"errorCode":null},{"oid":"0000-0002-8868-7067","name":"Norbert","surname":"Schwarz","creditName":null,"errorCode":null}]) +(10.1039/c3ra47116k,[{"oid":"0000-0002-6626-0599","name":"Ying-Shi","surname":"Guan","creditName":null,"errorCode":null}]) +(10.1039/C8DT01469H,[{"oid":"0000-0002-2225-7072","name":"Hong-Bin","surname":"Luo","creditName":null,"errorCode":null}]) +(10.1088/1475-7516/2019/02/007,[{"oid":"0000-0002-4487-8742","name":"Miguel","surname":"Escudero","creditName":null,"errorCode":null}]) +(10.1109/DICTA.2009.27,[{"oid":"0000-0001-7782-1956","name":"Wojciech","surname":"Chojnacki","creditName":null,"errorCode":null},{"oid":"0000-0001-9612-5884","name":"Michael","surname":"Brooks","creditName":"M.J. Brooks","errorCode":null}]) +(10.1007/s11103-017-0629-1,[{"oid":"0000-0001-8226-0700","name":"Rose Adele","surname":"Monteiro","creditName":null,"errorCode":null},{"oid":"0000-0002-8553-0718","name":"Caroline","surname":"Kukolj","creditName":null,"errorCode":null},{"oid":"0000-0003-1882-1512","name":"Glaucio","surname":"Valdameri","creditName":null,"errorCode":null}]) +(10.1136/jnnp-2012-302993,[{"oid":"0000-0003-1258-5678","name":"Maeike","surname":"Zijlmans","creditName":null,"errorCode":null}]) +(10.1002/1521-3773(20000804)39:15<2707::aid-anie2707>3.0.co;2-m,[{"oid":"0000-0002-1443-8818","name":"Michael","surname":"Anderson","creditName":"Michael W Anderson","errorCode":null}]) +(10.1080/19401493.2017.1354070,[{"oid":"0000-0002-4248-6788","name":"Jérôme","surname":"Kämpf","creditName":null,"errorCode":null},{"oid":"0000-0002-1186-4299","name":"Clayton","surname":"Miller","creditName":null,"errorCode":null},{"oid":"0000-0002-1186-4299","name":"Clayton","surname":"Miller","creditName":null,"errorCode":null}]) +(10.1080/1062936x.2015.1032347,[{"oid":"0000-0003-4145-9590","name":"Ayako","surname":"Furuhama","creditName":null,"errorCode":null}]) +(10.1155/2016/9578308,[{"oid":"0000-0002-8874-1473","name":"Murat","surname":"Gunay","creditName":"Gunay M","errorCode":null}]) +(10.1016/j.gexplo.2015.09.011,[{"oid":"0000-0001-8503-4266","name":"Sérgio Benjamin","surname":"Baggio","creditName":null,"errorCode":null},{"oid":"0000-0001-7863-5071","name":"Léo","surname":"Hartmann","creditName":"Hartmann, L.A.","errorCode":null}]) +(10.1051/0004-6361:20053947,[{"oid":"0000-0003-3603-394X","name":"Christophe","surname":"Letellier","creditName":null,"errorCode":null},{"oid":"0000-0002-2746-5102","name":"Luis","surname":"Aguirre","creditName":null,"errorCode":null}]) +(10.1186/s12959-018-0180-6,[{"oid":"0000-0002-0936-1609","name":"Andrew","surname":"Kotaska","creditName":null,"errorCode":null}]) +(https://doi.org/10.1016/j.jct.2018.08.026,[{"oid":"0000-0001-8381-2466","name":"Jason","surname":"Calvin","creditName":null,"errorCode":null}]) +(10.1016/j.ceb.2010.04.009,[{"oid":"0000-0002-3329-9032","name":"Steven","surname":"Kosak","creditName":null,"errorCode":null}]) +(10.1002/asi.20042,[{"oid":"0000-0002-9989-6681","name":"Aboul Ella","surname":"Hassanien","creditName":"Aboul Ella Hassanien","errorCode":null}]) +(10.2105/AJPH.92.6.897,[{"oid":"0000-0002-8214-1776","name":"Kenneth","surname":"Warner","creditName":null,"errorCode":null}]) +(10.1016/j.foodhyd.2019.02.010,[{"oid":"0000-0002-4557-4580","name":"Diana","surname":"Gawkowska","creditName":null,"errorCode":null},{"oid":"0000-0002-8038-3050","name":"Jolanta","surname":"Cieśla","creditName":null,"errorCode":null},{"oid":"0000-0003-3323-4535","name":"Justyna","surname":"Cybulska","creditName":null,"errorCode":null},{"oid":"0000-0001-9395-1486","name":"Artur","surname":"Zdunek","creditName":null,"errorCode":null}]) +(10.1016/j.jbiosc.2019.03.005,[{"oid":"0000-0002-8601-6657","name":"Sachiyo","surname":"Aburatani","creditName":null,"errorCode":null}]) +(10.1016/j.idm.2017.06.004,[{"oid":"0000-0002-0946-2741","name":"Orou G.","surname":"Gaoue","creditName":null,"errorCode":null}]) +(10.1017/cbo9780511599194.007,[{"oid":"0000-0002-1683-4486","name":"Barry","surname":"Eichengreen","creditName":null,"errorCode":null}]) +(10.1134/S0006297915090060,[{"oid":"0000-0002-0530-4244","name":"Richard","surname":"Beckett","creditName":null,"errorCode":null},{"oid":"0000-0002-0530-4244","name":"Richard","surname":"Beckett","creditName":null,"errorCode":null},{"oid":"0000-0002-0313-7921","name":"Andrei","surname":"Chasov","creditName":null,"errorCode":null},{"oid":"0000-0002-0313-7921","name":"Andrei","surname":"Chasov","creditName":null,"errorCode":null}]) +(10.31229/osf.io/jdw7f,[{"oid":"0000-0001-7849-1282","name":"Adib Rifqi","surname":"Setiawan","creditName":"Alobatnic","errorCode":null}]) +(10.1016/j.proci.2018.06.150,[{"oid":"0000-0001-7058-6498","name":"Wolfgang","surname":"Polifke","creditName":null,"errorCode":null},{"oid":"0000-0001-5286-0756","name":"Matthias","surname":"Haeringer","creditName":null,"errorCode":null}]) +(10.3891/acta.chem.scand.39a-0411,[{"oid":"0000-0002-1061-7536","name":"Ingmar","surname":"Persson","creditName":null,"errorCode":null}]) +(10.1038/sj.ejcn.1601726,[{"oid":"0000-0001-8424-2864","name":"Agneta","surname":"Sjöberg","creditName":null,"errorCode":null}]) +(10.1093/brain/aww278,[{"oid":"0000-0001-8683-8741","name":"Arturo","surname":"Cardenas-Blanco","creditName":"Arturo Cardenas-Blanco","errorCode":null},{"oid":"0000-0003-1174-5983","name":"Julio","surname":"Acosta-Cabronero","creditName":"Julio Acosta-Cabronero","errorCode":null},{"oid":"0000-0003-1174-5983","name":"Julio","surname":"Acosta-Cabronero","creditName":"Julio Acosta-Cabronero","errorCode":null},{"oid":"0000-0002-2840-4678","name":"Matthew","surname":"Betts","creditName":null,"errorCode":null},{"oid":"0000-0002-5860-5921","name":"Peter","surname":"Nestor","creditName":null,"errorCode":null},{"oid":"0000-0002-5860-5921","name":"Peter","surname":"Nestor","creditName":null,"errorCode":null}]) +(10.1016/j.drugpo.2015.05.017,[{"oid":"0000-0002-9402-8682","name":"Judith","surname":"Aldridge","creditName":null,"errorCode":null}]) +(10.1088/1742-6596/340/1/011001,[{"oid":"0000-0003-1298-2120","name":"Vladimir","surname":"Sechovsky","creditName":null,"errorCode":null}]) +(10.1016/j.scitotenv.2019.06.168,[{"oid":"0000-0002-0543-2641","name":"Jordi","surname":"Garcia-Orellana","creditName":null,"errorCode":null}]) +(10.1007/978-3-319-05215-1_5,[{"oid":"0000-0002-6231-8415","name":"Siddhartha","surname":"Jana","creditName":null,"errorCode":null}]) +(10.1007/978-981-287-736-9_85,[{"oid":"0000-0002-7913-9712","name":"Oleg","surname":"Lupan","creditName":"Oleg LUPAN","errorCode":null},{"oid":"0000-0002-7913-9712","name":"Oleg","surname":"Lupan","creditName":"Oleg LUPAN","errorCode":null}]) +(10.1175/2009JCLI3061.1,[{"oid":"0000-0001-6935-4112","name":"David","surname":"Randall","creditName":null,"errorCode":null}]) +(10.3987/COM-05-10376,[{"oid":"0000-0003-3638-2517","name":"Tecla","surname":"Gasperi","creditName":null,"errorCode":null}]) +(10.1016/j.bbrc.2009.07.098,[{"oid":"0000-0003-1537-0437","name":"A. M.","surname":"Stalcup","creditName":null,"errorCode":null}]) +(10.1179/1753555713Y.0000000065,[{"oid":"0000-0002-0233-1407","name":"Pimpa","surname":"Hormnirun","creditName":null,"errorCode":null}]) +(10.1109/OCEANS.2018.8604762,[{"oid":"0000-0002-5734-2699","name":"Gregory","surname":"Murad Reis","creditName":null,"errorCode":null}]) +(10.1063/1.4963346,[{"oid":"0000-0002-7504-031X","name":"Lin","surname":"Gu","creditName":null,"errorCode":null}]) +(10.1016/j.jviromet.2014.06.023,[{"oid":"0000-0001-8276-1804","name":"MARGHERITA","surname":"PROFITI","creditName":null,"errorCode":null},{"oid":"0000-0002-8315-0316","name":"Sergio","surname":"Rosati","creditName":null,"errorCode":null},{"oid":"0000-0002-0344-3101","name":"Stefano","surname":"Nardelli","creditName":null,"errorCode":null},{"oid":"0000-0001-7883-1283","name":"Esterina","surname":"De Carlo","creditName":null,"errorCode":null}]) +(10.1590/S1678-58782011000500002,[{"oid":"0000-0003-1537-5430","name":"Mario Henrique","surname":"Macagnan","creditName":null,"errorCode":null}]) +(10.1080/17425255.2017.1290080,[{"oid":"0000-0003-4652-7089","name":"Michael","surname":"Durkin","creditName":null,"errorCode":null},{"oid":"0000-0003-4652-7089","name":"Michael","surname":"Durkin","creditName":null,"errorCode":null},{"oid":"0000-0003-4652-7089","name":"Michael","surname":"Durkin","creditName":null,"errorCode":null}]) +(10.1111/j.2047-6310.2013.00183.x,[{"oid":"0000-0002-0252-9923","name":"Thomas","surname":"Willis","creditName":"Thomas Andrew Willis","errorCode":null},{"oid":"0000-0002-0252-9923","name":"Thomas","surname":"Willis","creditName":"Thomas Andrew Willis","errorCode":null},{"oid":"0000-0002-4065-4397","name":"Charlotte","surname":"Evans","creditName":null,"errorCode":null}]) +(10.1098/rstb.2018.0138,[{"oid":"0000-0003-2308-2603","name":"Peter","surname":"Bossaerts","creditName":null,"errorCode":null}]) +(10.12660/GVCASOSV4N1N4,[{"oid":"0000-0003-2183-8112","name":"Pelayo Munhoz","surname":"Olea","creditName":"Pelayo Munhoz Olea","errorCode":null}]) +(10.1016/0306-4522(96)00157-1,[{"oid":"0000-0002-3525-4671","name":"Elek","surname":"Molnár","creditName":null,"errorCode":null}]) +(10.1016/j.jclinane.2018.12.004,[{"oid":"0000-0002-4776-3211","name":"Hiroshi","surname":"Otake","creditName":null,"errorCode":null}]) +(10.1098/rsta.1996.0131,[{"oid":"0000-0002-8781-6154","name":"Ekhard","surname":"Salje","creditName":"Salje","errorCode":null}]) +(10.1074/jbc.M113.526178,[{"oid":"0000-0002-7945-4050","name":"Jaime","surname":"Nagy","creditName":null,"errorCode":null},{"oid":"0000-0002-8302-6905","name":"Xiaolan","surname":"Zhao","creditName":null,"errorCode":null}]) +(10.1016/j.biomaterials.2009.08.014,[{"oid":"0000-0002-9774-7412","name":"Liam","surname":"Grover","creditName":null,"errorCode":null},{"oid":"0000-0001-6412-2371","name":"nicola","surname":"hunt","creditName":null,"errorCode":null}]) +(10.1016/j.physb.2011.09.063,[{"oid":"0000-0001-5768-0244","name":"Anne","surname":"Henry","creditName":null,"errorCode":null},{"oid":"0000-0001-7721-5091","name":"Erik","surname":"Janzen","creditName":null,"errorCode":null},{"oid":"0000-0003-4579-3529","name":"Stefano","surname":"Leone","creditName":null,"errorCode":null},{"oid":"0000-0003-4579-3529","name":"Stefano","surname":"Leone","creditName":null,"errorCode":null},{"oid":"0000-0002-7171-5383","name":"Henrik","surname":"Pedersen","creditName":"Henrik Pedersen","errorCode":null}]) +(http://dx.doi.org/10.1080/00958970412331295219,[{"oid":"0000-0002-3226-2959","name":"Magdi","surname":"Iskander","creditName":null,"errorCode":null}]) +(10.1166/sam.2012.1300,[{"oid":"0000-0002-0260-1059","name":"Haibo","surname":"Zeng","creditName":null,"errorCode":null},{"oid":"0000-0002-0281-3617","name":"Haibo","surname":"Zeng","creditName":null,"errorCode":null},{"oid":"0000-0002-0281-3617","name":"Haibo","surname":"Zeng","creditName":null,"errorCode":null},{"oid":"0000-0002-0281-3617","name":"Haibo","surname":"Zeng","creditName":null,"errorCode":null}]) +(10.2217/fmb.11.70,[{"oid":"0000-0003-4042-7466","name":"Grzegorz","surname":"Wegrzyn","creditName":null,"errorCode":null}]) +(10.1109/SIU.2008.4632665,[{"oid":"0000-0002-6335-459X","name":"AHMET","surname":"SAYAR","creditName":null,"errorCode":null}]) +(10.1002/sim.910,[{"oid":"0000-0002-1829-8664","name":"Noah","surname":"Rosenberg","creditName":null,"errorCode":null}]) +(10.1007/S12603-011-0071-Z,[{"oid":"0000-0001-7593-3081","name":"Jean","surname":"Woo","creditName":null,"errorCode":null}]) +(10.1364/PHOTONICS.2016.Th3A.11,[{"oid":"0000-0003-2418-8418","name":"Narayan","surname":"Krishnaswamy","creditName":null,"errorCode":null}]) +(10.1134/S0020168510050109,[{"oid":"0000-0002-2562-6427","name":"Nikolay","surname":"Kuznetsov","creditName":null,"errorCode":null}]) +(10.1128/AEM.71.8.4539-4547.2005,[{"oid":"0000-0003-0501-2556","name":"Martin W.","surname":"Hahn","creditName":null,"errorCode":null},{"oid":"0000-0003-0501-2556","name":"Martin W.","surname":"Hahn","creditName":null,"errorCode":null}]) +(10.1162/artl_a_00211,[{"oid":"0000-0003-0910-743X","name":"Tim","surname":"Taylor","creditName":"Timothy John Taylor","errorCode":null}]) +(10.1080/10934529.2015.1047675,[{"oid":"0000-0003-2020-9824","name":"Bogdan","surname":"Skwarzec","creditName":null,"errorCode":null},{"oid":"0000-0001-7900-6517","name":"Dagmara","surname":"Struminska-Parulska","creditName":"Dagmara Struminska-Parulska","errorCode":null}]) +(10.3109/16066359.2011.588352,[{"oid":"0000-0002-6792-916X","name":"David","surname":"Best","creditName":null,"errorCode":null}]) +(10.1007/s001090050204,[{"oid":"0000-0003-3051-1285","name":"Thierry","surname":"Calandra","creditName":null,"errorCode":null}]) +(10.1016/j.ajog.2007.10.519,[{"oid":"0000-0003-3159-6321","name":"Martin","surname":"Frasch","creditName":null,"errorCode":null}]) +(10.1111/phpr.12304,[{"oid":"0000-0001-6180-457X","name":"Douglas","surname":"Portmore","creditName":"Douglas W. Portmore","errorCode":null}]) +(10.2305/iucn.uk.2017-2.rlts.t22486174a22486850.en,[{"oid":"0000-0002-9847-2035","name":"Emma","surname":"Williams","creditName":null,"errorCode":null}]) +(10.3791/50878,[{"oid":"0000-0002-8699-6253","name":"Tessa","surname":"Durham Brooks","creditName":null,"errorCode":null},{"oid":"0000-0002-8699-6253","name":"Tessa","surname":"Durham Brooks","creditName":null,"errorCode":null}]) +(10.1007/s00340-009-3580-2,[{"oid":"0000-0002-2652-5134","name":"Ci-Ling","surname":"Pan","creditName":null,"errorCode":null},{"oid":"0000-0002-2652-5134","name":"Ci-Ling","surname":"Pan","creditName":null,"errorCode":null}]) +(10.1007/978-3-319-19216-1_38,[{"oid":"0000-0001-9922-0350","name":"Dariusz","surname":"Laskowski","creditName":null,"errorCode":null},{"oid":"0000-0002-1748-5070","name":"ŁUBKOWSKI","surname":"PIOTR","creditName":null,"errorCode":null}]) +(10.1007/s00192-017-3446-9,[{"oid":"0000-0002-9064-8454","name":"Katja","surname":"Stenström Bohlin","creditName":null,"errorCode":null}]) +(10.1088/0022-3700/13/6/001,[{"oid":"0000-0002-4357-6048","name":"Jacek","surname":"Migdalek","creditName":null,"errorCode":null}]) +(10.12776/qip.v16i2.67,[{"oid":"0000-0002-9155-189X","name":"Jostein","surname":"Langstrand","creditName":null,"errorCode":null}]) +(10.1016/j.ecoenv.2018.07.109,[{"oid":"0000-0003-0926-4849","name":"Galia","surname":null,"creditName":null,"errorCode":null},{"oid":"0000-0002-8857-4353","name":"Vladimír","surname":"Žlábek","creditName":null,"errorCode":null},{"oid":"0000-0003-3091-7824","name":"Sidika","surname":"Sakalli","creditName":null,"errorCode":null}]) +(10.1080/09585192.2013.870290,[{"oid":"0000-0001-8766-3314","name":"Andreas","surname":"Hirschi","creditName":null,"errorCode":null}]) +(10.1016/j.optcom.2010.07.033,[{"oid":"0000-0001-8387-8131","name":"Esteban","surname":"Vera","creditName":null,"errorCode":null},{"oid":"0000-0002-4834-7543","name":"Alberto","surname":"Lencina","creditName":null,"errorCode":null}]) +(10.1002/adma.201807383,[{"oid":"0000-0002-3042-0335","name":"Romain","surname":"Gautier","creditName":null,"errorCode":null},{"oid":"0000-0002-8671-0630","name":"Michael","surname":"PARIS","creditName":null,"errorCode":null}]) +(http://dx.doi.org/10.18561/2179-5746/biotaamazonia.v4n2p55-63,[{"oid":"0000-0003-2173-6968","name":"Marcelo","surname":"Moreira de Carvalho","creditName":"Carvalho M. M.","errorCode":null}]) +(10.1016/j.ehbc.2004.02.015,[{"oid":"0000-0001-7724-0668","name":"Eddy","surname":"Perez-Then","creditName":null,"errorCode":null},{"oid":"0000-0001-7724-0668","name":"Eddy","surname":"Perez-Then","creditName":null,"errorCode":null}]) +(10.1016/S0001-6519(08)75117-3,[{"oid":"0000-0001-5560-8097","name":"Francesc Xavier","surname":"Avilés-Jurado","creditName":null,"errorCode":null},{"oid":"0000-0001-5560-8097","name":"Francesc Xavier","surname":"Avilés-Jurado","creditName":null,"errorCode":null}]) +(10.1074/jbc.M409535200,[{"oid":"0000-0001-7811-7784","name":"Chihiro","surname":"Hisatsune","creditName":null,"errorCode":null},{"oid":"0000-0001-7713-9471","name":"Yukiko","surname":"Kuroda","creditName":"Yukiko Kuroda","errorCode":null}]) +(10.1063/1.98280,[{"oid":"0000-0002-1856-474X","name":"Brian","surname":"Skromme","creditName":null,"errorCode":null}]) +(10.1002/ajmg.a.37755,[{"oid":"0000-0003-3602-5704","name":null,"surname":null,"creditName":null,"errorCode":null},{"oid":"0000-0003-3602-5704","name":null,"surname":null,"creditName":null,"errorCode":null},{"oid":"0000-0003-4990-8784","name":"Anne","surname":"Trinh","creditName":null,"errorCode":null},{"oid":"0000-0003-4472-6893","name":"Stefano","surname":"Lise","creditName":null,"errorCode":null},{"oid":"0000-0002-1361-9174","name":"Caroline","surname":"Gorvin","creditName":null,"errorCode":null},{"oid":"0000-0002-1361-9174","name":"Caroline","surname":"Gorvin","creditName":null,"errorCode":null},{"oid":"0000-0002-1361-9174","name":"Caroline","surname":"Gorvin","creditName":null,"errorCode":null},{"oid":"0000-0002-3586-7654","name":"Sian","surname":"Piret","creditName":"Sian E Piret","errorCode":null}]) +(10.1002/jmor.10934,[{"oid":"0000-0002-5006-6679","name":"Miriam","surname":"Zelditch","creditName":null,"errorCode":null},{"oid":"0000-0002-5006-6679","name":"Miriam","surname":"Zelditch","creditName":null,"errorCode":null}]) +(http://dx.doi.org/10.1016/j.nucengdes.2010.12.007,[{"oid":"0000-0003-2653-3430","name":"Luca","surname":"Ammirabile","creditName":null,"errorCode":null}]) +(10.1016/S0009-2614(99)01368-8,[{"oid":"0000-0001-6672-2186","name":"Cleber","surname":"Mendonca","creditName":null,"errorCode":null},{"oid":"0000-0001-6624-8453","name":"Lino","surname":"Misoguti","creditName":null,"errorCode":null},{"oid":"0000-0003-2372-5509","name":"José Alberto","surname":"Giacometti","creditName":null,"errorCode":null}]) +(10.1038/ncomms2249,[{"oid":"0000-0002-1088-5565","name":"Santiago","surname":"Munne","creditName":null,"errorCode":null},{"oid":"0000-0002-8285-0222","name":"Shawn","surname":"Chavez","creditName":null,"errorCode":null},{"oid":"0000-0002-6487-1329","name":"Renee","surname":"Reijo Pera","creditName":null,"errorCode":null},{"oid":"0000-0002-6487-1329","name":"Renee","surname":"Reijo Pera","creditName":null,"errorCode":null}]) +(https://doi.org/10.1016/j.jclepro.2017.12.156,[{"oid":"0000-0003-4311-5185","name":"Hao","surname":"Zheng","creditName":null,"errorCode":null}]) +(10.1177/0022022112466590,[{"oid":"0000-0003-3764-3571","name":"Kenneth","surname":"Locke","creditName":null,"errorCode":null},{"oid":"0000-0002-4174-6955","name":"Guy","surname":"Curtis","creditName":null,"errorCode":null},{"oid":"0000-0002-4174-6955","name":"Guy","surname":"Curtis","creditName":null,"errorCode":null}]) +(10.3390/app8091453,[{"oid":"0000-0001-5102-0077","name":"Liu","surname":"Yuting","creditName":null,"errorCode":null},{"oid":"0000-0001-5102-0077","name":"Liu","surname":"Yuting","creditName":null,"errorCode":null},{"oid":"0000-0002-5578-408X","name":"Huanan","surname":"Liu","creditName":null,"errorCode":null}]) +(10.1063/1.3225247,[{"oid":"0000-0003-0574-1513","name":"Antonio","surname":"Garcia-Loureiro","creditName":null,"errorCode":null},{"oid":"0000-0002-6794-3893","name":"Manuel","surname":"Aldegunde","creditName":null,"errorCode":null},{"oid":"0000-0003-0973-461X","name":"Natalia","surname":"Seoane","creditName":null,"errorCode":null}]) +(10.1200/jco.2015.33.7_suppl.41,[{"oid":"0000-0002-2500-5030","name":"Julien","surname":"Boudon","creditName":null,"errorCode":null}]) +(10.1037/e592712011-023,[{"oid":"0000-0003-1574-585X","name":"Samuel","surname":"Posner","creditName":null,"errorCode":null}]) +(10.1007/s00605-013-0526-x,[{"oid":"0000-0003-2371-4818","name":"Ákos","surname":"G.Horváth","creditName":null,"errorCode":null}]) +(10.1371/journal.pone.0139754,[{"oid":"0000-0002-9109-0958","name":"Julien","surname":"Louis","creditName":null,"errorCode":null}]) +(10.1021/jp054948x,[{"oid":"0000-0002-2033-5284","name":"Victor","surname":"Climent","creditName":null,"errorCode":null},{"oid":"0000-0003-4751-3279","name":"Juan","surname":"Feliu","creditName":null,"errorCode":null},{"oid":"0000-0002-5231-8032","name":"Roberto","surname":"Gómez","creditName":"Roberto Gómez","errorCode":null}]) +(10.1155/2016/9828517,[{"oid":"0000-0002-2030-0356","name":"Ewa","surname":"Jasek-Gajda","creditName":null,"errorCode":null},{"oid":"0000-0002-4541-2864","name":"Ewa","surname":"Siucinska","creditName":null,"errorCode":null},{"oid":"0000-0002-8102-6039","name":"Malgorzata","surname":"Jasinska","creditName":null,"errorCode":null},{"oid":"0000-0002-8102-6039","name":"Malgorzata","surname":"Jasinska","creditName":null,"errorCode":null},{"oid":"0000-0001-7808-1101","name":"Malgorzata","surname":"Kossut","creditName":null,"errorCode":null}]) +(10.1002/pi.2097,[{"oid":"0000-0002-4375-5580","name":"Graeme","surname":"Moad","creditName":"Graeme Moad","errorCode":null},{"oid":"0000-0003-2849-229X","name":"John","surname":"Forsythe","creditName":null,"errorCode":null}]) +(10.1117/12.432956,[{"oid":"0000-0002-4209-1372","name":"Michael","surname":"Bakunov","creditName":null,"errorCode":null}]) +(10.2144/000114087,[{"oid":"0000-0001-8479-6269","name":"HERNAN GUILLERMO","surname":"HERNANDEZ","creditName":null,"errorCode":null},{"oid":"0000-0001-9175-3363","name":"Diego","surname":"Forero","creditName":"Forero DA","errorCode":null}]) +(10.1016/j.bcp.2015.08.003,[{"oid":"0000-0002-8247-9494","name":"Istvan","surname":"Czikora","creditName":null,"errorCode":null},{"oid":"0000-0003-3805-8868","name":"Rudolf","surname":"Lucas","creditName":null,"errorCode":null}]) +(10.1016/j.foreco.2016.08.036,[{"oid":"0000-0001-7999-1692","name":"Dugald","surname":"Close","creditName":null,"errorCode":null}]) +(10.2903/j.efsa.2017.4782,[{"oid":"0000-0002-4720-2940","name":"Margaret","surname":"Good","creditName":null,"errorCode":null},{"oid":"0000-0002-2634-3138","name":"Antonio","surname":"Velarde","creditName":null,"errorCode":null},{"oid":"0000-0003-2417-0787","name":"Søren","surname":"Nielsen","creditName":"Søren Saxmose Nielsen","errorCode":null},{"oid":"0000-0002-5904-8397","name":"Andrew","surname":"Butterworth","creditName":"Andrew Butterworth","errorCode":null}]) +(10.1002/ejoc.201300745,[{"oid":"0000-0003-0168-9295","name":"Emanuela","surname":"Licandro","creditName":null,"errorCode":null},{"oid":"0000-0001-9252-6218","name":"Alberto","surname":"Bossi","creditName":null,"errorCode":null},{"oid":"0000-0001-9252-6218","name":"Alberto","surname":"Bossi","creditName":null,"errorCode":null},{"oid":"0000-0001-9252-6218","name":"Alberto","surname":"Bossi","creditName":null,"errorCode":null},{"oid":"0000-0003-4063-1563","name":"Patrizia Romana","surname":"Mussini","creditName":null,"errorCode":null},{"oid":"0000-0003-4063-1563","name":"Patrizia Romana","surname":"Mussini","creditName":null,"errorCode":null},{"oid":"0000-0002-9540-9073","name":"SILVIA","surname":"CAUTERUCCIO","creditName":null,"errorCode":null},{"oid":"0000-0002-9540-9073","name":"SILVIA","surname":"CAUTERUCCIO","creditName":null,"errorCode":null}]) +(10.1038/s41431-018-0183-6,[{"oid":"0000-0002-4475-4117","name":"Simone","surname":"Baldovino","creditName":null,"errorCode":null},{"oid":"0000-0001-6133-9831","name":"Marcella","surname":"Neri","creditName":null,"errorCode":null},{"oid":"0000-0003-4187-8816","name":"GIOVANNA","surname":"FLORIDIA","creditName":null,"errorCode":null},{"oid":"0000-0001-9406-5734","name":"Paraskevas","surname":"Iatropoulos","creditName":null,"errorCode":null}]) +(10.1038/sj.ijo.0800401,[{"oid":"0000-0002-7916-4619","name":"Frederic","surname":"Fumeron","creditName":null,"errorCode":null}]) +(10.1080/10934529.2012.668029,[{"oid":"0000-0002-6255-1153","name":"David","surname":"Stuckey","creditName":null,"errorCode":null},{"oid":"0000-0002-6255-1153","name":"David","surname":"Stuckey","creditName":null,"errorCode":null},{"oid":"0000-0002-2880-708X","name":"Antoine","surname":"Trzcinski","creditName":null,"errorCode":null}]) +(10.1371/journal.pmed.1001427,[{"oid":"0000-0001-6857-8931","name":"Etheldreda","surname":"Nakimuli-Mpungu","creditName":null,"errorCode":null}]) +(10.1186/S13660-015-0787-0,[{"oid":"0000-0003-1769-2800","name":"Ke","surname":"Wang","creditName":"Ke Wang","errorCode":null}]) +(10.2174/157018011794578204,[{"oid":"0000-0002-8902-2876","name":"Gajendra","surname":"Raghava","creditName":"G. P. S. Raghava","errorCode":null}]) +(10.1016/j.jtho.2016.11.002,[{"oid":"0000-0002-3832-8744","name":"Chandana","surname":"Reddy","creditName":null,"errorCode":null}]) +(10.26502/jesph.96120058,[{"oid":"0000-0002-1942-7384","name":"Anahi","surname":"Aguilera","creditName":null,"errorCode":null}]) +(10.1007/BF00749305,[{"oid":"0000-0003-4546-002X","name":"Oleg","surname":"Ponomarev","creditName":null,"errorCode":null},{"oid":"0000-0002-0362-4121","name":"Farid","surname":"Enikeev","creditName":null,"errorCode":null}]) +(10.1016/j.engfracmech.2015.01.008,[{"oid":"0000-0003-1117-9619","name":"Xian-Fang","surname":"Li","creditName":"Xian-Fang Li","errorCode":null}]) +(10.1007/s10898-015-0341-0,[{"oid":"0000-0001-6340-385X","name":"Semu Mitiku","surname":"Kassa","creditName":null,"errorCode":null},{"oid":"0000-0001-5494-040X","name":"Semu Mitiku","surname":"Kassa","creditName":null,"errorCode":null}]) +(10.1177/0091270010395591,[{"oid":"0000-0002-4227-5817","name":"David","surname":"Le Couteur","creditName":null,"errorCode":null},{"oid":"0000-0002-5970-1501","name":"Sarah","surname":"Hilmer","creditName":null,"errorCode":null}]) +(10.1016/j.cellimm.2016.09.003,[{"oid":"0000-0002-7412-9507","name":"Joseph","surname":"Mattapallil","creditName":null,"errorCode":null}]) +(10.1158/0008-5472.CAN-09-1091,[{"oid":"0000-0002-6093-0395","name":"Rajiv","surname":"Kumar","creditName":null,"errorCode":null},{"oid":"0000-0003-0674-7757","name":"Giuseppe","surname":"MATULLO","creditName":null,"errorCode":null},{"oid":"0000-0001-9599-309X","name":"Alessandra","surname":"Allione","creditName":null,"errorCode":null},{"oid":"0000-0003-1901-9513","name":"Heather","surname":"Nelson","creditName":null,"errorCode":null},{"oid":"0000-0002-8752-8785","name":"Tim","surname":"Bishop","creditName":"D T Bishop","errorCode":null},{"oid":"0000-0002-0787-3969","name":"Gunnar","surname":"Steineck","creditName":null,"errorCode":null},{"oid":"0000-0001-7208-2912","name":"Anne","surname":"Kiltie","creditName":null,"errorCode":null},{"oid":"0000-0002-4669-3995","name":"Zuo-Feng","surname":"Zhang","creditName":null,"errorCode":null},{"oid":"0000-0002-4620-3108","name":"Jian-Min","surname":"Yuan","creditName":null,"errorCode":null},{"oid":"0000-0002-3561-6580","name":"Ananya","surname":"Choudhury","creditName":null,"errorCode":null},{"oid":"0000-0002-3561-6580","name":"Ananya","surname":"Choudhury","creditName":null,"errorCode":null},{"oid":"0000-0002-1720-7724","name":"Jenny","surname":"Barrett","creditName":null,"errorCode":null},{"oid":"0000-0002-5277-8477","name":"Marcello","surname":"Campagna","creditName":null,"errorCode":null},{"oid":"0000-0003-2538-3784","name":"Nuria","surname":"Malats","creditName":null,"errorCode":null}]) +(10.1016/j.intell.2007.04.003,[{"oid":"0000-0003-3159-9370","name":"Alasdair","surname":"MacLullich","creditName":null,"errorCode":null}]) +(10.1021/acs.orglett.7b00261,[{"oid":"0000-0002-7178-2981","name":"Jun Yong","surname":"Kang","creditName":null,"errorCode":null},{"oid":"0000-0002-9732-1454","name":"Hai","surname":"Huang","creditName":null,"errorCode":null}]) +(10.1088/0004-637X/778/2/175,[{"oid":"0000-0003-0489-0920","name":"Alexei","surname":"Pevtsov","creditName":null,"errorCode":null},{"oid":"0000-0003-0489-0920","name":"Alexei","surname":"Pevtsov","creditName":null,"errorCode":null}]) +(10.22201/iis.01882503p.2018.4.57796,[{"oid":"0000-0002-7334-1936","name":"Yanina","surname":"Welp","creditName":null,"errorCode":null},{"oid":"0000-0001-9905-0777","name":"Flavia","surname":"Freidenberg","creditName":null,"errorCode":null},{"oid":"0000-0001-9905-0777","name":"Flavia","surname":"Freidenberg","creditName":null,"errorCode":null}]) +(10.1109/IWAGPR.2017.7996109,[{"oid":"0000-0003-1698-0800","name":"Miro","surname":"Govedarica","creditName":null,"errorCode":null}]) +(10.1207/s15328015tlm1603_6,[{"oid":"0000-0002-0577-1440","name":"Theodor","surname":"Adla","creditName":null,"errorCode":null}]) +(10.1109/CBMI.2009.10,[{"oid":"0000-0002-1364-218X","name":"Marco","surname":"Bertini","creditName":"Marco Bertini","errorCode":null},{"oid":"0000-0002-4269-4501","name":"Giuseppe","surname":"Serra","creditName":null,"errorCode":null},{"oid":"0000-0002-1052-8322","name":"ALBERTO","surname":"DEL BIMBO","creditName":null,"errorCode":null},{"oid":"0000-0003-0819-851X","name":"Lamberto","surname":"Ballan","creditName":null,"errorCode":null}]) +(10.1017/S003329171200147X,[{"oid":"0000-0001-8198-9022","name":"Amanda","surname":"Baxter","creditName":null,"errorCode":null},{"oid":"0000-0003-4667-6623","name":"Harvey","surname":"Whiteford","creditName":null,"errorCode":null},{"oid":"0000-0003-4667-6623","name":"Harvey","surname":"Whiteford","creditName":null,"errorCode":null}]) +(10.1088/0305-4470/30/2/021,[{"oid":"0000-0001-6097-1202","name":"Andrés","surname":"Riaguas","creditName":null,"errorCode":null}]) +(10.4103/1658-354X.169476,[{"oid":"0000-0002-1009-0869","name":"KUSAI","surname":"BAROUDI","creditName":null,"errorCode":null},{"oid":"0000-0002-1009-0869","name":"KUSAI","surname":"BAROUDI","creditName":null,"errorCode":null}]) +(10.1007/s12414-015-0042-0,[{"oid":"0000-0003-3752-7837","name":"Matthijs","surname":"Janssen","creditName":null,"errorCode":null}]) +(10.1007/978-3-319-08491-6_5,[{"oid":"0000-0002-4728-689X","name":"Agnieszka","surname":"Landowska","creditName":null,"errorCode":null},{"oid":"0000-0002-1117-903X","name":"Michał","surname":"Wróbel","creditName":null,"errorCode":null}]) +(10.3390/inorganics7010008,[{"oid":"0000-0003-4502-5212","name":"Ian","surname":"Dance","creditName":null,"errorCode":null}]) +(10.4028/www.scientific.net/DDF.297-301.814,[{"oid":"0000-0002-6970-0406","name":"Jaroslav","surname":"Kováčik","creditName":null,"errorCode":null}]) +(10.1117/12.2257557,[{"oid":"0000-0002-7409-3305","name":"Jan","surname":"Kulawik","creditName":null,"errorCode":null}]) +(10.1109/SIBGRAPI.2011.20,[{"oid":"0000-0001-8612-5805","name":"Fabio","surname":"Miranda","creditName":null,"errorCode":null}]) +(10.1089/fpd.2012.1448,[{"oid":"0000-0001-7995-7427","name":"Beilei","surname":"Ge","creditName":null,"errorCode":null}]) +(10.1016/j.lungcan.2013.04.006,[{"oid":"0000-0001-8100-7914","name":"Ruey-Long","surname":"Hong","creditName":null,"errorCode":null}]) +(10.1109/IROS.2005.1545338,[{"oid":"0000-0002-4612-3554","name":"Rui P.","surname":"Rocha","creditName":"Rui P. Rocha","errorCode":null},{"oid":"0000-0003-3729-5263","name":"Adriano","surname":"Carvalho","creditName":null,"errorCode":null},{"oid":"0000-0002-2725-8867","name":"Jorge","surname":"Dias","creditName":"Jorge Dias","errorCode":null}]) +(10.3182/20100901-3-IT-2016.00036,[{"oid":"0000-0001-8247-7790","name":"Hélène","surname":"Piet-Lahanier","creditName":null,"errorCode":null}]) +(10.1016/S0925-9635(99)00257-5,[{"oid":"0000-0002-2400-1759","name":"BRAMBILLA","surname":"Andrea","creditName":null,"errorCode":null},{"oid":"0000-0002-0647-9134","name":"Philippe","surname":"Bergonzo","creditName":null,"errorCode":null}]) +(10.1016/j.jsg.2011.08.008,[{"oid":"0000-0002-4647-8224","name":"Bernhard","surname":"Grasemann","creditName":null,"errorCode":null},{"oid":"0000-0002-4647-8224","name":"Bernhard","surname":"Grasemann","creditName":null,"errorCode":null}]) +(10.1016/S1387-6473(03)00072-1,[{"oid":"0000-0001-5273-9817","name":"James","surname":"Lovell","creditName":null,"errorCode":null}]) +(10.1039/C9TA02405K,[{"oid":"0000-0003-3847-2620","name":"Ch Venkata","surname":"Surya Kumar","creditName":null,"errorCode":null},{"oid":"0000-0001-6353-8877","name":"Ki Tae","surname":"Nam","creditName":null,"errorCode":null}]) +(10.1007/s00216-008-2520-z,[{"oid":"0000-0002-5134-7130","name":"Helmut","surname":"Ehrenberg","creditName":null,"errorCode":null},{"oid":"0000-0002-5134-7130","name":"Helmut","surname":"Ehrenberg","creditName":null,"errorCode":null},{"oid":"0000-0002-5106-9214","name":"Kristian","surname":"Nikolowski","creditName":null,"errorCode":null}]) +(10.1007/s13760-018-0889-9,[{"oid":"0000-0002-6644-9148","name":"Ahmet","surname":"yildirim","creditName":null,"errorCode":null}]) +(10.1016/j.enpol.2012.10.037,[{"oid":"0000-0002-0476-2315","name":"Anu","surname":"Ramaswami","creditName":null,"errorCode":null}]) +(10.1007/978-981-13-2517-5_65,[{"oid":"0000-0002-1182-0552","name":"Tiago","surname":"Benetti","creditName":null,"errorCode":null}]) +(10.1179/1973947814Y.0000000172,[{"oid":"0000-0001-5610-7745","name":"Fernanda","surname":"Ruiz Larrea","creditName":null,"errorCode":null},{"oid":"0000-0003-0023-3069","name":"Vanesa","surname":"Estepa","creditName":null,"errorCode":null},{"oid":"0000-0003-3709-1690","name":"Carmen","surname":"Torres","creditName":null,"errorCode":null}]) +(10.1016/s0378-1119(00)00530-8,[{"oid":"0000-0001-7584-3721","name":"Tzung-Fu","surname":"Hsieh","creditName":null,"errorCode":null}]) +(10.1149/1.3567401,[{"oid":"0000-0002-9655-6155","name":"Mohammad Reza","surname":"Hantehzadeh","creditName":null,"errorCode":null}]) +(10.1029/2012jd018226,[{"oid":"0000-0002-1520-4386","name":"永红","surname":"胡","creditName":"胡永红","errorCode":null},{"oid":"0000-0001-5950-9555","name":"Gensuo","surname":"Jia","creditName":null,"errorCode":null}]) +(10.1186/1477-7517-11-31,[{"oid":"0000-0002-2191-7833","name":"Tim","surname":"Mackey","creditName":null,"errorCode":null},{"oid":"0000-0003-0726-0676","name":"Leo","surname":"Beletsky","creditName":null,"errorCode":null},{"oid":"0000-0003-3376-152X","name":"Maria Gudelia","surname":"Rangel","creditName":null,"errorCode":null},{"oid":"0000-0002-7724-691X","name":"Steffanie","surname":"Strathdee","creditName":null,"errorCode":null}]) +(10.1023/A:1022686622752,[{"oid":"0000-0002-0534-7797","name":"Stéphane","surname":"Le Crom","creditName":null,"errorCode":null},{"oid":"0000-0001-9327-5166","name":"Marika","surname":"Kapsimali","creditName":null,"errorCode":null}]) +(10.1524/zpch.2012.0224,[{"oid":"0000-0003-1563-9176","name":"Paul","surname":"Heitjans","creditName":null,"errorCode":null},{"oid":"0000-0001-9706-4892","name":"H. Martin R.","surname":"Wilkening","creditName":"Prof. Dr. Martin Wilkening","errorCode":null},{"oid":"0000-0001-9706-4892","name":"H. Martin R.","surname":"Wilkening","creditName":"Prof. Dr. Martin Wilkening","errorCode":null},{"oid":"0000-0001-9706-4892","name":"H. Martin R.","surname":"Wilkening","creditName":"Prof. Dr. Martin Wilkening","errorCode":null}]) +(10.1080/03155986.2017.1393730,[{"oid":"0000-0002-8203-0689","name":"Linyan","surname":"Zhang","creditName":null,"errorCode":null}]) +(10.1016/j.jbiotec.2011.06.040,[{"oid":"0000-0001-7635-1075","name":"Cecilia","surname":"Faraloni","creditName":null,"errorCode":null},{"oid":"0000-0001-7981-0847","name":"Alberto","surname":"Scoma","creditName":"Alberto Scoma","errorCode":null}]) +(10.1055/s-0033-1361119,[{"oid":"0000-0001-9369-5136","name":"Farnaz","surname":"Monajjemzadeh","creditName":null,"errorCode":null}]) +(10.1016/j.ijporl.2013.03.025,[{"oid":"0000-0003-4084-2301","name":"Chul Ho","surname":"Jang","creditName":null,"errorCode":null}]) +(10.3758/s13423-011-0203-9,[{"oid":"0000-0002-7584-2275","name":"Patrik","surname":"Sörqvist","creditName":null,"errorCode":null}]) +(10.1016/s0306-4522(02)00200-2,[{"oid":"0000-0002-8323-8211","name":"BS","surname":"Shankaranarayana Rao","creditName":null,"errorCode":null}]) +(10.1021/tx030036f,[{"oid":"0000-0003-4194-6401","name":"Nico P.E.","surname":"Vermeulen","creditName":"N.P.E. Vermeulen","errorCode":null},{"oid":"0000-0002-8358-9425","name":"Angel","surname":"Messeguer","creditName":null,"errorCode":null}]) +(10.1063/1.4819076,[{"oid":"0000-0003-2367-3825","name":"Timothy","surname":"Hele","creditName":null,"errorCode":null}]) +(10.1049/el.2014.2651,[{"oid":"0000-0002-2826-6367","name":"Ivan","surname":"Lee","creditName":null,"errorCode":null}]) +(10.1300/J137v15n02_02,[{"oid":"0000-0001-8374-2277","name":"Donna","surname":"Ryan","creditName":null,"errorCode":null}]) +(10.1590/S1413-78522013000100003,[{"oid":"0000-0003-3584-3342","name":"Aldo José","surname":"Fontes Pereira","creditName":"Pereira, A.J.F","errorCode":null}]) +(10.1039/c5lc01356a,[{"oid":"0000-0002-3084-0823","name":"Anna","surname":"Marsano","creditName":null,"errorCode":null},{"oid":"0000-0001-7115-0151","name":"Emiliano","surname":"Votta","creditName":null,"errorCode":null}]) +(10.1007/s10903-018-0840-4,[{"oid":"0000-0003-1710-3578","name":"Ahsan","surname":"Saleem","creditName":null,"errorCode":null}]) +(10.1007/s00216-015-8936-3,[{"oid":"0000-0003-4741-8650","name":"Nina","surname":"Kroepfl","creditName":null,"errorCode":null}]) +(10.1109/ISCAS.2018.8351770,[{"oid":"0000-0002-7158-1426","name":"Panu","surname":"Sjövall","creditName":null,"errorCode":null}]) +(10.1021/jm100732t,[{"oid":"0000-0002-1767-7072","name":"Matthew","surname":"Fuchter","creditName":null,"errorCode":null},{"oid":"0000-0002-1767-7072","name":"Matthew","surname":"Fuchter","creditName":null,"errorCode":null},{"oid":"0000-0002-5658-8486","name":"Paul","surname":"Freemont","creditName":null,"errorCode":null},{"oid":"0000-0002-5658-8486","name":"Paul","surname":"Freemont","creditName":null,"errorCode":null}]) +(10.11588/BJB.2004.0.29842,[{"oid":"0000-0002-0555-3451","name":"Frank","surname":"Siegmund","creditName":null,"errorCode":null}]) +(10.1006/jctb.1999.1911,[{"oid":"0000-0002-2692-9198","name":"John","surname":"Caughman","creditName":null,"errorCode":null},{"oid":"0000-0002-2692-9198","name":"John","surname":"Caughman","creditName":null,"errorCode":null}]) +(10.1007/BF02125350,[{"oid":"0000-0002-4281-1843","name":"Gábor","surname":"Tardos","creditName":null,"errorCode":null}]) +(10.1039/C9SC01502G,[{"oid":"0000-0003-3527-7379","name":"Andrzej","surname":"Sienkiewicz","creditName":null,"errorCode":null},{"oid":"0000-0002-7515-7593","name":"Farzaneh","surname":"Fadaei Tirani","creditName":"Farzaneh Fadaei Tirani","errorCode":null}]) +(10.1063/1.119082,[{"oid":"0000-0001-8187-7469","name":"Hans","surname":"Christen","creditName":null,"errorCode":null}]) +(10.1109/OCEANSAP.2016.7485389,[{"oid":"0000-0001-7619-8015","name":"Horst","surname":"Hellbrück","creditName":null,"errorCode":null}]) +(10.1071/AN11006,[{"oid":"0000-0001-7750-0570","name":"Michael","surname":"Friend","creditName":null,"errorCode":null},{"oid":"0000-0001-5129-2216","name":"Susan","surname":"Robertson","creditName":null,"errorCode":null},{"oid":"0000-0001-5639-9581","name":"John","surname":"Broster","creditName":null,"errorCode":null}]) +(10.1186/1746-4811-4-1,[{"oid":"0000-0002-1872-2998","name":"Wilhelm","surname":"Gruissem","creditName":null,"errorCode":null},{"oid":"0000-0002-6645-1862","name":"Lars","surname":"Hennig","creditName":null,"errorCode":null},{"oid":"0000-0002-6645-1862","name":"Lars","surname":"Hennig","creditName":null,"errorCode":null},{"oid":"0000-0002-4802-754X","name":"Matthias","surname":"Hirsch-Hoffmann","creditName":null,"errorCode":null}]) +(10.1109/WCNC.2014.6951929,[{"oid":"0000-0003-1802-5022","name":"Michael","surname":"Heimlich","creditName":null,"errorCode":null},{"oid":"0000-0003-1802-5022","name":"Michael","surname":"Heimlich","creditName":null,"errorCode":null}]) +(10.1210/jc.2006-0075,[{"oid":"0000-0003-0637-1577","name":"Raj","surname":"Vuppalanchi","creditName":null,"errorCode":null}]) +(10.1590/S1678-91992005000300012,[{"oid":"0000-0001-9319-7516","name":"Rodrigo","surname":"Silva","creditName":"Da Silva, Rodrigo Costa","errorCode":null}]) +(10.1088/0953-2048/24/7/075025,[{"oid":"0000-0001-7488-066X","name":"Qing-Ping","surname":"Ding","creditName":null,"errorCode":null},{"oid":"0000-0003-1796-6840","name":"Toshihiro","surname":"Taen","creditName":null,"errorCode":null}]) +(10.1016/j.apenergy.2015.11.058,[{"oid":"0000-0003-2692-8299","name":"Zia","surname":"Wadud","creditName":null,"errorCode":null}]) +(10.1002/ange.201106310,[{"oid":"0000-0002-7898-317X","name":"Belén","surname":"Martín-Matute","creditName":null,"errorCode":null},{"oid":"0000-0002-1534-2690","name":"Agnieszka","surname":"Bartoszewicz","creditName":null,"errorCode":null}]) +(10.1016/s0002-9440(10)64486-0,[{"oid":"0000-0001-6151-4257","name":"Markus","surname":"Britschgi","creditName":"Markus Britschgi","errorCode":null}]) +(10.1021/ac0715672,[{"oid":"0000-0002-3664-5711","name":"Maria Jose","surname":"Gomez Ramos","creditName":null,"errorCode":null},{"oid":"0000-0002-3664-5711","name":"Maria Jose","surname":"Gomez Ramos","creditName":null,"errorCode":null},{"oid":"0000-0003-4321-6795","name":"Maria Jesus","surname":"Martinez Bueno","creditName":null,"errorCode":null},{"oid":"0000-0002-1963-8106","name":"Dolores","surname":"Hernando","creditName":null,"errorCode":null},{"oid":"0000-0003-2649-6772","name":"Ana","surname":"Agüera","creditName":null,"errorCode":null},{"oid":"0000-0001-9158-0271","name":"JUAN F","surname":"GARCÍA-REYES","creditName":null,"errorCode":null}]) +(10.5020/18061230.2014.319,[{"oid":"0000-0002-9554-1736","name":"Thiago","surname":"Vasconcelos","creditName":null,"errorCode":null}]) +(10.1109/ICoAC.2017.7951738,[{"oid":"0000-0001-8438-0175","name":"Nedunchezhian","surname":"Raju","creditName":null,"errorCode":null},{"oid":"0000-0002-3769-657X","name":"Vijayakumar","surname":"Velusamy","creditName":null,"errorCode":null},{"oid":"0000-0002-3769-657X","name":"Vijayakumar","surname":"Velusamy","creditName":null,"errorCode":null}]) +(10.1126/scitranslmed.3002785,[{"oid":"0000-0003-3619-1657","name":"Christian","surname":"Ottensmeier","creditName":null,"errorCode":null}]) +(10.1007/s00245-010-9130-9,[{"oid":"0000-0002-8510-7477","name":"Catherine","surname":"Donnelly","creditName":null,"errorCode":null}]) +(10.1530/endoabs.37.ep899,[{"oid":"0000-0002-9205-9530","name":"Volodymyr","surname":"Pankiv","creditName":null,"errorCode":null}]) +(10.1029/2010GL045928,[{"oid":"0000-0003-1378-8434","name":"Shari","surname":"Yvon-Lewis","creditName":"Shari A Yvon-Lewis","errorCode":null},{"oid":"0000-0003-1097-6800","name":"John","surname":"Kessler","creditName":null,"errorCode":null},{"oid":"0000-0003-1097-6800","name":"John","surname":"Kessler","creditName":null,"errorCode":null}]) +(10.1016/S0952-7915(00)00127-8,[{"oid":"0000-0001-6479-5330","name":"Gunther","surname":"Eysenbach","creditName":null,"errorCode":null}]) +(10.1103/PhysRevB.83.064508,[{"oid":"0000-0001-7991-3918","name":"Jianxin","surname":"Zhu","creditName":null,"errorCode":null}]) +(10.1002/ETT.2664,[{"oid":"0000-0001-6868-6860","name":"Qianbin","surname":null,"creditName":null,"errorCode":null}]) +(10.1252/jcej.12we249,[{"oid":"0000-0002-7423-5561","name":"Takayoshi","surname":"Ishimoto","creditName":null,"errorCode":null},{"oid":"0000-0003-4347-9923","name":"Michihisa","surname":"Koyama","creditName":null,"errorCode":null}]) +(10.1088/0305-4470/37/13/006,[{"oid":"0000-0002-2295-8055","name":"Epifanio Guido","surname":"Virga","creditName":null,"errorCode":null}]) +(10.14419/IJET.V7I4.44.26872,[{"oid":"0000-0002-3164-5157","name":"Edy","surname":"Budiman","creditName":null,"errorCode":null}]) +(10.1117/12.667839,[{"oid":"0000-0002-1551-6646","name":"Mikhail","surname":"Bryushinin","creditName":null,"errorCode":null}]) +(10.1021/acs.jafc.6b03279,[{"oid":"0000-0002-4145-5031","name":"Manuel","surname":"Mota","creditName":"Mota, MM","errorCode":null},{"oid":"0000-0002-4145-5031","name":"Manuel","surname":"Mota","creditName":"Mota, MM","errorCode":null},{"oid":"0000-0003-2817-7943","name":"Jorge","surname":"Faria","creditName":"Jorge M. S. Faria","errorCode":null},{"oid":"0000-0003-2817-7943","name":"Jorge","surname":"Faria","creditName":"Jorge M. S. Faria","errorCode":null},{"oid":"0000-0003-3257-9777","name":"Ana M.","surname":"Rodrigues","creditName":null,"errorCode":null}]) +(10.1117/12.2228432,[{"oid":"0000-0003-2590-034X","name":"Peppino","surname":"Fazio","creditName":null,"errorCode":null},{"oid":"0000-0003-0593-5254","name":"Mauro","surname":"Tropea","creditName":null,"errorCode":null}]) +(10.1186/s40349-016-0049-8,[{"oid":"0000-0002-4271-7670","name":"Marc Nicola","surname":"Gallay","creditName":null,"errorCode":null}]) +(10.1055/s-0029-1214397,[{"oid":"0000-0002-5286-7322","name":"Eva","surname":"Münster","creditName":null,"errorCode":null},{"oid":"0000-0002-5286-7322","name":"Eva","surname":"Münster","creditName":null,"errorCode":null}]) +(10.1108/00197850610671991,[{"oid":"0000-0003-1239-8733","name":"viki","surname":"holton","creditName":null,"errorCode":null},{"oid":"0000-0003-1239-8733","name":"viki","surname":"holton","creditName":null,"errorCode":null}]) +(10.1186/s12863-017-0480-z,[{"oid":"0000-0001-7747-0930","name":"Puthen Veettil","surname":"Jithesh","creditName":null,"errorCode":null}]) +(10.1109/jsen.2011.2106156,[{"oid":"0000-0002-4213-9575","name":"Yael","surname":"Hanein","creditName":null,"errorCode":null}]) +(10.1115/FEDSM2012-72228,[{"oid":"0000-0001-6692-858X","name":"Yogesh","surname":"Joshi","creditName":null,"errorCode":null}]) +(10.1039/c5cp03696h,[{"oid":"0000-0002-0664-2536","name":"François","surname":"LIQUE","creditName":null,"errorCode":null},{"oid":"0000-0002-7407-303X","name":"Jacek","surname":"Klos","creditName":null,"errorCode":null}]) +(10.1016/0308-8146(95)00112-3,[{"oid":"0000-0002-3438-0852","name":"José María","surname":"Fresno-Baro","creditName":null,"errorCode":null},{"oid":"0000-0002-3438-0852","name":"José María","surname":"Fresno-Baro","creditName":null,"errorCode":null},{"oid":"0000-0002-3737-9830","name":"Javier","surname":"Carballo","creditName":null,"errorCode":null},{"oid":"0000-0002-1697-178X","name":"María Josefa","surname":"González Prieto","creditName":null,"errorCode":null},{"oid":"0000-0002-5658-6720","name":"Ana","surname":"Bernardo Álvarez","creditName":null,"errorCode":null}]) +(10.1016/j.jmaa.2005.05.047,[{"oid":"0000-0002-8320-3596","name":"Kazimierz","surname":"Wlodarczyk","creditName":null,"errorCode":null},{"oid":"0000-0001-6635-0781","name":"Dariusz","surname":"Wardowski","creditName":null,"errorCode":null}]) +(10.1056/NEJM199312233292602,[{"oid":"0000-0002-9631-1254","name":"Martin","surname":"Larson","creditName":null,"errorCode":null}]) +(10.1016/j.apergo.2008.01.001,[{"oid":"0000-0001-7844-4881","name":"Vilhelm F","surname":"Koefoed","creditName":null,"errorCode":null}]) +(10.1007/s00421-011-2121-y,[{"oid":"0000-0001-6864-7706","name":"Taku","surname":"Wakahara","creditName":null,"errorCode":null}]) +(10.1016/j.agrformet.2007.05.012,[{"oid":"0000-0001-5779-2764","name":"Rachid","surname":"Hadria","creditName":null,"errorCode":null},{"oid":"0000-0002-3905-7560","name":"Gilles","surname":"Boulet","creditName":null,"errorCode":null}]) +(10.1393/ncb/i2007-10061-0,[{"oid":"0000-0002-7349-1109","name":"dafne","surname":"guetta","creditName":null,"errorCode":null}]) +(10.1016/j.ajog.2015.11.023,[{"oid":"0000-0001-7122-6187","name":"Katie","surname":"Propst","creditName":null,"errorCode":null},{"oid":"0000-0001-7122-6187","name":"Katie","surname":"Propst","creditName":null,"errorCode":null},{"oid":"0000-0002-2044-1693","name":"Tyler","surname":"Muffly","creditName":null,"errorCode":null},{"oid":"0000-0002-2044-1693","name":"Tyler","surname":"Muffly","creditName":null,"errorCode":null}]) +(doi:10.1166/jnn.2018.15274,[{"oid":"0000-0003-0582-575X","name":"David","surname":"Rojas","creditName":"D. Rojas","errorCode":null}]) +(10.21061/cc.v2i1.a.10,[{"oid":"0000-0001-7242-6762","name":"Jacob","surname":"Bruggeman","creditName":null,"errorCode":null}]) +(10.3390/nu10050622,[{"oid":"0000-0001-6890-5250","name":"Marjory","surname":"Moodie","creditName":null,"errorCode":null},{"oid":"0000-0002-5957-6931","name":"Jaithri","surname":"Ananthapavan","creditName":null,"errorCode":null},{"oid":"0000-0001-9736-1539","name":"Gary","surname":"Sacks","creditName":null,"errorCode":null},{"oid":"0000-0001-9736-1539","name":"Gary","surname":"Sacks","creditName":null,"errorCode":null},{"oid":"0000-0001-9736-1539","name":"Gary","surname":"Sacks","creditName":null,"errorCode":null},{"oid":"0000-0002-3206-8232","name":"Lennert","surname":"Veerman","creditName":null,"errorCode":null},{"oid":"0000-0002-3323-575X","name":"kathryn","surname":"backholer","creditName":null,"errorCode":null},{"oid":"0000-0003-2891-9476","name":"Vicki","surname":"Brown","creditName":null,"errorCode":null}]) +(10.5194/bg-2018-344,[{"oid":"0000-0001-6469-7167","name":"Neus","surname":"Garcias-Bonet","creditName":null,"errorCode":null}]) +(10.1038/srep01933,[{"oid":"0000-0001-8948-466X","name":"Yichi","surname":"Zhang","creditName":null,"errorCode":null}]) +(10.1306/05131615170,[{"oid":"0000-0003-0397-8744","name":"Sarada","surname":"Mohanty","creditName":"Sarada P Mohanty","errorCode":null}]) +(10.1080/14658011.2017.1399531,[{"oid":"0000-0003-2296-5623","name":"Janak","surname":"Sapkota","creditName":null,"errorCode":null},{"oid":"0000-0003-2296-5623","name":"Janak","surname":"Sapkota","creditName":null,"errorCode":null},{"oid":"0000-0003-4737-9823","name":"Joamin","surname":"Gonzalez-Gutierrez","creditName":null,"errorCode":null},{"oid":"0000-0001-5149-7895","name":"Clemens","surname":"Holzer","creditName":null,"errorCode":null},{"oid":"0000-0001-5149-7895","name":"Clemens","surname":"Holzer","creditName":null,"errorCode":null}]) +(10.4322/acr.2015.007,[{"oid":"0000-0002-8414-4161","name":"Jussara Bianchi","surname":"Castelli","creditName":null,"errorCode":null},{"oid":"0000-0002-5092-0505","name":"Benoit","surname":"Bibas","creditName":null,"errorCode":null}]) +(10.1186/s12888-017-1560-3,[{"oid":"0000-0002-9742-1359","name":"Alexandra","surname":"Pitman","creditName":null,"errorCode":null},{"oid":"0000-0003-2519-1539","name":"David","surname":"Osborn","creditName":null,"errorCode":null}]) +(10.1007/s10741-019-09829-7,[{"oid":"0000-0001-7175-0464","name":"Pierpaolo","surname":"Pellicori","creditName":null,"errorCode":null}]) +(10.1007/s00542-012-1613-y,[{"oid":"0000-0001-5535-9473","name":"Shota","surname":"Yabui","creditName":null,"errorCode":null},{"oid":"0000-0003-0623-5938","name":"Takenori","surname":"Atsumi","creditName":null,"errorCode":null}]) +(10.1039/C9SC02399B,[{"oid":"0000-0002-1034-0856","name":"Marvin","surname":"Vega","creditName":"Marvin M Vega","errorCode":null},{"oid":"0000-0003-0994-7789","name":"Li","surname":"Fu","creditName":null,"errorCode":null}]) +(10.1039/C8DT04698K,[{"oid":"0000-0002-3213-1350","name":"Likun","surname":"Tan","creditName":null,"errorCode":null}]) +(10.1080/09595230802093802,[{"oid":"0000-0001-9580-1545","name":"Simon","surname":"Moyes","creditName":null,"errorCode":null}]) +(10.1371/journal.pone.0136586,[{"oid":"0000-0002-6296-1427","name":"Scot","surname":"Dowd","creditName":null,"errorCode":null},{"oid":"0000-0002-2176-6932","name":"Jan","surname":"Suchodolski","creditName":null,"errorCode":null},{"oid":"0000-0002-9557-3068","name":"Cole","surname":"Mcqueen","creditName":null,"errorCode":null}]) +(10.3233/RNN-2009-0473,[{"oid":"0000-0002-6746-1034","name":"Iris-Katharina","surname":"Penner","creditName":null,"errorCode":null}]) +(10.1016/j.jcpa.2015.04.004,[{"oid":"0000-0001-5281-0521","name":"Antonio","surname":"Fernandez","creditName":null,"errorCode":null},{"oid":"0000-0003-3749-8845","name":"Eva","surname":"Sierra","creditName":null,"errorCode":null},{"oid":"0000-0002-1623-5010","name":"Manuel","surname":"Arbelo","creditName":"marbelo","errorCode":null}]) +(10.1007/s11270-011-1042-z,[{"oid":"0000-0003-2811-1979","name":"Irvan","surname":"Dahlan","creditName":null,"errorCode":null}]) +(10.1054/bjoc.2001.2096,[{"oid":"0000-0001-9484-9977","name":"Sasiwarang","surname":"Wannamethee","creditName":null,"errorCode":null}]) +(10.1137/140988541,[{"oid":"0000-0001-5645-5854","name":"Ilse","surname":"Ipsen","creditName":null,"errorCode":null}]) \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/orcid/xml/activity_work_0000-0002-5982-8983.xml b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/orcid/xml/activity_work_0000-0002-5982-8983.xml new file mode 100644 index 000000000..63b4405f1 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/orcid/xml/activity_work_0000-0002-5982-8983.xml @@ -0,0 +1,79 @@ + + + 2018-11-01T19:49:45.562Z + 2018-11-01T19:49:45.562Z + + + https://orcid.org/client/0000-0002-5982-8983 + 0000-0002-5982-8983 + orcid.org + + Scopus - Elsevier + + + "Calling Out" in class: Degrees of candor in addressing social injustices in + racially homogenous and heterogeneous U.S. history classrooms + + Journal of Social Studies Research + + bibtex + @article{Massaro2018,title = {{"}Calling Out{"} in class: Degrees of + candor in addressing social injustices in racially homogenous and heterogeneous U.S. + history classrooms},journal = {Journal of Social Studies Research},year = {2018},author + = {Parkhouse, H. and Massaro, V.R.}} + + journal-article + + 2018 + + + + doi + 10.1016/j.jssr.2018.01.004 + 10.1016/j.jssr.2018.01.004 + self + + + eid + 2-s2.0-85041949043 + 2-s2.0-85041949043 + self + + + http://www.scopus.com/inward/record.url?eid=2-s2.0-85041949043&partnerID=MN8TOARS + + + Parkhouse, H. + + + Massaro, V.R. + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/orcid/xml/summary_0000-0001-6828-479X.xml b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/orcid/xml/summary_0000-0001-6828-479X.xml new file mode 100644 index 000000000..559352751 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/orcid/xml/summary_0000-0001-6828-479X.xml @@ -0,0 +1,71 @@ + + + + https://orcid.org/0000-0001-6828-479X + 0000-0001-6828-479X + orcid.org + + + en + + + Member-referred + 2017-02-17T06:16:06.428Z + 2017-10-04T04:38:43.529Z + true + true + true + + + + 2017-02-17T06:16:06.428Z + 2017-02-17T06:16:06.652Z + Masahide + Terazima + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/orcid/xml/summary_error.xml b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/orcid/xml/summary_error.xml new file mode 100644 index 000000000..a5eaff8a0 --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/orcid/xml/summary_error.xml @@ -0,0 +1,33 @@ + + + 409 + 409 Conflict: The ORCID record is locked and cannot be edited. ORCID + https://orcid.org/0000-0002-9716-679X + The ORCID record is locked. + 9018 + https://members.orcid.org/api/resources/troubleshooting + \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/uw/input.json b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/uw/input.json new file mode 100644 index 000000000..33d4dbc3c --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/eu/dnetlib/doiboost/uw/input.json @@ -0,0 +1,160 @@ +{"doi": "10.1038/2211089b0", "year": 1969, "genre": "journal-article", "is_oa": true, "title": "Planning: Trees in Danger", "doi_url": "https://doi.org/10.1038/2211089b0", "updated": "2020-02-06T13:51:15.164623", "oa_status": "bronze", "publisher": "Springer Nature", "z_authors": [{"name": "Our Planning Correspondent"}], "is_paratext": false, "journal_name": "Nature", "oa_locations": [{"url": "http://www.nature.com/articles/2211089b0.pdf", "pmh_id": null, "is_best": true, "license": null, "updated": "2018-07-11T09:19:40.598930", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://www.nature.com/articles/2211089b0.pdf", "url_for_landing_page": "https://doi.org/10.1038/2211089b0", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0028-0836,1476-4687", "journal_issn_l": "0028-0836", "published_date": "1969-03-01", "best_oa_location": {"url": "http://www.nature.com/articles/2211089b0.pdf", "pmh_id": null, "is_best": true, "license": null, "updated": "2018-07-11T09:19:40.598930", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://www.nature.com/articles/2211089b0.pdf", "url_for_landing_page": "https://doi.org/10.1038/2211089b0", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1021/acs.bioconjchem.8b00058.s001", "year": null, "genre": "component", "is_oa": true, "title": "Engineering Reversible CellCell Interactions with Lipid Anchored Prosthetic Receptors", "doi_url": "https://doi.org/10.1021/acs.bioconjchem.8b00058.s001", "updated": "2020-04-04T21:15:41.966773", "oa_status": "bronze", "publisher": "American Chemical Society (ACS)", "z_authors": null, "is_paratext": false, "journal_name": null, "oa_locations": [{"url": "https://doi.org/10.1021/acs.bioconjchem.8b00058.s001", "pmh_id": null, "is_best": true, "license": null, "updated": "2020-04-04T21:13:39.352965", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://doi.org/10.1021/acs.bioconjchem.8b00058.s001", "url_for_landing_page": null, "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": null, "best_oa_location": {"url": "https://doi.org/10.1021/acs.bioconjchem.8b00058.s001", "pmh_id": null, "is_best": true, "license": null, "updated": "2020-04-04T21:13:39.352965", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://doi.org/10.1021/acs.bioconjchem.8b00058.s001", "url_for_landing_page": null, "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1021/acs.bioconjchem.8b00086.s001", "year": null, "genre": "component", "is_oa": true, "title": "Rapid, Stoichiometric, Site-Specific Modification of Aldehyde-Containing Proteins Using a Tandem Knoevenagel-Intra Michael Addition Reaction", "doi_url": "https://doi.org/10.1021/acs.bioconjchem.8b00086.s001", "updated": "2020-04-04T21:24:50.688286", "oa_status": "bronze", "publisher": "American Chemical Society (ACS)", "z_authors": null, "is_paratext": false, "journal_name": null, "oa_locations": [{"url": "https://doi.org/10.1021/acs.bioconjchem.8b00086.s001", "pmh_id": null, "is_best": true, "license": null, "updated": "2020-04-04T21:22:19.694440", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://doi.org/10.1021/acs.bioconjchem.8b00086.s001", "url_for_landing_page": null, "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": null, "best_oa_location": {"url": "https://doi.org/10.1021/acs.bioconjchem.8b00086.s001", "pmh_id": null, "is_best": true, "license": null, "updated": "2020-04-04T21:22:19.694440", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://doi.org/10.1021/acs.bioconjchem.8b00086.s001", "url_for_landing_page": null, "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1192/bjp.89.375.270", "year": 1943, "genre": "journal-article", "is_oa": false, "title": "Unusual Pituitary Activity in a Case of Anorexia Nervosa", "doi_url": "https://doi.org/10.1192/bjp.89.375.270", "updated": "2020-03-09T08:54:12.827623", "oa_status": "closed", "publisher": "Royal College of Psychiatrists", "z_authors": [{"given": "M.", "family": "Reiss", "sequence": "first"}], "is_paratext": false, "journal_name": "Journal of Mental Science", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0368-315X,2514-9946", "journal_issn_l": "0368-315X", "published_date": "1943-04-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1016/s0167-7012(99)00056-1", "year": 1999, "genre": "journal-article", "is_oa": false, "title": "Development of radiographic and microscopic techniques for the characterization of bacterial transport in intact sediment cores from Oyster, Virginia", "doi_url": "https://doi.org/10.1016/s0167-7012(99)00056-1", "updated": "2020-04-05T11:15:40.634599", "oa_status": "closed", "publisher": "Elsevier BV", "z_authors": [{"given": "Hailiang", "family": "Dong", "sequence": "first"}, {"given": "Tullis C.", "family": "Onstott", "sequence": "additional"}, {"given": "Mary F.", "family": "DeFlaun", "sequence": "additional"}, {"given": "Mark E.", "family": "Fuller", "sequence": "additional"}, {"given": "Kathleen M.", "family": "Gillespie", "sequence": "additional"}, {"given": "James K.", "family": "Fredrickson", "sequence": "additional"}], "is_paratext": false, "journal_name": "Journal of Microbiological Methods", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0167-7012", "journal_issn_l": "0167-7012", "published_date": "1999-08-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1086/mp.1905.2.issue-3", "year": 1905, "genre": "journal-issue", "is_oa": false, "title": null, "doi_url": "https://doi.org/10.1086/mp.1905.2.issue-3", "updated": "2020-02-07T15:51:44.560109", "oa_status": "closed", "publisher": "University of Chicago Press", "z_authors": null, "is_paratext": false, "journal_name": "Modern Philology", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0026-8232,1545-6951", "journal_issn_l": "0026-8232", "published_date": "1905-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1007/978-1-349-11096-4_7", "year": 1989, "genre": "book-chapter", "is_oa": false, "title": "Interpreting Drawings, Specifications and Data", "doi_url": "https://doi.org/10.1007/978-1-349-11096-4_7", "updated": "2020-03-15T12:03:50.450290", "oa_status": "closed", "publisher": "Palgrave Macmillan UK", "z_authors": [{"given": "Jack", "family": "Hirst", "sequence": "first"}, {"given": "John", "family": "Whipp", "sequence": "additional"}, {"given": "Roy", "family": "Brooks", "sequence": "additional"}], "is_paratext": false, "journal_name": "Repair and Servicing of Road Vehicles", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "1989-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1111/an.2002.43.9.43.2", "year": 2002, "genre": "journal-article", "is_oa": false, "title": "Association for Africanist Anthropology", "doi_url": "https://doi.org/10.1111/an.2002.43.9.43.2", "updated": "2020-03-21T19:33:30.089926", "oa_status": "closed", "publisher": "Wiley", "z_authors": [{"given": "Michael", "family": "Lambert", "sequence": "first"}], "is_paratext": false, "journal_name": "Anthropology News", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1541-6151", "journal_issn_l": "1541-6151", "published_date": "2002-12-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.2217/14750708.2.5.745", "year": 2005, "genre": "journal-article", "is_oa": false, "title": "Is there a relationship between estrogen serum level and symptom severity throughout the menstrual cycle of patients with schizophrenia?", "doi_url": "https://doi.org/10.2217/14750708.2.5.745", "updated": "2020-03-24T04:08:45.741510", "oa_status": "closed", "publisher": "Future Medicine Ltd", "z_authors": [{"given": "Shahin", "family": "Akhondzadeh", "sequence": "first"}, {"given": "Kamran", "family": "Mokhberi", "sequence": "additional"}, {"given": "Homayoun", "family": "Amini", "sequence": "additional"}, {"given": "Bagher", "family": "Larijani", "sequence": "additional"}, {"given": "Ladan", "family": "Kashani", "sequence": "additional"}, {"given": "Ladan", "family": "Hashemi", "sequence": "additional"}, {"given": "Ali-Akbar", "family": "Nejatisafa", "sequence": "additional"}, {"given": "Ahmad-Reza", "family": "Shafaei", "sequence": "additional"}], "is_paratext": false, "journal_name": "Therapy", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1475-0708,1744-831X", "journal_issn_l": "1475-0708", "published_date": "2005-09-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1007/978-1-4757-0797-7_13", "year": 1985, "genre": "book-chapter", "is_oa": false, "title": "Diseases and Induced Lesions of the Neuromuscular Endplate", "doi_url": "https://doi.org/10.1007/978-1-4757-0797-7_13", "updated": "2020-03-15T12:03:49.875280", "oa_status": "closed", "publisher": "Springer US", "z_authors": [{"given": "Edith", "family": "Heilbronn", "sequence": "first"}], "is_paratext": false, "journal_name": "Pathological Neurochemistry", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "1985-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1088/0256-307x/27/2/026804", "year": 2010, "genre": "journal-article", "is_oa": false, "title": "Effects of Rapid Thermal Processing on Microstructure and Optical Properties of As-Deposited Ag2O Films by Direct-Current Reactive Magnetron Sputtering", "doi_url": "https://doi.org/10.1088/0256-307x/27/2/026804", "updated": "2020-03-08T13:45:58.996113", "oa_status": "closed", "publisher": "IOP Publishing", "z_authors": [{"given": "Gao", "family": "Xiao-Yong", "sequence": "first"}, {"given": "Feng", "family": "Hong-Liang", "sequence": "additional"}, {"given": "Zhang", "family": "Zeng-Yuan", "sequence": "additional"}, {"given": "Ma", "family": "Jiao-Min", "sequence": "additional"}, {"given": "Lu", "family": "Jing-Xiao", "sequence": "additional"}], "is_paratext": false, "journal_name": "Chinese Physics Letters", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0256-307X,1741-3540", "journal_issn_l": "0256-307X", "published_date": "2010-02-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1371/journal.pone.0209587.g009", "year": null, "genre": "component", "is_oa": true, "title": null, "doi_url": "https://doi.org/10.1371/journal.pone.0209587.g009", "updated": "2020-02-05T00:02:31.742178", "oa_status": "gold", "publisher": "Public Library of Science (PLoS)", "z_authors": null, "is_paratext": false, "journal_name": null, "oa_locations": [{"url": "https://doi.org/10.1371/journal.pone.0209587.g009", "pmh_id": null, "is_best": true, "license": null, "updated": "2020-04-22T18:12:56.284881", "version": "publishedVersion", "evidence": "oa journal (via publisher name)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.1371/journal.pone.0209587.g009", "repository_institution": null}], "data_standard": 2, "journal_is_oa": true, "journal_issns": null, "journal_issn_l": null, "published_date": null, "best_oa_location": {"url": "https://doi.org/10.1371/journal.pone.0209587.g009", "pmh_id": null, "is_best": true, "license": null, "updated": "2020-04-22T18:12:56.284881", "version": "publishedVersion", "evidence": "oa journal (via publisher name)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.1371/journal.pone.0209587.g009", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1089/10430340050015301", "year": 2000, "genre": "journal-article", "is_oa": false, "title": "Improved Gene Transfer to Neuroblastoma Cells by a Monoclonal Antibody Targeting RET, a Receptor Tyrosine Kinase", "doi_url": "https://doi.org/10.1089/10430340050015301", "updated": "2020-03-08T13:45:50.039000", "oa_status": "closed", "publisher": "Mary Ann Liebert Inc", "z_authors": [{"given": "Lisa", "family": "Yano", "sequence": "first"}, {"given": "Mari", "family": "Shimura", "sequence": "additional"}, {"given": "Mika", "family": "Taniguchi", "sequence": "additional"}, {"given": "Yasuhide", "family": "Hayashi", "sequence": "additional"}, {"given": "Toshimitsu", "family": "Suzuki", "sequence": "additional"}, {"given": "Kiyohiko", "family": "Hatake", "sequence": "additional"}, {"given": "Fumimaro", "family": "Takaku", "sequence": "additional"}, {"given": "Yukihito", "family": "Ishizaka", "sequence": "additional"}], "is_paratext": false, "journal_name": "Human Gene Therapy", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1043-0342,1557-7422", "journal_issn_l": "1043-0342", "published_date": "2000-05-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1182/blood.v124.21.2082.2082", "year": 2014, "genre": "journal-article", "is_oa": false, "title": "Thymidine Kinase-Deleted, let7a-Regulated Vaccinia Virus Specifically Infects and Lyses Myeloma Cells in a Mouse Myeloma Model", "doi_url": "https://doi.org/10.1182/blood.v124.21.2082.2082", "updated": "2020-02-04T16:57:14.305643", "oa_status": "closed", "publisher": "American Society of Hematology", "z_authors": [{"given": "Muneyoshi", "family": "Futami", "sequence": "first", "affiliation": [{"name": "University of Tokyo, Tokyo, Japan"}]}, {"given": "Kota", "family": "Sato", "sequence": "additional", "affiliation": [{"name": "University of Tokyo, Tokyo, Japan"}]}, {"given": "Takafumi", "family": "Nakamura", "sequence": "additional", "affiliation": [{"name": "Tottori University, Yonago, Japan"}]}, {"given": "Arinobu", "family": "Tojo", "sequence": "additional", "affiliation": [{"name": "University of Tokyo, Tokyo, Japan"}]}], "is_paratext": false, "journal_name": "Blood", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0006-4971,1528-0020", "journal_issn_l": "0006-4971", "published_date": "2014-12-06", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.31826/9781463218355-007", "year": 2010, "genre": "book-chapter", "is_oa": false, "title": "LETTER V. TO OSMUND", "doi_url": "https://doi.org/10.31826/9781463218355-007", "updated": "2020-02-04T16:58:11.205863", "oa_status": "closed", "publisher": "Gorgias Press", "z_authors": null, "is_paratext": false, "journal_name": "The Letters, I", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2010-12-31", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.4000/rechercheformation.639", "year": 2008, "genre": "journal-article", "is_oa": true, "title": "La formation à la recherche des enseignants au Québec", "doi_url": "https://doi.org/10.4000/rechercheformation.639", "updated": "2020-03-19T20:54:54.338264", "oa_status": "bronze", "publisher": "OpenEdition", "z_authors": [{"given": "Jean-Marie", "family": "Van der Maren", "sequence": "first"}], "is_paratext": false, "journal_name": "Recherche & formation", "oa_locations": [{"url": "http://journals.openedition.org/rechercheformation/pdf/639", "pmh_id": null, "is_best": true, "license": null, "updated": "2018-05-14T18:32:37.769791", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://journals.openedition.org/rechercheformation/pdf/639", "url_for_landing_page": "https://doi.org/10.4000/rechercheformation.639", "repository_institution": null}, {"url": "http://pdfs.semanticscholar.org/fc66/288fc0488953310a918e145b34656a07c991.pdf", "pmh_id": null, "is_best": false, "license": null, "updated": "2019-10-01T00:00:00", "version": "submittedVersion", "evidence": "oa repository (semantic scholar lookup)", "host_type": "repository", "endpoint_id": null, "url_for_pdf": "http://pdfs.semanticscholar.org/fc66/288fc0488953310a918e145b34656a07c991.pdf", "url_for_landing_page": "https://semanticscholar.org/paper/fc66288fc0488953310a918e145b34656a07c991", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0988-1824,1968-3936", "journal_issn_l": "0988-1824", "published_date": "2008-12-01", "best_oa_location": {"url": "http://journals.openedition.org/rechercheformation/pdf/639", "pmh_id": null, "is_best": true, "license": null, "updated": "2018-05-14T18:32:37.769791", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://journals.openedition.org/rechercheformation/pdf/639", "url_for_landing_page": "https://doi.org/10.4000/rechercheformation.639", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": true} +{"doi": "10.1021/acsami.8b00889.s001", "year": null, "genre": "component", "is_oa": true, "title": "In Situ Exsolution of Bimetallic RhNi Nanoalloys: a Highly Efficient Catalyst for CO2 Methanation", "doi_url": "https://doi.org/10.1021/acsami.8b00889.s001", "updated": "2020-04-04T21:37:46.317043", "oa_status": "bronze", "publisher": "American Chemical Society (ACS)", "z_authors": null, "is_paratext": false, "journal_name": null, "oa_locations": [{"url": "https://doi.org/10.1021/acsami.8b00889.s001", "pmh_id": null, "is_best": true, "license": null, "updated": "2020-04-04T21:36:02.136386", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://doi.org/10.1021/acsami.8b00889.s001", "url_for_landing_page": null, "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": null, "best_oa_location": {"url": "https://doi.org/10.1021/acsami.8b00889.s001", "pmh_id": null, "is_best": true, "license": null, "updated": "2020-04-04T21:36:02.136386", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://doi.org/10.1021/acsami.8b00889.s001", "url_for_landing_page": null, "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.4103/1673-5374.280315", "year": 2020, "genre": "journal-article", "is_oa": true, "title": "Limited therapeutic potential of astrocyte elevated gene-1 transduction in an animal model of Parkinson's disease", "doi_url": "https://doi.org/10.4103/1673-5374.280315", "updated": "2020-04-03T21:03:00.926369", "oa_status": "gold", "publisher": "Medknow", "z_authors": [{"given": "SangRyong", "family": "Kim", "sequence": "first"}, {"given": "Eunju", "family": "Leem", "sequence": "additional"}], "is_paratext": false, "journal_name": "Neural Regeneration Research", "oa_locations": [{"url": "https://doi.org/10.4103/1673-5374.280315", "pmh_id": null, "is_best": true, "license": "cc-by-nc-sa", "updated": "2020-04-26T20:55:28.594777", "version": "publishedVersion", "evidence": "oa journal (via doaj)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.4103/1673-5374.280315", "repository_institution": null}], "data_standard": 2, "journal_is_oa": true, "journal_issns": "1673-5374", "journal_issn_l": "1673-5374", "published_date": "2020-01-01", "best_oa_location": {"url": "https://doi.org/10.4103/1673-5374.280315", "pmh_id": null, "is_best": true, "license": "cc-by-nc-sa", "updated": "2020-04-26T20:55:28.594777", "version": "publishedVersion", "evidence": "oa journal (via doaj)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.4103/1673-5374.280315", "repository_institution": null}, "journal_is_in_doaj": true, "has_repository_copy": false} +{"doi": "10.1086/ahr/101.1.170-a", "year": 1996, "genre": "journal-article", "is_oa": false, "title": "Robin Chapman Stacey. The Road to Judgment: From Custom to Court in Medieval Ireland and Wales. (Middle Ages Series.) Philadelphia: University of Pennsylvania Press. 1994. Pp. xvi, 342. $46.95", "doi_url": "https://doi.org/10.1086/ahr/101.1.170-a", "updated": "2020-02-10T19:06:57.426463", "oa_status": "closed", "publisher": "Oxford University Press (OUP)", "z_authors": null, "is_paratext": false, "journal_name": "The American Historical Review", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1937-5239", "journal_issn_l": "0002-8762", "published_date": "1996-02-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1088/0256-307x/24/8/018", "year": 2007, "genre": "journal-article", "is_oa": false, "title": "Nuclear Potential and Fusion Cross Sections for Synthesizing Super-Heavy Elements in Di-nuclear Systems", "doi_url": "https://doi.org/10.1088/0256-307x/24/8/018", "updated": "2020-03-10T18:27:03.812257", "oa_status": "closed", "publisher": "IOP Publishing", "z_authors": [{"given": "Wang", "family": "Nan", "sequence": "first"}, {"given": "Li", "family": "Jun-Qing", "sequence": "additional"}, {"given": "Zhao", "family": "En-Guang", "sequence": "additional"}, {"given": "Feng", "family": "Zhao-Qing", "sequence": "additional"}], "is_paratext": false, "journal_name": "Chinese Physics Letters", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0256-307X,1741-3540", "journal_issn_l": "0256-307X", "published_date": "2007-07-26", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1089/omi.2019.0018", "year": 2019, "genre": "journal-article", "is_oa": false, "title": "The Genetics of Warfarin Dose–Response Variability in Africans: An Expert Perspective on Past, Present, and Future", "doi_url": "https://doi.org/10.1089/omi.2019.0018", "updated": "2020-02-07T15:52:11.808933", "oa_status": "closed", "publisher": "Mary Ann Liebert Inc", "z_authors": [{"given": "Arinao", "family": "Ndadza", "sequence": "first", "affiliation": [{"name": "Pharmacogenomics and Drug Metabolism Research Group, Division of Human Genetics, Department of Pathology, Institute of Infectious Disease and Molecular Medicine (IDM), Faculty of Health Sciences, University of Cape Town, Cape Town, South Africa."}]}, {"given": "Nicholas Ekow", "family": "Thomford", "sequence": "additional", "affiliation": [{"name": "Pharmacogenomics and Drug Metabolism Research Group, Division of Human Genetics, Department of Pathology, Institute of Infectious Disease and Molecular Medicine (IDM), Faculty of Health Sciences, University of Cape Town, Cape Town, South Africa."}]}, {"given": "Stanley", "family": "Mukanganyama", "sequence": "additional", "affiliation": [{"name": "Department of Biochemistry, University of Zimbabwe, Harare, Zimbabwe."}]}, {"given": "Ambroise", "family": "Wonkam", "sequence": "additional", "affiliation": [{"name": "Pharmacogenomics and Drug Metabolism Research Group, Division of Human Genetics, Department of Pathology, Institute of Infectious Disease and Molecular Medicine (IDM), Faculty of Health Sciences, University of Cape Town, Cape Town, South Africa."}]}, {"given": "Mpiko", "family": "Ntsekhe", "sequence": "additional", "affiliation": [{"name": "Division of Cardiology, Department of Medicine, Faculty of Health Sciences, University of Cape Town, Cape Town, South Africa."}]}, {"given": "Collet", "family": "Dandara", "sequence": "additional", "affiliation": [{"name": "Pharmacogenomics and Drug Metabolism Research Group, Division of Human Genetics, Department of Pathology, Institute of Infectious Disease and Molecular Medicine (IDM), Faculty of Health Sciences, University of Cape Town, Cape Town, South Africa."}]}], "is_paratext": false, "journal_name": "OMICS: A Journal of Integrative Biology", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1557-8100", "journal_issn_l": "1536-2310", "published_date": "2019-03-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1787/sti_scoreboard-2013-graph205-en", "year": 2013, "genre": "component", "is_oa": false, "title": "Global trade in ICT goods and top ten exporters, 2000 and 2011", "doi_url": "https://doi.org/10.1787/sti_scoreboard-2013-graph205-en", "updated": "2020-03-19T20:54:49.500840", "oa_status": "closed", "publisher": "Organisation for Economic Co-Operation and Development (OECD)", "z_authors": [{"name": "OECD", "sequence": "first"}], "is_paratext": false, "journal_name": null, "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2013-10-23", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.19173/irrodl.v16i1.1814", "year": 2015, "genre": "journal-article", "is_oa": true, "title": "From the classroom to the keyboard: How seven teachers created their online teacher identities", "doi_url": "https://doi.org/10.19173/irrodl.v16i1.1814", "updated": "2020-03-13T20:09:41.402407", "oa_status": "gold", "publisher": "Athabasca University Press", "z_authors": [{"given": "Jennifer C", "family": "Richardson", "sequence": "first"}, {"given": "Janet", "family": "Alsup", "sequence": "additional"}], "is_paratext": false, "journal_name": "The International Review of Research in Open and Distributed Learning", "oa_locations": [{"url": "http://www.irrodl.org/index.php/irrodl/article/download/1814/3253", "pmh_id": null, "is_best": true, "license": "cc-by", "updated": "2019-01-05T13:59:38.399777", "version": "publishedVersion", "evidence": "open (via page says license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://www.irrodl.org/index.php/irrodl/article/download/1814/3253", "url_for_landing_page": "https://doi.org/10.19173/irrodl.v16i1.1814", "repository_institution": null}, {"url": "https://doi.org/10.19173/irrodl.v16i1.1814", "pmh_id": null, "is_best": false, "license": "cc-by", "updated": "2020-04-24T06:25:33.267893", "version": "publishedVersion", "evidence": "oa journal (via doaj)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.19173/irrodl.v16i1.1814", "repository_institution": null}, {"url": "http://www.erudit.org/fr/revues/irrodl/2015-v16-n1-irrodl04978/1065932ar.pdf", "pmh_id": "oai:erudit.org:1065932ar", "is_best": false, "license": "cc-by", "updated": "2020-04-04T14:21:32.895968", "version": "publishedVersion", "evidence": "oa repository (via OAI-PMH doi match)", "host_type": "repository", "endpoint_id": "a7ded957df6faebd849", "url_for_pdf": "http://www.erudit.org/fr/revues/irrodl/2015-v16-n1-irrodl04978/1065932ar.pdf", "url_for_landing_page": "http://id.erudit.org/iderudit/1065932ar", "repository_institution": null}, {"url": "http://www.irrodl.org/index.php/irrodl/article/download/1814/3253/", "pmh_id": "oai:CiteSeerX.psu:10.1.1.867.5215", "is_best": false, "license": "cc-by", "updated": "2020-01-18T21:21:04.741502", "version": "submittedVersion", "evidence": "oa repository (via OAI-PMH title and first author match)", "host_type": "repository", "endpoint_id": "7e4fec42e1147584aae", "url_for_pdf": "http://www.irrodl.org/index.php/irrodl/article/download/1814/3253/", "url_for_landing_page": "http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.867.5215", "repository_institution": "The Pennsylvania State University - CiteSeer X"}], "data_standard": 2, "journal_is_oa": true, "journal_issns": "1492-3831", "journal_issn_l": "1492-3831", "published_date": "2015-01-20", "best_oa_location": {"url": "http://www.irrodl.org/index.php/irrodl/article/download/1814/3253", "pmh_id": null, "is_best": true, "license": "cc-by", "updated": "2019-01-05T13:59:38.399777", "version": "publishedVersion", "evidence": "open (via page says license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://www.irrodl.org/index.php/irrodl/article/download/1814/3253", "url_for_landing_page": "https://doi.org/10.19173/irrodl.v16i1.1814", "repository_institution": null}, "journal_is_in_doaj": true, "has_repository_copy": true} +{"doi": "10.1093/nq/146.31.92b", "year": 1924, "genre": "journal-article", "is_oa": false, "title": "The Belton Estate, The Three Dervishes and other Persion Tales and Legends", "doi_url": "https://doi.org/10.1093/nq/146.31.92b", "updated": "2020-02-10T19:05:06.598079", "oa_status": "closed", "publisher": "Oxford University Press (OUP)", "z_authors": null, "is_paratext": false, "journal_name": "Notes and Queries", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1471-6941,0029-3970", "journal_issn_l": "0029-3970", "published_date": "1924-02-02", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1182/blood.v116.21.1124.1124", "year": 2010, "genre": "journal-article", "is_oa": false, "title": "Combinatorial Antimicrobicidal Peptides Exhibit Enhanced Activity Against Bacterial Contaminants In Stored Platelet Concentrates (PCs).", "doi_url": "https://doi.org/10.1182/blood.v116.21.1124.1124", "updated": "2020-02-04T16:57:49.044181", "oa_status": "closed", "publisher": "American Society of Hematology", "z_authors": [{"given": "Krishna Mohan V.", "family": "Ketha", "sequence": "first", "affiliation": [{"name": "Lab of Cellular Hematology, CBER (Food and Drug Administration), Bethesda, MD, USA,"}]}, {"given": "Shilpakala Sainath", "family": "Rao", "sequence": "additional", "affiliation": [{"name": "Division of Hematology, CBER/FDA, Bethesda, MD, USA"}]}, {"given": "Chintamani D", "family": "Atreya", "sequence": "additional", "affiliation": [{"name": "Lab of Cellular Hematology, CBER (Food and Drug Administration), Bethesda, MD, USA,"}]}], "is_paratext": false, "journal_name": "Blood", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0006-4971,1528-0020", "journal_issn_l": "0006-4971", "published_date": "2010-11-19", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1109/vlhcc.2009.5295296", "year": 2009, "genre": "proceedings-article", "is_oa": true, "title": "Revealing the copy and paste habits of end users", "doi_url": "https://doi.org/10.1109/vlhcc.2009.5295296", "updated": "2020-03-20T15:53:06.707752", "oa_status": "green", "publisher": "IEEE", "z_authors": [{"given": "Kathryn T.", "family": "Stolee", "sequence": "first"}, {"given": "Sebastian", "family": "Elbaum", "sequence": "additional"}, {"given": "Gregg", "family": "Rothermel", "sequence": "additional"}], "is_paratext": false, "journal_name": "2009 IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC)", "oa_locations": [{"url": "https://digitalcommons.unl.edu/cgi/viewcontent.cgi?article=1139&context=cseconfwork", "pmh_id": "oai:digitalcommons.unl.edu:cseconfwork-1139", "is_best": true, "license": null, "updated": "2020-03-25T14:30:10.522478", "version": "publishedVersion", "evidence": "oa repository (via OAI-PMH title and first author match)", "host_type": "repository", "endpoint_id": "5ae9f225287388f2391", "url_for_pdf": "https://digitalcommons.unl.edu/cgi/viewcontent.cgi?article=1139&context=cseconfwork", "url_for_landing_page": "https://digitalcommons.unl.edu/cseconfwork/133", "repository_institution": null}, {"url": "http://cse.unl.edu/~grother/papers/vlhcc09.pdf", "pmh_id": "oai:CiteSeerX.psu:10.1.1.153.4117", "is_best": false, "license": null, "updated": "2017-10-21T09:33:23.797406", "version": "submittedVersion", "evidence": "oa repository (via OAI-PMH doi match)", "host_type": "repository", "endpoint_id": "CiteSeerX.psu", "url_for_pdf": "http://cse.unl.edu/~grother/papers/vlhcc09.pdf", "url_for_landing_page": "http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.153.4117", "repository_institution": "CiteSeerX.psu"}], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2009-09-01", "best_oa_location": {"url": "https://digitalcommons.unl.edu/cgi/viewcontent.cgi?article=1139&context=cseconfwork", "pmh_id": "oai:digitalcommons.unl.edu:cseconfwork-1139", "is_best": true, "license": null, "updated": "2020-03-25T14:30:10.522478", "version": "publishedVersion", "evidence": "oa repository (via OAI-PMH title and first author match)", "host_type": "repository", "endpoint_id": "5ae9f225287388f2391", "url_for_pdf": "https://digitalcommons.unl.edu/cgi/viewcontent.cgi?article=1139&context=cseconfwork", "url_for_landing_page": "https://digitalcommons.unl.edu/cseconfwork/133", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": true} +{"doi": "10.1371/journal.pone.0211321", "year": 2019, "genre": "journal-article", "is_oa": true, "title": "Nearest transfer effects of working memory training: A comparison of two programs focused on working memory updating", "doi_url": "https://doi.org/10.1371/journal.pone.0211321", "updated": "2020-02-05T00:01:53.986492", "oa_status": "gold", "publisher": "Public Library of Science (PLoS)", "z_authors": [{"given": "Rocío", "family": "Linares", "sequence": "first"}, {"given": "Erika", "family": "Borella", "sequence": "additional"}, {"ORCID": "http://orcid.org/0000-0003-3511-0149", "given": "Mª Teresa", "family": "Lechuga", "sequence": "additional", "authenticated-orcid": true}, {"given": "Barbara", "family": "Carretti", "sequence": "additional"}, {"ORCID": "http://orcid.org/0000-0002-4441-8965", "given": "Santiago", "family": "Pelegrina", "sequence": "additional", "authenticated-orcid": true}], "is_paratext": false, "journal_name": "PLOS ONE", "oa_locations": [{"url": "https://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0211321&type=printable", "pmh_id": null, "is_best": true, "license": "cc-by", "updated": "2019-11-25T05:07:17.964115", "version": "publishedVersion", "evidence": "open (via page says license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0211321&type=printable", "url_for_landing_page": "https://doi.org/10.1371/journal.pone.0211321", "repository_institution": null}, {"url": "https://doi.org/10.1371/journal.pone.0211321", "pmh_id": null, "is_best": false, "license": "cc-by", "updated": "2020-04-22T18:12:45.106623", "version": "publishedVersion", "evidence": "oa journal (via doaj)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.1371/journal.pone.0211321", "repository_institution": null}, {"url": "https://www.research.unipd.it/bitstream/11577/3296260/1/journal.pone.0211321.pdf", "pmh_id": "oai:www.research.unipd.it:11577/3296260", "is_best": false, "license": "cc-by", "updated": "2020-03-29T16:56:36.110076", "version": "publishedVersion", "evidence": "oa repository (via OAI-PMH title and first author match)", "host_type": "repository", "endpoint_id": "3067c07bad2a6056a48", "url_for_pdf": "https://www.research.unipd.it/bitstream/11577/3296260/1/journal.pone.0211321.pdf", "url_for_landing_page": "http://hdl.handle.net/11577/3296260", "repository_institution": null}, {"url": "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6373913", "pmh_id": null, "is_best": false, "license": null, "updated": "2020-04-22T18:12:45.106854", "version": "publishedVersion", "evidence": "oa repository (via pmcid lookup)", "host_type": "repository", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6373913", "repository_institution": null}, {"url": "http://pdfs.semanticscholar.org/e4d5/3ea7f72924165fd7366d81c1b5d17ad17a2e.pdf", "pmh_id": null, "is_best": false, "license": null, "updated": "2019-10-01T00:00:00", "version": "submittedVersion", "evidence": "oa repository (semantic scholar lookup)", "host_type": "repository", "endpoint_id": null, "url_for_pdf": "http://pdfs.semanticscholar.org/e4d5/3ea7f72924165fd7366d81c1b5d17ad17a2e.pdf", "url_for_landing_page": "https://semanticscholar.org/paper/e4d53ea7f72924165fd7366d81c1b5d17ad17a2e", "repository_institution": null}], "data_standard": 2, "journal_is_oa": true, "journal_issns": "1932-6203", "journal_issn_l": "1932-6203", "published_date": "2019-02-13", "best_oa_location": {"url": "https://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0211321&type=printable", "pmh_id": null, "is_best": true, "license": "cc-by", "updated": "2019-11-25T05:07:17.964115", "version": "publishedVersion", "evidence": "open (via page says license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://journals.plos.org/plosone/article/file?id=10.1371/journal.pone.0211321&type=printable", "url_for_landing_page": "https://doi.org/10.1371/journal.pone.0211321", "repository_institution": null}, "journal_is_in_doaj": true, "has_repository_copy": true} +{"doi": "10.1016/j.celrep.2015.06.074", "year": 2015, "genre": "journal-article", "is_oa": true, "title": "miR-302 Is Required for Timing of Neural Differentiation, Neural Tube Closure, and Embryonic Viability", "doi_url": "https://doi.org/10.1016/j.celrep.2015.06.074", "updated": "2020-03-18T15:03:29.371139", "oa_status": "gold", "publisher": "Elsevier BV", "z_authors": [{"given": "Ronald J.", "family": "Parchem", "sequence": "first"}, {"given": "Nicole", "family": "Moore", "sequence": "additional"}, {"given": "Jennifer L.", "family": "Fish", "sequence": "additional"}, {"given": "Jacqueline G.", "family": "Parchem", "sequence": "additional"}, {"given": "Tarcio T.", "family": "Braga", "sequence": "additional"}, {"given": "Archana", "family": "Shenoy", "sequence": "additional"}, {"given": "Michael C.", "family": "Oldham", "sequence": "additional"}, {"given": "John L.R.", "family": "Rubenstein", "sequence": "additional"}, {"given": "Richard A.", "family": "Schneider", "sequence": "additional"}, {"given": "Robert", "family": "Blelloch", "sequence": "additional"}], "is_paratext": false, "journal_name": "Cell Reports", "oa_locations": [{"url": "http://www.cell.com/article/S2211124715007123/pdf", "pmh_id": null, "is_best": true, "license": "cc-by-nc-nd", "updated": "2020-01-20T09:52:46.185494", "version": "publishedVersion", "evidence": "open (via page says license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://www.cell.com/article/S2211124715007123/pdf", "url_for_landing_page": "https://doi.org/10.1016/j.celrep.2015.06.074", "repository_institution": null}, {"url": "https://doi.org/10.1016/j.celrep.2015.06.074", "pmh_id": null, "is_best": false, "license": "cc-by-nc-nd", "updated": "2020-04-23T02:55:57.701989", "version": "publishedVersion", "evidence": "oa journal (via doaj)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.1016/j.celrep.2015.06.074", "repository_institution": null}, {"url": "http://europepmc.org/articles/pmc4741278?pdf=render", "pmh_id": "oai:pubmedcentral.nih.gov:4741278", "is_best": false, "license": "cc-by-nc-nd", "updated": "2017-10-21T18:16:06.923793", "version": "acceptedVersion", "evidence": "oa repository (via OAI-PMH doi match)", "host_type": "repository", "endpoint_id": "pubmedcentral.nih.gov", "url_for_pdf": "http://europepmc.org/articles/pmc4741278?pdf=render", "url_for_landing_page": "http://europepmc.org/articles/pmc4741278", "repository_institution": "pubmedcentral.nih.gov"}, {"url": "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4741278", "pmh_id": null, "is_best": false, "license": null, "updated": "2020-04-23T02:55:57.702453", "version": "acceptedVersion", "evidence": "oa repository (via pmcid lookup)", "host_type": "repository", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4741278", "repository_institution": null}], "data_standard": 2, "journal_is_oa": true, "journal_issns": "2211-1247", "journal_issn_l": "2211-1247", "published_date": "2015-08-01", "best_oa_location": {"url": "http://www.cell.com/article/S2211124715007123/pdf", "pmh_id": null, "is_best": true, "license": "cc-by-nc-nd", "updated": "2020-01-20T09:52:46.185494", "version": "publishedVersion", "evidence": "open (via page says license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://www.cell.com/article/S2211124715007123/pdf", "url_for_landing_page": "https://doi.org/10.1016/j.celrep.2015.06.074", "repository_institution": null}, "journal_is_in_doaj": true, "has_repository_copy": true} +{"doi": "10.1177/1558689816674564", "year": 2016, "genre": "journal-article", "is_oa": true, "title": "Process Evaluation of a Retreat for Scholars in the First Cohort: The NIH Mixed Methods Research Training Program for the Health Sciences", "doi_url": "https://doi.org/10.1177/1558689816674564", "updated": "2020-03-14T18:40:51.946726", "oa_status": "green", "publisher": "SAGE Publications", "z_authors": [{"given": "Timothy C.", "family": "Guetterman", "sequence": "first", "affiliation": [{"name": "University of Michigan, Ann Arbor, MI, USA"}]}, {"given": "John W.", "family": "Creswell", "sequence": "additional", "affiliation": [{"name": "University of Michigan, Ann Arbor, MI, USA"}]}, {"given": "Charles", "family": "Deutsch", "sequence": "additional", "affiliation": [{"name": "Harvard University, Boston, MA, USA"}]}, {"given": "Joseph J.", "family": "Gallo", "sequence": "additional", "affiliation": [{"name": "Johns Hopkins University, Baltimore, MD, USA"}]}], "is_paratext": false, "journal_name": "Journal of Mixed Methods Research", "oa_locations": [{"url": "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6322415", "pmh_id": null, "is_best": true, "license": null, "updated": "2020-04-25T06:14:50.485049", "version": "acceptedVersion", "evidence": "oa repository (via pmcid lookup)", "host_type": "repository", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6322415", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1558-6898,1558-6901", "journal_issn_l": "1558-6898", "published_date": "2016-10-26", "best_oa_location": {"url": "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6322415", "pmh_id": null, "is_best": true, "license": null, "updated": "2020-04-25T06:14:50.485049", "version": "acceptedVersion", "evidence": "oa repository (via pmcid lookup)", "host_type": "repository", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6322415", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": true} +{"doi": "10.1002/(sici)1097-0029(19960901)35:1<87::aid-jemt8>3.3.co;2-b", "year": 1996, "genre": "journal-article", "is_oa": false, "title": "Collagen fibril surface: TMAFM, FEG‐SEM and freeze‐etching observations", "doi_url": "https://doi.org/10.1002/(sici)1097-0029(19960901)35:1<87::aid-jemt8>3.3.co;2-b", "updated": "2020-02-08T08:22:40.551625", "oa_status": "closed", "publisher": "Wiley-Blackwell", "z_authors": [{"given": "Mario", "family": "Raspanti"}, {"given": "Andrea", "family": "Alessandrini"}, {"given": "Pietro", "family": "Gobbi"}, {"given": "Alessandro", "family": "Ruggeri"}], "is_paratext": false, "journal_name": "Microscopy Research and Technique", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1059-910X,1097-0029", "journal_issn_l": "1059-910X", "published_date": "1996-09-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1093/benz/9780199773787.article.b00167498", "year": 2011, "genre": "reference-entry", "is_oa": false, "title": "Seminario, Enrique José", "doi_url": "https://doi.org/10.1093/benz/9780199773787.article.b00167498", "updated": "2020-02-07T15:51:16.702243", "oa_status": "closed", "publisher": "Oxford University Press", "z_authors": null, "is_paratext": false, "journal_name": "Benezit Dictionary of Artists", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2011-10-31", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.2165/00128415-200812090-00025", "year": 2008, "genre": "journal-article", "is_oa": false, "title": "Antineoplastics", "doi_url": "https://doi.org/10.2165/00128415-200812090-00025", "updated": "2020-03-19T17:56:38.037237", "oa_status": "closed", "publisher": "Springer Science and Business Media LLC", "z_authors": [{"family": "&NA;", "sequence": "first"}], "is_paratext": false, "journal_name": "Reactions Weekly", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0114-9954", "journal_issn_l": "0114-9954", "published_date": "2008-07-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1002/1520-6807(197710)14:4<426::aid-pits2310140408>3.0.co;2-e", "year": 1977, "genre": "journal-article", "is_oa": false, "title": "An abbreviated form of the WISC-R: Is it valid?", "doi_url": "https://doi.org/10.1002/1520-6807(197710)14:4<426::aid-pits2310140408>3.0.co;2-e", "updated": "2020-03-27T13:45:45.585683", "oa_status": "closed", "publisher": "Wiley", "z_authors": [{"given": "Robert J.", "family": "Resnick", "sequence": "first"}], "is_paratext": false, "journal_name": "Psychology in the Schools", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0033-3085,1520-6807", "journal_issn_l": "0033-3085", "published_date": "1977-10-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.7748/nop2003.02.14.10.14.c2198", "year": 2003, "genre": "journal-article", "is_oa": true, "title": "Care provision in Scotland: background, policy context and research", "doi_url": "https://doi.org/10.7748/nop2003.02.14.10.14.c2198", "updated": "2020-03-07T08:58:53.694845", "oa_status": "green", "publisher": "RCN Publishing Ltd.", "z_authors": [{"given": "Belinda Jane", "family": "Dewar", "sequence": "first"}, {"given": "Fiona", "family": "O’May", "sequence": "additional"}, {"given": "Esther", "family": "Walker", "sequence": "additional"}], "is_paratext": false, "journal_name": "Nursing Older People", "oa_locations": [{"url": "http://pdfs.semanticscholar.org/192c/6986a7e4b9895e2a9d905da7c5b04ebd9a28.pdf", "pmh_id": null, "is_best": true, "license": null, "updated": "2019-10-01T00:00:00", "version": "submittedVersion", "evidence": "oa repository (semantic scholar lookup)", "host_type": "repository", "endpoint_id": null, "url_for_pdf": "http://pdfs.semanticscholar.org/192c/6986a7e4b9895e2a9d905da7c5b04ebd9a28.pdf", "url_for_landing_page": "https://semanticscholar.org/paper/192c6986a7e4b9895e2a9d905da7c5b04ebd9a28", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1472-0795,2047-8941", "journal_issn_l": "1472-0795", "published_date": "2003-02-01", "best_oa_location": {"url": "http://pdfs.semanticscholar.org/192c/6986a7e4b9895e2a9d905da7c5b04ebd9a28.pdf", "pmh_id": null, "is_best": true, "license": null, "updated": "2019-10-01T00:00:00", "version": "submittedVersion", "evidence": "oa repository (semantic scholar lookup)", "host_type": "repository", "endpoint_id": null, "url_for_pdf": "http://pdfs.semanticscholar.org/192c/6986a7e4b9895e2a9d905da7c5b04ebd9a28.pdf", "url_for_landing_page": "https://semanticscholar.org/paper/192c6986a7e4b9895e2a9d905da7c5b04ebd9a28", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": true} +{"doi": "10.1200/jco.1985.3.6.858", "year": 1985, "genre": "journal-article", "is_oa": false, "title": "Extraskeletal mesenchymal chondrosarcoma: case report and review of the literature.", "doi_url": "https://doi.org/10.1200/jco.1985.3.6.858", "updated": "2020-03-02T17:59:08.300613", "oa_status": "closed", "publisher": "American Society of Clinical Oncology (ASCO)", "z_authors": [{"given": "C", "family": "Louvet", "sequence": "first"}, {"given": "A", "family": "de Gramont", "sequence": "additional"}, {"given": "M", "family": "Krulik", "sequence": "additional"}, {"given": "M", "family": "Jagueux", "sequence": "additional"}, {"given": "D", "family": "Hubert", "sequence": "additional"}, {"given": "P", "family": "Brissaud", "sequence": "additional"}, {"given": "A", "family": "Sirinelli", "sequence": "additional"}, {"given": "B", "family": "Augereau", "sequence": "additional"}, {"given": "J M", "family": "Tubiana", "sequence": "additional"}, {"given": "J", "family": "Debray", "sequence": "additional"}], "is_paratext": false, "journal_name": "Journal of Clinical Oncology", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0732-183X,1527-7755", "journal_issn_l": "0732-183X", "published_date": "1985-06-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1097/00005053-194010000-00011", "year": 1940, "genre": "journal-article", "is_oa": false, "title": "Cushingʼs Syndrome", "doi_url": "https://doi.org/10.1097/00005053-194010000-00011", "updated": "2020-02-10T19:08:16.356439", "oa_status": "closed", "publisher": "Ovid Technologies (Wolters Kluwer Health)", "z_authors": [{"given": "L. R.", "family": "Brostex", "sequence": "first"}], "is_paratext": false, "journal_name": "The Journal of Nervous and Mental Disease", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0022-3018", "journal_issn_l": "0022-3018", "published_date": "1940-10-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1002/asia.200600037", "year": 2006, "genre": "journal-article", "is_oa": false, "title": "Pyrene-Based Dual-Mode Fluorescence Switches and Logic Gates That Function in Solution and Film", "doi_url": "https://doi.org/10.1002/asia.200600037", "updated": "2020-02-08T08:21:32.418903", "oa_status": "closed", "publisher": "Wiley-Blackwell", "z_authors": [{"given": "Weidong", "family": "Zhou"}, {"given": "Yongjun", "family": "Li"}, {"given": "Yuliang", "family": "Li"}, {"given": "Huibiao", "family": "Liu"}, {"given": "Shu", "family": "Wang"}, {"given": "Cuihong", "family": "Li"}, {"given": "Mingjian", "family": "Yuan"}, {"given": "Xiaofeng", "family": "Liu"}, {"given": "Daoben", "family": "Zhu"}], "is_paratext": false, "journal_name": "Chemistry – An Asian Journal", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1861-4728,1861-471X", "journal_issn_l": "1861-471X", "published_date": "2006-07-17", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1016/s1067-991x(03)70006-6", "year": 2003, "genre": "journal-article", "is_oa": false, "title": "Use of the autolaunch method of dispatching a helicopter", "doi_url": "https://doi.org/10.1016/s1067-991x(03)70006-6", "updated": "2020-03-12T07:24:35.659404", "oa_status": "closed", "publisher": "Elsevier BV", "z_authors": [{"given": "Kathleen S.", "family": "Berns", "sequence": "first"}, {"given": "Jeffery J.", "family": "Caniglia", "sequence": "additional"}, {"given": "Daniel G.", "family": "Hankins", "sequence": "additional"}, {"given": "Scott P.", "family": "Zietlow", "sequence": "additional"}], "is_paratext": false, "journal_name": "Air Medical Journal", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1067-991X", "journal_issn_l": "1067-991X", "published_date": "2003-05-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1016/j.clinimag.2015.12.002", "year": 2016, "genre": "journal-article", "is_oa": false, "title": "Imaging findings, diagnosis, and clinical outcomes in patients with mycotic aneurysms: single center experience", "doi_url": "https://doi.org/10.1016/j.clinimag.2015.12.002", "updated": "2020-03-12T17:56:16.049536", "oa_status": "closed", "publisher": "Elsevier BV", "z_authors": [{"given": "Amy R.", "family": "Deipolyi", "sequence": "first"}, {"given": "Alexander", "family": "Bailin", "sequence": "additional"}, {"given": "Ali", "family": "Khademhosseini", "sequence": "additional"}, {"ORCID": "http://orcid.org/0000-0003-4984-1778", "given": "Rahmi", "family": "Oklu", "sequence": "additional", "authenticated-orcid": false}], "is_paratext": false, "journal_name": "Clinical Imaging", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0899-7071", "journal_issn_l": "0899-7071", "published_date": "2016-05-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1016/j.biocel.2013.05.012", "year": 2013, "genre": "journal-article", "is_oa": false, "title": "MAVS-mediated host cell defense is inhibited by Borna disease virus", "doi_url": "https://doi.org/10.1016/j.biocel.2013.05.012", "updated": "2020-03-09T20:49:25.975316", "oa_status": "closed", "publisher": "Elsevier BV", "z_authors": [{"given": "Yujun", "family": "Li", "sequence": "first"}, {"given": "Wuqi", "family": "Song", "sequence": "additional"}, {"given": "Jing", "family": "Wu", "sequence": "additional"}, {"given": "Qingmeng", "family": "Zhang", "sequence": "additional"}, {"given": "Junming", "family": "He", "sequence": "additional"}, {"given": "Aimei", "family": "Li", "sequence": "additional"}, {"given": "Jun", "family": "Qian", "sequence": "additional"}, {"given": "Aixia", "family": "Zhai", "sequence": "additional"}, {"given": "Yunlong", "family": "Hu", "sequence": "additional"}, {"given": "Wenping", "family": "Kao", "sequence": "additional"}, {"given": "Lanlan", "family": "Wei", "sequence": "additional"}, {"given": "Fengmin", "family": "Zhang", "sequence": "additional"}, {"given": "Dakang", "family": "Xu", "sequence": "additional"}], "is_paratext": false, "journal_name": "The International Journal of Biochemistry & Cell Biology", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1357-2725", "journal_issn_l": "1357-2725", "published_date": "2013-08-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1021/acsami.8b01074.s004", "year": null, "genre": "component", "is_oa": false, "title": "Solution Coating of Pharmaceutical Nanothin Films and Multilayer Nanocomposites with Controlled Morphology and Polymorphism", "doi_url": "https://doi.org/10.1021/acsami.8b01074.s004", "updated": "2020-04-04T21:02:07.815195", "oa_status": "closed", "publisher": "American Chemical Society (ACS)", "z_authors": null, "is_paratext": false, "journal_name": null, "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": null, "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1093/nar/18.18.5552", "year": 1990, "genre": "journal-article", "is_oa": true, "title": "Nucleotide sequence of LTR-gag region of Rous sarcoma virus adapted to semi-permissive host", "doi_url": "https://doi.org/10.1093/nar/18.18.5552", "updated": "2020-02-07T07:59:06.754183", "oa_status": "green", "publisher": "Oxford University Press (OUP)", "z_authors": [{"given": "Vladimir I.", "family": "Kashuba", "sequence": "first"}, {"given": "Serge V.", "family": "Zubak", "sequence": "additional"}, {"given": "Vadim M.", "family": "Kavsan", "sequence": "additional"}, {"given": "Alla V.", "family": "Rynditch", "sequence": "additional"}, {"given": "Ivo", "family": "Hlozanek", "sequence": "additional"}], "is_paratext": false, "journal_name": "Nucleic Acids Research", "oa_locations": [{"url": "http://europepmc.org/articles/pmc332244?pdf=render", "pmh_id": "oai:pubmedcentral.nih.gov:332244", "is_best": true, "license": null, "updated": "2017-10-22T11:38:23.025497", "version": "publishedVersion", "evidence": "oa repository (via OAI-PMH doi match)", "host_type": "repository", "endpoint_id": "pubmedcentral.nih.gov", "url_for_pdf": "http://europepmc.org/articles/pmc332244?pdf=render", "url_for_landing_page": "http://europepmc.org/articles/pmc332244", "repository_institution": "pubmedcentral.nih.gov"}, {"url": "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC332244", "pmh_id": null, "is_best": false, "license": null, "updated": "2020-04-24T18:18:02.810779", "version": "publishedVersion", "evidence": "oa repository (via pmcid lookup)", "host_type": "repository", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC332244", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0305-1048,1362-4962", "journal_issn_l": "0305-1048", "published_date": "1990-01-01", "best_oa_location": {"url": "http://europepmc.org/articles/pmc332244?pdf=render", "pmh_id": "oai:pubmedcentral.nih.gov:332244", "is_best": true, "license": null, "updated": "2017-10-22T11:38:23.025497", "version": "publishedVersion", "evidence": "oa repository (via OAI-PMH doi match)", "host_type": "repository", "endpoint_id": "pubmedcentral.nih.gov", "url_for_pdf": "http://europepmc.org/articles/pmc332244?pdf=render", "url_for_landing_page": "http://europepmc.org/articles/pmc332244", "repository_institution": "pubmedcentral.nih.gov"}, "journal_is_in_doaj": false, "has_repository_copy": true} +{"doi": "10.1021/acsami.8b01294.s001", "year": null, "genre": "component", "is_oa": true, "title": "Highly Elastic Biodegradable Single-Network Hydrogel for Cell Printing", "doi_url": "https://doi.org/10.1021/acsami.8b01294.s001", "updated": "2020-04-04T22:12:53.813586", "oa_status": "bronze", "publisher": "American Chemical Society (ACS)", "z_authors": null, "is_paratext": false, "journal_name": null, "oa_locations": [{"url": "https://doi.org/10.1021/acsami.8b01294.s001", "pmh_id": null, "is_best": true, "license": null, "updated": "2020-04-04T22:11:06.757648", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://doi.org/10.1021/acsami.8b01294.s001", "url_for_landing_page": null, "repository_institution": null}, {"url": "http://europepmc.org/articles/pmc5876623?pdf=render", "pmh_id": "oai:pubmedcentral.nih.gov:5876623", "is_best": false, "license": "acs-specific: authorchoice/editors choice usage agreement", "updated": "2020-02-19T13:50:59.876849", "version": "publishedVersion", "evidence": "oa repository (via OAI-PMH title match)", "host_type": "repository", "endpoint_id": "ac9de7698155b820de7", "url_for_pdf": "http://europepmc.org/articles/pmc5876623?pdf=render", "url_for_landing_page": "http://europepmc.org/articles/pmc5876623", "repository_institution": "National Institutes of Health (USA) - US National Library of Medicine"}], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": null, "best_oa_location": {"url": "https://doi.org/10.1021/acsami.8b01294.s001", "pmh_id": null, "is_best": true, "license": null, "updated": "2020-04-04T22:11:06.757648", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://doi.org/10.1021/acsami.8b01294.s001", "url_for_landing_page": null, "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": true} +{"doi": "10.1097/scs.0b013e3181ef67ba", "year": 2010, "genre": "journal-article", "is_oa": false, "title": "Anomaly of the Internal Carotid Artery Detected During Tonsillectomy", "doi_url": "https://doi.org/10.1097/scs.0b013e3181ef67ba", "updated": "2020-02-10T19:05:26.462040", "oa_status": "closed", "publisher": "Ovid Technologies (Wolters Kluwer Health)", "z_authors": [{"given": "Serdar", "family": "Ceylan", "sequence": "first"}, {"given": "Serkan", "family": "Salman", "sequence": "additional"}, {"given": "Fatih", "family": "Bora", "sequence": "additional"}], "is_paratext": false, "journal_name": "Journal of Craniofacial Surgery", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1049-2275", "journal_issn_l": "1049-2275", "published_date": "2010-09-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1002/pds.880", "year": 2004, "genre": "journal-article", "is_oa": false, "title": "Antibiotic use profile at paediatric clinics in two transitional countries", "doi_url": "https://doi.org/10.1002/pds.880", "updated": "2020-04-12T23:58:25.353974", "oa_status": "closed", "publisher": "Wiley", "z_authors": [{"given": "Goran", "family": "Palčevski", "sequence": "first"}, {"given": "Vladimir", "family": "Ahel", "sequence": "additional"}, {"given": "Vera", "family": "Vlahović-Palčevski", "sequence": "additional"}, {"given": "Svetlana", "family": "Ratchina", "sequence": "additional"}, {"given": "Vesna", "family": "Rosovic-Bazijanac", "sequence": "additional"}, {"given": "L.", "family": "Averchenkova", "sequence": "additional"}], "is_paratext": false, "journal_name": "Pharmacoepidemiology and Drug Safety", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1053-8569,1099-1557", "journal_issn_l": "1053-8569", "published_date": "2004-03-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1387/zer.19161", "year": 2018, "genre": "journal-article", "is_oa": true, "title": "Representaciones de la inmigración latinoamericana en la cinematográfica española (1996-2008)", "doi_url": "https://doi.org/10.1387/zer.19161", "updated": "2020-02-29T09:33:29.323932", "oa_status": "hybrid", "publisher": "UPV/EHU Press", "z_authors": [{"given": "Maíra", "family": "Dias Pereira", "sequence": "first"}], "is_paratext": false, "journal_name": "ZER - Revista de Estudios de Comunicación", "oa_locations": [{"url": "https://www.ehu.eus/ojs/index.php/Zer/article/download/19161/18230", "pmh_id": null, "is_best": true, "license": "cc-by-sa", "updated": "2020-01-03T11:50:30.101874", "version": "publishedVersion", "evidence": "open (via page says license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.ehu.eus/ojs/index.php/Zer/article/download/19161/18230", "url_for_landing_page": "https://doi.org/10.1387/zer.19161", "repository_institution": null}, {"url": "https://addi.ehu.es/bitstream/10810/41276/1/19161-77528-1-PB.pdf", "pmh_id": "oai:addi.ehu.es:10810/41276", "is_best": false, "license": null, "updated": "2020-04-05T18:21:31.860362", "version": "publishedVersion", "evidence": "oa repository (via OAI-PMH doi match)", "host_type": "repository", "endpoint_id": "12746c530f3574451c6", "url_for_pdf": "https://addi.ehu.es/bitstream/10810/41276/1/19161-77528-1-PB.pdf", "url_for_landing_page": "http://hdl.handle.net/10810/41276", "repository_institution": "University of the Basque Country - Communities in ADDI"}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1989-631X,1137-1102", "journal_issn_l": "1137-1102", "published_date": "2018-11-30", "best_oa_location": {"url": "https://www.ehu.eus/ojs/index.php/Zer/article/download/19161/18230", "pmh_id": null, "is_best": true, "license": "cc-by-sa", "updated": "2020-01-03T11:50:30.101874", "version": "publishedVersion", "evidence": "open (via page says license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.ehu.eus/ojs/index.php/Zer/article/download/19161/18230", "url_for_landing_page": "https://doi.org/10.1387/zer.19161", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": true} +{"doi": "10.1093/gmo/9781561592630.article.l2286021", "year": 2015, "genre": "reference-book", "is_oa": false, "title": "Magbomboyo", "doi_url": "https://doi.org/10.1093/gmo/9781561592630.article.l2286021", "updated": "2020-02-26T00:38:46.900330", "oa_status": "closed", "publisher": "Oxford University Press", "z_authors": [{"given": "Ferdinand J. de", "family": "Hen", "sequence": "first"}], "is_paratext": false, "journal_name": "Oxford Music Online", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2015-09-22", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1016/j.bpj.2015.11.364", "year": 2016, "genre": "journal-article", "is_oa": true, "title": "Generalized Allostery in Thrombin", "doi_url": "https://doi.org/10.1016/j.bpj.2015.11.364", "updated": "2020-03-15T03:08:08.676899", "oa_status": "hybrid", "publisher": "Elsevier BV", "z_authors": [{"given": "Jiajie", "family": "Xiao", "sequence": "first"}, {"given": "Freddie R.", "family": "Salsbury", "suffix": "Jr", "sequence": "additional"}], "is_paratext": false, "journal_name": "Biophysical Journal", "oa_locations": [{"url": "http://www.cell.com/article/S0006349515015477/pdf", "pmh_id": null, "is_best": true, "license": "elsevier-specific: oa user license", "updated": "2020-04-25T14:44:51.025898", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://www.cell.com/article/S0006349515015477/pdf", "url_for_landing_page": "https://doi.org/10.1016/j.bpj.2015.11.364", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0006-3495", "journal_issn_l": "0006-3495", "published_date": "2016-02-01", "best_oa_location": {"url": "http://www.cell.com/article/S0006349515015477/pdf", "pmh_id": null, "is_best": true, "license": "elsevier-specific: oa user license", "updated": "2020-04-25T14:44:51.025898", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://www.cell.com/article/S0006349515015477/pdf", "url_for_landing_page": "https://doi.org/10.1016/j.bpj.2015.11.364", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1093/ww/9780199540884.013.11624", "year": 2007, "genre": "reference-entry", "is_oa": false, "title": "Comyns, Jacqueline Roberta, (born 27 April 1943), a District Judge (Magistrates’ Courts) (formerly a Metropolitan Stipendiary Magistrate), 1982–2013", "doi_url": "https://doi.org/10.1093/ww/9780199540884.013.11624", "updated": "2020-02-26T00:38:42.330690", "oa_status": "closed", "publisher": "Oxford University Press", "z_authors": null, "is_paratext": false, "journal_name": "Who's Who", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2007-12-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1002/chin.197234068", "year": 1972, "genre": "journal-article", "is_oa": false, "title": "ChemInform Abstract: NACHBARGRUPPEN-EFFEKTE BEI (1)H-NMR-SHIFTS DER TERT.-BUTYLGRUPPE, ROTATIONS-KONFORM. BEI DEN DIASTEREOMEREN VON 1,3-DI-TERT.-BUTYL-PROPARGYL-2-PHENYLPROPIONAT", "doi_url": "https://doi.org/10.1002/chin.197234068", "updated": "2020-03-15T06:52:11.575168", "oa_status": "closed", "publisher": "Wiley", "z_authors": [{"given": "R. S.", "family": "MACOMBER", "sequence": "first"}], "is_paratext": false, "journal_name": "Chemischer Informationsdienst", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0009-2975", "journal_issn_l": "0009-2975", "published_date": "1972-08-22", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1002/eet.3320020306", "year": 2007, "genre": "journal-article", "is_oa": false, "title": "Gis and environmental management", "doi_url": "https://doi.org/10.1002/eet.3320020306", "updated": "2020-03-21T09:14:36.158938", "oa_status": "closed", "publisher": "Wiley", "z_authors": [{"given": "Donald A.", "family": "Davidson", "sequence": "first"}], "is_paratext": false, "journal_name": "European Environment", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0961-0405,1099-0976", "journal_issn_l": "0961-0405", "published_date": "2007-07-06", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1103/physrevlett.58.2102", "year": 1987, "genre": "journal-article", "is_oa": false, "title": "Hydrodynamic Screening and Diffusion in Entangled Polymer Solutions", "doi_url": "https://doi.org/10.1103/physrevlett.58.2102", "updated": "2020-04-04T03:05:50.896467", "oa_status": "closed", "publisher": "American Physical Society (APS)", "z_authors": [{"given": "Y.", "family": "Shiwa", "sequence": "first"}], "is_paratext": false, "journal_name": "Physical Review Letters", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0031-9007", "journal_issn_l": "0031-9007", "published_date": "1987-05-18", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1007/978-3-030-34312-5", "year": 2020, "genre": "book", "is_oa": false, "title": "Optimal Districting and Territory Design", "doi_url": "https://doi.org/10.1007/978-3-030-34312-5", "updated": "2020-02-04T21:06:27.756631", "oa_status": "closed", "publisher": "Springer International Publishing", "z_authors": null, "is_paratext": false, "journal_name": "International Series in Operations Research & Management Science", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0884-8289,2214-7934", "journal_issn_l": "0884-8289", "published_date": "2020-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1007/978-3-319-01544-6_2", "year": 2013, "genre": "book-chapter", "is_oa": false, "title": "Coombe Hill, Apperley, Deerhurst, and Tewkesbury", "doi_url": "https://doi.org/10.1007/978-3-319-01544-6_2", "updated": "2020-03-06T03:29:01.970019", "oa_status": "closed", "publisher": "Springer International Publishing", "z_authors": [{"given": "Bernard", "family": "Michaux", "sequence": "first"}], "is_paratext": false, "journal_name": "Tewkesbury Walks", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2013-09-19", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1109/aieepas.1953.4498653", "year": 1953, "genre": "journal-article", "is_oa": false, "title": "Short-Time Thermal and Mechanical Limits for Transformers and Reactors [includes discussion]", "doi_url": "https://doi.org/10.1109/aieepas.1953.4498653", "updated": "2020-03-22T18:48:18.612422", "oa_status": "closed", "publisher": "Institute of Electrical and Electronics Engineers (IEEE)", "z_authors": [{"given": "J. E.", "family": "Clem", "sequence": "first"}], "is_paratext": false, "journal_name": "Transactions of the American Institute of Electrical Engineers. Part III: Power Apparatus and Systems", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0097-2460", "journal_issn_l": "0097-2460", "published_date": "1953-06-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1300/j358v06n01_10", "year": 1990, "genre": "journal-article", "is_oa": false, "title": "So Far, Yet So Near:", "doi_url": "https://doi.org/10.1300/j358v06n01_10", "updated": "2020-03-23T06:22:40.080466", "oa_status": "closed", "publisher": "The Haworth Press", "z_authors": [{"given": "John", "family": "Duryee", "sequence": "first"}], "is_paratext": false, "journal_name": "The Psychotherapy Patient", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0738-6176", "journal_issn_l": "0738-6176", "published_date": "1990-02-26", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1080/03605302.2011.556695", "year": 2011, "genre": "journal-article", "is_oa": true, "title": "Stability of Solitary Waves and Global Existence of a Generalized Two-Component Camassa–Holm System", "doi_url": "https://doi.org/10.1080/03605302.2011.556695", "updated": "2020-04-19T18:37:01.605875", "oa_status": "green", "publisher": "Informa UK Limited", "z_authors": [{"given": "Robin Ming", "family": "Chen", "sequence": "first"}, {"given": "Yue", "family": "Liu", "sequence": "additional"}, {"given": "Zhijun", "family": "Qiao", "sequence": "additional"}], "is_paratext": false, "journal_name": "Communications in Partial Differential Equations", "oa_locations": [{"url": "http://arxiv.org/pdf/1009.2449.pdf", "pmh_id": "oai:CiteSeerX.psu:10.1.1.767.774", "is_best": true, "license": null, "updated": "2020-04-15T11:50:31.231257", "version": "submittedVersion", "evidence": "oa repository (via OAI-PMH title and first author match)", "host_type": "repository", "endpoint_id": "7e4fec42e1147584aae", "url_for_pdf": "http://arxiv.org/pdf/1009.2449.pdf", "url_for_landing_page": "http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.767.774", "repository_institution": "The Pennsylvania State University - CiteSeer X"}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0360-5302,1532-4133", "journal_issn_l": "0360-5302", "published_date": "2011-12-01", "best_oa_location": {"url": "http://arxiv.org/pdf/1009.2449.pdf", "pmh_id": "oai:CiteSeerX.psu:10.1.1.767.774", "is_best": true, "license": null, "updated": "2020-04-15T11:50:31.231257", "version": "submittedVersion", "evidence": "oa repository (via OAI-PMH title and first author match)", "host_type": "repository", "endpoint_id": "7e4fec42e1147584aae", "url_for_pdf": "http://arxiv.org/pdf/1009.2449.pdf", "url_for_landing_page": "http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.767.774", "repository_institution": "The Pennsylvania State University - CiteSeer X"}, "journal_is_in_doaj": false, "has_repository_copy": true} +{"doi": "10.1109/iccd.1988.25673", "year": null, "genre": "proceedings-article", "is_oa": false, "title": "Extension of a transistor level digital timing simulator to include first order analog behavior", "doi_url": "https://doi.org/10.1109/iccd.1988.25673", "updated": "2020-02-10T19:06:00.976825", "oa_status": "closed", "publisher": "IEEE Comput. Soc. Press", "z_authors": [{"given": "R.", "family": "Chadha"}, {"given": "C.-F.", "family": "Chen"}], "is_paratext": false, "journal_name": "Proceedings 1988 IEEE International Conference on Computer Design: VLSI", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": null, "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1306/f4c90164-1712-11d7-8645000102c1865d", "year": 1992, "genre": "journal-article", "is_oa": false, "title": "Kinematics of the Eastern Flank of the Beartooth Mountains, Montana and Wyoming", "doi_url": "https://doi.org/10.1306/f4c90164-1712-11d7-8645000102c1865d", "updated": "2020-02-04T01:02:18.977971", "oa_status": null, "publisher": "CrossRef Test Account", "z_authors": [{"family": "O'CONNELL, PATRICK, Conoco Inc., Ca"}], "is_paratext": false, "journal_name": "AAPG Bulletin", "oa_locations": [], "data_standard": 1, "journal_is_oa": false, "journal_issns": "0149-1423", "journal_issn_l": "0149-1423", "published_date": "1992-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.7551/mitpress/11839.003.0014", "year": 2019, "genre": "book-chapter", "is_oa": false, "title": "Acknowledgments", "doi_url": "https://doi.org/10.7551/mitpress/11839.003.0014", "updated": "2020-02-06T04:42:45.146779", "oa_status": "closed", "publisher": "The MIT Press", "z_authors": null, "is_paratext": false, "journal_name": "The Evolving Animal Orchestra", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2019-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1109/ictai.2017.00033", "year": 2017, "genre": "proceedings-article", "is_oa": false, "title": "Using Transitional Bottlenecks to Improve Learning in Nearest Sequence Memory Algorithm", "doi_url": "https://doi.org/10.1109/ictai.2017.00033", "updated": "2020-02-10T19:06:47.677349", "oa_status": "closed", "publisher": "IEEE", "z_authors": [{"given": "Huseyin", "family": "Aydin", "sequence": "first"}, {"given": "Erkin", "family": "Cilden", "sequence": "additional"}, {"given": "Faruk", "family": "Polat", "sequence": "additional"}], "is_paratext": false, "journal_name": "2017 IEEE 29th International Conference on Tools with Artificial Intelligence (ICTAI)", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2017-11-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1097/00000446-195009000-00032", "year": 1950, "genre": "journal-article", "is_oa": false, "title": "Crossed Eyes in Children", "doi_url": "https://doi.org/10.1097/00000446-195009000-00032", "updated": "2020-03-20T07:41:37.594309", "oa_status": "closed", "publisher": "Ovid Technologies (Wolters Kluwer Health)", "z_authors": [{"given": "Walter B.", "family": "Lancaster", "sequence": "first"}], "is_paratext": false, "journal_name": "AJN, American Journal of Nursing", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0002-936X", "journal_issn_l": "0002-936X", "published_date": "1950-09-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1109/ieem.2016.7798041", "year": 2016, "genre": "proceedings-article", "is_oa": false, "title": "Biogas use as fuel in spark ignition engines", "doi_url": "https://doi.org/10.1109/ieem.2016.7798041", "updated": "2020-03-16T17:00:53.219630", "oa_status": "closed", "publisher": "IEEE", "z_authors": [{"given": "T. O.", "family": "Kukoyi", "sequence": "first"}, {"given": "E.", "family": "Muzenda", "sequence": "additional"}, {"given": "E. T.", "family": "Akinlabi", "sequence": "additional"}, {"given": "A.", "family": "Mashamba", "sequence": "additional"}, {"given": "C.", "family": "Mbohwa", "sequence": "additional"}, {"given": "T.", "family": "Mahlatsi", "sequence": "additional"}], "is_paratext": false, "journal_name": "2016 IEEE International Conference on Industrial Engineering and Engineering Management (IEEM)", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2016-12-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1109/jphotov.2017.2756452", "year": 2017, "genre": "journal-article", "is_oa": false, "title": "Detecting Photovoltaic Module Failures in the Field During Daytime With Ultraviolet Fluorescence Module Inspection", "doi_url": "https://doi.org/10.1109/jphotov.2017.2756452", "updated": "2020-02-28T00:00:02.565714", "oa_status": "closed", "publisher": "Institute of Electrical and Electronics Engineers (IEEE)", "z_authors": [{"ORCID": "http://orcid.org/0000-0003-0206-9522", "given": "Arnaud", "family": "Morlier", "sequence": "first", "authenticated-orcid": false}, {"given": "Michael", "family": "Siebert", "sequence": "additional"}, {"given": "Iris", "family": "Kunze", "sequence": "additional"}, {"given": "Gerhard", "family": "Mathiak", "sequence": "additional"}, {"ORCID": "http://orcid.org/0000-0001-6565-6842", "given": "Marc", "family": "Kontges", "sequence": "additional", "authenticated-orcid": false}], "is_paratext": false, "journal_name": "IEEE Journal of Photovoltaics", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "2156-3381,2156-3403", "journal_issn_l": "2156-3403", "published_date": "2017-11-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.7551/mitpress/3653.003.0014", "year": 1994, "genre": "book-chapter", "is_oa": false, "title": "References", "doi_url": "https://doi.org/10.7551/mitpress/3653.003.0014", "updated": "2020-02-06T04:42:05.211183", "oa_status": "closed", "publisher": "The MIT Press", "z_authors": null, "is_paratext": false, "journal_name": "Image And Brain", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "1994-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1016/s0378-5173(02)00044-3", "year": 2002, "genre": "journal-article", "is_oa": false, "title": "Targetability and intracellular delivery of anti-BCG antibody-modified, pH-sensitive fusogenic immunoliposomes to tumor cells", "doi_url": "https://doi.org/10.1016/s0378-5173(02)00044-3", "updated": "2020-04-06T03:56:21.653819", "oa_status": "closed", "publisher": "Elsevier BV", "z_authors": [{"given": "Toshiro", "family": "Mizoue", "sequence": "first"}, {"given": "Toshiya", "family": "Horibe", "sequence": "additional"}, {"given": "Kazuo", "family": "Maruyama", "sequence": "additional"}, {"given": "Tomoko", "family": "Takizawa", "sequence": "additional"}, {"given": "Motoharu", "family": "Iwatsuru", "sequence": "additional"}, {"given": "Kenji", "family": "Kono", "sequence": "additional"}, {"given": "Hironobu", "family": "Yanagie", "sequence": "additional"}, {"given": "Fuminori", "family": "Moriyasu", "sequence": "additional"}], "is_paratext": false, "journal_name": "International Journal of Pharmaceutics", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0378-5173", "journal_issn_l": "0378-5173", "published_date": "2002-04-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1109/sas.2019.8705987", "year": 2019, "genre": "proceedings-article", "is_oa": false, "title": "Bring your own Sensor: Use your Android Smartphone as a Sensing Platform", "doi_url": "https://doi.org/10.1109/sas.2019.8705987", "updated": "2020-02-08T04:59:33.784144", "oa_status": "closed", "publisher": "IEEE", "z_authors": [{"given": "Gilles", "family": "Callebaut", "sequence": "first"}, {"given": "Geoffrey", "family": "Ottoy", "sequence": "additional"}, {"given": "Lieven De", "family": "Strycker", "sequence": "additional"}], "is_paratext": false, "journal_name": "2019 IEEE Sensors Applications Symposium (SAS)", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2019-03-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.4236/oalib.1100444", "year": 2014, "genre": "journal-article", "is_oa": true, "title": "A Case Study of the Communication Pattern and Participation in Life of a 51-Year Aphasic Adult in Natural Setting", "doi_url": "https://doi.org/10.4236/oalib.1100444", "updated": "2020-03-04T13:16:45.656538", "oa_status": "bronze", "publisher": "Scientific Research Publishing, Inc,", "z_authors": [{"given": "Ojinga Gideon", "family": "Omiunu", "sequence": "first"}], "is_paratext": false, "journal_name": "OALib", "oa_locations": [{"url": "https://doi.org/10.4236/oalib.1100444", "pmh_id": null, "is_best": true, "license": null, "updated": "2019-02-07T00:23:33.492183", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://doi.org/10.4236/oalib.1100444", "url_for_landing_page": null, "repository_institution": null}, {"url": "http://pdfs.semanticscholar.org/1a42/b64948d3fcd70eee591726b5bf80b0c37cea.pdf", "pmh_id": null, "is_best": false, "license": null, "updated": "2019-10-01T00:00:00", "version": "submittedVersion", "evidence": "oa repository (semantic scholar lookup)", "host_type": "repository", "endpoint_id": null, "url_for_pdf": "http://pdfs.semanticscholar.org/1a42/b64948d3fcd70eee591726b5bf80b0c37cea.pdf", "url_for_landing_page": "https://semanticscholar.org/paper/1a42b64948d3fcd70eee591726b5bf80b0c37cea", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "2333-9705,2333-9721", "journal_issn_l": "2333-9705", "published_date": "2014-01-01", "best_oa_location": {"url": "https://doi.org/10.4236/oalib.1100444", "pmh_id": null, "is_best": true, "license": null, "updated": "2019-02-07T00:23:33.492183", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://doi.org/10.4236/oalib.1100444", "url_for_landing_page": null, "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": true} +{"doi": "10.1007/978-1-4302-4201-7_5", "year": 2012, "genre": "book-chapter", "is_oa": false, "title": "Grouping and Summarizing", "doi_url": "https://doi.org/10.1007/978-1-4302-4201-7_5", "updated": "2020-03-21T09:15:39.647605", "oa_status": "closed", "publisher": "Apress", "z_authors": [{"given": "Jason", "family": "Brimhall", "sequence": "first"}, {"given": "David", "family": "Dye", "sequence": "additional"}, {"given": "Jonathan", "family": "Gennick", "sequence": "additional"}, {"given": "Andy", "family": "Roberts", "sequence": "additional"}, {"given": "Wayne", "family": "Sheffield", "sequence": "additional"}], "is_paratext": false, "journal_name": "SQL Server 2012 T-SQL Recipes", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2012-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1111/j.1365-313x.1992.tb00152.x", "year": 1992, "genre": "journal-article", "is_oa": false, "title": "In-situlocalization of cyanogenic β-glucosidase (linamarase) gene expression in leaves of cassava (Manihot esculentaCranz) using non-isotopic riboprobes", "doi_url": "https://doi.org/10.1111/j.1365-313x.1992.tb00152.x", "updated": "2020-03-21T19:33:26.355324", "oa_status": "closed", "publisher": "Wiley", "z_authors": [{"given": "A. Pancoro and M.A.", "family": "Hughes", "sequence": "first"}], "is_paratext": false, "journal_name": "The Plant Journal", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0960-7412", "journal_issn_l": "0960-7412", "published_date": "1992-09-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1109/twc.2009.080612", "year": 2009, "genre": "journal-article", "is_oa": false, "title": "Transmitter optimization and performance gain for multiple-input single-output systems with finite-rate direction feedback", "doi_url": "https://doi.org/10.1109/twc.2009.080612", "updated": "2020-03-22T18:48:25.947545", "oa_status": "closed", "publisher": "Institute of Electrical and Electronics Engineers (IEEE)", "z_authors": [{"given": "Zhengdao", "family": "Wang", "sequence": "first"}, {"given": "Shengli", "family": "Zhou", "sequence": "additional"}, {"given": "Jinhong", "family": "Wu", "sequence": "additional"}], "is_paratext": false, "journal_name": "IEEE Transactions on Wireless Communications", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1536-1276", "journal_issn_l": "1536-1276", "published_date": "2009-05-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1097/00005392-199904020-00076", "year": 1999, "genre": "journal-article", "is_oa": false, "title": "EFFECTIVE SUPPRESSION OF DIHYDROTESTOSTERONE (DHT) BY GI198745, A NOVEL, DUAL 5 ALPHA REDUCTASE INHIBITOR", "doi_url": "https://doi.org/10.1097/00005392-199904020-00076", "updated": "2020-03-08T04:45:15.181154", "oa_status": "closed", "publisher": "Ovid Technologies (Wolters Kluwer Health)", "z_authors": [{"given": "Richard V", "family": "Clark", "sequence": "first"}, {"given": "David J", "family": "Hermann", "sequence": "additional"}, {"given": "Hoda", "family": "Gabriel", "sequence": "additional"}, {"given": "Timothy H", "family": "Wilson", "sequence": "additional"}, {"given": "Betsy B", "family": "Morrill", "sequence": "additional"}, {"given": "Stuart", "family": "Hobbs", "sequence": "additional"}], "is_paratext": false, "journal_name": "The Journal of Urology", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0022-5347", "journal_issn_l": "0022-5347", "published_date": "1999-04-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1016/j.physbeh.2011.12.022", "year": 2012, "genre": "journal-article", "is_oa": false, "title": "Dopamine and food reward: Effects of acute tyrosine/phenylalanine depletion on appetite", "doi_url": "https://doi.org/10.1016/j.physbeh.2011.12.022", "updated": "2020-03-23T23:39:10.242485", "oa_status": "closed", "publisher": "Elsevier BV", "z_authors": [{"given": "Charlotte A.", "family": "Hardman", "sequence": "first"}, {"given": "Vanessa M.B.", "family": "Herbert", "sequence": "additional"}, {"given": "Jeffrey M.", "family": "Brunstrom", "sequence": "additional"}, {"given": "Marcus R.", "family": "Munafò", "sequence": "additional"}, {"given": "Peter J.", "family": "Rogers", "sequence": "additional"}], "is_paratext": false, "journal_name": "Physiology & Behavior", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0031-9384", "journal_issn_l": "0031-9384", "published_date": "2012-03-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.16980/jitc.12.5.201610", "year": 2016, "genre": "journal-issue", "is_oa": false, "title": null, "doi_url": "https://doi.org/10.16980/jitc.12.5.201610", "updated": "2020-03-26T15:38:15.506226", "oa_status": "closed", "publisher": "Korea International Trade Research Institute", "z_authors": null, "is_paratext": false, "journal_name": "Korea International Trade Research Institute", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2016-10-31", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.4025/actascihealthsci.v33i2.7956", "year": 2011, "genre": "journal-article", "is_oa": true, "title": "Desigualdades nos indicadores de saúde da mãe e do recém-nascido, no Estado do Paraná", "doi_url": "https://doi.org/10.4025/actascihealthsci.v33i2.7956", "updated": "2020-03-19T20:54:56.924528", "oa_status": "gold", "publisher": "Universidade Estadual de Maringa", "z_authors": [{"given": "Kelen Marja", "family": "Predebon", "sequence": "first"}, {"given": "Thais Aidar de Freitas", "family": "Mathias", "sequence": "additional"}], "is_paratext": false, "journal_name": "Acta Scientiarum. Health Science", "oa_locations": [{"url": "http://periodicos.uem.br/ojs/index.php/ActaSciHealthSci/article/download/7956/pdf", "pmh_id": null, "is_best": true, "license": "cc-by", "updated": "2019-02-26T23:46:42.509576", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://periodicos.uem.br/ojs/index.php/ActaSciHealthSci/article/download/7956/pdf", "url_for_landing_page": "https://doi.org/10.4025/actascihealthsci.v33i2.7956", "repository_institution": null}, {"url": "https://doi.org/10.4025/actascihealthsci.v33i2.7956", "pmh_id": null, "is_best": false, "license": "cc-by", "updated": "2020-04-24T06:25:28.186984", "version": "publishedVersion", "evidence": "oa journal (via doaj)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.4025/actascihealthsci.v33i2.7956", "repository_institution": null}], "data_standard": 2, "journal_is_oa": true, "journal_issns": "1807-8648,1679-9291", "journal_issn_l": "1679-9291", "published_date": "2011-09-30", "best_oa_location": {"url": "http://periodicos.uem.br/ojs/index.php/ActaSciHealthSci/article/download/7956/pdf", "pmh_id": null, "is_best": true, "license": "cc-by", "updated": "2019-02-26T23:46:42.509576", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://periodicos.uem.br/ojs/index.php/ActaSciHealthSci/article/download/7956/pdf", "url_for_landing_page": "https://doi.org/10.4025/actascihealthsci.v33i2.7956", "repository_institution": null}, "journal_is_in_doaj": true, "has_repository_copy": false} +{"doi": "10.1016/j.cor.2018.11.002", "year": 2019, "genre": "journal-article", "is_oa": false, "title": "Optimal facility layout and material handling network design", "doi_url": "https://doi.org/10.1016/j.cor.2018.11.002", "updated": "2020-02-29T17:57:40.122166", "oa_status": "closed", "publisher": "Elsevier BV", "z_authors": [{"given": "Armin", "family": "Klausnitzer", "sequence": "first"}, {"given": "Rainer", "family": "Lasch", "sequence": "additional"}], "is_paratext": false, "journal_name": "Computers & Operations Research", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0305-0548", "journal_issn_l": "0305-0548", "published_date": "2019-03-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1016/j.ejca.2014.02.023", "year": 2014, "genre": "journal-article", "is_oa": true, "title": "Adverse surgical outcomes in screen-detected ductal carcinoma in situ of the breast", "doi_url": "https://doi.org/10.1016/j.ejca.2014.02.023", "updated": "2020-03-06T14:50:28.823394", "oa_status": "green", "publisher": "Elsevier BV", "z_authors": [{"given": "Jeremy", "family": "Thomas", "sequence": "first"}, {"given": "Andrew", "family": "Hanby", "sequence": "additional"}, {"given": "Sarah E.", "family": "Pinder", "sequence": "additional"}, {"given": "Graham", "family": "Ball", "sequence": "additional"}, {"given": "Gill", "family": "Lawrence", "sequence": "additional"}, {"given": "Anthony", "family": "Maxwell", "sequence": "additional"}, {"given": "Matthew", "family": "Wallis", "sequence": "additional"}, {"given": "Andrew", "family": "Evans", "sequence": "additional"}, {"given": "Hilary", "family": "Dobson", "sequence": "additional"}, {"given": "Karen", "family": "Clements", "sequence": "additional"}, {"given": "Alastair", "family": "Thompson", "sequence": "additional"}], "is_paratext": false, "journal_name": "European Journal of Cancer", "oa_locations": [{"url": "http://irep.ntu.ac.uk/id/eprint/26926/1/PubSub4291_Ball.pdf", "pmh_id": "oai:irep.ntu.ac.uk:26926", "is_best": true, "license": null, "updated": "2020-03-30T03:10:47.341539", "version": "submittedVersion", "evidence": "oa repository (via OAI-PMH doi match)", "host_type": "repository", "endpoint_id": "2bec808aad12bb6c794", "url_for_pdf": "http://irep.ntu.ac.uk/id/eprint/26926/1/PubSub4291_Ball.pdf", "url_for_landing_page": "http://irep.ntu.ac.uk/id/eprint/26926/1/PubSub4291_Ball.pdf", "repository_institution": "Nottingham Trent Repository - Nottingham Trent University's Institutional Repository"}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0959-8049", "journal_issn_l": "0959-8049", "published_date": "2014-07-01", "best_oa_location": {"url": "http://irep.ntu.ac.uk/id/eprint/26926/1/PubSub4291_Ball.pdf", "pmh_id": "oai:irep.ntu.ac.uk:26926", "is_best": true, "license": null, "updated": "2020-03-30T03:10:47.341539", "version": "submittedVersion", "evidence": "oa repository (via OAI-PMH doi match)", "host_type": "repository", "endpoint_id": "2bec808aad12bb6c794", "url_for_pdf": "http://irep.ntu.ac.uk/id/eprint/26926/1/PubSub4291_Ball.pdf", "url_for_landing_page": "http://irep.ntu.ac.uk/id/eprint/26926/1/PubSub4291_Ball.pdf", "repository_institution": "Nottingham Trent Repository - Nottingham Trent University's Institutional Repository"}, "journal_is_in_doaj": false, "has_repository_copy": true} +{"doi": "10.1142/9789812796691_0016", "year": 2003, "genre": "book-chapter", "is_oa": false, "title": "Role of Iron Metabolism in Multiple Sclerosis", "doi_url": "https://doi.org/10.1142/9789812796691_0016", "updated": "2020-03-19T16:22:00.811858", "oa_status": "closed", "publisher": "WORLD SCIENTIFIC", "z_authors": [{"given": "Maritha J.", "family": "Kotze", "sequence": "first", "affiliation": [{"name": "Division of Human Genetics, Faculty of Health Sciences, University of Stellenbosch, Tygerberg 7500, South Africa"}]}, {"given": "J. Nico P.", "family": "De Villiers", "sequence": "additional", "affiliation": [{"name": "Division of Human Genetics, Faculty of Health Sciences, University of Stellenbosch, Tygerberg 7500, South Africa"}]}, {"given": "Monique G.", "family": "Zaahl", "sequence": "additional", "affiliation": [{"name": "MRC Unit of Molecular Hematology, Weatherall Institute of Molecular Medicine, John Radcliffe Hospital, Headington, Oxford OX3 9DS, UK"}]}, {"given": "Kathryn J. H.", "family": "Robson", "sequence": "additional", "affiliation": [{"name": "MRC Unit of Molecular Hematology, Weatherall Institute of Molecular Medicine, John Radcliffe Hospital, Headington, Oxford OX3 9DS, UK"}]}], "is_paratext": false, "journal_name": "Metal Ions and Neurodegenerative Disorders", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2003-11-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.4028/www.scientific.net/kem.86-87.237", "year": 1993, "genre": "journal-article", "is_oa": false, "title": "Development of a Digital Speckle Correlation System for Use in the Non-Destructive Testing of Advanced Engineering Ceramics", "doi_url": "https://doi.org/10.4028/www.scientific.net/kem.86-87.237", "updated": "2020-03-25T23:48:39.254328", "oa_status": "closed", "publisher": "Trans Tech Publications, Ltd.", "z_authors": [{"given": "D.", "family": "Coburn", "sequence": "first"}, {"given": "J.A.", "family": "Slevin", "sequence": "additional"}], "is_paratext": false, "journal_name": "Key Engineering Materials", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1662-9795", "journal_issn_l": "1013-9826", "published_date": "1993-07-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1203/00006450-199704001-00348", "year": 1997, "genre": "journal-article", "is_oa": true, "title": "Inositol 1, 4, 5 Triphosphate (IP3) Receptor Modification During Hypoxia in Cerebral Cortical Nuclei of the Guinea Pig Fetus. ♦ 328", "doi_url": "https://doi.org/10.1203/00006450-199704001-00348", "updated": "2020-03-27T00:50:24.766701", "oa_status": "bronze", "publisher": "Springer Science and Business Media LLC", "z_authors": [{"given": "Om P.", "family": "Mishra", "sequence": "first"}, {"given": "Santina", "family": "Zanelli", "sequence": "additional"}, {"given": "Joanna", "family": "Kubin", "sequence": "additional"}, {"given": "Woo-Taek", "family": "Kim", "sequence": "additional"}, {"given": "Endla K.", "family": "Anday", "sequence": "additional"}, {"given": "Maria", "family": "Delivoria-Papadopoulos", "sequence": "additional"}], "is_paratext": false, "journal_name": "Pediatric Research", "oa_locations": [{"url": "https://www.nature.com/articles/pr1997507.pdf", "pmh_id": null, "is_best": true, "license": null, "updated": "2018-06-17T14:57:25.976059", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.nature.com/articles/pr1997507.pdf", "url_for_landing_page": "https://doi.org/10.1203/00006450-199704001-00348", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0031-3998,1530-0447", "journal_issn_l": "0031-3998", "published_date": "1997-04-01", "best_oa_location": {"url": "https://www.nature.com/articles/pr1997507.pdf", "pmh_id": null, "is_best": true, "license": null, "updated": "2018-06-17T14:57:25.976059", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.nature.com/articles/pr1997507.pdf", "url_for_landing_page": "https://doi.org/10.1203/00006450-199704001-00348", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1109/wisa.2015.60", "year": 2015, "genre": "proceedings-article", "is_oa": false, "title": "A MMDB Cluster Based Cloud Platform for Query-Intensive Web Information Systems", "doi_url": "https://doi.org/10.1109/wisa.2015.60", "updated": "2020-03-16T17:00:42.799926", "oa_status": "closed", "publisher": "IEEE", "z_authors": [{"given": "Aipeng", "family": "Li", "sequence": "first"}, {"given": "Xing", "family": "Chen", "sequence": "additional"}, {"given": "Yuanbin", "family": "Xu", "sequence": "additional"}, {"given": "Xuee", "family": "Zeng", "sequence": "additional"}, {"given": "Xingtu", "family": "Lan", "sequence": "additional"}, {"given": "Wenzhong", "family": "Guo", "sequence": "additional"}], "is_paratext": false, "journal_name": "2015 12th Web Information System and Application Conference (WISA)", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2015-09-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1080/09751122.2010.11889997", "year": 2010, "genre": "journal-article", "is_oa": false, "title": "The Effect of Analogical Reasoning and Extended Wait Time on Achievement in Biology", "doi_url": "https://doi.org/10.1080/09751122.2010.11889997", "updated": "2020-03-09T00:35:42.006395", "oa_status": "closed", "publisher": "Kamla Raj Enterprises", "z_authors": [{"given": "Janet Omolayo", "family": "Olajide", "sequence": "first", "affiliation": [{"name": "Samaru College of Agriculture, Division of Agricultural Colleges, Ahmadu Bello University, Zaria, Kaduna State, Nigeria"}]}, {"given": "Femi Adetunji", "family": "Adeoye", "sequence": "additional", "affiliation": [{"name": "School of Education, National Open University of Nigeria, Lagos, Lagos State, Nigeria"}]}], "is_paratext": false, "journal_name": "International Journal of Educational Sciences", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0975-1122", "journal_issn_l": "0975-1122", "published_date": "2010-07-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1007/978-1-4614-0539-9_1169", "year": 2013, "genre": "book-chapter", "is_oa": false, "title": "3α-Isobutyroyloxy-furanoeremophil-9-one (Euryopsonol-isobutyrat)", "doi_url": "https://doi.org/10.1007/978-1-4614-0539-9_1169", "updated": "2020-02-08T08:21:06.309896", "oa_status": "closed", "publisher": "Springer New York", "z_authors": null, "is_paratext": false, "journal_name": "Natural Compounds", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2013-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.2110/jsr.2012.12", "year": 2012, "genre": "journal-article", "is_oa": false, "title": "Constructing Sandstone Provenance and Classification Ternary Diagrams Using An Electronic Spreadsheet", "doi_url": "https://doi.org/10.2110/jsr.2012.12", "updated": "2020-03-22T09:27:09.023104", "oa_status": "closed", "publisher": "Society for Sedimentary Geology", "z_authors": [{"given": "K. M.", "family": "Zahid", "sequence": "first"}, {"given": "D. L.", "family": "Barbeau", "sequence": "additional"}], "is_paratext": false, "journal_name": "Journal of Sedimentary Research", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1527-1404", "journal_issn_l": "1527-1404", "published_date": "2012-02-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1016/s0021-9673(00)84953-5", "year": 1980, "genre": "journal-article", "is_oa": false, "title": "Comparative assessment of gas—liquid chromatography and high-performance liquid chromatography for the separation of tin tetraalkyls and alkyltin halides", "doi_url": "https://doi.org/10.1016/s0021-9673(00)84953-5", "updated": "2020-03-08T10:05:15.727727", "oa_status": "closed", "publisher": "Elsevier BV", "z_authors": [{"given": "D.Thorburn", "family": "Burns", "sequence": "first"}, {"given": "F.", "family": "Glockling", "sequence": "additional"}, {"given": "M.", "family": "Harriott", "sequence": "additional"}], "is_paratext": false, "journal_name": "Journal of Chromatography A", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0021-9673", "journal_issn_l": "0021-9673", "published_date": "1980-11-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.15623/ijret.2017.0605018", "year": 2017, "genre": "journal-article", "is_oa": true, "title": "FACTORS INFLUENCING ACADEMIC PERFORMANCE OF THE STUDENTS AT UNIVERSITY LEVEL EXAM: A LITERATURE REVIEW", "doi_url": "https://doi.org/10.15623/ijret.2017.0605018", "updated": "2020-03-12T03:51:09.911478", "oa_status": "bronze", "publisher": "eSAT Publishing House", "z_authors": [{"given": "Radheshyam H. Gajghat", "family": ".", "sequence": "first"}], "is_paratext": false, "journal_name": "International Journal of Research in Engineering and Technology", "oa_locations": [{"url": "https://doi.org/10.15623/ijret.2017.0605018", "pmh_id": null, "is_best": true, "license": null, "updated": "2019-10-14T07:56:48.623304", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://doi.org/10.15623/ijret.2017.0605018", "url_for_landing_page": null, "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "2321-7308,2319-1163", "journal_issn_l": "2319-1163", "published_date": "2017-05-25", "best_oa_location": {"url": "https://doi.org/10.15623/ijret.2017.0605018", "pmh_id": null, "is_best": true, "license": null, "updated": "2019-10-14T07:56:48.623304", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://doi.org/10.15623/ijret.2017.0605018", "url_for_landing_page": null, "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1109/eptc.2018.8654391", "year": 2018, "genre": "proceedings-article", "is_oa": false, "title": "Via Interconnections for Half-Inch Sized Package Fabricated by Minimal Fab", "doi_url": "https://doi.org/10.1109/eptc.2018.8654391", "updated": "2020-02-07T15:50:36.911685", "oa_status": "closed", "publisher": "IEEE", "z_authors": [{"given": "Fumito", "family": "Imura", "sequence": "first"}, {"given": "Michihiro", "family": "Inoue", "sequence": "additional"}, {"given": "Sommawan", "family": "Khumpuang", "sequence": "additional"}, {"given": "Shiro", "family": "Hara", "sequence": "additional"}], "is_paratext": false, "journal_name": "2018 IEEE 20th Electronics Packaging Technology Conference (EPTC)", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2018-12-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1109/ica-symp.2019.8646146", "year": 2019, "genre": "proceedings-article", "is_oa": false, "title": "Trajectory Tracking Control for Omnidirectional Mobile Robots Using Direct Adaptive Neural Network Dynamic Surface Controller", "doi_url": "https://doi.org/10.1109/ica-symp.2019.8646146", "updated": "2020-02-07T15:50:59.175637", "oa_status": "closed", "publisher": "IEEE", "z_authors": [{"given": "Duyen-Ha", "family": "Thi Kim", "sequence": "first"}, {"given": "Tien-Ngo", "family": "Manh", "sequence": "additional"}, {"given": "Ngoc-Pham", "family": "Van Bach", "sequence": "additional"}, {"given": "Tuan-Pham", "family": "Duc", "sequence": "additional"}], "is_paratext": false, "journal_name": "2019 First International Symposium on Instrumentation, Control, Artificial Intelligence, and Robotics (ICA-SYMP)", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2019-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1590/2179-8087.019316", "year": 2018, "genre": "journal-article", "is_oa": true, "title": "Allometric models to biomass in restoration areas in the Atlantic rain forest", "doi_url": "https://doi.org/10.1590/2179-8087.019316", "updated": "2020-03-06T03:27:56.314870", "oa_status": "gold", "publisher": "FapUNIFESP (SciELO)", "z_authors": [{"given": "Emanuel José Gomes de", "family": "Araújo", "sequence": "first", "affiliation": [{"name": "Universidade Federal Rural do Rio de Janeiro, Brazil"}]}, {"given": "Gabrielle Hambrecht", "family": "Loureiro", "sequence": "additional", "affiliation": [{"name": "Suzano Papel e Celulose, Brazil"}]}, {"given": "Carlos Roberto", "family": "Sanquetta", "sequence": "additional", "affiliation": [{"name": "Universidade Federal do Paraná, Brazil"}]}, {"given": "Mateus Niroh Inoue", "family": "Sanquetta", "sequence": "additional", "affiliation": [{"name": "Universidade Federal do Paraná, Brazil"}]}, {"given": "Ana Paula Dalla", "family": "Corte", "sequence": "additional", "affiliation": [{"name": "Universidade Federal do Paraná, Brazil"}]}, {"given": "Sylvio", "family": "Péllico Netto", "sequence": "additional", "affiliation": [{"name": "Universidade Federal do Paraná, Brazil"}]}, {"given": "Alexandre", "family": "Behling", "sequence": "additional", "affiliation": [{"name": "Universidade Federal do Paraná, Brazil"}]}], "is_paratext": false, "journal_name": "Floresta e Ambiente", "oa_locations": [{"url": "http://www.scielo.br/pdf/floram/v25n1/2179-8087-floram-25-1-e20160193.pdf", "pmh_id": null, "is_best": true, "license": "cc-by", "updated": "2019-12-25T00:08:04.010040", "version": "publishedVersion", "evidence": "open (via page says license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://www.scielo.br/pdf/floram/v25n1/2179-8087-floram-25-1-e20160193.pdf", "url_for_landing_page": "https://doi.org/10.1590/2179-8087.019316", "repository_institution": null}, {"url": "https://doi.org/10.1590/2179-8087.019316", "pmh_id": null, "is_best": false, "license": "cc-by", "updated": "2020-04-22T14:49:36.486394", "version": "publishedVersion", "evidence": "oa journal (via doaj)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.1590/2179-8087.019316", "repository_institution": null}, {"url": "http://pdfs.semanticscholar.org/cbf0/a7b5759bcb7632c00cddf58e258938cb2510.pdf", "pmh_id": null, "is_best": false, "license": null, "updated": "2019-10-01T00:00:00", "version": "submittedVersion", "evidence": "oa repository (semantic scholar lookup)", "host_type": "repository", "endpoint_id": null, "url_for_pdf": "http://pdfs.semanticscholar.org/cbf0/a7b5759bcb7632c00cddf58e258938cb2510.pdf", "url_for_landing_page": "https://semanticscholar.org/paper/cbf0a7b5759bcb7632c00cddf58e258938cb2510", "repository_institution": null}], "data_standard": 2, "journal_is_oa": true, "journal_issns": "2179-8087,1415-0980", "journal_issn_l": "1415-0980", "published_date": "2018-02-01", "best_oa_location": {"url": "http://www.scielo.br/pdf/floram/v25n1/2179-8087-floram-25-1-e20160193.pdf", "pmh_id": null, "is_best": true, "license": "cc-by", "updated": "2019-12-25T00:08:04.010040", "version": "publishedVersion", "evidence": "open (via page says license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://www.scielo.br/pdf/floram/v25n1/2179-8087-floram-25-1-e20160193.pdf", "url_for_landing_page": "https://doi.org/10.1590/2179-8087.019316", "repository_institution": null}, "journal_is_in_doaj": true, "has_repository_copy": true} +{"doi": "10.1038/clpt.1992.21", "year": 1992, "genre": "journal-article", "is_oa": false, "title": "The method of relative drug accumulation: A simple method for illustrating the effects of different drug dosing regimens and variability in drug elimination on time courses of drug concentrations", "doi_url": "https://doi.org/10.1038/clpt.1992.21", "updated": "2020-03-20T12:16:35.441442", "oa_status": "closed", "publisher": "Springer Science and Business Media LLC", "z_authors": [{"given": "Thorir D", "family": "Bjornsson", "sequence": "first"}], "is_paratext": false, "journal_name": "Clinical Pharmacology and Therapeutics", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0009-9236,1532-6535", "journal_issn_l": "0009-9236", "published_date": "1992-03-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.7551/mitpress/3926.003.0008", "year": 1998, "genre": "book-chapter", "is_oa": false, "title": "Fuzzy Relations and Their Calculus", "doi_url": "https://doi.org/10.7551/mitpress/3926.003.0008", "updated": "2020-02-06T04:42:47.095604", "oa_status": "closed", "publisher": "The MIT Press", "z_authors": null, "is_paratext": false, "journal_name": "An Introduction to Fuzzy Sets", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "1998-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1007/978-3-642-29482-2_1", "year": 2014, "genre": "book-chapter", "is_oa": false, "title": "The Upper Mantle Seismic Velocity Structure of South-Central Africa and the Seismic Architecture of Precambrian Lithosphere Beneath the Congo Basin", "doi_url": "https://doi.org/10.1007/978-3-642-29482-2_1", "updated": "2020-03-15T06:51:45.897859", "oa_status": "closed", "publisher": "Springer Berlin Heidelberg", "z_authors": [{"given": "Andriamiranto", "family": "Raveloson", "sequence": "first"}, {"given": "Andrew", "family": "Nyblade", "sequence": "additional"}, {"given": "Stewart", "family": "Fishwick", "sequence": "additional"}, {"given": "Azangi", "family": "Mangongolo", "sequence": "additional"}, {"given": "Sharad", "family": "Master", "sequence": "additional"}], "is_paratext": false, "journal_name": "Geology and Resource Potential of the Congo Basin", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2014-12-16", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1111/j.1536-7150.1997.tb03456.x", "year": 1997, "genre": "journal-article", "is_oa": false, "title": "Organization and Distributional Equality in a Network of Communes: The Shakers", "doi_url": "https://doi.org/10.1111/j.1536-7150.1997.tb03456.x", "updated": "2020-02-07T15:27:53.029310", "oa_status": "closed", "publisher": "Wiley-Blackwell", "z_authors": [{"given": "Metin M.", "family": "Cosgel"}, {"given": "Thomas J.", "family": "Miceli"}, {"given": "John E.", "family": "Murray"}], "is_paratext": false, "journal_name": "American Journal of Economics and Sociology", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0002-9246,1536-7150", "journal_issn_l": "0002-9246", "published_date": "1997-04-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1080/10811449708414413", "year": 1997, "genre": "journal-article", "is_oa": false, "title": "Parental grief of a perinatal loss: A comparison of individual and relationship variables", "doi_url": "https://doi.org/10.1080/10811449708414413", "updated": "2020-03-21T05:42:27.269033", "oa_status": "closed", "publisher": "Informa UK Limited", "z_authors": [{"given": "Volker", "family": "Thomas", "sequence": "first"}, {"given": "Phil", "family": "Striegel", "sequence": "additional"}, {"given": "Dorothea", "family": "Dudley", "sequence": "additional"}, {"given": "Jane", "family": "Wilkins", "sequence": "additional"}, {"given": "Darlene", "family": "Gibson", "sequence": "additional"}], "is_paratext": false, "journal_name": "Journal of Personal and Interpersonal Loss", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1081-1443", "journal_issn_l": "1081-1443", "published_date": "1997-04-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1007/978-1-349-04912-7_9", "year": 1977, "genre": "book-chapter", "is_oa": false, "title": "The primitive ungulates", "doi_url": "https://doi.org/10.1007/978-1-349-04912-7_9", "updated": "2020-03-14T09:43:27.933850", "oa_status": "closed", "publisher": "Macmillan Education UK", "z_authors": [{"given": "J. E.", "family": "Webb", "sequence": "first"}, {"given": "J. A.", "family": "Wallwork", "sequence": "additional"}, {"given": "J. H.", "family": "Elgood", "sequence": "additional"}], "is_paratext": false, "journal_name": "Guide to Living Mammals", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "1977-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1017/9781108304429.008", "year": null, "genre": "book-chapter", "is_oa": false, "title": "Capital Flows and Macroprudential Policy", "doi_url": "https://doi.org/10.1017/9781108304429.008", "updated": "2020-02-05T00:03:44.205302", "oa_status": "closed", "publisher": "Cambridge University Press", "z_authors": [{"given": "Matteo F.", "family": "Ghilardi", "sequence": "first"}, {"given": "Shanaka J.", "family": "Peiris", "sequence": "additional"}], "is_paratext": false, "journal_name": "Macroprudential Policy and Practice", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": null, "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1007/978-3-662-47152-4_10", "year": 2015, "genre": "book-chapter", "is_oa": false, "title": "Raumzeitgeometrie", "doi_url": "https://doi.org/10.1007/978-3-662-47152-4_10", "updated": "2020-03-15T06:51:43.234472", "oa_status": "closed", "publisher": "Springer Berlin Heidelberg", "z_authors": [{"given": "N. David", "family": "Mermin", "sequence": "first"}], "is_paratext": false, "journal_name": "Es ist an der Zeit", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2015-09-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1016/0013-4694(95)00147-q", "year": 1995, "genre": "journal-article", "is_oa": false, "title": "Investigation of EEG non-linearity in dementia and Parkinson's disease", "doi_url": "https://doi.org/10.1016/0013-4694(95)00147-q", "updated": "2020-03-02T07:05:03.111050", "oa_status": "closed", "publisher": "Elsevier BV", "z_authors": [{"given": "C.J.", "family": "Stam", "sequence": "first"}, {"given": "B.", "family": "Jelles", "sequence": "additional"}, {"given": "H.A.M.", "family": "Achtereekte", "sequence": "additional"}, {"given": "S.A.R.B.", "family": "Rombouts", "sequence": "additional"}, {"given": "J.P.J.", "family": "Slaets", "sequence": "additional"}, {"given": "R.W.M.", "family": "Keunen", "sequence": "additional"}], "is_paratext": false, "journal_name": "Electroencephalography and Clinical Neurophysiology", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0013-4694", "journal_issn_l": "0013-4694", "published_date": "1995-11-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1109/icip.1999.822894", "year": null, "genre": "proceedings-article", "is_oa": false, "title": "Document image data hiding technique using character spacing width sequence coding", "doi_url": "https://doi.org/10.1109/icip.1999.822894", "updated": "2020-02-07T15:51:57.307572", "oa_status": "closed", "publisher": "IEEE", "z_authors": [{"given": "N.", "family": "Chotikakamthorn"}], "is_paratext": false, "journal_name": "Proceedings 1999 International Conference on Image Processing (Cat. 99CH36348)", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": null, "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1016/j.geb.2007.07.006", "year": 2008, "genre": "journal-article", "is_oa": false, "title": "Regret minimization in repeated matrix games with variable stage duration", "doi_url": "https://doi.org/10.1016/j.geb.2007.07.006", "updated": "2020-02-29T17:57:38.292553", "oa_status": "closed", "publisher": "Elsevier BV", "z_authors": [{"given": "Shie", "family": "Mannor", "sequence": "first"}, {"given": "Nahum", "family": "Shimkin", "sequence": "additional"}], "is_paratext": false, "journal_name": "Games and Economic Behavior", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0899-8256", "journal_issn_l": "0899-8256", "published_date": "2008-05-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1111/1467-8489.00090", "year": 1999, "genre": "journal-article", "is_oa": true, "title": "The Travel Cost Method: an Empirical Investigation of Randall's Difficulty", "doi_url": "https://doi.org/10.1111/1467-8489.00090", "updated": "2020-04-18T22:33:49.873021", "oa_status": "green", "publisher": "Wiley-Blackwell", "z_authors": [{"given": "M.", "family": "Common"}, {"given": "T.", "family": "Bull"}, {"given": "N.", "family": "Stoeckl"}], "is_paratext": false, "journal_name": "The Australian Journal of Agricultural and Resource Economics", "oa_locations": [{"url": "https://researchonline.jcu.edu.au/14892/1/RDIFF.pdf", "pmh_id": "oai:researchonline.jcu.edu.au:14892", "is_best": true, "license": null, "updated": "2020-03-24T18:30:04.313502", "version": "acceptedVersion", "evidence": "oa repository (via OAI-PMH doi match)", "host_type": "repository", "endpoint_id": "13c188e0ff8a8e0a2d9", "url_for_pdf": "https://researchonline.jcu.edu.au/14892/1/RDIFF.pdf", "url_for_landing_page": "https://researchonline.jcu.edu.au/14892/1/RDIFF.pdf", "repository_institution": "James Cook University - ResearchOnline at James Cook University"}, {"url": "http://ageconsearch.umn.edu/record/117209/files/1467-8489.00090.pdf", "pmh_id": "oai:ageconsearch.umn.edu:117209", "is_best": false, "license": null, "updated": "2020-03-24T19:27:07.682309", "version": "submittedVersion", "evidence": "oa repository (via OAI-PMH title and first author match)", "host_type": "repository", "endpoint_id": "mf79cjfoywym4fwvffbh", "url_for_pdf": "http://ageconsearch.umn.edu/record/117209/files/1467-8489.00090.pdf", "url_for_landing_page": "http://ageconsearch.umn.edu/record/117209/files/1467-8489.00090.pdf", "repository_institution": "University of Minnesota, USA - AgEcon Search"}, {"url": "https://ageconsearch.umn.edu/record/117209/files/1467-8489.00090.pdf", "pmh_id": "oai:ageconsearch.umn.edu:117209", "is_best": false, "license": null, "updated": "2020-03-24T19:41:27.303215", "version": "submittedVersion", "evidence": "oa repository (via OAI-PMH title and first author match)", "host_type": "repository", "endpoint_id": "mf79cjfoywym4fwvffbh", "url_for_pdf": "https://ageconsearch.umn.edu/record/117209/files/1467-8489.00090.pdf", "url_for_landing_page": "http://ageconsearch.umn.edu/record/117209", "repository_institution": "University of Minnesota, USA - AgEcon Search"}, {"url": "https://openresearch-repository.anu.edu.au/bitstream/1885/40909/2/eep9705.pdf", "pmh_id": "oai:openresearch-repository.anu.edu.au:1885/40909", "is_best": false, "license": null, "updated": "2020-04-01T02:34:52.876231", "version": "submittedVersion", "evidence": "oa repository (via OAI-PMH title and first author match)", "host_type": "repository", "endpoint_id": "2nhihxmth4mwfyiuunth", "url_for_pdf": "https://openresearch-repository.anu.edu.au/bitstream/1885/40909/2/eep9705.pdf", "url_for_landing_page": "http://hdl.handle.net/1885/40909", "repository_institution": "Australian National University - ANU Open Research"}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1364-985X,1467-8489", "journal_issn_l": "1364-985X", "published_date": "1999-12-01", "best_oa_location": {"url": "https://researchonline.jcu.edu.au/14892/1/RDIFF.pdf", "pmh_id": "oai:researchonline.jcu.edu.au:14892", "is_best": true, "license": null, "updated": "2020-03-24T18:30:04.313502", "version": "acceptedVersion", "evidence": "oa repository (via OAI-PMH doi match)", "host_type": "repository", "endpoint_id": "13c188e0ff8a8e0a2d9", "url_for_pdf": "https://researchonline.jcu.edu.au/14892/1/RDIFF.pdf", "url_for_landing_page": "https://researchonline.jcu.edu.au/14892/1/RDIFF.pdf", "repository_institution": "James Cook University - ResearchOnline at James Cook University"}, "journal_is_in_doaj": false, "has_repository_copy": true} +{"doi": "10.7551/mitpress/4069.001.0001", "year": 2000, "genre": "book", "is_oa": false, "title": "Knowledge and Mind", "doi_url": "https://doi.org/10.7551/mitpress/4069.001.0001", "updated": "2020-02-06T04:42:33.300473", "oa_status": "closed", "publisher": "The MIT Press", "z_authors": [{"given": "Andrew", "family": "Brook", "sequence": "first"}, {"given": "Robert J.", "family": "Stainton", "sequence": "additional"}], "is_paratext": false, "journal_name": null, "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2000-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1515/9783110912173.151", "year": null, "genre": "book-chapter", "is_oa": false, "title": "9. Salient morphological features of nominal anglicisms: gender, plural, and genitive case", "doi_url": "https://doi.org/10.1515/9783110912173.151", "updated": "2020-02-05T00:02:53.301460", "oa_status": "closed", "publisher": "DE GRUYTER", "z_authors": null, "is_paratext": false, "journal_name": "Anglicisms in German", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": null, "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1007/978-3-8348-9292-8_4", "year": 2008, "genre": "book-chapter", "is_oa": false, "title": "Die z-Transformation", "doi_url": "https://doi.org/10.1007/978-3-8348-9292-8_4", "updated": "2020-03-21T09:14:33.289824", "oa_status": "closed", "publisher": "Vieweg+Teubner", "z_authors": [{"given": "Thomas", "family": "Frey", "sequence": "first"}, {"given": "Martin", "family": "Bossert", "sequence": "additional"}], "is_paratext": false, "journal_name": "Signal- und Systemtheorie", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2008-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1111/j.1365-3032.1984.tb00710.x", "year": 1984, "genre": "journal-article", "is_oa": false, "title": "A preparation of the stick insect Carausius morosus for recording intracellularly from identified neurones during walking", "doi_url": "https://doi.org/10.1111/j.1365-3032.1984.tb00710.x", "updated": "2020-03-22T18:48:15.121727", "oa_status": "closed", "publisher": "Wiley", "z_authors": [{"given": "D. H.", "family": "GODDEN", "sequence": "first"}, {"given": "D.", "family": "GRAHAM", "sequence": "additional"}], "is_paratext": false, "journal_name": "Physiological Entomology", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0307-6962,1365-3032", "journal_issn_l": "0307-6962", "published_date": "1984-09-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1001/jama.2009.909", "year": 2009, "genre": "journal-article", "is_oa": false, "title": "Clinical Practice Guidelines and Scientific Evidence", "doi_url": "https://doi.org/10.1001/jama.2009.909", "updated": "2020-03-23T23:40:16.508417", "oa_status": "closed", "publisher": "American Medical Association (AMA)", "z_authors": [{"given": "Finlay A.", "family": "McAlister", "sequence": "first"}], "is_paratext": false, "journal_name": "JAMA", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0098-7484", "journal_issn_l": "0098-7484", "published_date": "2009-07-08", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1111/j.1746-1561.2010.00533.x", "year": 2010, "genre": "journal-article", "is_oa": false, "title": "A Structured, Interactive Method for Youth Participation in a School District-University Partnership to Prevent Obesity", "doi_url": "https://doi.org/10.1111/j.1746-1561.2010.00533.x", "updated": "2020-03-22T18:48:52.768791", "oa_status": "closed", "publisher": "Wiley", "z_authors": [{"given": "Janet C.", "family": "Meininger", "sequence": "first"}, {"given": "Lisa R.", "family": "Reyes", "sequence": "additional"}, {"given": "Beatrice J.", "family": "Selwyn", "sequence": "additional"}, {"given": "Sandra L.", "family": "Upchurch", "sequence": "additional"}, {"given": "Christine A.", "family": "Brosnan", "sequence": "additional"}, {"given": "Wendell C.", "family": "Taylor", "sequence": "additional"}, {"given": "Evangelina", "family": "Villagomez", "sequence": "additional"}, {"given": "Vianey", "family": "Quintana", "sequence": "additional"}, {"given": "Bridgette", "family": "Pullis", "sequence": "additional"}, {"given": "Denise", "family": "Caudill", "sequence": "additional"}, {"given": "Sharon", "family": "Sterchy", "sequence": "additional"}, {"given": "Melinda", "family": "Phillips", "sequence": "additional"}], "is_paratext": false, "journal_name": "Journal of School Health", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0022-4391", "journal_issn_l": "0022-4391", "published_date": "2010-09-14", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.19177/reen.v4e12011133-157", "year": 2011, "genre": "journal-article", "is_oa": true, "title": "Uma Análise da Evolução da Produção Científica sobre Inovação no Brasil", "doi_url": "https://doi.org/10.19177/reen.v4e12011133-157", "updated": "2020-03-13T20:09:55.529364", "oa_status": "gold", "publisher": "Universidade do Sul de Santa Catarina - UNISUL", "z_authors": [{"given": "Jordana Marques", "family": "Kneipp", "sequence": "first"}, {"given": "Luciana Aparecida", "family": "Barbieri da Rosa", "sequence": "additional"}, {"given": "Roberto", "family": "Schoproni Bichueti", "sequence": "additional"}, {"given": "Ana Paula", "family": "Perlin", "sequence": "additional"}, {"given": "Vitor Francisco", "family": "Schuch Júnior", "sequence": "additional"}], "is_paratext": false, "journal_name": "Revista Eletrônica de Estratégia & Negócios", "oa_locations": [{"url": "http://portaldeperiodicos.unisul.br/index.php/EeN/article/download/597/634", "pmh_id": null, "is_best": true, "license": "cc-by-nc-nd", "updated": "2018-05-12T20:57:42.562759", "version": "publishedVersion", "evidence": "open (via page says license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://portaldeperiodicos.unisul.br/index.php/EeN/article/download/597/634", "url_for_landing_page": "https://doi.org/10.19177/reen.v4e12011133-157", "repository_institution": null}, {"url": "https://doi.org/10.19177/reen.v4e12011133-157", "pmh_id": null, "is_best": false, "license": "cc-by-nc-nd", "updated": "2020-04-24T06:25:31.284557", "version": "publishedVersion", "evidence": "oa journal (via doaj)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.19177/reen.v4e12011133-157", "repository_institution": null}], "data_standard": 2, "journal_is_oa": true, "journal_issns": "1984-3372,1984-3372", "journal_issn_l": "1984-3372", "published_date": "2011-10-21", "best_oa_location": {"url": "http://portaldeperiodicos.unisul.br/index.php/EeN/article/download/597/634", "pmh_id": null, "is_best": true, "license": "cc-by-nc-nd", "updated": "2018-05-12T20:57:42.562759", "version": "publishedVersion", "evidence": "open (via page says license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://portaldeperiodicos.unisul.br/index.php/EeN/article/download/597/634", "url_for_landing_page": "https://doi.org/10.19177/reen.v4e12011133-157", "repository_institution": null}, "journal_is_in_doaj": true, "has_repository_copy": false} +{"doi": "10.3847/1538-4357/aacb27", "year": 2018, "genre": "journal-article", "is_oa": true, "title": "A Magnetic Field Connecting the Galactic Center Circumnuclear Disk with Streamers and Mini-spiral: Implications from 850 μm Polarization Data", "doi_url": "https://doi.org/10.3847/1538-4357/aacb27", "updated": "2020-03-15T03:06:31.646925", "oa_status": "hybrid", "publisher": "American Astronomical Society", "z_authors": [{"ORCID": "http://orcid.org/0000-0001-9155-3978", "given": "Pei-Ying", "family": "Hsieh", "sequence": "first", "authenticated-orcid": false}, {"ORCID": "http://orcid.org/0000-0003-2777-5861", "given": "Patrick M.", "family": "Koch", "sequence": "additional", "authenticated-orcid": false}, {"ORCID": "http://orcid.org/0000-0003-4625-229X", "given": "Woong-Tae", "family": "Kim", "sequence": "additional", "authenticated-orcid": false}, {"given": "Paul T. P.", "family": "Ho", "sequence": "additional"}, {"ORCID": "http://orcid.org/0000-0002-0675-276X", "given": "Ya-Wen", "family": "Tang", "sequence": "additional", "authenticated-orcid": false}, {"ORCID": "http://orcid.org/0000-0001-8436-8803", "given": "Hsiang-Hsu", "family": "Wang", "sequence": "additional", "authenticated-orcid": false}], "is_paratext": false, "journal_name": "The Astrophysical Journal", "oa_locations": [{"url": "https://doi.org/10.3847/1538-4357/aacb27", "pmh_id": null, "is_best": true, "license": "cc-by", "updated": "2020-04-25T14:42:53.593061", "version": "publishedVersion", "evidence": "open (via crossref license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.3847/1538-4357/aacb27", "repository_institution": null}, {"url": "http://arxiv.org/pdf/1806.02719", "pmh_id": "oai:arXiv.org:1806.02719", "is_best": false, "license": null, "updated": "2020-04-05T08:57:32.566555", "version": "submittedVersion", "evidence": "oa repository (via OAI-PMH doi match)", "host_type": "repository", "endpoint_id": "ca8f8d56758a80a4f86", "url_for_pdf": "http://arxiv.org/pdf/1806.02719", "url_for_landing_page": "http://arxiv.org/abs/1806.02719", "repository_institution": "Cornell University - arXiv"}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1538-4357", "journal_issn_l": "0004-637X", "published_date": "2018-08-02", "best_oa_location": {"url": "https://doi.org/10.3847/1538-4357/aacb27", "pmh_id": null, "is_best": true, "license": "cc-by", "updated": "2020-04-25T14:42:53.593061", "version": "publishedVersion", "evidence": "open (via crossref license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.3847/1538-4357/aacb27", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": true} +{"doi": "10.1186/1744-859x-7-s1-s4", "year": 2008, "genre": "journal-article", "is_oa": true, "title": "Structure and function of the therapy department of the Open Psychotherapeutic Center", "doi_url": "https://doi.org/10.1186/1744-859x-7-s1-s4", "updated": "2020-03-21T01:58:55.137980", "oa_status": "gold", "publisher": "Springer Science and Business Media LLC", "z_authors": [{"given": "Dimitris", "family": "Moschonas", "sequence": "first"}], "is_paratext": false, "journal_name": "Annals of General Psychiatry", "oa_locations": [{"url": "https://annals-general-psychiatry.biomedcentral.com/track/pdf/10.1186/1744-859X-7-S1-S4", "pmh_id": null, "is_best": true, "license": null, "updated": "2018-05-28T10:39:08.999070", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://annals-general-psychiatry.biomedcentral.com/track/pdf/10.1186/1744-859X-7-S1-S4", "url_for_landing_page": "https://doi.org/10.1186/1744-859x-7-s1-s4", "repository_institution": null}, {"url": "https://doi.org/10.1186/1744-859x-7-s1-s4", "pmh_id": null, "is_best": false, "license": "cc-by", "updated": "2020-04-25T11:09:14.468648", "version": "publishedVersion", "evidence": "oa journal (via doaj)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.1186/1744-859x-7-s1-s4", "repository_institution": null}], "data_standard": 2, "journal_is_oa": true, "journal_issns": "1744-859X", "journal_issn_l": "1744-859X", "published_date": "2008-04-01", "best_oa_location": {"url": "https://annals-general-psychiatry.biomedcentral.com/track/pdf/10.1186/1744-859X-7-S1-S4", "pmh_id": null, "is_best": true, "license": null, "updated": "2018-05-28T10:39:08.999070", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://annals-general-psychiatry.biomedcentral.com/track/pdf/10.1186/1744-859X-7-S1-S4", "url_for_landing_page": "https://doi.org/10.1186/1744-859x-7-s1-s4", "repository_institution": null}, "journal_is_in_doaj": true, "has_repository_copy": false} +{"doi": "10.1007/978-3-319-74942-6_8", "year": 2018, "genre": "book-chapter", "is_oa": false, "title": "Molecular Cytology Applications on Gynecological Cytology", "doi_url": "https://doi.org/10.1007/978-3-319-74942-6_8", "updated": "2020-02-04T21:07:34.658661", "oa_status": "closed", "publisher": "Springer International Publishing", "z_authors": [{"given": "Francesca", "family": "Carozzi", "sequence": "first"}, {"given": "Giovanni", "family": "Negri", "sequence": "additional"}, {"given": "Cristina", "family": "Sani", "sequence": "additional"}], "is_paratext": false, "journal_name": "Molecular Applications in Cytology", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2018-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1007/978-94-015-8601-6_1", "year": 1997, "genre": "book-chapter", "is_oa": false, "title": "Contemporary Philosophy and the Problem of Truth", "doi_url": "https://doi.org/10.1007/978-94-015-8601-6_1", "updated": "2020-03-21T09:15:03.036736", "oa_status": "closed", "publisher": "Springer Netherlands", "z_authors": [{"given": "Jaakko", "family": "Hintikka", "sequence": "first"}], "is_paratext": false, "journal_name": "Lingua Universalis vs. Calculus Ratiocinator", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "1997-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.29081/jesr.v19i4.97", "year": 2017, "genre": "journal-article", "is_oa": true, "title": "MATEMATICAL MODELING OF THE MICROCLIMATE IN BUILDINGS WITH GREEN ROOFS", "doi_url": "https://doi.org/10.29081/jesr.v19i4.97", "updated": "2020-03-23T02:25:25.009697", "oa_status": "gold", "publisher": "Vasile Alecsandri University of Bacau", "z_authors": [{"given": "BORIS", "family": "EVSTAVIEV", "sequence": "first"}, {"given": "KATERINA", "family": "GABROVSKA", "sequence": "additional"}], "is_paratext": false, "journal_name": "Journal of Engineering Studies and Research", "oa_locations": [{"url": "https://doi.org/10.29081/jesr.v19i4.97", "pmh_id": null, "is_best": true, "license": "cc-by", "updated": "2020-04-27T10:17:08.408480", "version": "publishedVersion", "evidence": "oa journal (via doaj)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.29081/jesr.v19i4.97", "repository_institution": null}, {"url": "http://pdfs.semanticscholar.org/f5b0/570f63b2f679bbf79cf1dbfc6157690b8fb5.pdf", "pmh_id": null, "is_best": false, "license": null, "updated": "2019-10-01T00:00:00", "version": "submittedVersion", "evidence": "oa repository (semantic scholar lookup)", "host_type": "repository", "endpoint_id": null, "url_for_pdf": "http://pdfs.semanticscholar.org/f5b0/570f63b2f679bbf79cf1dbfc6157690b8fb5.pdf", "url_for_landing_page": "https://semanticscholar.org/paper/f5b0570f63b2f679bbf79cf1dbfc6157690b8fb5", "repository_institution": null}], "data_standard": 2, "journal_is_oa": true, "journal_issns": "2068-7559", "journal_issn_l": "2068-7559", "published_date": "2017-03-15", "best_oa_location": {"url": "https://doi.org/10.29081/jesr.v19i4.97", "pmh_id": null, "is_best": true, "license": "cc-by", "updated": "2020-04-27T10:17:08.408480", "version": "publishedVersion", "evidence": "oa journal (via doaj)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.29081/jesr.v19i4.97", "repository_institution": null}, "journal_is_in_doaj": true, "has_repository_copy": true} +{"doi": "10.1016/j.phymed.2012.02.003", "year": 2012, "genre": "journal-article", "is_oa": false, "title": "Evodiamine, a dual catalytic inhibitor of type I and II topoisomerases, exhibits enhanced inhibition against camptothecin resistant cells", "doi_url": "https://doi.org/10.1016/j.phymed.2012.02.003", "updated": "2020-02-04T14:08:20.345835", "oa_status": "closed", "publisher": "Elsevier BV", "z_authors": [{"given": "Xiaobei", "family": "Pan", "sequence": "first"}, {"given": "Janet M.", "family": "Hartley", "sequence": "additional"}, {"given": "John A.", "family": "Hartley", "sequence": "additional"}, {"given": "Kenneth N.", "family": "White", "sequence": "additional"}, {"given": "Zhengtao", "family": "Wang", "sequence": "additional"}, {"given": "S.W. Annie", "family": "Bligh", "sequence": "additional"}], "is_paratext": false, "journal_name": "Phytomedicine", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0944-7113", "journal_issn_l": "0944-7113", "published_date": "2012-05-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1017/9781108645270.010", "year": null, "genre": "book-chapter", "is_oa": false, "title": "Index", "doi_url": "https://doi.org/10.1017/9781108645270.010", "updated": "2020-02-05T00:03:06.370681", "oa_status": "closed", "publisher": "Cambridge University Press", "z_authors": null, "is_paratext": false, "journal_name": "Russia's Turn to Persia", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": null, "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1109/isscc.2019.8662478", "year": 2019, "genre": "proceedings-article", "is_oa": false, "title": "4.9 A 60GHz CMOS Power Amplifier with Cascaded Asymmetric Distributed-Active-Transformer Achieving Watt-Level Peak Output Power with 20.8% PAE and Supporting 2Gsym/s 64-QAM Modulation", "doi_url": "https://doi.org/10.1109/isscc.2019.8662478", "updated": "2020-02-07T15:50:43.780477", "oa_status": "closed", "publisher": "IEEE", "z_authors": [{"given": "Huy Thong", "family": "Nguyen", "sequence": "first"}, {"given": "Doohwan", "family": "Jung", "sequence": "additional"}, {"given": "Hua", "family": "Wang", "sequence": "additional"}], "is_paratext": false, "journal_name": "2019 IEEE International Solid- State Circuits Conference - (ISSCC)", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2019-02-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1587/elex.10.20130108", "year": 2013, "genre": "journal-article", "is_oa": true, "title": "Effect of double-patterning and double-etching on the line-edge-roughness of multi-gate bulk MOSFETs", "doi_url": "https://doi.org/10.1587/elex.10.20130108", "updated": "2020-03-09T20:50:30.215724", "oa_status": "bronze", "publisher": "Institute of Electronics, Information and Communications Engineers (IEICE)", "z_authors": [{"given": "In Jun", "family": "Park", "sequence": "first"}, {"given": "Changhwan", "family": "Shin", "sequence": "additional"}], "is_paratext": false, "journal_name": "IEICE Electronics Express", "oa_locations": [{"url": "https://www.jstage.jst.go.jp/article/elex/10/5/10_10.20130108/_pdf", "pmh_id": null, "is_best": true, "license": null, "updated": "2018-10-20T13:32:22.623811", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.jstage.jst.go.jp/article/elex/10/5/10_10.20130108/_pdf", "url_for_landing_page": "https://doi.org/10.1587/elex.10.20130108", "repository_institution": null}, {"url": "http://pdfs.semanticscholar.org/0967/4d80c8a095e135720888f646588a4e4c518b.pdf", "pmh_id": null, "is_best": false, "license": null, "updated": "2019-10-01T00:00:00", "version": "submittedVersion", "evidence": "oa repository (semantic scholar lookup)", "host_type": "repository", "endpoint_id": null, "url_for_pdf": "http://pdfs.semanticscholar.org/0967/4d80c8a095e135720888f646588a4e4c518b.pdf", "url_for_landing_page": "https://semanticscholar.org/paper/09674d80c8a095e135720888f646588a4e4c518b", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1349-2543", "journal_issn_l": "1349-2543", "published_date": "2013-01-01", "best_oa_location": {"url": "https://www.jstage.jst.go.jp/article/elex/10/5/10_10.20130108/_pdf", "pmh_id": null, "is_best": true, "license": null, "updated": "2018-10-20T13:32:22.623811", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.jstage.jst.go.jp/article/elex/10/5/10_10.20130108/_pdf", "url_for_landing_page": "https://doi.org/10.1587/elex.10.20130108", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": true} +{"doi": "10.4271/910125", "year": 1991, "genre": "proceedings-article", "is_oa": false, "title": "The Calculation of Motorcycle Speeds from Sliding Distances", "doi_url": "https://doi.org/10.4271/910125", "updated": "2020-03-22T11:59:21.305908", "oa_status": "closed", "publisher": "SAE International", "z_authors": [{"given": "Richard F.", "family": "Lambourn", "sequence": "first"}], "is_paratext": false, "journal_name": "SAE Technical Paper Series", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "1991-02-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1182/blood.v124.21.2256.2256", "year": 2014, "genre": "journal-article", "is_oa": false, "title": "Toxicity of Very Prolonged Pegasparaginase and Erwinia Asparaginase Courses in Relation to Asparaginase Activity Levels with a Special Focus on Dyslipidemia", "doi_url": "https://doi.org/10.1182/blood.v124.21.2256.2256", "updated": "2020-02-04T16:57:28.725514", "oa_status": "closed", "publisher": "American Society of Hematology", "z_authors": [{"given": "Wing H.", "family": "Tong", "sequence": "first", "affiliation": [{"name": "Erasmus MC - Sophia Children's Hospital, Rotterdam, Netherlands"}]}, {"given": "Rob", "family": "Pieters", "sequence": "additional", "affiliation": [{"name": "Dutch Childhood Oncology Group (DCOG; Netherlands), Rotterdam, Netherlands"}, {"name": "Princess Máxima Center for Pediatric Oncology, Utrecht, Netherlands"}]}, {"given": "Hester A.", "family": "de Groot-Kruseman", "sequence": "additional", "affiliation": [{"name": "Dutch Childhood Oncology Group (DCOG), The Hague, Netherlands"}]}, {"given": "Wim C.J.", "family": "Hop", "sequence": "additional", "affiliation": [{"name": "Erasmus MC - University Medical Center, Rotterdam, Netherlands"}]}, {"given": "Joachim", "family": "Boos", "sequence": "additional", "affiliation": [{"name": "University Children's Hospital, Muenster, Germany"}]}, {"given": "Wim J", "family": "Tissing", "sequence": "additional", "affiliation": [{"name": "University Medical Center Groningen, Groningen, Netherlands"}]}, {"given": "Inge M.", "family": "van der Sluis", "sequence": "additional", "affiliation": [{"name": "Erasmus MC - Sophia Children's Hospital, Rotterdam, Netherlands"}]}], "is_paratext": false, "journal_name": "Blood", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0006-4971,1528-0020", "journal_issn_l": "0006-4971", "published_date": "2014-12-06", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.18535/jmscr/v4i11.24", "year": 2016, "genre": "journal-article", "is_oa": true, "title": "Personality Traits in Patients Affected with Flood - A Hospital Based Study", "doi_url": "https://doi.org/10.18535/jmscr/v4i11.24", "updated": "2020-03-18T04:42:29.088697", "oa_status": "gold", "publisher": "Valley International", "z_authors": [{"given": "Junaid", "family": "Nabi", "sequence": "first"}, {"name": "Department of Psychiatry, SKIMS MC, Srinagar", "sequence": "first"}], "is_paratext": false, "journal_name": "Journal of Medical Science And clinical Research", "oa_locations": [{"url": "https://doi.org/10.18535/jmscr/v4i11.24", "pmh_id": null, "is_best": true, "license": null, "updated": "2020-01-19T14:04:13.601407", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://doi.org/10.18535/jmscr/v4i11.24", "url_for_landing_page": null, "repository_institution": null}], "data_standard": 2, "journal_is_oa": true, "journal_issns": "2347-176X", "journal_issn_l": "2347-176X", "published_date": "2016-11-04", "best_oa_location": {"url": "https://doi.org/10.18535/jmscr/v4i11.24", "pmh_id": null, "is_best": true, "license": null, "updated": "2020-01-19T14:04:13.601407", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://doi.org/10.18535/jmscr/v4i11.24", "url_for_landing_page": null, "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.2307/2004084", "year": 1962, "genre": "journal-article", "is_oa": false, "title": "Numerical Methods of Curve Fitting.", "doi_url": "https://doi.org/10.2307/2004084", "updated": "2020-04-14T10:58:17.855143", "oa_status": "closed", "publisher": "JSTOR", "z_authors": [{"given": "N. Donald", "family": "Ylvisaker", "sequence": "first"}, {"given": "P. G.", "family": "Guest", "sequence": "additional"}], "is_paratext": false, "journal_name": "Mathematics of Computation", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0025-5718", "journal_issn_l": "0025-5718", "published_date": "1962-07-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1097/00024382-199911000-00004", "year": 1999, "genre": "journal-article", "is_oa": false, "title": "THE SRC FAMILY-SELECTIVE TYROSINE KINASE INHIBITOR PP1 BLOCKS LPS AND IFN-α-MEDIATED TNF AND iNOS PRODUCTION IN MURINE MACROPHAGES", "doi_url": "https://doi.org/10.1097/00024382-199911000-00004", "updated": "2020-02-07T08:00:15.599938", "oa_status": "closed", "publisher": "Ovid Technologies (Wolters Kluwer Health)", "z_authors": [{"given": "Shari L.", "family": "Orlicek", "sequence": "first"}, {"given": "Jeffrey H.", "family": "Hanke", "sequence": "additional"}, {"given": "B. Keith", "family": "English", "sequence": "additional"}], "is_paratext": false, "journal_name": "Shock", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1073-2322", "journal_issn_l": "1073-2322", "published_date": "1999-11-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1088/0032-1028/25/12/303", "year": 1983, "genre": "journal-article", "is_oa": false, "title": "On radiative power from impurities in plasmas", "doi_url": "https://doi.org/10.1088/0032-1028/25/12/303", "updated": "2020-03-09T00:34:56.115746", "oa_status": "closed", "publisher": "IOP Publishing", "z_authors": [{"given": "H P", "family": "Summers", "sequence": "first"}, {"given": "M B", "family": "Hooper", "sequence": "additional"}], "is_paratext": false, "journal_name": "Plasma Physics", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0032-1028", "journal_issn_l": "0032-1028", "published_date": "1983-12-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1056/nejm195801232580406", "year": 1958, "genre": "journal-article", "is_oa": false, "title": "Pathways of Carbohydrate Metabolism in Normal and Neoplastic Cells", "doi_url": "https://doi.org/10.1056/nejm195801232580406", "updated": "2020-03-20T21:08:13.850776", "oa_status": "closed", "publisher": "Massachusetts Medical Society", "z_authors": [{"given": "B. L.", "family": "Horecker", "sequence": "first"}, {"given": "Howard H.", "family": "Hiatt", "sequence": "additional"}], "is_paratext": false, "journal_name": "New England Journal of Medicine", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0028-4793,1533-4406", "journal_issn_l": "0028-4793", "published_date": "1958-01-23", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1016/j.healun.2005.11.143", "year": 2006, "genre": "journal-article", "is_oa": false, "title": "137", "doi_url": "https://doi.org/10.1016/j.healun.2005.11.143", "updated": "2020-02-05T09:13:11.146775", "oa_status": "closed", "publisher": "Elsevier BV", "z_authors": [{"given": "M.R.", "family": "Ahsan"}, {"given": "D.T.", "family": "Keating"}, {"given": "R.", "family": "Linehan"}, {"given": "D.", "family": "Healy"}, {"given": "L.", "family": "Nolke"}, {"given": "F.", "family": "Wood"}, {"given": "J.", "family": "McCArthy"}, {"given": "P.", "family": "Doran"}, {"given": "J.J.", "family": "Egan"}], "is_paratext": false, "journal_name": "The Journal of Heart and Lung Transplantation", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1053-2498", "journal_issn_l": "1053-2498", "published_date": "2006-02-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1590/0102-4698134352", "year": 2015, "genre": "journal-article", "is_oa": true, "title": "A EXPERIÊNCIA ESCOLAR E A SOCIALIZAÇÃO PRÉ-PROFISSIONAL DE PROFESSORES DE EDUCAÇÃO FÍSICA", "doi_url": "https://doi.org/10.1590/0102-4698134352", "updated": "2020-03-15T23:20:37.847520", "oa_status": "gold", "publisher": "FapUNIFESP (SciELO)", "z_authors": [{"given": "José Ângelo", "family": "Gariglio", "sequence": "first", "affiliation": [{"name": "Universidade Federal de Minas Gerais, Brazil"}]}], "is_paratext": false, "journal_name": "Educação em Revista", "oa_locations": [{"url": "http://www.scielo.br/pdf/edur/v31n2/0102-4698-edur-31-02-00229.pdf", "pmh_id": null, "is_best": true, "license": "cc-by-nc", "updated": "2019-02-05T07:19:06.946914", "version": "publishedVersion", "evidence": "open (via page says license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://www.scielo.br/pdf/edur/v31n2/0102-4698-edur-31-02-00229.pdf", "url_for_landing_page": "https://doi.org/10.1590/0102-4698134352", "repository_institution": null}, {"url": "https://doi.org/10.1590/0102-4698134352", "pmh_id": null, "is_best": false, "license": "cc-by-nc", "updated": "2020-04-26T10:33:27.352912", "version": "publishedVersion", "evidence": "oa journal (via doaj)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.1590/0102-4698134352", "repository_institution": null}], "data_standard": 2, "journal_is_oa": true, "journal_issns": "0102-4698", "journal_issn_l": "0102-4698", "published_date": "2015-06-01", "best_oa_location": {"url": "http://www.scielo.br/pdf/edur/v31n2/0102-4698-edur-31-02-00229.pdf", "pmh_id": null, "is_best": true, "license": "cc-by-nc", "updated": "2019-02-05T07:19:06.946914", "version": "publishedVersion", "evidence": "open (via page says license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://www.scielo.br/pdf/edur/v31n2/0102-4698-edur-31-02-00229.pdf", "url_for_landing_page": "https://doi.org/10.1590/0102-4698134352", "repository_institution": null}, "journal_is_in_doaj": true, "has_repository_copy": false} +{"doi": "10.1007/978-1-62703-324-4_14", "year": 2013, "genre": "book-chapter", "is_oa": false, "title": "Gestational Restless Legs Syndrome", "doi_url": "https://doi.org/10.1007/978-1-62703-324-4_14", "updated": "2020-03-06T22:42:53.571377", "oa_status": "closed", "publisher": "Humana Press", "z_authors": [{"given": "Mari", "family": "Viola-Saltzman", "sequence": "first"}], "is_paratext": false, "journal_name": "Sleep Disorders in Women", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2013-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1016/b978-0-12-436860-6.50018-1", "year": 1982, "genre": "book-chapter", "is_oa": false, "title": "More on Sclerophylly and Xeromorphy", "doi_url": "https://doi.org/10.1016/b978-0-12-436860-6.50018-1", "updated": "2020-03-02T22:35:58.362682", "oa_status": "closed", "publisher": "Elsevier", "z_authors": [{"given": "James A.", "family": "Larsen", "sequence": "first"}], "is_paratext": false, "journal_name": "Ecology of the Northern Lowland Bogs and Conifer Forests", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "1982-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1101/2019.12.20.881474", "year": 2019, "genre": "posted-content", "is_oa": true, "title": "Inferring the Demographic History of Inbred Species from Genome-Wide SNP Frequency Data", "doi_url": "https://doi.org/10.1101/2019.12.20.881474", "updated": "2020-03-02T06:17:58.061866", "oa_status": "hybrid", "publisher": "Cold Spring Harbor Laboratory", "z_authors": [{"ORCID": "http://orcid.org/0000-0001-9177-8958", "given": "Paul D.", "family": "Blischak", "sequence": "first", "authenticated-orcid": false}, {"ORCID": "http://orcid.org/0000-0001-7173-1319", "given": "Michael S.", "family": "Barker", "sequence": "additional", "authenticated-orcid": false}, {"ORCID": "http://orcid.org/0000-0002-8659-0579", "given": "Ryan N.", "family": "Gutenkunst", "sequence": "additional", "authenticated-orcid": false}], "is_paratext": false, "journal_name": null, "oa_locations": [{"url": "https://www.biorxiv.org/content/biorxiv/early/2019/12/20/2019.12.20.881474.full.pdf", "pmh_id": null, "is_best": true, "license": "cc-by", "updated": "2020-02-25T15:24:14.502903", "version": "publishedVersion", "evidence": "open (via page says license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.biorxiv.org/content/biorxiv/early/2019/12/20/2019.12.20.881474.full.pdf", "url_for_landing_page": "https://doi.org/10.1101/2019.12.20.881474", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2019-12-20", "best_oa_location": {"url": "https://www.biorxiv.org/content/biorxiv/early/2019/12/20/2019.12.20.881474.full.pdf", "pmh_id": null, "is_best": true, "license": "cc-by", "updated": "2020-02-25T15:24:14.502903", "version": "publishedVersion", "evidence": "open (via page says license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.biorxiv.org/content/biorxiv/early/2019/12/20/2019.12.20.881474.full.pdf", "url_for_landing_page": "https://doi.org/10.1101/2019.12.20.881474", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1002/jctb.5000600405", "year": 1941, "genre": "journal-article", "is_oa": false, "title": "Effect of temperature on the exchange capacities of some base-exchange materials used in water softening", "doi_url": "https://doi.org/10.1002/jctb.5000600405", "updated": "2020-03-24T11:32:22.574740", "oa_status": "closed", "publisher": "Wiley", "z_authors": [{"given": "H.", "family": "Ingleson", "sequence": "first"}, {"given": "A.", "family": "Harrison", "sequence": "additional"}], "is_paratext": false, "journal_name": "Journal of the Society of Chemical Industry", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0368-4075,1934-9971", "journal_issn_l": "0368-4075", "published_date": "1941-04-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1016/j.ijhydene.2008.05.025", "year": 2008, "genre": "journal-article", "is_oa": false, "title": "Effects of ethylene on carbon formation in diesel autothermal reforming", "doi_url": "https://doi.org/10.1016/j.ijhydene.2008.05.025", "updated": "2020-02-29T17:57:49.257884", "oa_status": "closed", "publisher": "Elsevier BV", "z_authors": [{"given": "Sangho", "family": "Yoon", "sequence": "first"}, {"given": "Inyong", "family": "Kang", "sequence": "additional"}, {"given": "Joongmyeon", "family": "Bae", "sequence": "additional"}], "is_paratext": false, "journal_name": "International Journal of Hydrogen Energy", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0360-3199", "journal_issn_l": "0360-3199", "published_date": "2008-09-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.2307/2033829", "year": 1963, "genre": "journal-article", "is_oa": true, "title": "Rapidly Increasing Kernels", "doi_url": "https://doi.org/10.2307/2033829", "updated": "2020-02-08T16:03:34.179453", "oa_status": "bronze", "publisher": "JSTOR", "z_authors": [{"given": "Harold", "family": "Widom"}], "is_paratext": false, "journal_name": "Proceedings of the American Mathematical Society", "oa_locations": [{"url": "https://www.ams.org/proc/1963-014-03/S0002-9939-1963-0151806-5/S0002-9939-1963-0151806-5.pdf", "pmh_id": null, "is_best": true, "license": null, "updated": "2019-09-18T14:21:09.631891", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.ams.org/proc/1963-014-03/S0002-9939-1963-0151806-5/S0002-9939-1963-0151806-5.pdf", "url_for_landing_page": "https://doi.org/10.2307/2033829", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0002-9939", "journal_issn_l": "0002-9939", "published_date": "1963-06-01", "best_oa_location": {"url": "https://www.ams.org/proc/1963-014-03/S0002-9939-1963-0151806-5/S0002-9939-1963-0151806-5.pdf", "pmh_id": null, "is_best": true, "license": null, "updated": "2019-09-18T14:21:09.631891", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.ams.org/proc/1963-014-03/S0002-9939-1963-0151806-5/S0002-9939-1963-0151806-5.pdf", "url_for_landing_page": "https://doi.org/10.2307/2033829", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1016/s0894-7317(96)90227-8", "year": 1996, "genre": "journal-article", "is_oa": false, "title": "Ultrasonic tissue characterization: Applicability and sensitivity of detection of serial changes in the myocardium", "doi_url": "https://doi.org/10.1016/s0894-7317(96)90227-8", "updated": "2020-02-05T21:32:37.455113", "oa_status": "closed", "publisher": "Elsevier BV", "z_authors": null, "is_paratext": false, "journal_name": "Journal of the American Society of Echocardiography", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0894-7317", "journal_issn_l": "0894-7317", "published_date": "1996-05-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1016/j.chroma.2016.12.078", "year": 2017, "genre": "journal-article", "is_oa": false, "title": "Microfluidic membrane suppressor module design and evaluation for capillary ion chromatography", "doi_url": "https://doi.org/10.1016/j.chroma.2016.12.078", "updated": "2020-03-15T23:21:03.082031", "oa_status": "closed", "publisher": "Elsevier BV", "z_authors": [{"given": "Sam", "family": "Wouters", "sequence": "first"}, {"given": "Cees", "family": "Bruggink", "sequence": "additional"}, {"given": "Yury", "family": "Agroskin", "sequence": "additional"}, {"given": "Christopher", "family": "Pohl", "sequence": "additional"}, {"given": "Sebastiaan", "family": "Eeltink", "sequence": "additional"}], "is_paratext": false, "journal_name": "Journal of Chromatography A", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0021-9673", "journal_issn_l": "0021-9673", "published_date": "2017-02-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.22456/1984-1191.9325", "year": 2008, "genre": "journal-article", "is_oa": true, "title": "A desterritorialização dos saberes e fazeres antropológicos e o desentendimento no corpo de verdade da letra", "doi_url": "https://doi.org/10.22456/1984-1191.9325", "updated": "2020-02-04T21:07:23.738645", "oa_status": "bronze", "publisher": "Universidade Federal do Rio Grande do Sul", "z_authors": [{"given": "Priscila Farfan", "family": "Barroso", "sequence": "first"}, {"given": "Rafael", "family": "Lopo", "sequence": "additional"}, {"given": "Ana Luiza Carvalho da", "family": "Rocha", "sequence": "additional"}, {"given": "Viviane", "family": "Vedana", "sequence": "additional"}], "is_paratext": false, "journal_name": "ILUMINURAS", "oa_locations": [{"url": "https://seer.ufrgs.br/iluminuras/article/download/9325/5393", "pmh_id": null, "is_best": true, "license": null, "updated": "2019-06-12T10:56:48.093740", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://seer.ufrgs.br/iluminuras/article/download/9325/5393", "url_for_landing_page": "https://doi.org/10.22456/1984-1191.9325", "repository_institution": null}, {"url": "http://pdfs.semanticscholar.org/3fa9/e9fc7244b54232e580ea34f049cd52da6f58.pdf", "pmh_id": null, "is_best": false, "license": null, "updated": "2019-10-01T00:00:00", "version": "submittedVersion", "evidence": "oa repository (semantic scholar lookup)", "host_type": "repository", "endpoint_id": null, "url_for_pdf": "http://pdfs.semanticscholar.org/3fa9/e9fc7244b54232e580ea34f049cd52da6f58.pdf", "url_for_landing_page": "https://semanticscholar.org/paper/3fa9e9fc7244b54232e580ea34f049cd52da6f58", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1984-1191", "journal_issn_l": "1984-1191", "published_date": "2008-12-03", "best_oa_location": {"url": "https://seer.ufrgs.br/iluminuras/article/download/9325/5393", "pmh_id": null, "is_best": true, "license": null, "updated": "2019-06-12T10:56:48.093740", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://seer.ufrgs.br/iluminuras/article/download/9325/5393", "url_for_landing_page": "https://doi.org/10.22456/1984-1191.9325", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": true} +{"doi": "10.1601/nm.1454", "year": 2003, "genre": "dataset", "is_oa": false, "title": "Nomenclature Abstract for Methylocella.", "doi_url": "https://doi.org/10.1601/nm.1454", "updated": "2020-02-27T06:48:10.755838", "oa_status": "closed", "publisher": "NamesforLife, LLC", "z_authors": [{"ORCID": "http://orcid.org/0000-0002-7436-3176", "given": "Charles Thomas", "family": "Parker", "suffix": "Jr", "sequence": "first", "affiliation": [{"name": "NamesforLife, LLC"}], "authenticated-orcid": false}, {"ORCID": "http://orcid.org/0000-0001-6386-9107", "given": "Sarah", "family": "Wigley", "sequence": "additional", "affiliation": [{"name": "NamesforLife, LLC"}], "authenticated-orcid": false}, {"ORCID": "http://orcid.org/0000-0002-4465-7034", "given": "George M", "family": "Garrity", "sequence": "additional", "affiliation": [{"name": "NamesforLife, LLC"}], "authenticated-orcid": false}], "is_paratext": false, "journal_name": "The NamesforLife Abstracts", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2003-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.3897/zookeys.617.9850.figures20-29", "year": null, "genre": "component", "is_oa": true, "title": "Figures 20–29 from: Skuhravá M, Massa B, Cerasa G (2016) Rediscovery and identity of Pumilomyia protrahenda De Stefani (Diptera, Cecidomyiidae) in Sicily with redescription and reassessment of its taxonomic position. ZooKeys 617: 129-137. https://doi.org/10.3897/zookeys.617.9850", "doi_url": "https://doi.org/10.3897/zookeys.617.9850.figures20-29", "updated": "2020-02-04T18:56:04.431773", "oa_status": "bronze", "publisher": "Pensoft Publishers", "z_authors": null, "is_paratext": false, "journal_name": null, "oa_locations": [{"url": "https://zookeys.pensoft.net/article/9850/download/pdf/", "pmh_id": null, "is_best": true, "license": null, "updated": "2019-01-22T23:56:51.024092", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://zookeys.pensoft.net/article/9850/download/pdf/", "url_for_landing_page": "https://doi.org/10.3897/zookeys.617.9850.figures20-29", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": null, "best_oa_location": {"url": "https://zookeys.pensoft.net/article/9850/download/pdf/", "pmh_id": null, "is_best": true, "license": null, "updated": "2019-01-22T23:56:51.024092", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://zookeys.pensoft.net/article/9850/download/pdf/", "url_for_landing_page": "https://doi.org/10.3897/zookeys.617.9850.figures20-29", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1007/bf03295311", "year": 1988, "genre": "journal-article", "is_oa": false, "title": "Digoxin-specific antibodies in digitalis toxicity", "doi_url": "https://doi.org/10.1007/bf03295311", "updated": "2020-03-08T01:06:18.447104", "oa_status": "closed", "publisher": "Springer Science and Business Media LLC", "z_authors": null, "is_paratext": false, "journal_name": "Reactions", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0157-7271", "journal_issn_l": "0157-7271", "published_date": "1988-07-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.2524/jtappij.52.1707", "year": 1998, "genre": "journal-article", "is_oa": true, "title": "Wet End Starches for Paper Making.", "doi_url": "https://doi.org/10.2524/jtappij.52.1707", "updated": "2020-03-20T01:02:32.720421", "oa_status": "bronze", "publisher": "Japan Technical Association of the Pulp and Paper Industry", "z_authors": [{"given": "Atsushi", "family": "Sakakibara", "sequence": "first"}], "is_paratext": false, "journal_name": "JAPAN TAPPI JOURNAL", "oa_locations": [{"url": "https://www.jstage.jst.go.jp/article/jtappij1955/52/12/52_12_1707/_pdf", "pmh_id": null, "is_best": true, "license": null, "updated": "2018-07-29T08:16:30.437455", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.jstage.jst.go.jp/article/jtappij1955/52/12/52_12_1707/_pdf", "url_for_landing_page": "https://doi.org/10.2524/jtappij.52.1707", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0022-815X,1881-1000", "journal_issn_l": "0022-815X", "published_date": "1998-01-01", "best_oa_location": {"url": "https://www.jstage.jst.go.jp/article/jtappij1955/52/12/52_12_1707/_pdf", "pmh_id": null, "is_best": true, "license": null, "updated": "2018-07-29T08:16:30.437455", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.jstage.jst.go.jp/article/jtappij1955/52/12/52_12_1707/_pdf", "url_for_landing_page": "https://doi.org/10.2524/jtappij.52.1707", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.5585/cpg.v8n0.2099", "year": 2010, "genre": "journal-article", "is_oa": true, "title": "Cooperativas como forma gestora de cursos menos onerosos no ensino superior privado", "doi_url": "https://doi.org/10.5585/cpg.v8n0.2099", "updated": "2020-02-07T02:40:32.077936", "oa_status": "gold", "publisher": "University Nove de Julho", "z_authors": [{"given": "Sérgio Macedo", "family": "Oliveira", "sequence": "first"}], "is_paratext": false, "journal_name": "Cadernos de Pós-graduação", "oa_locations": [{"url": "http://periodicos.uninove.br/index.php?journal=cadernosdepos&page=article&op=download&path%5B%5D=2099&path%5B%5D=1576", "pmh_id": null, "is_best": true, "license": "cc-by-nc", "updated": "2018-08-21T21:01:53.801808", "version": "publishedVersion", "evidence": "open (via page says license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://periodicos.uninove.br/index.php?journal=cadernosdepos&page=article&op=download&path%5B%5D=2099&path%5B%5D=1576", "url_for_landing_page": "https://doi.org/10.5585/cpg.v8n0.2099", "repository_institution": null}, {"url": "https://doi.org/10.5585/cpg.v8n0.2099", "pmh_id": null, "is_best": false, "license": "cc-by-nc", "updated": "2020-04-24T14:47:48.737146", "version": "publishedVersion", "evidence": "oa journal (via doaj)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.5585/cpg.v8n0.2099", "repository_institution": null}, {"url": "http://pdfs.semanticscholar.org/8f6b/c7e1c59d33b3a18742378100e5153368dd14.pdf", "pmh_id": null, "is_best": false, "license": null, "updated": "2019-10-01T00:00:00", "version": "submittedVersion", "evidence": "oa repository (semantic scholar lookup)", "host_type": "repository", "endpoint_id": null, "url_for_pdf": "http://pdfs.semanticscholar.org/8f6b/c7e1c59d33b3a18742378100e5153368dd14.pdf", "url_for_landing_page": "https://semanticscholar.org/paper/8f6bc7e1c59d33b3a18742378100e5153368dd14", "repository_institution": null}], "data_standard": 2, "journal_is_oa": true, "journal_issns": "2525-3514", "journal_issn_l": "1678-4103", "published_date": "2010-01-22", "best_oa_location": {"url": "http://periodicos.uninove.br/index.php?journal=cadernosdepos&page=article&op=download&path%5B%5D=2099&path%5B%5D=1576", "pmh_id": null, "is_best": true, "license": "cc-by-nc", "updated": "2018-08-21T21:01:53.801808", "version": "publishedVersion", "evidence": "open (via page says license)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://periodicos.uninove.br/index.php?journal=cadernosdepos&page=article&op=download&path%5B%5D=2099&path%5B%5D=1576", "url_for_landing_page": "https://doi.org/10.5585/cpg.v8n0.2099", "repository_institution": null}, "journal_is_in_doaj": true, "has_repository_copy": true} +{"doi": "10.1016/j.bpj.2019.11.2723", "year": 2020, "genre": "journal-article", "is_oa": false, "title": "The Stickers and Spacers Framework for Describing Phase Behavior of Multivalent Intrinsically Disordered Proteins", "doi_url": "https://doi.org/10.1016/j.bpj.2019.11.2723", "updated": "2020-02-07T21:05:29.508395", "oa_status": "closed", "publisher": "Elsevier BV", "z_authors": [{"given": "Jeong-Mo", "family": "Choi", "sequence": "first"}, {"given": "Rohit V.", "family": "Pappu", "sequence": "additional"}], "is_paratext": false, "journal_name": "Biophysical Journal", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0006-3495", "journal_issn_l": "0006-3495", "published_date": "2020-02-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1128/9781555816728.ch100", "year": 2011, "genre": "book-chapter", "is_oa": false, "title": "Human Herpesviruses 6, 7, and 8", "doi_url": "https://doi.org/10.1128/9781555816728.ch100", "updated": "2020-03-04T20:28:22.992053", "oa_status": "closed", "publisher": "American Society of Microbiology", "z_authors": null, "is_paratext": false, "journal_name": "Manual of Clinical Microbiology, 10th Edition", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2011-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1182/blood.v116.21.3313.3313", "year": 2010, "genre": "journal-article", "is_oa": false, "title": "Temozolomide In Acute Myeloid Leukemia: A MGMT Promoter Methylation Status–Based Treatment Stratification", "doi_url": "https://doi.org/10.1182/blood.v116.21.3313.3313", "updated": "2020-02-04T16:58:20.872245", "oa_status": "closed", "publisher": "American Society of Hematology", "z_authors": [{"given": "Bruno C.", "family": "Medeiros", "sequence": "first", "affiliation": [{"name": "Stanford University School of Medicine, Stanford, CA, USA,"}]}, {"given": "Holbrook E", "family": "Kohrt", "sequence": "additional", "affiliation": [{"name": "Hematology, Stanford University School of Medicine, Stanford, CA, USA,"}]}, {"given": "Richa", "family": "Rajwanshi", "sequence": "additional", "affiliation": [{"name": "Stanford U School of Medicine, Stanford, CA,"}]}, {"given": "Jason", "family": "Gotlib", "sequence": "additional", "affiliation": [{"name": "Division of Hematology, Stanford University School of Medicine, Stanford, CA, USA,"}]}, {"given": "Steven", "family": "Coutre", "sequence": "additional", "affiliation": [{"name": "Stanford University School of Medicine, Stanford, CA,"}]}, {"given": "Michaela", "family": "Liedtke", "sequence": "additional", "affiliation": [{"name": "Division of Hematology, Stanford University School of Medicine, Stanford, CA, USA,"}]}, {"given": "Caroline", "family": "Berube", "sequence": "additional", "affiliation": [{"name": "Hematology, Stanford University School of Medicine, Stanford, CA, USA,"}]}, {"given": "Melody", "family": "Zhang", "sequence": "additional", "affiliation": [{"name": "Division of Hematology, Stanford University School of Medicine, Stanford, CA, USA,"}]}, {"given": "Daniel A.", "family": "Arber", "sequence": "additional", "affiliation": [{"name": "Dept. of Clinical Laboratory, Stanford Univ. Medical Center, Stanford, CA, USA,"}]}, {"given": "James L.", "family": "Zehnder", "sequence": "additional", "affiliation": [{"name": "Department of Pathology, Stanford University School of Medicine, Stanford, CA, USA"}]}], "is_paratext": false, "journal_name": "Blood", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0006-4971,1528-0020", "journal_issn_l": "0006-4971", "published_date": "2010-11-19", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1680/macr.1953.5.13.1", "year": 1953, "genre": "journal-article", "is_oa": true, "title": "Editorial comment", "doi_url": "https://doi.org/10.1680/macr.1953.5.13.1", "updated": "2020-02-09T01:06:04.670147", "oa_status": "bronze", "publisher": "Thomas Telford Ltd.", "z_authors": null, "is_paratext": false, "journal_name": "Magazine of Concrete Research", "oa_locations": [{"url": "https://www.icevirtuallibrary.com/doi/pdf/10.1680/macr.1953.5.13.1", "pmh_id": null, "is_best": true, "license": null, "updated": "2019-01-20T23:32:12.804739", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.icevirtuallibrary.com/doi/pdf/10.1680/macr.1953.5.13.1", "url_for_landing_page": "https://doi.org/10.1680/macr.1953.5.13.1", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0024-9831,1751-763X", "journal_issn_l": "0024-9831", "published_date": "1953-08-01", "best_oa_location": {"url": "https://www.icevirtuallibrary.com/doi/pdf/10.1680/macr.1953.5.13.1", "pmh_id": null, "is_best": true, "license": null, "updated": "2019-01-20T23:32:12.804739", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.icevirtuallibrary.com/doi/pdf/10.1680/macr.1953.5.13.1", "url_for_landing_page": "https://doi.org/10.1680/macr.1953.5.13.1", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.26502/jppd.2572-519x0089", "year": 2020, "genre": "journal-article", "is_oa": false, "title": "Mick Jagger, Capitalism and the Pursuit of Happiness", "doi_url": "https://doi.org/10.26502/jppd.2572-519x0089", "updated": "2020-04-04T21:02:13.395420", "oa_status": "closed", "publisher": "Fortune Journals", "z_authors": [{"given": "David L", "family": "Ryan MD", "sequence": "first"}], "is_paratext": false, "journal_name": "Journal of Psychiatry and Psychiatric Disorders", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "2572-519X", "journal_issn_l": "2572-519X", "published_date": "2020-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1149/1.2096387", "year": 1989, "genre": "journal-article", "is_oa": false, "title": "Deposition Profile Simulation Using the Direct Simulation Monte Carlo Method", "doi_url": "https://doi.org/10.1149/1.2096387", "updated": "2020-03-04T09:34:29.488606", "oa_status": "closed", "publisher": "The Electrochemical Society", "z_authors": [{"given": "Masato", "family": "Ikegawa", "sequence": "first"}], "is_paratext": false, "journal_name": "Journal of The Electrochemical Society", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0013-4651", "journal_issn_l": "0013-4651", "published_date": "1989-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.20472/iac.2018.040.048", "year": 2018, "genre": "proceedings-article", "is_oa": true, "title": "USING IMPORTANCE-PERFORMANCE ANALYSIS (IPA) TO EVALUATE FACTORS AFFECTING THE LIVING IN ELDERLY CONDOMINIUM", "doi_url": "https://doi.org/10.20472/iac.2018.040.048", "updated": "2020-02-05T00:02:24.990581", "oa_status": "bronze", "publisher": "International Institute of Social and Economic Sciences", "z_authors": [{"given": "Supeecha", "family": "Panichpathom", "sequence": "first"}, {"given": "Yongyuth", "family": "Suphotgamkul", "sequence": "additional"}], "is_paratext": false, "journal_name": "Proceedings of the 40th International Academic Conference, Stockholm", "oa_locations": [{"url": "http://iises.net/proceedings/40th-international-academic-conference-stockholm/table-of-content?cid=65&iid=048&rid=8956", "pmh_id": null, "is_best": true, "license": null, "updated": "2019-10-20T11:17:47.678931", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://iises.net/proceedings/40th-international-academic-conference-stockholm/table-of-content?cid=65&iid=048&rid=8956", "url_for_landing_page": "https://doi.org/10.20472/iac.2018.040.048", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": null, "journal_issn_l": null, "published_date": "2018-01-01", "best_oa_location": {"url": "http://iises.net/proceedings/40th-international-academic-conference-stockholm/table-of-content?cid=65&iid=048&rid=8956", "pmh_id": null, "is_best": true, "license": null, "updated": "2019-10-20T11:17:47.678931", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "http://iises.net/proceedings/40th-international-academic-conference-stockholm/table-of-content?cid=65&iid=048&rid=8956", "url_for_landing_page": "https://doi.org/10.20472/iac.2018.040.048", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.4157/grj1984b.69.21", "year": 1996, "genre": "journal-article", "is_oa": true, "title": "Studies in the Historical Geography of Japan, 1988-1995", "doi_url": "https://doi.org/10.4157/grj1984b.69.21", "updated": "2020-03-01T19:51:39.763390", "oa_status": "bronze", "publisher": "The Association of Japanese Geographers", "z_authors": [{"given": "Tsunetoshl", "family": "MIZOGUCHI", "sequence": "first"}], "is_paratext": false, "journal_name": "Geographical review of Japan, Series B.", "oa_locations": [{"url": "https://www.jstage.jst.go.jp/article/grj1984b/69/1/69_1_21/_pdf", "pmh_id": null, "is_best": true, "license": null, "updated": "2018-12-18T07:51:31.642606", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.jstage.jst.go.jp/article/grj1984b/69/1/69_1_21/_pdf", "url_for_landing_page": "https://doi.org/10.4157/grj1984b.69.21", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0289-6001,2185-1700", "journal_issn_l": "0289-6001", "published_date": "1996-01-01", "best_oa_location": {"url": "https://www.jstage.jst.go.jp/article/grj1984b/69/1/69_1_21/_pdf", "pmh_id": null, "is_best": true, "license": null, "updated": "2018-12-18T07:51:31.642606", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.jstage.jst.go.jp/article/grj1984b/69/1/69_1_21/_pdf", "url_for_landing_page": "https://doi.org/10.4157/grj1984b.69.21", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.5301/tj.5000521", "year": 2016, "genre": "journal-article", "is_oa": false, "title": "A case of pseudoachalasia hiding a malignant pleural mesothelioma", "doi_url": "https://doi.org/10.5301/tj.5000521", "updated": "2020-03-13T20:09:57.872436", "oa_status": "closed", "publisher": "SAGE Publications", "z_authors": [{"given": "Federica", "family": "Branchi", "sequence": "first", "affiliation": [{"name": "Department of Pathophysiology and Transplantation, Università degli Studi di Milano, Milan - Italy"}, {"name": "Gastroenterology and Endoscopy Unit, Fondazione IRCCS Ca’ Granda - Ospedale Maggiore Policlinico, Milan - Italy"}]}, {"given": "Andrea", "family": "Tenca", "sequence": "additional", "affiliation": [{"name": "Department of Pathophysiology and Transplantation, Università degli Studi di Milano, Milan - Italy"}, {"name": "Gastroenterology and Endoscopy Unit, Fondazione IRCCS Ca’ Granda - Ospedale Maggiore Policlinico, Milan - Italy"}]}, {"given": "Claudia", "family": "Bareggi", "sequence": "additional", "affiliation": [{"name": "Oncology Unit, Fondazione IRCCS Ca’ Granda - Ospedale Maggiore Policlinico, Milan - Italy"}]}, {"given": "Carolina", "family": "Mensi", "sequence": "additional", "affiliation": [{"name": "Epidemiology Unit, Fondazione IRCCS Ca’ Granda - Ospedale Maggiore Policlinico, Milan - Italy"}]}, {"given": "Aurelio", "family": "Mauro", "sequence": "additional", "affiliation": [{"name": "Department of Pathophysiology and Transplantation, Università degli Studi di Milano, Milan - Italy"}, {"name": "Gastroenterology and Endoscopy Unit, Fondazione IRCCS Ca’ Granda - Ospedale Maggiore Policlinico, Milan - Italy"}]}, {"given": "Dario", "family": "Conte", "sequence": "additional", "affiliation": [{"name": "Department of Pathophysiology and Transplantation, Università degli Studi di Milano, Milan - Italy"}, {"name": "Gastroenterology and Endoscopy Unit, Fondazione IRCCS Ca’ Granda - Ospedale Maggiore Policlinico, Milan - Italy"}]}, {"given": "Roberto", "family": "Penagini", "sequence": "additional", "affiliation": [{"name": "Department of Pathophysiology and Transplantation, Università degli Studi di Milano, Milan - Italy"}, {"name": "Gastroenterology and Endoscopy Unit, Fondazione IRCCS Ca’ Granda - Ospedale Maggiore Policlinico, Milan - Italy"}]}], "is_paratext": false, "journal_name": "Tumori Journal", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0300-8916,2038-2529", "journal_issn_l": "0300-8916", "published_date": "2016-11-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1097/pec.0b013e3182072458", "year": 2010, "genre": "journal-article", "is_oa": false, "title": "ECGs in the ED", "doi_url": "https://doi.org/10.1097/pec.0b013e3182072458", "updated": "2020-02-06T12:10:53.918344", "oa_status": "closed", "publisher": "Ovid Technologies (Wolters Kluwer Health)", "z_authors": [{"given": "Ronn E.", "family": "Tanel", "sequence": "first"}], "is_paratext": false, "journal_name": "Pediatric Emergency Care", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0749-5161", "journal_issn_l": "0749-5161", "published_date": "2010-12-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.5840/iabsproc20011256", "year": 2001, "genre": "journal-article", "is_oa": false, "title": "Sustainable Leaming and American Liberal Arts Education", "doi_url": "https://doi.org/10.5840/iabsproc20011256", "updated": "2020-02-07T02:41:46.126585", "oa_status": "closed", "publisher": "Philosophy Documentation Center", "z_authors": [{"given": "Daniel R.", "family": "Gilbert", "sequence": "first"}, {"name": "International Association for Business and Society", "sequence": "additional"}], "is_paratext": false, "journal_name": "Proceedings of the International Association for Business and Society", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "2155-2568", "journal_issn_l": "2155-2568", "published_date": "2001-01-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.4103/1319-2442.118094", "year": 2013, "genre": "journal-article", "is_oa": true, "title": "Incidence and clinical outcome of renal amyloidosis: A retrospective study", "doi_url": "https://doi.org/10.4103/1319-2442.118094", "updated": "2020-03-05T23:59:03.463335", "oa_status": "gold", "publisher": "Medknow", "z_authors": [{"given": "Emad", "family": "Abdallah", "sequence": "first"}, {"given": "Emam", "family": "Waked", "sequence": "additional"}], "is_paratext": false, "journal_name": "Saudi Journal of Kidney Diseases and Transplantation", "oa_locations": [{"url": "https://doi.org/10.4103/1319-2442.118094", "pmh_id": null, "is_best": true, "license": "cc-by-nc-sa", "updated": "2020-04-22T10:43:51.612077", "version": "publishedVersion", "evidence": "oa journal (via doaj)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.4103/1319-2442.118094", "repository_institution": null}], "data_standard": 2, "journal_is_oa": true, "journal_issns": "1319-2442", "journal_issn_l": "1319-2442", "published_date": "2013-01-01", "best_oa_location": {"url": "https://doi.org/10.4103/1319-2442.118094", "pmh_id": null, "is_best": true, "license": "cc-by-nc-sa", "updated": "2020-04-22T10:43:51.612077", "version": "publishedVersion", "evidence": "oa journal (via doaj)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://doi.org/10.4103/1319-2442.118094", "repository_institution": null}, "journal_is_in_doaj": true, "has_repository_copy": false} +{"doi": "10.1299/kikai1938.35.936", "year": 1969, "genre": "journal-article", "is_oa": true, "title": "Investigation on Low Cycle Fatigue at Elevated Temperature : 3rd Report Influence of Temperature and Plastic Strain Range on the Behavior of Fatigue Cracks", "doi_url": "https://doi.org/10.1299/kikai1938.35.936", "updated": "2020-03-20T19:56:33.522813", "oa_status": "bronze", "publisher": "Japan Society of Mechanical Engineers", "z_authors": [{"given": "Kenji", "family": "KANAZAWA", "sequence": "first"}, {"given": "Yukio", "family": "NISHIMURA", "sequence": "additional"}, {"given": "Takeshi", "family": "KNIO", "sequence": "additional"}, {"given": "Kanetoshi", "family": "IWAMOTO", "sequence": "additional"}, {"given": "Teruyuki", "family": "UEDA", "sequence": "additional"}], "is_paratext": false, "journal_name": "Transactions of the Japan Society of Mechanical Engineers", "oa_locations": [{"url": "https://www.jstage.jst.go.jp/article/kikai1938/35/273/35_273_936/_pdf", "pmh_id": null, "is_best": true, "license": null, "updated": "2018-07-26T19:53:57.351085", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.jstage.jst.go.jp/article/kikai1938/35/273/35_273_936/_pdf", "url_for_landing_page": "https://doi.org/10.1299/kikai1938.35.936", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0029-0270,2185-9485", "journal_issn_l": "0029-0270", "published_date": "1969-01-01", "best_oa_location": {"url": "https://www.jstage.jst.go.jp/article/kikai1938/35/273/35_273_936/_pdf", "pmh_id": null, "is_best": true, "license": null, "updated": "2018-07-26T19:53:57.351085", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.jstage.jst.go.jp/article/kikai1938/35/273/35_273_936/_pdf", "url_for_landing_page": "https://doi.org/10.1299/kikai1938.35.936", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1136/jnnp.2008.167494", "year": 2010, "genre": "journal-article", "is_oa": false, "title": "Central apnoea associated with subcortical haemorrhage in the left temporal lobe", "doi_url": "https://doi.org/10.1136/jnnp.2008.167494", "updated": "2020-03-22T18:47:52.542640", "oa_status": "closed", "publisher": "BMJ", "z_authors": [{"given": "T.", "family": "Nezu", "sequence": "first"}, {"given": "M.", "family": "Naganuma", "sequence": "additional"}, {"given": "Y.", "family": "Shono", "sequence": "additional"}, {"given": "K.", "family": "Toyoda", "sequence": "additional"}, {"given": "K.", "family": "Minematsu", "sequence": "additional"}], "is_paratext": false, "journal_name": "Journal of Neurology, Neurosurgery & Psychiatry", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0022-3050", "journal_issn_l": "0022-3050", "published_date": "2010-02-25", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1016/s0950-3536(05)80269-0", "year": 1995, "genre": "journal-article", "is_oa": false, "title": "2 Plasminogen activators and plasminogen activator inhibitors: biochemical aspects", "doi_url": "https://doi.org/10.1016/s0950-3536(05)80269-0", "updated": "2020-03-25T02:09:34.927917", "oa_status": "closed", "publisher": "Elsevier BV", "z_authors": [{"given": "Dingeman C.", "family": "Rijken", "sequence": "first"}], "is_paratext": false, "journal_name": "Baillière's Clinical Haematology", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0950-3536", "journal_issn_l": "0950-3536", "published_date": "1995-06-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1139/o55-117", "year": 1955, "genre": "journal-article", "is_oa": false, "title": "ON BODY FAT AND BODY WATER IN RATS", "doi_url": "https://doi.org/10.1139/o55-117", "updated": "2020-02-28T00:00:10.798997", "oa_status": "closed", "publisher": "Canadian Science Publishing", "z_authors": [{"given": "Louis-Marie", "family": "Babineau", "sequence": "first"}, {"given": "Edouard", "family": "Pagé", "sequence": "additional"}], "is_paratext": false, "journal_name": "Canadian Journal of Biochemistry and Physiology", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0576-5544", "journal_issn_l": "0576-5544", "published_date": "1955-11-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.2307/2033958", "year": 1963, "genre": "journal-article", "is_oa": false, "title": "Invariant Subspaces in L 1", "doi_url": "https://doi.org/10.2307/2033958", "updated": "2020-04-14T10:58:20.125191", "oa_status": "closed", "publisher": "JSTOR", "z_authors": [{"given": "Frank", "family": "Forelli", "sequence": "first"}], "is_paratext": false, "journal_name": "Proceedings of the American Mathematical Society", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0002-9939", "journal_issn_l": "0002-9939", "published_date": "1963-02-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.4287/jsprs1962.13.4_8", "year": 1974, "genre": "journal-article", "is_oa": true, "title": "", "doi_url": "https://doi.org/10.4287/jsprs1962.13.4_8", "updated": "2020-03-22T11:59:23.244855", "oa_status": "bronze", "publisher": "Japan Society of Photogrammetry and Remote Sensing", "z_authors": [{"given": "Yukio", "family": "Ozaki", "sequence": "first"}], "is_paratext": false, "journal_name": "Journal of the Japan society of photogrammetry", "oa_locations": [{"url": "https://www.jstage.jst.go.jp/article/jsprs1962/13/4/13_4_8/_pdf", "pmh_id": null, "is_best": true, "license": null, "updated": "2018-07-22T12:12:32.891516", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.jstage.jst.go.jp/article/jsprs1962/13/4/13_4_8/_pdf", "url_for_landing_page": "https://doi.org/10.4287/jsprs1962.13.4_8", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "1884-3980,0549-4451", "journal_issn_l": "0549-4451", "published_date": "1974-01-01", "best_oa_location": {"url": "https://www.jstage.jst.go.jp/article/jsprs1962/13/4/13_4_8/_pdf", "pmh_id": null, "is_best": true, "license": null, "updated": "2018-07-22T12:12:32.891516", "version": "publishedVersion", "evidence": "open (via free pdf)", "host_type": "publisher", "endpoint_id": null, "url_for_pdf": "https://www.jstage.jst.go.jp/article/jsprs1962/13/4/13_4_8/_pdf", "url_for_landing_page": "https://doi.org/10.4287/jsprs1962.13.4_8", "repository_institution": null}, "journal_is_in_doaj": false, "has_repository_copy": false} +{"doi": "10.1016/j.biopsycho.2012.02.013", "year": 2012, "genre": "journal-article", "is_oa": true, "title": "Heart rate responses to parental behavior in depressed adolescents", "doi_url": "https://doi.org/10.1016/j.biopsycho.2012.02.013", "updated": "2020-03-21T01:08:24.519658", "oa_status": "green", "publisher": "Elsevier BV", "z_authors": [{"given": "Nicholas B.", "family": "Allen", "sequence": "first"}, {"given": "Peter", "family": "Kuppens", "sequence": "additional"}, {"given": "Lisa B.", "family": "Sheeber", "sequence": "additional"}], "is_paratext": false, "journal_name": "Biological Psychology", "oa_locations": [{"url": "http://europepmc.org/articles/pmc3934559?pdf=render", "pmh_id": "oai:pubmedcentral.nih.gov:3934559", "is_best": true, "license": null, "updated": "2017-10-20T16:21:24.823564", "version": "acceptedVersion", "evidence": "oa repository (via OAI-PMH doi match)", "host_type": "repository", "endpoint_id": "pubmedcentral.nih.gov", "url_for_pdf": "http://europepmc.org/articles/pmc3934559?pdf=render", "url_for_landing_page": "http://europepmc.org/articles/pmc3934559", "repository_institution": "pubmedcentral.nih.gov"}, {"url": "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3934559", "pmh_id": null, "is_best": false, "license": null, "updated": "2020-04-25T10:29:56.934849", "version": "acceptedVersion", "evidence": "oa repository (via pmcid lookup)", "host_type": "repository", "endpoint_id": null, "url_for_pdf": null, "url_for_landing_page": "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3934559", "repository_institution": null}], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0301-0511", "journal_issn_l": "0301-0511", "published_date": "2012-04-01", "best_oa_location": {"url": "http://europepmc.org/articles/pmc3934559?pdf=render", "pmh_id": "oai:pubmedcentral.nih.gov:3934559", "is_best": true, "license": null, "updated": "2017-10-20T16:21:24.823564", "version": "acceptedVersion", "evidence": "oa repository (via OAI-PMH doi match)", "host_type": "repository", "endpoint_id": "pubmedcentral.nih.gov", "url_for_pdf": "http://europepmc.org/articles/pmc3934559?pdf=render", "url_for_landing_page": "http://europepmc.org/articles/pmc3934559", "repository_institution": "pubmedcentral.nih.gov"}, "journal_is_in_doaj": false, "has_repository_copy": true} +{"doi": "10.1119/1.1996235", "year": 1959, "genre": "journal-article", "is_oa": false, "title": "American Physical Society, Southeastern Section", "doi_url": "https://doi.org/10.1119/1.1996235", "updated": "2020-03-11T14:52:21.252730", "oa_status": "closed", "publisher": "American Association of Physics Teachers (AAPT)", "z_authors": [{"given": "Howard", "family": "Carr", "sequence": "first"}], "is_paratext": false, "journal_name": "American Journal of Physics", "oa_locations": [], "data_standard": 2, "journal_is_oa": false, "journal_issns": "0002-9505,1943-2909", "journal_issn_l": "0002-9505", "published_date": "1959-10-01", "best_oa_location": null, "journal_is_in_doaj": false, "has_repository_copy": false} \ No newline at end of file diff --git a/dhp-workflows/dhp-doiboost/src/test/resources/log4j.properties b/dhp-workflows/dhp-doiboost/src/test/resources/log4j.properties new file mode 100644 index 000000000..20f56e38d --- /dev/null +++ b/dhp-workflows/dhp-doiboost/src/test/resources/log4j.properties @@ -0,0 +1,11 @@ +# Set root logger level to DEBUG and its only appender to A1. +log4j.rootLogger=INFO, A1 + +# A1 is set to be a ConsoleAppender. +log4j.appender.A1=org.apache.log4j.ConsoleAppender + +# A1 uses PatternLayout. +log4j.logger.org = ERROR +log4j.logger.eu.dnetlib = DEBUG +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/SparkIndexCollectionOnES.java b/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/SparkIndexCollectionOnES.java index e79dad8d3..78d873080 100644 --- a/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/SparkIndexCollectionOnES.java +++ b/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/SparkIndexCollectionOnES.java @@ -40,6 +40,7 @@ public class SparkIndexCollectionOnES { final String index = parser.get("index"); final String idPath = parser.get("idPath"); final String type = parser.get("type"); + final String indexHost = parser.get("esHost"); final SparkSession spark = SparkSession.builder().config(conf).getOrCreate(); @@ -63,7 +64,8 @@ public class SparkIndexCollectionOnES { inputRdd = sc.textFile(sourcePath); Map esCfg = new HashMap<>(); - esCfg.put("es.nodes", "10.19.65.51, 10.19.65.52, 10.19.65.53, 10.19.65.54"); + // esCfg.put("es.nodes", "10.19.65.51, 10.19.65.52, 10.19.65.53, 10.19.65.54"); + esCfg.put("es.nodes", indexHost); esCfg.put("es.mapping.id", idPath); esCfg.put("es.batch.write.retry.count", "8"); esCfg.put("es.batch.write.retry.wait", "60s"); diff --git a/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/provision/index_on_es.json b/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/provision/index_on_es.json index 905b6d514..f70f7dd79 100644 --- a/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/provision/index_on_es.json +++ b/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/provision/index_on_es.json @@ -17,6 +17,13 @@ "paramDescription": "the index name", "paramRequired": true }, + { + "paramName": "h", + "paramLongName": "esHost", + "paramDescription": "the index host name", + "paramRequired": true + }, + { "paramName": "t", diff --git a/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/index/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/index/oozie_app/workflow.xml index 9fc86e014..4f5c7bbf6 100644 --- a/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/index/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/index/oozie_app/workflow.xml @@ -16,6 +16,11 @@ index index name + + + indexHost + index host name + @@ -37,6 +42,7 @@ -mt yarn-cluster --sourcePath${workingDirPath}/summary --index${index}_object + --esHost${indexHost} --idPathid --typesummary @@ -57,6 +63,7 @@ -mt yarn-cluster --sourcePath${workingDirPath}/scholix_json --index${index}_scholix + --esHost${indexHost} --idPathidentifier --typescholix diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/AdjacencyListBuilderJob.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/AdjacencyListBuilderJob.java index 99247b756..d9cc03cd5 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/AdjacencyListBuilderJob.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/AdjacencyListBuilderJob.java @@ -6,23 +6,23 @@ import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.MapFunction; import org.apache.spark.api.java.function.MapGroupsFunction; -import org.apache.spark.sql.Encoders; -import org.apache.spark.sql.SaveMode; -import org.apache.spark.sql.SparkSession; +import org.apache.spark.sql.*; +import org.apache.spark.sql.expressions.Aggregator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.common.HdfsSupport; -import eu.dnetlib.dhp.oa.provision.model.EntityRelEntity; -import eu.dnetlib.dhp.oa.provision.model.JoinedEntity; -import eu.dnetlib.dhp.oa.provision.model.Tuple2; -import eu.dnetlib.dhp.schema.common.ModelSupport; +import eu.dnetlib.dhp.oa.provision.model.*; +import scala.Tuple2; +import scala.collection.JavaConverters; +import scala.collection.Seq; /** * Joins the graph nodes by resolving the links of distance = 1 to create an adjacency list of linked objects. The @@ -76,46 +76,31 @@ public class AdjacencyListBuilderJob { SparkConf conf = new SparkConf(); conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); - conf.registerKryoClasses(ModelSupport.getOafModelClasses()); + conf.registerKryoClasses(ProvisionModelSupport.getModelClasses()); runWithSparkSession( conf, isSparkSessionManaged, spark -> { removeOutputDir(spark, outputPath); - createAdjacencyLists(spark, inputPath, outputPath); + createAdjacencyListsKryo(spark, inputPath, outputPath); }); } - private static void createAdjacencyLists( + private static void createAdjacencyListsKryo( SparkSession spark, String inputPath, String outputPath) { log.info("Reading joined entities from: {}", inputPath); - spark - .read() - .load(inputPath) - .as(Encoders.bean(EntityRelEntity.class)) - .groupByKey( - (MapFunction) value -> value.getEntity().getId(), - Encoders.STRING()) - .mapGroups( - (MapGroupsFunction) (key, values) -> { - JoinedEntity j = new JoinedEntity(); - List links = new ArrayList<>(); - while (values.hasNext() && links.size() < MAX_LINKS) { - EntityRelEntity curr = values.next(); - if (j.getEntity() == null) { - j.setEntity(curr.getEntity()); - } - links.add(new Tuple2(curr.getRelation(), curr.getTarget())); - } - j.setLinks(links); - return j; - }, - Encoders.bean(JoinedEntity.class)) - .write() - .mode(SaveMode.Overwrite) - .parquet(outputPath); + + final List paths = HdfsSupport + .listFiles(inputPath, spark.sparkContext().hadoopConfiguration()); + + log.info("Found paths: {}", String.join(",", paths)); + + } + + private static Seq toSeq(List list) { + return JavaConverters.asScalaIteratorConverter(list.iterator()).asScala().toSeq(); } private static void removeOutputDir(SparkSession spark, String path) { diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/CreateRelatedEntitiesJob_phase1.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/CreateRelatedEntitiesJob_phase1.java index 606fa4cc0..4d2633bc5 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/CreateRelatedEntitiesJob_phase1.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/CreateRelatedEntitiesJob_phase1.java @@ -2,7 +2,6 @@ package eu.dnetlib.dhp.oa.provision; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; -import static eu.dnetlib.dhp.oa.provision.utils.GraphMappingUtils.*; import java.util.List; import java.util.Objects; @@ -23,8 +22,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.common.HdfsSupport; -import eu.dnetlib.dhp.oa.provision.model.EntityRelEntity; +import eu.dnetlib.dhp.oa.provision.model.ProvisionModelSupport; import eu.dnetlib.dhp.oa.provision.model.RelatedEntity; +import eu.dnetlib.dhp.oa.provision.model.RelatedEntityWrapper; import eu.dnetlib.dhp.oa.provision.model.SortableRelation; import eu.dnetlib.dhp.schema.common.EntityType; import eu.dnetlib.dhp.schema.common.ModelSupport; @@ -91,7 +91,7 @@ public class CreateRelatedEntitiesJob_phase1 { SparkConf conf = new SparkConf(); conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); - conf.registerKryoClasses(ModelSupport.getOafModelClasses()); + conf.registerKryoClasses(ProvisionModelSupport.getModelClasses()); runWithSparkSession( conf, @@ -120,7 +120,7 @@ public class CreateRelatedEntitiesJob_phase1 { .filter("dataInfo.invisible == false") .map( (MapFunction) value -> asRelatedEntity(value, clazz), - Encoders.bean(RelatedEntity.class)) + Encoders.kryo(RelatedEntity.class)) .map( (MapFunction>) e -> new Tuple2<>(e.getId(), e), Encoders.tuple(Encoders.STRING(), Encoders.kryo(RelatedEntity.class))) @@ -129,12 +129,12 @@ public class CreateRelatedEntitiesJob_phase1 { relsByTarget .joinWith(entities, entities.col("_1").equalTo(relsByTarget.col("_1")), "inner") .map( - (MapFunction, Tuple2>, EntityRelEntity>) t -> new EntityRelEntity( + (MapFunction, Tuple2>, RelatedEntityWrapper>) t -> new RelatedEntityWrapper( t._1()._2(), t._2()._2()), - Encoders.bean(EntityRelEntity.class)) + Encoders.kryo(RelatedEntityWrapper.class)) .write() .mode(SaveMode.Overwrite) - .parquet(outputPath + "/" + EntityType.fromClass(clazz)); + .parquet(outputPath); } private static Dataset readPathEntity( diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/CreateRelatedEntitiesJob_phase2.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/CreateRelatedEntitiesJob_phase2.java index 403817019..5ef30d6e1 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/CreateRelatedEntitiesJob_phase2.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/CreateRelatedEntitiesJob_phase2.java @@ -4,27 +4,32 @@ package eu.dnetlib.dhp.oa.provision; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; import java.util.List; +import java.util.Objects; import java.util.Optional; +import java.util.stream.Collectors; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.FilterFunction; import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.sql.*; import org.apache.spark.sql.Dataset; -import org.apache.spark.sql.Encoders; -import org.apache.spark.sql.SaveMode; -import org.apache.spark.sql.SparkSession; +import org.apache.spark.sql.expressions.Aggregator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Lists; import eu.dnetlib.dhp.application.ArgumentApplicationParser; import eu.dnetlib.dhp.common.HdfsSupport; -import eu.dnetlib.dhp.oa.provision.model.EntityRelEntity; +import eu.dnetlib.dhp.oa.provision.model.JoinedEntity; +import eu.dnetlib.dhp.oa.provision.model.ProvisionModelSupport; +import eu.dnetlib.dhp.oa.provision.model.RelatedEntityWrapper; import eu.dnetlib.dhp.oa.provision.model.TypedRow; +import eu.dnetlib.dhp.schema.common.EntityType; import eu.dnetlib.dhp.schema.common.ModelSupport; import eu.dnetlib.dhp.schema.oaf.*; import scala.Tuple2; @@ -59,6 +64,12 @@ public class CreateRelatedEntitiesJob_phase2 { private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + private static final int MAX_EXTERNAL_ENTITIES = 50; + private static final int MAX_AUTHORS = 200; + private static final int MAX_AUTHOR_FULLNAME_LENGTH = 1000; + private static final int MAX_TITLE_LENGTH = 5000; + private static final int MAX_ABSTRACT_LENGTH = 100000; + public static void main(String[] args) throws Exception { String jsonConfiguration = IOUtils @@ -78,8 +89,8 @@ public class CreateRelatedEntitiesJob_phase2 { String inputRelatedEntitiesPath = parser.get("inputRelatedEntitiesPath"); log.info("inputRelatedEntitiesPath: {}", inputRelatedEntitiesPath); - String inputGraphRootPath = parser.get("inputGraphRootPath"); - log.info("inputGraphRootPath: {}", inputGraphRootPath); + String inputEntityPath = parser.get("inputEntityPath"); + log.info("inputEntityPath: {}", inputEntityPath); String outputPath = parser.get("outputPath"); log.info("outputPath: {}", outputPath); @@ -87,80 +98,112 @@ public class CreateRelatedEntitiesJob_phase2 { int numPartitions = Integer.parseInt(parser.get("numPartitions")); log.info("numPartitions: {}", numPartitions); + String graphTableClassName = parser.get("graphTableClassName"); + log.info("graphTableClassName: {}", graphTableClassName); + + Class entityClazz = (Class) Class.forName(graphTableClassName); + SparkConf conf = new SparkConf(); conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); - conf.registerKryoClasses(ModelSupport.getOafModelClasses()); + conf.registerKryoClasses(ProvisionModelSupport.getModelClasses()); runWithSparkSession( conf, isSparkSessionManaged, spark -> { removeOutputDir(spark, outputPath); - joinAllEntities( - spark, inputRelatedEntitiesPath, inputGraphRootPath, outputPath, numPartitions); + joinEntityWithRelatedEntities( + spark, inputRelatedEntitiesPath, inputEntityPath, outputPath, numPartitions, entityClazz); }); } - private static void joinAllEntities( + private static void joinEntityWithRelatedEntities( SparkSession spark, - String inputRelatedEntitiesPath, - String inputGraphRootPath, + String relatedEntitiesPath, + String entityPath, String outputPath, - int numPartitions) { + int numPartitions, + Class entityClazz) { - Dataset> entities = readAllEntities(spark, inputGraphRootPath, numPartitions); - Dataset> relsBySource = readRelatedEntities(spark, inputRelatedEntitiesPath); + Dataset> entities = readPathEntity(spark, entityPath, entityClazz); + Dataset> relatedEntities = readRelatedEntities( + spark, relatedEntitiesPath, entityClazz); + + TypedColumn aggregator = new AdjacencyListAggregator().toColumn(); entities - .joinWith(relsBySource, entities.col("_1").equalTo(relsBySource.col("_1")), "left_outer") + .joinWith(relatedEntities, entities.col("_1").equalTo(relatedEntities.col("_1")), "left_outer") + .map((MapFunction, Tuple2>, JoinedEntity>) value -> { + JoinedEntity je = new JoinedEntity(value._1()._2()); + Optional + .ofNullable(value._2()) + .map(Tuple2::_2) + .ifPresent(r -> je.getLinks().add(r)); + return je; + }, Encoders.kryo(JoinedEntity.class)) + .filter(filterEmptyEntityFn()) + .groupByKey( + (MapFunction) value -> value.getEntity().getId(), + Encoders.STRING()) + .agg(aggregator) .map( - (MapFunction, Tuple2>, EntityRelEntity>) value -> { - EntityRelEntity re = new EntityRelEntity(); - re.setEntity(value._1()._2()); - Optional related = Optional.ofNullable(value._2()).map(Tuple2::_2); - if (related.isPresent()) { - re.setRelation(related.get().getRelation()); - re.setTarget(related.get().getTarget()); - } - return re; - }, - Encoders.bean(EntityRelEntity.class)) - .repartition(numPartitions) - .filter( - (FilterFunction) value -> value.getEntity() != null - && StringUtils.isNotBlank(value.getEntity().getId())) + (MapFunction, JoinedEntity>) value -> value._2(), + Encoders.kryo(JoinedEntity.class)) + .filter(filterEmptyEntityFn()) .write() .mode(SaveMode.Overwrite) .parquet(outputPath); } - private static Dataset> readAllEntities( - SparkSession spark, String inputGraphPath, int numPartitions) { - Dataset publication = readPathEntity(spark, inputGraphPath + "/publication", Publication.class); - Dataset dataset = readPathEntity( - spark, inputGraphPath + "/dataset", eu.dnetlib.dhp.schema.oaf.Dataset.class); - Dataset other = readPathEntity( - spark, inputGraphPath + "/otherresearchproduct", OtherResearchProduct.class); - Dataset software = readPathEntity(spark, inputGraphPath + "/software", Software.class); - Dataset datasource = readPathEntity(spark, inputGraphPath + "/datasource", Datasource.class); - Dataset organization = readPathEntity(spark, inputGraphPath + "/organization", Organization.class); - Dataset project = readPathEntity(spark, inputGraphPath + "/project", Project.class); + public static class AdjacencyListAggregator extends Aggregator { + + @Override + public JoinedEntity zero() { + return new JoinedEntity(); + } + + @Override + public JoinedEntity reduce(JoinedEntity b, JoinedEntity a) { + return mergeAndGet(b, a); + } + + private JoinedEntity mergeAndGet(JoinedEntity b, JoinedEntity a) { + b + .setEntity( + Optional + .ofNullable(a.getEntity()) + .orElse( + Optional + .ofNullable(b.getEntity()) + .orElse(null))); + b.getLinks().addAll(a.getLinks()); + return b; + } + + @Override + public JoinedEntity merge(JoinedEntity b, JoinedEntity a) { + return mergeAndGet(b, a); + } + + @Override + public JoinedEntity finish(JoinedEntity j) { + return j; + } + + @Override + public Encoder bufferEncoder() { + return Encoders.kryo(JoinedEntity.class); + } + + @Override + public Encoder outputEncoder() { + return Encoders.kryo(JoinedEntity.class); + } - return publication - .union(dataset) - .union(other) - .union(software) - .union(datasource) - .union(organization) - .union(project) - .map( - (MapFunction>) value -> new Tuple2<>(value.getId(), value), - Encoders.tuple(Encoders.STRING(), Encoders.kryo(TypedRow.class))) - .repartition(numPartitions); } - private static Dataset> readRelatedEntities( - SparkSession spark, String inputRelatedEntitiesPath) { + private static Dataset> readRelatedEntities( + SparkSession spark, String inputRelatedEntitiesPath, Class entityClazz) { log.info("Reading related entities from: {}", inputRelatedEntitiesPath); @@ -169,17 +212,20 @@ public class CreateRelatedEntitiesJob_phase2 { log.info("Found paths: {}", String.join(",", paths)); + final String idPrefix = ModelSupport.getIdPrefix(entityClazz); + return spark .read() .load(toSeq(paths)) - .as(Encoders.bean(EntityRelEntity.class)) + .as(Encoders.kryo(RelatedEntityWrapper.class)) + .filter((FilterFunction) e -> e.getRelation().getSource().startsWith(idPrefix)) .map( - (MapFunction>) value -> new Tuple2<>( + (MapFunction>) value -> new Tuple2<>( value.getRelation().getSource(), value), - Encoders.tuple(Encoders.STRING(), Encoders.kryo(EntityRelEntity.class))); + Encoders.tuple(Encoders.STRING(), Encoders.kryo(RelatedEntityWrapper.class))); } - private static Dataset readPathEntity( + private static Dataset> readPathEntity( SparkSession spark, String inputEntityPath, Class entityClazz) { log.info("Reading Graph table from: {}", inputEntityPath); @@ -190,10 +236,79 @@ public class CreateRelatedEntitiesJob_phase2 { (MapFunction) value -> OBJECT_MAPPER.readValue(value, entityClazz), Encoders.bean(entityClazz)) .filter("dataInfo.invisible == false") + .map((MapFunction) e -> pruneOutliers(entityClazz, e), Encoders.bean(entityClazz)) .map( - (MapFunction) value -> getTypedRow( - StringUtils.substringAfterLast(inputEntityPath, "/"), value), - Encoders.bean(TypedRow.class)); + (MapFunction>) e -> new Tuple2<>(e.getId(), e), + Encoders.tuple(Encoders.STRING(), Encoders.kryo(entityClazz))); + } + + private static E pruneOutliers(Class entityClazz, E e) { + if (ModelSupport.isSubClass(entityClazz, Result.class)) { + Result r = (Result) e; + if (r.getExternalReference() != null) { + List refs = r + .getExternalReference() + .stream() + .limit(MAX_EXTERNAL_ENTITIES) + .collect(Collectors.toList()); + r.setExternalReference(refs); + } + if (r.getAuthor() != null) { + List authors = Lists.newArrayList(); + for (Author a : r.getAuthor()) { + a.setFullname(StringUtils.left(a.getFullname(), MAX_AUTHOR_FULLNAME_LENGTH)); + if (authors.size() < MAX_AUTHORS || hasORCID(a)) { + authors.add(a); + } + } + r.setAuthor(authors); + } + if (r.getDescription() != null) { + List> desc = r + .getDescription() + .stream() + .filter(Objects::nonNull) + .map(d -> { + d.setValue(StringUtils.left(d.getValue(), MAX_ABSTRACT_LENGTH)); + return d; + }) + .collect(Collectors.toList()); + r.setDescription(desc); + } + if (r.getTitle() != null) { + List titles = r + .getTitle() + .stream() + .filter(Objects::nonNull) + .map(t -> { + t.setValue(StringUtils.left(t.getValue(), MAX_TITLE_LENGTH)); + return t; + }) + .collect(Collectors.toList()); + r.setTitle(titles); + } + } + return e; + } + + private static boolean hasORCID(Author a) { + return a.getPid() != null && a + .getPid() + .stream() + .filter(Objects::nonNull) + .map(StructuredProperty::getQualifier) + .filter(Objects::nonNull) + .map(Qualifier::getClassid) + .filter(StringUtils::isNotBlank) + .anyMatch(c -> "orcid".equals(c.toLowerCase())); + } + + private static FilterFunction filterEmptyEntityFn() { + return (FilterFunction) v -> Objects.nonNull(v.getEntity()); + /* + * return (FilterFunction) v -> Optional .ofNullable(v.getEntity()) .map(e -> + * StringUtils.isNotBlank(e.getId())) .orElse(false); + */ } private static TypedRow getTypedRow(String type, OafEntity entity) diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/PrepareRelationsJob.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/PrepareRelationsJob.java index 72d68a389..6b184071a 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/PrepareRelationsJob.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/PrepareRelationsJob.java @@ -3,9 +3,8 @@ package eu.dnetlib.dhp.oa.provision; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; -import java.util.HashSet; -import java.util.Optional; -import java.util.Set; +import java.util.*; +import java.util.function.Function; import org.apache.commons.io.IOUtils; import org.apache.spark.SparkConf; @@ -20,6 +19,7 @@ import org.apache.spark.sql.SparkSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.clearspring.analytics.util.Lists; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Splitter; import com.google.common.collect.Iterables; @@ -27,9 +27,11 @@ import com.google.common.collect.Iterators; import com.google.common.collect.Sets; import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import eu.dnetlib.dhp.common.FunctionalInterfaceSupport; import eu.dnetlib.dhp.common.HdfsSupport; import eu.dnetlib.dhp.oa.provision.model.SortableRelation; import eu.dnetlib.dhp.oa.provision.utils.RelationPartitioner; +import scala.Function1; import scala.Tuple2; /** @@ -111,37 +113,10 @@ public class PrepareRelationsJob { spark -> { removeOutputDir(spark, outputPath); prepareRelationsRDD( - spark, inputRelationsPath, outputPath, relationFilter, relPartitions, maxRelations); + spark, inputRelationsPath, outputPath, relationFilter, maxRelations, relPartitions); }); } - /** - * Dataset based implementation that prepares the graph relations by limiting the number of outgoing links and - * filtering the relation types according to the given criteria. - * - * @param spark the spark session - * @param inputRelationsPath source path for the graph relations - * @param outputPath output path for the processed relations - * @param relationFilter set of relation filters applied to the `relClass` field - * @param maxRelations maximum number of allowed outgoing edges - */ - private static void prepareRelations( - SparkSession spark, String inputRelationsPath, String outputPath, Set relationFilter, - int maxRelations) { - readPathRelation(spark, inputRelationsPath) - .filter("dataInfo.deletedbyinference == false") - .filter((FilterFunction) rel -> !relationFilter.contains(rel.getRelClass())) - .groupByKey( - (MapFunction) value -> value.getSource(), Encoders.STRING()) - .flatMapGroups( - (FlatMapGroupsFunction) (key, values) -> Iterators - .limit(values, maxRelations), - Encoders.bean(SortableRelation.class)) - .write() - .mode(SaveMode.Overwrite) - .parquet(outputPath); - } - /** * RDD based implementation that prepares the graph relations by limiting the number of outgoing links and filtering * the relation types according to the given criteria. Moreover, outgoing links kept within the given limit are @@ -152,50 +127,41 @@ public class PrepareRelationsJob { * @param outputPath output path for the processed relations * @param relationFilter set of relation filters applied to the `relClass` field * @param maxRelations maximum number of allowed outgoing edges + * @param relPartitions number of partitions for the output RDD */ - // TODO work in progress private static void prepareRelationsRDD( - SparkSession spark, String inputRelationsPath, String outputPath, Set relationFilter, int relPartitions, - int maxRelations) { - JavaRDD rels = readPathRelationRDD(spark, inputRelationsPath).repartition(relPartitions); - RelationPartitioner partitioner = new RelationPartitioner(rels.getNumPartitions()); + SparkSession spark, String inputRelationsPath, String outputPath, Set relationFilter, int maxRelations, + int relPartitions) { - // only consider those that are not virtually deleted - RDD d = rels + RDD cappedRels = readPathRelationRDD(spark, inputRelationsPath) + .repartition(relPartitions) .filter(rel -> !rel.getDataInfo().getDeletedbyinference()) .filter(rel -> !relationFilter.contains(rel.getRelClass())) - .mapToPair( - (PairFunction) rel -> new Tuple2<>(rel, rel)) - .groupByKey(partitioner) - .map(group -> Iterables.limit(group._2(), maxRelations)) - .flatMap(group -> group.iterator()) + // group by SOURCE and apply limit + .mapToPair(rel -> new Tuple2<>(rel.getSource(), rel)) + .groupByKey(new RelationPartitioner(relPartitions)) + .flatMap(group -> Iterables.limit(group._2(), maxRelations).iterator()) + // group by TARGET and apply limit + .mapToPair(rel -> new Tuple2<>(rel.getTarget(), rel)) + .groupByKey(new RelationPartitioner(relPartitions)) + .flatMap(group -> Iterables.limit(group._2(), maxRelations).iterator()) .rdd(); spark - .createDataset(d, Encoders.bean(SortableRelation.class)) + .createDataset(cappedRels, Encoders.bean(SortableRelation.class)) .write() .mode(SaveMode.Overwrite) .parquet(outputPath); } /** - * Reads a Dataset of eu.dnetlib.dhp.oa.provision.model.SortableRelation objects from a newline delimited json text + * Reads a JavaRDD of eu.dnetlib.dhp.oa.provision.model.SortableRelation objects from a newline delimited json text * file, * * @param spark * @param inputPath - * @return the Dataset containing all the relationships + * @return the JavaRDD containing all the relationships */ - private static Dataset readPathRelation( - SparkSession spark, final String inputPath) { - return spark - .read() - .textFile(inputPath) - .map( - (MapFunction) value -> OBJECT_MAPPER.readValue(value, SortableRelation.class), - Encoders.bean(SortableRelation.class)); - } - private static JavaRDD readPathRelationRDD( SparkSession spark, final String inputPath) { JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/XmlConverterJob.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/XmlConverterJob.java index a88b28592..a1ed7fd2a 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/XmlConverterJob.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/XmlConverterJob.java @@ -4,6 +4,7 @@ package eu.dnetlib.dhp.oa.provision; import static eu.dnetlib.dhp.common.SparkSessionSupport.runWithSparkSession; import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; @@ -32,6 +33,8 @@ import eu.dnetlib.dhp.oa.provision.utils.ContextMapper; import eu.dnetlib.dhp.oa.provision.utils.XmlRecordFactory; import eu.dnetlib.dhp.schema.oaf.*; import scala.Tuple2; +import scala.collection.JavaConverters; +import scala.collection.Seq; /** * Joins the graph nodes by resolving the links of distance = 1 to create an adjacency list of linked objects. The @@ -89,6 +92,8 @@ public class XmlConverterJob { log.info("otherDsTypeId: {}", otherDsTypeId); SparkConf conf = new SparkConf(); + conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); + conf.registerKryoClasses(ProvisionModelSupport.getModelClasses()); runWithSparkSession( conf, @@ -114,26 +119,18 @@ public class XmlConverterJob { schemaLocation, otherDsTypeId); + final List paths = HdfsSupport + .listFiles(inputPath, spark.sparkContext().hadoopConfiguration()); + + log.info("Found paths: {}", String.join(",", paths)); + spark .read() - .load(inputPath) - .as(Encoders.bean(JoinedEntity.class)) + .load(toSeq(paths)) + .as(Encoders.kryo(JoinedEntity.class)) .map( - (MapFunction) j -> { - if (j.getLinks() != null) { - j - .setLinks( - j - .getLinks() - .stream() - .filter(t -> t.getRelation() != null & t.getRelatedEntity() != null) - .collect(Collectors.toCollection(ArrayList::new))); - } - return j; - }, - Encoders.bean(JoinedEntity.class)) - .map( - (MapFunction>) je -> new Tuple2<>(je.getEntity().getId(), + (MapFunction>) je -> new Tuple2<>( + je.getEntity().getId(), recordFactory.build(je)), Encoders.tuple(Encoders.STRING(), Encoders.STRING())) .javaRDD() @@ -148,6 +145,10 @@ public class XmlConverterJob { HdfsSupport.remove(path, spark.sparkContext().hadoopConfiguration()); } + private static Seq toSeq(List list) { + return JavaConverters.asScalaIteratorConverter(list.iterator()).asScala().toSeq(); + } + private static Map prepareAccumulators(SparkContext sc) { Map accumulators = Maps.newHashMap(); accumulators diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/JoinedEntity.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/JoinedEntity.java index e29ec9d19..2eb9cf38b 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/JoinedEntity.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/JoinedEntity.java @@ -2,30 +2,40 @@ package eu.dnetlib.dhp.oa.provision.model; import java.io.Serializable; +import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; -public class JoinedEntity implements Serializable { +import eu.dnetlib.dhp.schema.oaf.OafEntity; - private TypedRow entity; +public class JoinedEntity implements Serializable { - private List links; + private E entity; + + private List links; public JoinedEntity() { + links = new LinkedList<>(); } - public TypedRow getEntity() { - return entity; - } - - public void setEntity(TypedRow entity) { + public JoinedEntity(E entity) { + this(); this.entity = entity; } - public List getLinks() { + public E getEntity() { + return entity; + } + + public void setEntity(E entity) { + this.entity = entity; + } + + public List getLinks() { return links; } - public void setLinks(List links) { + public void setLinks(List links) { this.links = links; } } diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/ProvisionModelSupport.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/ProvisionModelSupport.java new file mode 100644 index 000000000..f9fde14e5 --- /dev/null +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/ProvisionModelSupport.java @@ -0,0 +1,25 @@ + +package eu.dnetlib.dhp.oa.provision.model; + +import java.util.List; + +import com.google.common.collect.Lists; + +import eu.dnetlib.dhp.schema.common.ModelSupport; + +public class ProvisionModelSupport { + + public static Class[] getModelClasses() { + List> modelClasses = Lists.newArrayList(ModelSupport.getOafModelClasses()); + modelClasses + .addAll( + Lists + .newArrayList( + TypedRow.class, + RelatedEntityWrapper.class, + JoinedEntity.class, + RelatedEntity.class, + SortableRelation.class)); + return modelClasses.toArray(new Class[] {}); + } +} diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/EntityRelEntity.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/RelatedEntityWrapper.java similarity index 56% rename from dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/EntityRelEntity.java rename to dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/RelatedEntityWrapper.java index a6b3c5591..d708b6ed0 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/EntityRelEntity.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/RelatedEntityWrapper.java @@ -5,33 +5,23 @@ import java.io.Serializable; import com.google.common.base.Objects; -public class EntityRelEntity implements Serializable { +public class RelatedEntityWrapper implements Serializable { - private TypedRow entity; private SortableRelation relation; private RelatedEntity target; - public EntityRelEntity() { + public RelatedEntityWrapper() { } - public EntityRelEntity(SortableRelation relation, RelatedEntity target) { + public RelatedEntityWrapper(SortableRelation relation, RelatedEntity target) { this(null, relation, target); } - public EntityRelEntity(TypedRow entity, SortableRelation relation, RelatedEntity target) { - this.entity = entity; + public RelatedEntityWrapper(TypedRow entity, SortableRelation relation, RelatedEntity target) { this.relation = relation; this.target = target; } - public TypedRow getEntity() { - return entity; - } - - public void setEntity(TypedRow entity) { - this.entity = entity; - } - public SortableRelation getRelation() { return relation; } @@ -54,14 +44,13 @@ public class EntityRelEntity implements Serializable { return true; if (o == null || getClass() != o.getClass()) return false; - EntityRelEntity that = (EntityRelEntity) o; - return Objects.equal(entity, that.entity) - && Objects.equal(relation, that.relation) + RelatedEntityWrapper that = (RelatedEntityWrapper) o; + return Objects.equal(relation, that.relation) && Objects.equal(target, that.target); } @Override public int hashCode() { - return Objects.hashCode(entity, relation, target); + return Objects.hashCode(relation, target); } } diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/Tuple2.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/Tuple2.java deleted file mode 100644 index 5ebe9c9eb..000000000 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/model/Tuple2.java +++ /dev/null @@ -1,53 +0,0 @@ - -package eu.dnetlib.dhp.oa.provision.model; - -import java.io.Serializable; -import java.util.Objects; - -import eu.dnetlib.dhp.schema.oaf.Relation; - -public class Tuple2 implements Serializable { - - private Relation relation; - - private RelatedEntity relatedEntity; - - public Tuple2() { - } - - public Tuple2(Relation relation, RelatedEntity relatedEntity) { - this.relation = relation; - this.relatedEntity = relatedEntity; - } - - public Relation getRelation() { - return relation; - } - - public void setRelation(Relation relation) { - this.relation = relation; - } - - public RelatedEntity getRelatedEntity() { - return relatedEntity; - } - - public void setRelatedEntity(RelatedEntity relatedEntity) { - this.relatedEntity = relatedEntity; - } - - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - Tuple2 t2 = (Tuple2) o; - return getRelation().equals(t2.getRelation()); - } - - @Override - public int hashCode() { - return Objects.hash(getRelation().hashCode()); - } -} diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/RelationPartitioner.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/RelationPartitioner.java index a09a27837..c7862b48a 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/RelationPartitioner.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/RelationPartitioner.java @@ -4,8 +4,6 @@ package eu.dnetlib.dhp.oa.provision.utils; import org.apache.spark.Partitioner; import org.apache.spark.util.Utils; -import eu.dnetlib.dhp.oa.provision.model.SortableRelation; - /** * Used in combination with SortableRelationKey, allows to partition the records by source id, therefore allowing to * sort relations sharing the same source id by the ordering defined in SortableRelationKey. @@ -25,6 +23,8 @@ public class RelationPartitioner extends Partitioner { @Override public int getPartition(Object key) { - return Utils.nonNegativeMod(((SortableRelation) key).getSource().hashCode(), numPartitions()); + String partitionKey = (String) key; + return Utils.nonNegativeMod(partitionKey.hashCode(), numPartitions()); } + } diff --git a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/XmlRecordFactory.java b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/XmlRecordFactory.java index f99298130..d950a816d 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/XmlRecordFactory.java +++ b/dhp-workflows/dhp-graph-provision/src/main/java/eu/dnetlib/dhp/oa/provision/utils/XmlRecordFactory.java @@ -85,17 +85,19 @@ public class XmlRecordFactory implements Serializable { final Set contexts = Sets.newHashSet(); - final OafEntity entity = toOafEntity(je.getEntity()); + // final OafEntity entity = toOafEntity(je.getEntity()); + OafEntity entity = je.getEntity(); TemplateFactory templateFactory = new TemplateFactory(); try { - final EntityType type = EntityType.valueOf(je.getEntity().getType()); + + final EntityType type = EntityType.fromClass(entity.getClass()); final List metadata = metadata(type, entity, contexts); // rels has to be processed before the contexts because they enrich the contextMap with // the // funding info. - final List relations = je - .getLinks() + final List links = je.getLinks(); + final List relations = links .stream() .filter(link -> !isDuplicate(link)) .map(link -> mapRelation(contexts, templateFactory, type, link)) @@ -975,10 +977,10 @@ public class XmlRecordFactory implements Serializable { metadata.add(XmlSerializationUtils.mapQualifier("datasourcetypeui", dsType)); } - private List mapFields(Tuple2 link, Set contexts) { + private List mapFields(RelatedEntityWrapper link, Set contexts) { final Relation rel = link.getRelation(); - final RelatedEntity re = link.getRelatedEntity(); - final String targetType = link.getRelatedEntity().getType(); + final RelatedEntity re = link.getTarget(); + final String targetType = link.getTarget().getType(); final List metadata = Lists.newArrayList(); switch (EntityType.valueOf(targetType)) { @@ -1089,9 +1091,10 @@ public class XmlRecordFactory implements Serializable { return metadata; } - private String mapRelation(Set contexts, TemplateFactory templateFactory, EntityType type, Tuple2 link) { + private String mapRelation(Set contexts, TemplateFactory templateFactory, EntityType type, + RelatedEntityWrapper link) { final Relation rel = link.getRelation(); - final String targetType = link.getRelatedEntity().getType(); + final String targetType = link.getTarget().getType(); final String scheme = ModelSupport.getScheme(type.toString(), targetType); if (StringUtils.isBlank(scheme)) { @@ -1107,18 +1110,18 @@ public class XmlRecordFactory implements Serializable { private List listChildren( final OafEntity entity, JoinedEntity je, TemplateFactory templateFactory) { - EntityType entityType = EntityType.valueOf(je.getEntity().getType()); + final EntityType entityType = EntityType.fromClass(je.getEntity().getClass()); - List children = je - .getLinks() + final List links = je.getLinks(); + List children = links .stream() .filter(link -> isDuplicate(link)) .map(link -> { - final String targetType = link.getRelatedEntity().getType(); + final String targetType = link.getTarget().getType(); final String name = ModelSupport.getMainType(EntityType.valueOf(targetType)); final HashSet fields = Sets.newHashSet(mapFields(link, null)); return templateFactory - .getChild(name, link.getRelatedEntity().getId(), Lists.newArrayList(fields)); + .getChild(name, link.getTarget().getId(), Lists.newArrayList(fields)); }) .collect(Collectors.toCollection(ArrayList::new)); @@ -1227,7 +1230,7 @@ public class XmlRecordFactory implements Serializable { return children; } - private boolean isDuplicate(Tuple2 link) { + private boolean isDuplicate(RelatedEntityWrapper link) { return REL_SUBTYPE_DEDUP.equalsIgnoreCase(link.getRelation().getSubRelType()); } diff --git a/dhp-workflows/dhp-graph-provision/src/main/resources/eu/dnetlib/dhp/oa/provision/input_params_related_entities_pahase2.json b/dhp-workflows/dhp-graph-provision/src/main/resources/eu/dnetlib/dhp/oa/provision/input_params_related_entities_pahase2.json index 2727f153b..2c9f0e4f3 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/resources/eu/dnetlib/dhp/oa/provision/input_params_related_entities_pahase2.json +++ b/dhp-workflows/dhp-graph-provision/src/main/resources/eu/dnetlib/dhp/oa/provision/input_params_related_entities_pahase2.json @@ -13,8 +13,14 @@ }, { "paramName": "iep", - "paramLongName": "inputGraphRootPath", - "paramDescription": "root graph path", + "paramLongName": "inputEntityPath", + "paramDescription": "input Entity Path", + "paramRequired": true + }, + { + "paramName": "clazz", + "paramLongName": "graphTableClassName", + "paramDescription": "class name associated to the input entity path", "paramRequired": true }, { diff --git a/dhp-workflows/dhp-graph-provision/src/main/resources/eu/dnetlib/dhp/oa/provision/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-provision/src/main/resources/eu/dnetlib/dhp/oa/provision/oozie_app/workflow.xml index 6983ecf53..0d5121cf1 100644 --- a/dhp-workflows/dhp-graph-provision/src/main/resources/eu/dnetlib/dhp/oa/provision/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-provision/src/main/resources/eu/dnetlib/dhp/oa/provision/oozie_app/workflow.xml @@ -103,8 +103,7 @@ ${wf:conf('resumeFrom') eq 'prepare_relations'} ${wf:conf('resumeFrom') eq 'fork_join_related_entities'} - ${wf:conf('resumeFrom') eq 'join_all_entities'} - ${wf:conf('resumeFrom') eq 'adjancency_lists'} + ${wf:conf('resumeFrom') eq 'fork_join_all_entities'} ${wf:conf('resumeFrom') eq 'convert_to_xml'} ${wf:conf('resumeFrom') eq 'to_solr_index'} @@ -134,7 +133,7 @@ --inputRelationsPath${inputGraphRootPath}/relation --outputPath${workingDir}/relation - --relPartitions3000 + --relPartitions5000 @@ -171,7 +170,7 @@ --inputRelationsPath${workingDir}/relation --inputEntityPath${inputGraphRootPath}/publication --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Publication - --outputPath${workingDir}/join_partial + --outputPath${workingDir}/join_partial/publication @@ -198,7 +197,7 @@ --inputRelationsPath${workingDir}/relation --inputEntityPath${inputGraphRootPath}/dataset --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Dataset - --outputPath${workingDir}/join_partial + --outputPath${workingDir}/join_partial/dataset @@ -225,7 +224,7 @@ --inputRelationsPath${workingDir}/relation --inputEntityPath${inputGraphRootPath}/otherresearchproduct --graphTableClassNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct - --outputPath${workingDir}/join_partial + --outputPath${workingDir}/join_partial/otherresearchproduct @@ -252,7 +251,7 @@ --inputRelationsPath${workingDir}/relation --inputEntityPath${inputGraphRootPath}/software --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Software - --outputPath${workingDir}/join_partial + --outputPath${workingDir}/join_partial/software @@ -279,7 +278,7 @@ --inputRelationsPath${workingDir}/relation --inputEntityPath${inputGraphRootPath}/datasource --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Datasource - --outputPath${workingDir}/join_partial + --outputPath${workingDir}/join_partial/datasource @@ -306,7 +305,7 @@ --inputRelationsPath${workingDir}/relation --inputEntityPath${inputGraphRootPath}/organization --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Organization - --outputPath${workingDir}/join_partial + --outputPath${workingDir}/join_partial/organization @@ -333,19 +332,57 @@ --inputRelationsPath${workingDir}/relation --inputEntityPath${inputGraphRootPath}/project --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Project - --outputPath${workingDir}/join_partial + --outputPath${workingDir}/join_partial/project - + - + + + + + + + + + + + yarn cluster - Join[entities.id = relatedEntity.source] + Join[publication.id = relatedEntity.source] + eu.dnetlib.dhp.oa.provision.CreateRelatedEntitiesJob_phase2 + dhp-graph-provision-${projectVersion}.jar + + --executor-cores=${sparkExecutorCoresForJoining} + --executor-memory=${sparkExecutorMemoryForJoining} + --driver-memory=${sparkDriverMemoryForJoining} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.sql.shuffle.partitions=15360 + --conf spark.network.timeout=${sparkNetworkTimeout} + + --inputEntityPath${inputGraphRootPath}/publication + --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Publication + --inputRelatedEntitiesPath${workingDir}/join_partial + --outputPath${workingDir}/join_entities/publication + --numPartitions30000 + + + + + + + + yarn + cluster + Join[dataset.id = relatedEntity.source] eu.dnetlib.dhp.oa.provision.CreateRelatedEntitiesJob_phase2 dhp-graph-provision-${projectVersion}.jar @@ -359,21 +396,22 @@ --conf spark.sql.shuffle.partitions=7680 --conf spark.network.timeout=${sparkNetworkTimeout} - --inputGraphRootPath${inputGraphRootPath} + --inputEntityPath${inputGraphRootPath}/dataset + --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Dataset --inputRelatedEntitiesPath${workingDir}/join_partial - --outputPath${workingDir}/join_entities - --numPartitions12000 + --outputPath${workingDir}/join_entities/dataset + --numPartitions20000 - + - + yarn cluster - build_adjacency_lists - eu.dnetlib.dhp.oa.provision.AdjacencyListBuilderJob + Join[otherresearchproduct.id = relatedEntity.source] + eu.dnetlib.dhp.oa.provision.CreateRelatedEntitiesJob_phase2 dhp-graph-provision-${projectVersion}.jar --executor-cores=${sparkExecutorCoresForJoining} @@ -386,13 +424,130 @@ --conf spark.sql.shuffle.partitions=7680 --conf spark.network.timeout=${sparkNetworkTimeout} - --inputPath ${workingDir}/join_entities - --outputPath${workingDir}/joined + --inputEntityPath${inputGraphRootPath}/otherresearchproduct + --graphTableClassNameeu.dnetlib.dhp.schema.oaf.OtherResearchProduct + --inputRelatedEntitiesPath${workingDir}/join_partial + --outputPath${workingDir}/join_entities/otherresearchproduct + --numPartitions10000 - + + + + yarn + cluster + Join[software.id = relatedEntity.source] + eu.dnetlib.dhp.oa.provision.CreateRelatedEntitiesJob_phase2 + dhp-graph-provision-${projectVersion}.jar + + --executor-cores=${sparkExecutorCoresForJoining} + --executor-memory=${sparkExecutorMemoryForJoining} + --driver-memory=${sparkDriverMemoryForJoining} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.sql.shuffle.partitions=3840 + --conf spark.network.timeout=${sparkNetworkTimeout} + + --inputEntityPath${inputGraphRootPath}/software + --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Software + --inputRelatedEntitiesPath${workingDir}/join_partial + --outputPath${workingDir}/join_entities/software + --numPartitions10000 + + + + + + + + yarn + cluster + Join[datasource.id = relatedEntity.source] + eu.dnetlib.dhp.oa.provision.CreateRelatedEntitiesJob_phase2 + dhp-graph-provision-${projectVersion}.jar + + --executor-cores=${sparkExecutorCoresForJoining} + --executor-memory=${sparkExecutorMemoryForJoining} + --driver-memory=${sparkDriverMemoryForJoining} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.sql.shuffle.partitions=7680 + --conf spark.network.timeout=${sparkNetworkTimeout} + + --inputEntityPath${inputGraphRootPath}/datasource + --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Datasource + --inputRelatedEntitiesPath${workingDir}/join_partial + --outputPath${workingDir}/join_entities/datasource + --numPartitions1000 + + + + + + + + yarn + cluster + Join[organization.id = relatedEntity.source] + eu.dnetlib.dhp.oa.provision.CreateRelatedEntitiesJob_phase2 + dhp-graph-provision-${projectVersion}.jar + + --executor-cores=${sparkExecutorCoresForJoining} + --executor-memory=${sparkExecutorMemoryForJoining} + --driver-memory=${sparkDriverMemoryForJoining} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.sql.shuffle.partitions=7680 + --conf spark.network.timeout=${sparkNetworkTimeout} + + --inputEntityPath${inputGraphRootPath}/organization + --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Organization + --inputRelatedEntitiesPath${workingDir}/join_partial + --outputPath${workingDir}/join_entities/organization + --numPartitions20000 + + + + + + + + yarn + cluster + Join[project.id = relatedEntity.source] + eu.dnetlib.dhp.oa.provision.CreateRelatedEntitiesJob_phase2 + dhp-graph-provision-${projectVersion}.jar + + --executor-cores=${sparkExecutorCoresForJoining} + --executor-memory=${sparkExecutorMemoryForJoining} + --driver-memory=${sparkDriverMemoryForJoining} + --conf spark.extraListeners=${spark2ExtraListeners} + --conf spark.sql.queryExecutionListeners=${spark2SqlQueryExecutionListeners} + --conf spark.yarn.historyServer.address=${spark2YarnHistoryServerAddress} + --conf spark.eventLog.dir=${nameNode}${spark2EventLogDir} + --conf spark.sql.shuffle.partitions=3840 + --conf spark.network.timeout=${sparkNetworkTimeout} + + --inputEntityPath${inputGraphRootPath}/project + --graphTableClassNameeu.dnetlib.dhp.schema.oaf.Project + --inputRelatedEntitiesPath${workingDir}/join_partial + --outputPath${workingDir}/join_entities/project + --numPartitions10000 + + + + + + + yarn @@ -411,7 +566,7 @@ --conf spark.sql.shuffle.partitions=3840 --conf spark.network.timeout=${sparkNetworkTimeout} - --inputPath${workingDir}/joined + --inputPath${workingDir}/join_entities --outputPath${workingDir}/xml --isLookupUrl${isLookupUrl} --otherDsTypeId${otherDsTypeId} @@ -441,7 +596,7 @@ --conf spark.hadoop.mapreduce.reduce.speculative=false --inputPath${workingDir}/xml - --isLookupUrl ${isLookupUrl} + --isLookupUrl${isLookupUrl} --format${format} --batchSize${batchSize} diff --git a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java index 885c7c425..9a115bfa6 100644 --- a/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java +++ b/dhp-workflows/dhp-graph-provision/src/test/java/eu/dnetlib/dhp/oa/provision/XmlRecordFactoryTest.java @@ -45,7 +45,6 @@ public class XmlRecordFactoryTest { assertNotNull(doc); - System.out.println(doc.asXML()); - + // TODO add assertions based of values extracted from the XML record } } diff --git a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml index 6f6389362..efc301573 100644 --- a/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-stats-update/src/main/resources/eu/dnetlib/dhp/oa/graph/stats/oozie_app/workflow.xml @@ -21,6 +21,10 @@ hiveJdbcUrl hive server jdbc url + + hive_timeout + the time period, in seconds, after which Hive fails a transaction if a Hive client has not sent a hearbeat. The default value is 300 seconds. + @@ -31,6 +35,10 @@ hive.metastore.uris ${hiveMetastoreUris} + + hive.txn.timeout + ${hive_timeout} + diff --git a/dhp-workflows/pom.xml b/dhp-workflows/pom.xml index cf9753da4..11e5be0b6 100644 --- a/dhp-workflows/pom.xml +++ b/dhp-workflows/pom.xml @@ -29,6 +29,7 @@ dhp-blacklist dhp-stats-update dhp-broker-events + dhp-doiboost diff --git a/pom.xml b/pom.xml index e0ee18900..f4b96fefb 100644 --- a/pom.xml +++ b/pom.xml @@ -193,6 +193,7 @@ net.sf.saxon Saxon-HE 9.9.1-6 + provided