From cd7416ae4caf8be73f35010a4feaa74579ebed04 Mon Sep 17 00:00:00 2001 From: Sandro La Bruzzo Date: Tue, 31 Mar 2020 14:41:35 +0200 Subject: [PATCH] first implementation of incremental update of scholix index --- .../dedup/SparkCreateConnectedComponent.java | 2 +- .../dnetlib/dedup/SparkCreateDedupRecord.java | 2 +- .../eu/dnetlib/dedup/SparkCreateSimRels.java | 2 +- .../dedup/sx/SparkPropagateRelationsJob.java | 2 +- .../dedup/sx/SparkUpdateEntityJob.java | 2 +- .../dhp/sx/dedup/dedupRecord_parameters.json | 33 + .../dhp/sx/dedup/dedup_parameters.json | 33 + .../dhp/sx/dedup/oozie_app/workflow.xml | 10 +- .../dhp/provision/Datacite2Scholix.java | 203 ++ .../dnetlib/dhp/provision/DataciteClient.java | 114 + .../provision/RetrieveUpdateFromDatacite.java | 44 + .../provision/SparkExtractRelationCount.java | 27 - .../provision/retrieve_update_parameters.json | 0 .../provision/oozie_app/config-default.xml | 0 .../provision/oozie_app/workflow.xml | 25 +- .../dhp/provision/DataciteClientTest.java | 109 + .../eu/dnetlib/dhp/provision/datacite.json | 136 + .../eu/dnetlib/dhp/provision/es.json | 2191 +++++++++++++++++ 18 files changed, 2883 insertions(+), 52 deletions(-) create mode 100644 dhp-workflows/dhp-dedup-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/dedup/dedupRecord_parameters.json create mode 100644 dhp-workflows/dhp-dedup-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/dedup/dedup_parameters.json create mode 100644 dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/Datacite2Scholix.java create mode 100644 dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/DataciteClient.java create mode 100644 dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/RetrieveUpdateFromDatacite.java create mode 100644 dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/provision/retrieve_update_parameters.json rename dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/{graph/Application => sx}/provision/oozie_app/config-default.xml (100%) rename dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/{graph/Application => sx}/provision/oozie_app/workflow.xml (89%) create mode 100644 dhp-workflows/dhp-graph-provision-scholexplorer/src/test/java/eu/dnetlib/dhp/provision/DataciteClientTest.java create mode 100644 dhp-workflows/dhp-graph-provision-scholexplorer/src/test/resources/eu/dnetlib/dhp/provision/datacite.json create mode 100644 dhp-workflows/dhp-graph-provision-scholexplorer/src/test/resources/eu/dnetlib/dhp/provision/es.json diff --git a/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/SparkCreateConnectedComponent.java b/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/SparkCreateConnectedComponent.java index 01a99da1b..d3020b92c 100644 --- a/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/SparkCreateConnectedComponent.java +++ b/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/SparkCreateConnectedComponent.java @@ -29,7 +29,7 @@ import java.util.List; public class SparkCreateConnectedComponent { public static void main(String[] args) throws Exception { - final ArgumentApplicationParser parser = new ArgumentApplicationParser(IOUtils.toString(SparkCreateConnectedComponent.class.getResourceAsStream("/eu/dnetlib/dhp/dedup/dedup_parameters.json"))); + final ArgumentApplicationParser parser = new ArgumentApplicationParser(IOUtils.toString(SparkCreateConnectedComponent.class.getResourceAsStream("/eu/dnetlib/dhp/sx/dedup/dedup_parameters.json"))); parser.parseArgument(args); final SparkSession spark = SparkSession .builder() diff --git a/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/SparkCreateDedupRecord.java b/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/SparkCreateDedupRecord.java index 8e60df945..09c0ba89b 100644 --- a/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/SparkCreateDedupRecord.java +++ b/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/SparkCreateDedupRecord.java @@ -11,7 +11,7 @@ import org.apache.spark.sql.SparkSession; public class SparkCreateDedupRecord { public static void main(String[] args) throws Exception { - final ArgumentApplicationParser parser = new ArgumentApplicationParser(IOUtils.toString(SparkCreateDedupRecord.class.getResourceAsStream("/eu/dnetlib/dhp/dedup/dedupRecord_parameters.json"))); + final ArgumentApplicationParser parser = new ArgumentApplicationParser(IOUtils.toString(SparkCreateDedupRecord.class.getResourceAsStream("/eu/dnetlib/dhp/sx/dedup/dedupRecord_parameters.json"))); parser.parseArgument(args); final SparkSession spark = SparkSession .builder() diff --git a/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/SparkCreateSimRels.java b/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/SparkCreateSimRels.java index 2bdfa8759..b847c80dc 100644 --- a/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/SparkCreateSimRels.java +++ b/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/SparkCreateSimRels.java @@ -29,7 +29,7 @@ import java.util.List; public class SparkCreateSimRels { public static void main(String[] args) throws Exception { - final ArgumentApplicationParser parser = new ArgumentApplicationParser(IOUtils.toString(SparkCreateSimRels.class.getResourceAsStream("/eu/dnetlib/dhp/dedup/dedup_parameters.json"))); + final ArgumentApplicationParser parser = new ArgumentApplicationParser(IOUtils.toString(SparkCreateSimRels.class.getResourceAsStream("/eu/dnetlib/dhp/sx/dedup/dedup_parameters.json"))); parser.parseArgument(args); final SparkSession spark = SparkSession .builder() diff --git a/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/sx/SparkPropagateRelationsJob.java b/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/sx/SparkPropagateRelationsJob.java index 2896a2aa1..a72529443 100644 --- a/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/sx/SparkPropagateRelationsJob.java +++ b/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/sx/SparkPropagateRelationsJob.java @@ -23,7 +23,7 @@ public class SparkPropagateRelationsJob { final static String TARGETJSONPATH = "$.target"; public static void main(String[] args) throws Exception { - final ArgumentApplicationParser parser = new ArgumentApplicationParser(IOUtils.toString(SparkPropagateRelationsJob.class.getResourceAsStream("/eu/dnetlib/dhp/dedup/dedup_propagate_relation_parameters.json"))); + final ArgumentApplicationParser parser = new ArgumentApplicationParser(IOUtils.toString(SparkPropagateRelationsJob.class.getResourceAsStream("/eu/dnetlib/dhp/sx/dedup/dedup_propagate_relation_parameters.json"))); parser.parseArgument(args); final SparkSession spark = SparkSession .builder() diff --git a/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/sx/SparkUpdateEntityJob.java b/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/sx/SparkUpdateEntityJob.java index 6039e5526..44f7c551e 100644 --- a/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/sx/SparkUpdateEntityJob.java +++ b/dhp-workflows/dhp-dedup-scholexplorer/src/main/java/eu/dnetlib/dedup/sx/SparkUpdateEntityJob.java @@ -26,7 +26,7 @@ public class SparkUpdateEntityJob { final static String IDJSONPATH = "$.id"; public static void main(String[] args) throws Exception { - final ArgumentApplicationParser parser = new ArgumentApplicationParser(IOUtils.toString(SparkUpdateEntityJob.class.getResourceAsStream("/eu/dnetlib/dhp/dedup/dedup_delete_by_inference_parameters.json"))); + final ArgumentApplicationParser parser = new ArgumentApplicationParser(IOUtils.toString(SparkUpdateEntityJob.class.getResourceAsStream("/eu/dnetlib/dhp/sx/dedup/dedup_delete_by_inference_parameters.json"))); parser.parseArgument(args); final SparkSession spark = SparkSession .builder() diff --git a/dhp-workflows/dhp-dedup-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/dedup/dedupRecord_parameters.json b/dhp-workflows/dhp-dedup-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/dedup/dedupRecord_parameters.json new file mode 100644 index 000000000..de744dfb6 --- /dev/null +++ b/dhp-workflows/dhp-dedup-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/dedup/dedupRecord_parameters.json @@ -0,0 +1,33 @@ +[ + { + "paramName": "mt", + "paramLongName": "master", + "paramDescription": "should be local or yarn", + "paramRequired": true + }, + { + "paramName": "s", + "paramLongName": "sourcePath", + "paramDescription": "the path of the sequential file to read", + "paramRequired": true + }, + { + "paramName": "e", + "paramLongName": "entity", + "paramDescription": "the type of entity to be deduped", + "paramRequired": true + }, + { + "paramName": "c", + "paramLongName": "dedupConf", + "paramDescription": "dedup configuration to be used", + "compressed": true, + "paramRequired": true + }, + { + "paramName": "d", + "paramLongName": "dedupPath", + "paramDescription": "dedup path to load mergeRelation", + "paramRequired": true + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-dedup-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/dedup/dedup_parameters.json b/dhp-workflows/dhp-dedup-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/dedup/dedup_parameters.json new file mode 100644 index 000000000..8ba8515d0 --- /dev/null +++ b/dhp-workflows/dhp-dedup-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/dedup/dedup_parameters.json @@ -0,0 +1,33 @@ +[ + { + "paramName": "mt", + "paramLongName": "master", + "paramDescription": "should be local or yarn", + "paramRequired": true + }, + { + "paramName": "s", + "paramLongName": "sourcePath", + "paramDescription": "the path of the sequential file to read", + "paramRequired": true + }, + { + "paramName": "e", + "paramLongName": "entity", + "paramDescription": "the type of entity to be deduped", + "paramRequired": true + }, + { + "paramName": "c", + "paramLongName": "dedupConf", + "paramDescription": "dedup configuration to be used", + "compressed": true, + "paramRequired": true + }, + { + "paramName": "t", + "paramLongName": "targetPath", + "paramDescription": "target path to save dedup result", + "paramRequired": true + } +] \ No newline at end of file diff --git a/dhp-workflows/dhp-dedup-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/dedup/oozie_app/workflow.xml b/dhp-workflows/dhp-dedup-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/dedup/oozie_app/workflow.xml index 6c8dba653..2f22bb764 100644 --- a/dhp-workflows/dhp-dedup-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/dedup/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-dedup-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/dedup/oozie_app/workflow.xml @@ -49,7 +49,7 @@ cluster Create Similarity Relations eu.dnetlib.dedup.SparkCreateSimRels - dhp-dedup-${projectVersion}.jar + dhp-dedup-scholexplorer-${projectVersion}.jar --executor-memory ${sparkExecutorMemory} --driver-memory=${sparkDriverMemory} @@ -73,7 +73,7 @@ cluster Create Connected Components eu.dnetlib.dedup.SparkCreateConnectedComponent - dhp-dedup-${projectVersion}.jar + dhp-dedup-scholexplorer-${projectVersion}.jar --executor-memory ${sparkExecutorMemory} --driver-memory=${sparkDriverMemory} @@ -97,7 +97,7 @@ cluster Create Dedup Record eu.dnetlib.dedup.SparkCreateDedupRecord - dhp-dedup-${projectVersion}.jar + dhp-dedup-scholexplorer-${projectVersion}.jar --executor-memory ${sparkExecutorMemory} --driver-memory=${sparkDriverMemory} @@ -121,7 +121,7 @@ cluster Propagate Dedup Relations eu.dnetlib.dedup.sx.SparkPropagateRelationsJob - dhp-dedup-${projectVersion}.jar + dhp-dedup-scholexplorer-${projectVersion}.jar --executor-memory ${sparkExecutorMemory} --driver-memory=${sparkDriverMemory} @@ -145,7 +145,7 @@ cluster Update ${entity} and add DedupRecord eu.dnetlib.dedup.sx.SparkUpdateEntityJob - dhp-dedup-${projectVersion}.jar + dhp-dedup-scholexplorer-${projectVersion}.jar --executor-memory ${sparkExecutorMemory} --driver-memory=${sparkDriverMemory} diff --git a/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/Datacite2Scholix.java b/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/Datacite2Scholix.java new file mode 100644 index 000000000..809186a50 --- /dev/null +++ b/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/Datacite2Scholix.java @@ -0,0 +1,203 @@ +package eu.dnetlib.dhp.provision; + +import com.jayway.jsonpath.JsonPath; +import eu.dnetlib.dhp.provision.scholix.*; +import eu.dnetlib.dhp.utils.DHPUtils; +import eu.dnetlib.scholexplorer.relation.RelInfo; +import eu.dnetlib.scholexplorer.relation.RelationMapper; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class Datacite2Scholix { + + + final RelationMapper relationMapper; + + public Datacite2Scholix(RelationMapper relationMapper) { + this.relationMapper = relationMapper; + } + + + public List generateScholixFromJson(final String dJson) { + + List> relIds = getRelatedIendtifiers(dJson); + relIds = relIds!= null ? relIds.stream().filter(m-> + m.containsKey("relatedIdentifierType") && m.containsKey("relationType" ) && m.containsKey( "relatedIdentifier") + ).collect(Collectors.toList()) : null; + if(relIds== null || relIds.size() ==0 ) + return null; + + + + final String updated = JsonPath.read(dJson,"$.attributes.updated" ); + ScholixResource resource = generateDataciteScholixResource(dJson); + + return relIds.stream().flatMap(s-> { + final List result = generateScholix(resource, s.get("relatedIdentifier"), s.get("relatedIdentifierType"), s.get("relationType"), updated); + return result.stream(); + }).collect(Collectors.toList()); + + } + + + private List generateScholix(ScholixResource source, final String pid, final String pidtype, final String relType, final String updated) { + + + if ("doi".equalsIgnoreCase(pidtype)) { + ScholixResource target = new ScholixResource(); + target.setIdentifier(Collections.singletonList(new ScholixIdentifier(pid, pidtype))); + final RelInfo relInfo = relationMapper.get(relType.toLowerCase()); + final ScholixRelationship rel = new ScholixRelationship(relInfo.getOriginal(), "datacite", relInfo.getInverse()); + final ScholixEntityId provider = source.getCollectedFrom().get(0).getProvider(); + final Scholix s = new Scholix(); + s.setSource(source); + s.setTarget(target); + s.setLinkprovider(Collections.singletonList(provider)); + s.setPublisher(source.getPublisher()); + s.setRelationship(rel); + s.setPublicationDate(updated); + return Collections.singletonList(s); + } else { + final List result = new ArrayList<>(); + ScholixResource target = new ScholixResource(); + target.setIdentifier(Collections.singletonList(new ScholixIdentifier(pid, pidtype))); + target.setDnetIdentifier(generateId(pid, pidtype, "unknown")); + target.setObjectType("unknown"); + target.setCollectedFrom(generateDataciteCollectedFrom("incomplete")); + final RelInfo relInfo = relationMapper.get(relType.toLowerCase()); + final ScholixRelationship rel = new ScholixRelationship(relInfo.getOriginal(), "datacite", relInfo.getInverse()); + final ScholixEntityId provider = source.getCollectedFrom().get(0).getProvider(); + final Scholix s = new Scholix(); + s.setSource(source); + s.setTarget(target); + s.setLinkprovider(Collections.singletonList(provider)); + s.setPublisher(source.getPublisher()); + s.setRelationship(rel); + s.setPublicationDate(updated); + s.generateIdentifier(); + result.add(s); + final Scholix s2 = new Scholix(); + s2.setSource(target); + s2.setTarget(source); + s2.setLinkprovider(Collections.singletonList(provider)); + s2.setPublisher(source.getPublisher()); + s2.setRelationship(new ScholixRelationship(relInfo.getInverse(), "datacite", relInfo.getOriginal())); + s2.setPublicationDate(updated); + s2.generateIdentifier(); + result.add(s2); + return result; + } + + + + } + + public ScholixResource generateDataciteScholixResource(String dJson) { + ScholixResource resource = new ScholixResource(); + String DOI_PATH = "$.attributes.doi"; + final String doi = JsonPath.read(dJson, DOI_PATH); + resource.setIdentifier(Collections.singletonList(new ScholixIdentifier(doi, "doi"))); + resource.setObjectType(getType(dJson)); + resource.setDnetIdentifier(generateId(doi, "doi", resource.getObjectType())); + resource.setCollectedFrom(generateDataciteCollectedFrom("complete")); + final String publisher = JsonPath.read(dJson, "$.attributes.publisher"); + if (StringUtils.isNotBlank(publisher)) + resource.setPublisher(Collections.singletonList(new ScholixEntityId(publisher, null))); + final String date = getDate(dJson); + if (StringUtils.isNotBlank(date)) + resource.setPublicationDate(date); + final String title = getTitle(dJson); + if(StringUtils.isNotBlank(title)) + resource.setTitle(title); + resource.setCreator(getCreators(dJson)); + return resource; + } + + private List getCreators(final String json) { + final List creatorName = JsonPath.read(json, "$.attributes.creators[*].name"); + if (creatorName!= null && creatorName.size() >0) { + return creatorName.stream().map(s-> new ScholixEntityId(s, null)).collect(Collectors.toList()); + } + return null; + } + + private String getTitle(final String json){ + final List titles = JsonPath.read(json, "$.attributes.titles[*].title"); + return titles!= null && titles.size()>0?titles.get(0): null; + } + + private String getDate(final String json) { + final List> dates = JsonPath.read(json,"$.attributes.dates"); + if(dates!= null && dates.size()>0){ + + List> issued = dates.stream().filter(s -> "issued".equalsIgnoreCase(s.get("dateType"))).collect(Collectors.toList()); + if (issued.size()>0) + return issued.get(0).get("date"); + } + return null; + } + + private List generateDataciteCollectedFrom(final String completionStatus) { + final ScholixEntityId scholixEntityId = new ScholixEntityId("Datasets in Datacite", + Collections.singletonList(new ScholixIdentifier("dli_________::datacite", "dnet_identifier"))); + return Collections.singletonList( + new ScholixCollectedFrom( + scholixEntityId,"collected", completionStatus)); + } + + private String getType(final String json) { + try { + final String bibtext = JsonPath.read(json, "$.attributes.types.bibtex"); + if ("article".equalsIgnoreCase(bibtext)) { + return "publication"; + } + return "dataset"; + } catch (Throwable e) { + return "dataset"; + } + } + + + + + private List> getRelatedIendtifiers(final String json) { + String REL_IDENTIFIER_PATH = "$.attributes.relatedIdentifiers[*]"; + List> res = JsonPath.read(json, REL_IDENTIFIER_PATH); + return res; + + } + + protected String generateId(final String pid, final String pidType, final String entityType) { + String type; + switch (entityType){ + case "publication": + type = "50|"; + break; + case "dataset": + type = "60|"; + break; + case "unknown": + type = "70|"; + break; + default: + throw new IllegalArgumentException("unexpected value "+entityType); + + } + + return type+ DHPUtils.md5(String.format("%s::%s", pid.toLowerCase().trim(), pidType.toLowerCase().trim())); + } + + + + + + + + + +} diff --git a/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/DataciteClient.java b/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/DataciteClient.java new file mode 100644 index 000000000..37a0bb23b --- /dev/null +++ b/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/DataciteClient.java @@ -0,0 +1,114 @@ +package eu.dnetlib.dhp.provision; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.jayway.jsonpath.JsonPath; +import net.minidev.json.JSONArray; +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 java.io.IOException; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; + +public class DataciteClient implements Iterator { + + final static String blobPath = "$.hits.hits[*]._source"; + final static String scrollIdPath = "$._scroll_id"; + + String scrollId; + + List buffer; + + final String esHost; + final String esIndex; + final ObjectMapper mapper = new ObjectMapper(); + + public DataciteClient(final String esHost, final String esIndex, final long timestamp) throws IOException { + + this.esHost = esHost; + this.esIndex = esIndex; + final String body =getResponse(String.format("http://%s:9200/%s/_search?scroll=1m", esHost, esIndex), String.format("{\"size\":1000, \"query\":{\"range\":{\"timestamp\":{\"gte\":%d}}}}", timestamp)); + scrollId= getJPathString(scrollIdPath, body); + buffer = getBlobs(body); + + } + + + public 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) { + JSONArray array = JsonPath.read(body, blobPath); + return array.stream().map( + o -> { + try { + return mapper.writeValueAsString(o); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } + ).collect(Collectors.toList()); + } + + + @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("{\"scroll_id\":\"%s\",\"scroll\" : \"1m\"}", scrollId); + final String body =getResponse(String.format("http://%s:9200/_search/scroll", esHost), json_param); + try { + buffer = getBlobs(body); + } catch (Throwable e) { + System.out.println(body); + + } + + } + return nextItem; + } +} diff --git a/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/RetrieveUpdateFromDatacite.java b/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/RetrieveUpdateFromDatacite.java new file mode 100644 index 000000000..ad0034733 --- /dev/null +++ b/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/RetrieveUpdateFromDatacite.java @@ -0,0 +1,44 @@ +package eu.dnetlib.dhp.provision; + +import eu.dnetlib.dhp.application.ArgumentApplicationParser; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FileSystem; +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 java.net.URI; +import java.util.concurrent.atomic.AtomicInteger; + +public class RetrieveUpdateFromDatacite { + + public static void main(String[] args) throws Exception{ + final ArgumentApplicationParser parser = new ArgumentApplicationParser(IOUtils.toString(RetrieveUpdateFromDatacite.class.getResourceAsStream("/eu/dnetlib/dhp/provision/retrieve_update_parameters.json"))); + parser.parseArgument(args); + final String hdfsuri = parser.get("namenode"); + Path hdfswritepath = new Path(parser.get("targetPath")); + final String timestamp = parser.get("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()); + + FileSystem.get(URI.create(hdfsuri), conf); + + final AtomicInteger counter = new AtomicInteger(0); + try (SequenceFile.Writer writer = SequenceFile.createWriter(conf, + SequenceFile.Writer.file(hdfswritepath), SequenceFile.Writer.keyClass(IntWritable.class), + SequenceFile.Writer.valueClass(Text.class))) { + + } + } + +} diff --git a/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/SparkExtractRelationCount.java b/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/SparkExtractRelationCount.java index fc96db201..2c9642794 100644 --- a/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/SparkExtractRelationCount.java +++ b/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/java/eu/dnetlib/dhp/provision/SparkExtractRelationCount.java @@ -44,35 +44,8 @@ public class SparkExtractRelationCount { final String workingDirPath = parser.get("workingDirPath"); final String relationPath = parser.get("relationPath"); - - - - - DatasetJoiner.startJoin(spark, relationPath,workingDirPath + "/relatedItemCount"); - - - -// sc.textFile(relationPath) -// // We start to Filter the relation not deleted by Inference -// .filter(ProvisionUtil::isNotDeleted) -// // Then we create a PairRDD -// .mapToPair((PairFunction) f -// -> new Tuple2<>(DHPUtils.getJPathString(ProvisionUtil.SOURCEJSONPATH, f), ProvisionUtil.getItemType(f, ProvisionUtil.TARGETJSONPATH))) -// //We reduce and sum the number of Relations -// .reduceByKey((Function2) (v1, v2) -> { -// if (v1 == null && v2 == null) -// return new RelatedItemInfo(); -// return v1 != null ? v1.add(v2) : v2; -// }) -// //Set the source Id in RelatedItem object -// .map(k -> k._2().setId(k._1())) -// // Convert to JSON and save as TextFile -// .map(k -> { -// ObjectMapper mapper = new ObjectMapper(); -// return mapper.writeValueAsString(k); -// }).saveAsTextFile(workingDirPath + "/relatedItemCount", GzipCodec.class); } diff --git a/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/provision/retrieve_update_parameters.json b/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/provision/retrieve_update_parameters.json new file mode 100644 index 000000000..e69de29bb diff --git a/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/graph/Application/provision/oozie_app/config-default.xml b/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/provision/oozie_app/config-default.xml similarity index 100% rename from dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/graph/Application/provision/oozie_app/config-default.xml rename to dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/provision/oozie_app/config-default.xml diff --git a/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/graph/Application/provision/oozie_app/workflow.xml b/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/provision/oozie_app/workflow.xml similarity index 89% rename from dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/graph/Application/provision/oozie_app/workflow.xml rename to dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/provision/oozie_app/workflow.xml index ede41d3ee..abdc69097 100644 --- a/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/graph/Application/provision/oozie_app/workflow.xml +++ b/dhp-workflows/dhp-graph-provision-scholexplorer/src/main/resources/eu/dnetlib/dhp/sx/provision/oozie_app/workflow.xml @@ -8,10 +8,6 @@ graphPath the graph path - - index - index name - sparkDriverMemory memory for driver process @@ -21,17 +17,16 @@ memory for individual executor - sparkExecutorCores - number of cores used by single executor + index + index name - idScholix - the + the identifier name of the scholix idSummary - number of cores used by single executor + the identifier name of the summary @@ -57,7 +52,7 @@ cluster calculate for each ID the number of related Dataset, publication and Unknown eu.dnetlib.dhp.provision.SparkExtractRelationCount - dhp-graph-provision-${projectVersion}.jar + dhp-graph-provision-scholexplorer-${projectVersion}.jar --executor-memory ${sparkExecutorMemory} --driver-memory=${sparkDriverMemory} ${sparkExtraOPT} -mt yarn-cluster --workingDirPath${workingDirPath} @@ -75,7 +70,7 @@ cluster generate Summary eu.dnetlib.dhp.provision.SparkGenerateSummary - dhp-graph-provision-${projectVersion}.jar + dhp-graph-provision-scholexplorer-${projectVersion}.jar --executor-memory ${sparkExecutorMemory} --driver-memory=${sparkDriverMemory} ${sparkExtraOPT} -mt yarn-cluster --workingDirPath${workingDirPath} @@ -93,7 +88,7 @@ cluster generate Scholix eu.dnetlib.dhp.provision.SparkGenerateScholix - dhp-graph-provision-${projectVersion}.jar + dhp-graph-provision-scholexplorer-${projectVersion}.jar --executor-memory 6G --driver-memory=${sparkDriverMemory} ${sparkExtraOPT} -mt yarn-cluster --workingDirPath${workingDirPath} @@ -111,8 +106,8 @@ cluster index Summary eu.dnetlib.dhp.provision.SparkIndexCollectionOnES - dhp-graph-provision-${projectVersion}.jar - --executor-memory ${sparkExecutorMemory} --driver-memory=${sparkDriverMemory} ${sparkExtraOPT} --conf spark.dynamicAllocation.maxExecutors="64" + dhp-graph-provision-scholexplorer-${projectVersion}.jar + --executor-memory ${sparkExecutorMemory} --driver-memory=${sparkDriverMemory} ${sparkExtraOPT} --conf spark.dynamicAllocation.maxExecutors="32" -mt yarn-cluster --sourcePath${workingDirPath}/summary --index${index}_object @@ -131,7 +126,7 @@ cluster index scholix eu.dnetlib.dhp.provision.SparkIndexCollectionOnES - dhp-graph-provision-${projectVersion}.jar + dhp-graph-provision-scholexplorer-${projectVersion}.jar --executor-memory ${sparkExecutorMemory} --driver-memory=${sparkDriverMemory} ${sparkExtraOPT} --conf spark.dynamicAllocation.maxExecutors="8" -mt yarn-cluster --sourcePath${workingDirPath}/scholix_json diff --git a/dhp-workflows/dhp-graph-provision-scholexplorer/src/test/java/eu/dnetlib/dhp/provision/DataciteClientTest.java b/dhp-workflows/dhp-graph-provision-scholexplorer/src/test/java/eu/dnetlib/dhp/provision/DataciteClientTest.java new file mode 100644 index 000000000..780d4a2d6 --- /dev/null +++ b/dhp-workflows/dhp-graph-provision-scholexplorer/src/test/java/eu/dnetlib/dhp/provision/DataciteClientTest.java @@ -0,0 +1,109 @@ +package eu.dnetlib.dhp.provision; + +import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.dhp.provision.scholix.Scholix; +import eu.dnetlib.scholexplorer.relation.RelationMapper; +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.junit.jupiter.api.Test; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; +import java.util.List; + + +public class DataciteClientTest { + + + @Test + public void dataciteSCholixTest() throws Exception { + final String json = IOUtils.toString(getClass().getResourceAsStream("datacite.json")); + final RelationMapper mapper = RelationMapper.load(); + + Datacite2Scholix ds = new Datacite2Scholix(mapper); + final List s = ds.generateScholixFromJson(json); + + + System.out.println(new ObjectMapper().writeValueAsString(s)); + + } + + + @Test + public void testClient() throws Exception { + DataciteClient client = new DataciteClient("ip-90-147-167-25.ct1.garrservices.it","datacite",1585454082); + int i = 0; + final RelationMapper mapper = RelationMapper.load(); + + Datacite2Scholix ds = new Datacite2Scholix(mapper); + BufferedWriter writer = new BufferedWriter(new FileWriter("/Users/sandro/new_s.txt")); + + final ObjectMapper m = new ObjectMapper(); + + + + + + while (client.hasNext()){ + i ++; + + + final String next = client.next(); + try { + final List res = ds.generateScholixFromJson(next); + if (res!= null) + res + .forEach( + s -> { + try { + + writer.write(m.writeValueAsString(s)); + writer.write("\n"); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } + + + ); + }catch (Throwable t) { + System.out.println(next); + throw new RuntimeException(t); + } + if(i %1000 == 0) { + System.out.println("added "+i); + } + } + } + + 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); + } + } + + } +} diff --git a/dhp-workflows/dhp-graph-provision-scholexplorer/src/test/resources/eu/dnetlib/dhp/provision/datacite.json b/dhp-workflows/dhp-graph-provision-scholexplorer/src/test/resources/eu/dnetlib/dhp/provision/datacite.json new file mode 100644 index 000000000..f23fa314e --- /dev/null +++ b/dhp-workflows/dhp-graph-provision-scholexplorer/src/test/resources/eu/dnetlib/dhp/provision/datacite.json @@ -0,0 +1,136 @@ +{ + "relationships": { + "client": { + "data": { + "type": "clients", + "id": "crossref.citations" + } + } + }, + "attributes": { + "contributors": [ + ], + "titles": [ + { + "title": "UV-visible spectroscopy in the interpretation of the tautomeric equilibrium of N,N′(bis-3,5-di-bromo-salicyliden)-1,2-diaminobenzene and the redox activity of its Co(II) complex. A quantum chemical approach." + } + ], + "descriptions": [ + ], + "referenceCount": 0, + "subjects": [ + ], + "container": { + "title": "Journal of Molecular Structure: THEOCHEM", + "firstPage": "97", + "volume": "367", + "lastPage": "110", + "identifierType": "ISSN", + "identifier": "0166-1280", + "type": "Journal" + }, + "state": "findable", + "created": "2020-03-26T13:31:57.000Z", + "source": "levriero", + "metadataVersion": 0, + "version": null, + "isActive": true, + "contentUrl": null, + "geoLocations": [ + ], + "updated": "2020-03-26T13:31:58.000Z", + "fundingReferences": [ + ], + "viewCount": 0, + "registered": "2020-03-26T13:31:58.000Z", + "published": "1996", + "dates": [ + { + "date": "1996-09", + "dateType": "Issued" + }, + { + "date": "2019-04-17T13:58:25Z", + "dateType": "Updated" + } + ], + "relatedIdentifiers": [ + { + "relationType": "IsPartOf", + "relatedIdentifier": "0166-1280", + "relatedIdentifierType": "ISSN", + "resourceTypeGeneral": "Collection" + } + ], + "reason": null, + "rightsList": [ + { + "rightsUri": "https://www.elsevier.com/tdm/userlicense/1.0" + } + ], + "schemaVersion": "http://datacite.org/schema/kernel-4", + "types": { + "resourceType": "JournalArticle", + "ris": "JOUR", + "resourceTypeGeneral": "Text", + "bibtex": "article", + "citeproc": "article-journal", + "schemaOrg": "ScholarlyArticle" + }, + "publisher": "Elsevier BV", + "publicationYear": 1996, + "doi": "10.1016/s0166-1280(96)04575-7", + "language": null, + "sizes": [ + ], + "url": "https://linkinghub.elsevier.com/retrieve/pii/S0166128096045757", + "identifiers": [ + { + "identifier": "https://doi.org/10.1016/s0166-1280(96)04575-7", + "identifierType": "DOI" + }, + { + "identifier": "S0166128096045757", + "identifierType": "Publisher ID" + } + ], + "citationCount": 0, + "formats": [ + ], + "downloadCount": 0, + "creators": [ + { + "nameType": "Personal", + "givenName": "G.L.", + "name": "Estiú, G.L.", + "familyName": "Estiú", + "affiliation": [ + ] + }, + { + "nameType": "Personal", + "givenName": "A.H.", + "name": "Jubert, A.H.", + "familyName": "Jubert", + "affiliation": [ + ] + }, + { + "nameType": "Personal", + "givenName": "J.", + "name": "Costamagna, J.", + "familyName": "Costamagna", + "affiliation": [ + ] + }, + { + "nameType": "Personal", + "givenName": "J.", + "name": "Vargas, J.", + "familyName": "Vargas", + "affiliation": [ + ] + } + ] + } +} \ No newline at end of file diff --git a/dhp-workflows/dhp-graph-provision-scholexplorer/src/test/resources/eu/dnetlib/dhp/provision/es.json b/dhp-workflows/dhp-graph-provision-scholexplorer/src/test/resources/eu/dnetlib/dhp/provision/es.json new file mode 100644 index 000000000..7520f5711 --- /dev/null +++ b/dhp-workflows/dhp-graph-provision-scholexplorer/src/test/resources/eu/dnetlib/dhp/provision/es.json @@ -0,0 +1,2191 @@ +{ + "_scroll_id":"DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAA3ZFjJyVjB4UWROUlV1NEZvcGFSNUFFNEEAAAAAAAAMKxZwaDlETnJ4alJDeUZYdGlLck9XQ3dBAAAAAAAADCkWRHhuQi1obllTOFdVYWtWeUN2SzdaUQAAAAAAAq-XFjNsWU1LeTlrVGhPZERWRW9iWEZ5QlEAAAAAAAAOQBY5R0Y2TXNyRFM3bUJkMHE4SkVQZmNR", + "took":16, + "timed_out":false, + "_shards":{ + "total":5, + "successful":5, + "skipped":0, + "failed":0 + }, + "hits":{ + "total":3281, + "max_score":1.0, + "hits":[ + { + "_index":"datacite", + "_type":"dump", + "_id":"10.17605/osf.io/vkdyt", + "_score":1.0, + "_source":{ + "relationships":{ + "client":{ + "data":{ + "type":"clients", + "id":"cos.osf" + } + } + }, + "attributes":{ + "contributors":[ + + ], + "titles":[ + { + "title":"COVID-19-RAA" + } + ], + "descriptions":[ + + ], + "referenceCount":0, + "subjects":[ + + ], + "container":{ + + }, + "state":"findable", + "created":"2020-03-24T20:15:45.000Z", + "source":"mds", + "metadataVersion":20, + "version":null, + "isActive":true, + "contentUrl":null, + "geoLocations":[ + + ], + "updated":"2020-03-26T13:36:41.000Z", + "fundingReferences":[ + + ], + "viewCount":0, + "registered":"2020-03-24T20:15:47.000Z", + "published":"2020", + "dates":[ + { + "date":"2020", + "dateType":"Issued" + } + ], + "relatedIdentifiers":[ + + ], + "reason":null, + "rightsList":[ + + ], + "schemaVersion":null, + "types":{ + "resourceType":"Project", + "ris":"RPRT", + "resourceTypeGeneral":"Text", + "bibtex":"article", + "citeproc":"article-journal", + "schemaOrg":"ScholarlyArticle" + }, + "publisher":"Open Science Framework", + "publicationYear":2020, + "doi":"10.17605/osf.io/vkdyt", + "language":null, + "sizes":[ + + ], + "url":"https://osf.io/vkdyt/", + "identifiers":[ + { + "identifier":"https://doi.org/10.17605/osf.io/vkdyt", + "identifierType":"DOI" + } + ], + "citationCount":0, + "formats":[ + + ], + "downloadCount":0, + "creators":[ + { + "nameType":"Personal", + "givenName":"Gjalt - Jorn", + "name":"Peters, Gjalt - Jorn", + "familyName":"Peters", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Sylvia", + "name":"Roozen, Sylvia", + "familyName":"Roozen", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Rik", + "name":"Crutzen, Rik", + "familyName":"Crutzen", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Gill", + "name":"Hoor, Gill", + "familyName":"Hoor", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Sander", + "name":"Hermsen, Sander", + "familyName":"Hermsen", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Lisa-Graham", + "name":"Wisener, Lisa-Graham", + "familyName":"Wisener", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Laura", + "name":"König, Laura", + "familyName":"König", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Alexis", + "name":"Ruffault, Alexis", + "familyName":"Ruffault", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Jennifer", + "name":"Inauen, Jennifer", + "familyName":"Inauen", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Marta", + "name":"Marques, Marta", + "familyName":"Marques", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Chris", + "name":"Noone, Chris", + "familyName":"Noone", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Lucy", + "name":"Porter, Lucy", + "familyName":"Porter", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Samantha", + "name":"van Beurden, Samantha", + "familyName":"van Beurden", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Ann", + "name":"DeSmet, Ann", + "familyName":"DeSmet", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Ratri", + "name":"Nurwanti, Ratri", + "familyName":"Nurwanti", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Yasinta", + "name":"Sokang, Yasinta", + "familyName":"Sokang", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Alexandra", + "name":"Dima, Alexandra", + "familyName":"Dima", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Gabriele", + "name":"Pierantoni, Gabriele", + "familyName":"Pierantoni", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Angelos", + "name":"Kassianos, Angelos", + "familyName":"Kassianos", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"James", + "name":"Green, James", + "familyName":"Green", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Daniel", + "name":"Powell, Daniel", + "familyName":"Powell", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Thomas", + "name":"Gültzow, Thomas", + "familyName":"Gültzow", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Stan", + "name":"Vluggen, Stan", + "familyName":"Vluggen", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Roel", + "name":"Hermans, Roel", + "familyName":"Hermans", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Laura", + "name":"Eito, Laura", + "familyName":"Eito", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Lisa", + "name":"Warner, Lisa", + "familyName":"Warner", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Lena", + "name":"Fleig, Lena", + "familyName":"Fleig", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Emma", + "name":"Berry, Emma", + "familyName":"Berry", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Daniela", + "name":"Lange, Daniela", + "familyName":"Lange", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Pierre", + "name":"Gérain, Pierre", + "familyName":"Gérain", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Annick", + "name":"De Paepe, Annick", + "familyName":"De Paepe", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Louise", + "name":"Poppe, Louise", + "familyName":"Poppe", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Eva", + "name":"Papakonstantinou, Eva", + "familyName":"Papakonstantinou", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Hanna", + "name":"de Paredes, Hanna", + "familyName":"de Paredes", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Jorge", + "name":"Encantado, Jorge", + "familyName":"Encantado", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Carolina", + "name":"Silva, Carolina", + "familyName":"Silva", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Tracy", + "name":"Epton, Tracy", + "familyName":"Epton", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Jenny", + "name":"Groarke, Jenny", + "familyName":"Groarke", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Sarah", + "name":"Denford, Sarah", + "familyName":"Denford", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Barbara", + "name":"Mullan, Barbara", + "familyName":"Mullan", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Rebecca", + "name":"Pedruzzi, Rebecca", + "familyName":"Pedruzzi", + "affiliation":[ + + ] + } + ] + }, + "type":"dois", + "id":"10.17605/osf.io/vkdyt", + "timestamp":1585226201 + } + }, + { + "_index":"datacite", + "_type":"dump", + "_id":"10.1080/13510340500378274", + "_score":1.0, + "_source":{ + "relationships":{ + "client":{ + "data":{ + "type":"clients", + "id":"crossref.citations" + } + } + }, + "attributes":{ + "contributors":[ + + ], + "titles":[ + { + "title":"Meteoric trajectory: The Res Publica Party in Estonia" + } + ], + "descriptions":[ + + ], + "referenceCount":0, + "subjects":[ + + ], + "container":{ + "title":"Democratization", + "type":"Journal", + "firstPage":"78", + "volume":"13", + "lastPage":"94", + "identifierType":"ISSN", + "identifier":"1743-890X", + "issue":"1" + }, + "state":"findable", + "created":"2020-03-26T13:31:47.000Z", + "source":"levriero", + "metadataVersion":0, + "version":null, + "isActive":true, + "contentUrl":null, + "geoLocations":[ + + ], + "updated":"2020-03-26T13:31:54.000Z", + "fundingReferences":[ + + ], + "viewCount":0, + "registered":"2020-03-26T13:31:47.000Z", + "published":"2006", + "dates":[ + { + "date":"2006-02", + "dateType":"Issued" + }, + { + "date":"2016-12-13T05:03:17Z", + "dateType":"Updated" + } + ], + "relatedIdentifiers":[ + { + "relationType":"IsPartOf", + "relatedIdentifier":"1743-890X", + "relatedIdentifierType":"ISSN", + "resourceTypeGeneral":"Collection" + } + ], + "reason":null, + "rightsList":[ + + ], + "schemaVersion":"http://datacite.org/schema/kernel-4", + "types":{ + "resourceType":"JournalArticle", + "ris":"JOUR", + "resourceTypeGeneral":"Text", + "bibtex":"article", + "citeproc":"article-journal", + "schemaOrg":"ScholarlyArticle" + }, + "publisher":"Informa UK Limited", + "publicationYear":2006, + "doi":"10.1080/13510340500378274", + "language":null, + "sizes":[ + + ], + "url":"http://www.tandfonline.com/doi/abs/10.1080/13510340500378274", + "identifiers":[ + { + "identifier":"https://doi.org/10.1080/13510340500378274", + "identifierType":"DOI" + }, + { + "identifier":"5", + "identifierType":"Publisher ID" + } + ], + "citationCount":0, + "formats":[ + + ], + "downloadCount":0, + "creators":[ + { + "nameType":"Personal", + "givenName":"Rein", + "name":"Taagepera, Rein", + "familyName":"Taagepera", + "affiliation":[ + + ] + } + ] + }, + "type":"dois", + "id":"10.1080/13510340500378274", + "timestamp":1585225914 + } + }, + { + "_index":"datacite", + "_type":"dump", + "_id":"10.1029/2001gl012966", + "_score":1.0, + "_source":{ + "relationships":{ + "client":{ + "data":{ + "type":"clients", + "id":"crossref.citations" + } + } + }, + "attributes":{ + "contributors":[ + + ], + "titles":[ + { + "title":"Use of 17 O/ 16 O to trace atmospherically-deposited sulfate in surface waters: A case study in Alpine watersheds in the Rocky Mountains" + } + ], + "descriptions":[ + + ], + "referenceCount":0, + "subjects":[ + + ], + "container":{ + "title":"Geophysical Research Letters", + "type":"Journal", + "firstPage":"4483", + "volume":"28", + "lastPage":"4486", + "identifierType":"ISSN", + "identifier":"0094-8276", + "issue":"23" + }, + "state":"findable", + "created":"2020-03-26T13:31:52.000Z", + "source":"levriero", + "metadataVersion":0, + "version":null, + "isActive":true, + "contentUrl":null, + "geoLocations":[ + + ], + "updated":"2020-03-26T13:31:53.000Z", + "fundingReferences":[ + + ], + "viewCount":0, + "registered":"2020-03-26T13:31:53.000Z", + "published":"2001", + "dates":[ + { + "date":"2001-12-01", + "dateType":"Issued" + }, + { + "date":"2018-04-17T02:49:52Z", + "dateType":"Updated" + } + ], + "relatedIdentifiers":[ + { + "relationType":"IsPartOf", + "relatedIdentifier":"0094-8276", + "relatedIdentifierType":"ISSN", + "resourceTypeGeneral":"Collection" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1016/s0016-7037(00)00490-7", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1007/978-1-4612-2788-5", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1029/95wr02037", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1016/0016-7037(63)90071-1", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1016/0012-821x(83)90066-3", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1029/91wr01243", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1126/science.217.4554.51", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1029/91jd01943", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1126/science.177.4048.514", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1029/97jd02075", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1029/2000jd900805", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1029/2000gl011826", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1016/s1352-2310(00)00507-0", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1029/1999wr900276", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1016/b978-0-444-81546-0.50022-7", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1016/s1352-2310(99)00122-3", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1029/2000jd900456", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1029/94gl00893", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1126/science.283.5400.341", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1007/978-1-4612-3616-0_6", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1130/0016-7606(1963)74[991:paotcm]2.0.co;2", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.2113/gsecongeo.87.2.225", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1029/90wr02774", + "relatedIdentifierType":"DOI" + } + ], + "reason":null, + "rightsList":[ + { + "rightsUri":"http://doi.wiley.com/10.1002/tdm_license_1.1" + } + ], + "schemaVersion":"http://datacite.org/schema/kernel-4", + "types":{ + "resourceType":"JournalArticle", + "ris":"JOUR", + "resourceTypeGeneral":"Text", + "bibtex":"article", + "citeproc":"article-journal", + "schemaOrg":"ScholarlyArticle" + }, + "publisher":"American Geophysical Union (AGU)", + "publicationYear":2001, + "doi":"10.1029/2001gl012966", + "language":null, + "sizes":[ + + ], + "url":"http://doi.wiley.com/10.1029/2001GL012966", + "identifiers":[ + { + "identifier":"https://doi.org/10.1029/2001gl012966", + "identifierType":"DOI" + } + ], + "citationCount":0, + "formats":[ + + ], + "downloadCount":0, + "creators":[ + { + "nameType":"Personal", + "givenName":"Craig A.", + "name":"Johnson, Craig A.", + "familyName":"Johnson", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"M. Alisa", + "name":"Mast, M. Alisa", + "familyName":"Mast", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Cynthia L.", + "name":"Kester, Cynthia L.", + "familyName":"Kester", + "affiliation":[ + + ] + } + ] + }, + "type":"dois", + "id":"10.1029/2001gl012966", + "timestamp":1585225913 + } + }, + { + "_index":"datacite", + "_type":"dump", + "_id":"10.4094/chnr.2014.20.4.294", + "_score":1.0, + "_source":{ + "relationships":{ + "client":{ + "data":{ + "type":"clients", + "id":"crossref.citations" + } + } + }, + "attributes":{ + "contributors":[ + + ], + "titles":[ + { + "title":"Critical Thinking Disposition, Problem Solving Process, and Simulation-Based Assessment of Clinical Competence of Nursing Students in Pediatric Nursing" + } + ], + "descriptions":[ + + ], + "referenceCount":0, + "subjects":[ + + ], + "container":{ + "title":"Child Health Nursing Research", + "type":"Journal", + "firstPage":"294", + "volume":"20", + "identifierType":"ISSN", + "identifier":"2287-9129", + "issue":"4" + }, + "state":"findable", + "created":"2020-03-26T13:31:56.000Z", + "source":"levriero", + "metadataVersion":0, + "version":null, + "isActive":true, + "contentUrl":null, + "geoLocations":[ + + ], + "updated":"2020-03-26T13:31:56.000Z", + "fundingReferences":[ + + ], + "viewCount":0, + "registered":"2020-03-26T13:31:56.000Z", + "published":"2014", + "dates":[ + { + "date":"2014", + "dateType":"Issued" + }, + { + "date":"2019-08-17T03:06:14Z", + "dateType":"Updated" + } + ], + "relatedIdentifiers":[ + { + "relationType":"IsPartOf", + "relatedIdentifier":"2287-9129", + "relatedIdentifierType":"ISSN", + "resourceTypeGeneral":"Collection" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1016/j.nedt.2010.10.013", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.3928/0148-4834-20001101-09", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.3310/hta13270", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.5977/jkasne.2013.19.2.228", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1016/j.teln.2008.07.004", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.4040/jkan.2011.41.2.245", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.4040/jkan.2006.36.6.950", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.5977/jkasne.2011.17.2.226", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.4040/jkan.2011.41.4.433", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.7748/ns2010.05.24.35.42.c7751", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1053/j.nainr.2009.03.006", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.5977/jkasne.2009.15.2.149", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.5124/jkma.2005.48.3.267", + "relatedIdentifierType":"DOI" + } + ], + "reason":null, + "rightsList":[ + { + "rightsUri":"http://creativecommons.org/licenses/by-nc/3.0" + } + ], + "schemaVersion":"http://datacite.org/schema/kernel-4", + "types":{ + "resourceType":"JournalArticle", + "ris":"JOUR", + "resourceTypeGeneral":"Text", + "bibtex":"article", + "citeproc":"article-journal", + "schemaOrg":"ScholarlyArticle" + }, + "publisher":"Korean Academy of Child Health Nursing", + "publicationYear":2014, + "doi":"10.4094/chnr.2014.20.4.294", + "language":null, + "sizes":[ + + ], + "url":"http://e-chnr.org/journal/view.php?id=10.4094/chnr.2014.20.4.294", + "identifiers":[ + { + "identifier":"https://doi.org/10.4094/chnr.2014.20.4.294", + "identifierType":"DOI" + } + ], + "citationCount":0, + "formats":[ + + ], + "downloadCount":0, + "creators":[ + { + "nameType":"Personal", + "givenName":"Sunghee", + "name":"Kim, Sunghee", + "familyName":"Kim", + "affiliation":[ + "Red Cross College of Nursing, Chung-Ang University, Seoul, Korea." + ] + }, + { + "nameType":"Personal", + "givenName":"Hyuna", + "name":"Nam, Hyuna", + "familyName":"Nam", + "affiliation":[ + "Department of Nursing, Pyeongtaek University, Pyeongtaek, Korea." + ] + }, + { + "nameType":"Personal", + "givenName":"Miok", + "name":"Kim, Miok", + "familyName":"Kim", + "affiliation":[ + "Department of Nursing, Namseoul University, Cheonan, Korea." + ] + } + ] + }, + "type":"dois", + "id":"10.4094/chnr.2014.20.4.294", + "timestamp":1585225916 + } + }, + { + "_index":"datacite", + "_type":"dump", + "_id":"10.1016/s0166-1280(96)04575-7", + "_score":1.0, + "_source":{ + "relationships":{ + "client":{ + "data":{ + "type":"clients", + "id":"crossref.citations" + } + } + }, + "attributes":{ + "contributors":[ + + ], + "titles":[ + { + "title":"UV-visible spectroscopy in the interpretation of the tautomeric equilibrium of N,N′(bis-3,5-di-bromo-salicyliden)-1,2-diaminobenzene and the redox activity of its Co(II) complex. A quantum chemical approach." + } + ], + "descriptions":[ + + ], + "referenceCount":0, + "subjects":[ + + ], + "container":{ + "title":"Journal of Molecular Structure: THEOCHEM", + "firstPage":"97", + "volume":"367", + "lastPage":"110", + "identifierType":"ISSN", + "identifier":"0166-1280", + "type":"Journal" + }, + "state":"findable", + "created":"2020-03-26T13:31:57.000Z", + "source":"levriero", + "metadataVersion":0, + "version":null, + "isActive":true, + "contentUrl":null, + "geoLocations":[ + + ], + "updated":"2020-03-26T13:31:58.000Z", + "fundingReferences":[ + + ], + "viewCount":0, + "registered":"2020-03-26T13:31:58.000Z", + "published":"1996", + "dates":[ + { + "date":"1996-09", + "dateType":"Issued" + }, + { + "date":"2019-04-17T13:58:25Z", + "dateType":"Updated" + } + ], + "relatedIdentifiers":[ + { + "relationType":"IsPartOf", + "relatedIdentifier":"0166-1280", + "relatedIdentifierType":"ISSN", + "resourceTypeGeneral":"Collection" + } + ], + "reason":null, + "rightsList":[ + { + "rightsUri":"https://www.elsevier.com/tdm/userlicense/1.0" + } + ], + "schemaVersion":"http://datacite.org/schema/kernel-4", + "types":{ + "resourceType":"JournalArticle", + "ris":"JOUR", + "resourceTypeGeneral":"Text", + "bibtex":"article", + "citeproc":"article-journal", + "schemaOrg":"ScholarlyArticle" + }, + "publisher":"Elsevier BV", + "publicationYear":1996, + "doi":"10.1016/s0166-1280(96)04575-7", + "language":null, + "sizes":[ + + ], + "url":"https://linkinghub.elsevier.com/retrieve/pii/S0166128096045757", + "identifiers":[ + { + "identifier":"https://doi.org/10.1016/s0166-1280(96)04575-7", + "identifierType":"DOI" + }, + { + "identifier":"S0166128096045757", + "identifierType":"Publisher ID" + } + ], + "citationCount":0, + "formats":[ + + ], + "downloadCount":0, + "creators":[ + { + "nameType":"Personal", + "givenName":"G.L.", + "name":"Estiú, G.L.", + "familyName":"Estiú", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"A.H.", + "name":"Jubert, A.H.", + "familyName":"Jubert", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"J.", + "name":"Costamagna, J.", + "familyName":"Costamagna", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"J.", + "name":"Vargas, J.", + "familyName":"Vargas", + "affiliation":[ + + ] + } + ] + }, + "type":"dois", + "id":"10.1016/s0166-1280(96)04575-7", + "timestamp":1585225918 + } + }, + { + "_index":"datacite", + "_type":"dump", + "_id":"10.1016/j.jhin.2013.12.002", + "_score":1.0, + "_source":{ + "relationships":{ + "client":{ + "data":{ + "type":"clients", + "id":"crossref.citations" + } + } + }, + "attributes":{ + "contributors":[ + + ], + "titles":[ + { + "title":"Consequences of incomplete measles vaccine uptake in healthcare workers during an outbreak in North East England" + } + ], + "descriptions":[ + + ], + "referenceCount":0, + "subjects":[ + + ], + "container":{ + "title":"Journal of Hospital Infection", + "type":"Journal", + "firstPage":"144", + "volume":"86", + "lastPage":"146", + "identifierType":"ISSN", + "identifier":"0195-6701", + "issue":"2" + }, + "state":"findable", + "created":"2020-03-26T13:31:58.000Z", + "source":"levriero", + "metadataVersion":0, + "version":null, + "isActive":true, + "contentUrl":null, + "geoLocations":[ + + ], + "updated":"2020-03-26T13:31:58.000Z", + "fundingReferences":[ + + ], + "viewCount":0, + "registered":"2020-03-26T13:31:58.000Z", + "published":"2014", + "dates":[ + { + "date":"2014-02", + "dateType":"Issued" + }, + { + "date":"2018-10-07T23:20:19Z", + "dateType":"Updated" + } + ], + "relatedIdentifiers":[ + { + "relationType":"IsPartOf", + "relatedIdentifier":"0195-6701", + "relatedIdentifierType":"ISSN", + "resourceTypeGeneral":"Collection" + } + ], + "reason":null, + "rightsList":[ + { + "rightsUri":"https://www.elsevier.com/tdm/userlicense/1.0" + } + ], + "schemaVersion":"http://datacite.org/schema/kernel-4", + "types":{ + "resourceType":"JournalArticle", + "ris":"JOUR", + "resourceTypeGeneral":"Text", + "bibtex":"article", + "citeproc":"article-journal", + "schemaOrg":"ScholarlyArticle" + }, + "publisher":"Elsevier BV", + "publicationYear":2014, + "doi":"10.1016/j.jhin.2013.12.002", + "language":null, + "sizes":[ + + ], + "url":"https://linkinghub.elsevier.com/retrieve/pii/S0195670113004052", + "identifiers":[ + { + "identifier":"https://doi.org/10.1016/j.jhin.2013.12.002", + "identifierType":"DOI" + }, + { + "identifier":"S0195670113004052", + "identifierType":"Publisher ID" + } + ], + "citationCount":0, + "formats":[ + + ], + "downloadCount":0, + "creators":[ + { + "nameType":"Personal", + "givenName":"P.", + "name":"Bogowicz, P.", + "familyName":"Bogowicz", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"J.", + "name":"Waller, J.", + "familyName":"Waller", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"D.", + "name":"Wilson, D.", + "familyName":"Wilson", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"K.", + "name":"Foster, K.", + "familyName":"Foster", + "affiliation":[ + + ] + } + ] + }, + "type":"dois", + "id":"10.1016/j.jhin.2013.12.002", + "timestamp":1585225918 + } + }, + { + "_index":"datacite", + "_type":"dump", + "_id":"10.1186/s12871-015-0149-y", + "_score":1.0, + "_source":{ + "relationships":{ + "client":{ + "data":{ + "type":"clients", + "id":"crossref.citations" + } + } + }, + "attributes":{ + "contributors":[ + + ], + "titles":[ + { + "title":"Normal values for pancreatic stone protein in different age groups" + } + ], + "descriptions":[ + + ], + "referenceCount":0, + "subjects":[ + + ], + "container":{ + "title":"BMC Anesthesiology", + "type":"Journal", + "volume":"15", + "identifierType":"ISSN", + "identifier":"1471-2253", + "issue":"1" + }, + "state":"findable", + "created":"2020-03-26T13:32:00.000Z", + "source":"levriero", + "metadataVersion":0, + "version":null, + "isActive":true, + "contentUrl":null, + "geoLocations":[ + + ], + "updated":"2020-03-26T13:32:00.000Z", + "fundingReferences":[ + + ], + "viewCount":0, + "registered":"2020-03-26T13:32:00.000Z", + "published":"2015", + "dates":[ + { + "date":"2015-11-20", + "dateType":"Issued" + }, + { + "date":"2017-06-23T20:02:57Z", + "dateType":"Updated" + } + ], + "relatedIdentifiers":[ + { + "relationType":"IsPartOf", + "relatedIdentifier":"1471-2253", + "relatedIdentifierType":"ISSN", + "resourceTypeGeneral":"Collection" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1186/cc12588", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1038/tpj.2012.1", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1164/rccm.201201-0037oc", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1097/01.mop.0000193293.87022.4c", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1016/s1473-3099(04)01146-6", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1159/000241296", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1097/01.ccm.0000159089.16462.4a", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1378/chest.11-0018", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1097/ccm.0b013e31819da7d6", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1007/s00134-012-2798-3", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1016/j.jss.2005.09.030", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1186/1471-2431-10-89", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1210/jc.2014-2244", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1016/j.imbio.2012.06.001", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1111/j.1399-3038.2010.01104.x", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1186/cc11406", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1097/ccm.0b013e3182771193", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1016/j.cyto.2014.01.009", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1378/chest.12-0730", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1136/bmjopen-2014-004914", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1086/653531", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1210/endo.136.5.7720628", + "relatedIdentifierType":"DOI" + }, + { + "relationType":"References", + "relatedIdentifier":"10.1111/j.1651-2227.2002.tb01645.x", + "relatedIdentifierType":"DOI" + } + ], + "reason":null, + "rightsList":[ + { + "rightsUri":"http://www.springer.com/tdm" + } + ], + "schemaVersion":"http://datacite.org/schema/kernel-4", + "types":{ + "resourceType":"JournalArticle", + "ris":"JOUR", + "resourceTypeGeneral":"Text", + "bibtex":"article", + "citeproc":"article-journal", + "schemaOrg":"ScholarlyArticle" + }, + "publisher":"Springer Science and Business Media LLC", + "publicationYear":2015, + "doi":"10.1186/s12871-015-0149-y", + "language":null, + "sizes":[ + + ], + "url":"http://bmcanesthesiol.biomedcentral.com/articles/10.1186/s12871-015-0149-y", + "identifiers":[ + { + "identifier":"https://doi.org/10.1186/s12871-015-0149-y", + "identifierType":"DOI" + }, + { + "identifier":"168", + "identifierType":"Publisher ID" + } + ], + "citationCount":0, + "formats":[ + + ], + "downloadCount":0, + "creators":[ + { + "nameType":"Personal", + "givenName":"Luregn J", + "name":"Schlapbach, Luregn J", + "familyName":"Schlapbach", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Eric", + "name":"Giannoni, Eric", + "familyName":"Giannoni", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Sven", + "name":"Wellmann, Sven", + "familyName":"Wellmann", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Martin", + "name":"Stocker, Martin", + "familyName":"Stocker", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Roland A", + "name":"Ammann, Roland A", + "familyName":"Ammann", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Rolf", + "name":"Graf, Rolf", + "familyName":"Graf", + "affiliation":[ + + ] + } + ] + }, + "type":"dois", + "id":"10.1186/s12871-015-0149-y", + "timestamp":1585225920 + } + }, + { + "_index":"datacite", + "_type":"dump", + "_id":"10.1097/fch.0000000000000237", + "_score":1.0, + "_source":{ + "relationships":{ + "client":{ + "data":{ + "type":"clients", + "id":"crossref.citations" + } + } + }, + "attributes":{ + "contributors":[ + + ], + "titles":[ + { + "title":"Concordance and Discordance of the Knowledge, Understanding, and Description of Childrenʼs Experience of Food Insecurity Among Hispanic Adults and Children" + } + ], + "descriptions":[ + + ], + "referenceCount":0, + "subjects":[ + + ], + "container":{ + "title":"Family & Community Health", + "type":"Journal", + "firstPage":"237", + "volume":"42", + "lastPage":"244", + "identifierType":"ISSN", + "identifier":"0160-6379", + "issue":"4" + }, + "state":"findable", + "created":"2020-03-26T13:32:19.000Z", + "source":"levriero", + "metadataVersion":0, + "version":null, + "isActive":true, + "contentUrl":null, + "geoLocations":[ + + ], + "updated":"2020-03-26T13:32:19.000Z", + "fundingReferences":[ + + ], + "viewCount":0, + "registered":"2020-03-26T13:32:19.000Z", + "published":"2019", + "dates":[ + { + "date":"2019", + "dateType":"Issued" + }, + { + "date":"2020-02-18T14:54:24Z", + "dateType":"Updated" + } + ], + "relatedIdentifiers":[ + { + "relationType":"IsPartOf", + "relatedIdentifier":"0160-6379", + "relatedIdentifierType":"ISSN", + "resourceTypeGeneral":"Collection" + } + ], + "reason":null, + "rightsList":[ + + ], + "schemaVersion":"http://datacite.org/schema/kernel-4", + "types":{ + "resourceType":"JournalArticle", + "ris":"JOUR", + "resourceTypeGeneral":"Text", + "bibtex":"article", + "citeproc":"article-journal", + "schemaOrg":"ScholarlyArticle" + }, + "publisher":"Ovid Technologies (Wolters Kluwer Health)", + "publicationYear":2019, + "doi":"10.1097/fch.0000000000000237", + "language":null, + "sizes":[ + + ], + "url":"http://journals.lww.com/00003727-201910000-00002", + "identifiers":[ + { + "identifier":"https://doi.org/10.1097/fch.0000000000000237", + "identifierType":"DOI" + } + ], + "citationCount":0, + "formats":[ + + ], + "downloadCount":0, + "creators":[ + { + "nameType":"Personal", + "givenName":"Edward A.", + "name":"Frongillo, Edward A.", + "familyName":"Frongillo", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Maryah S.", + "name":"Fram, Maryah S.", + "familyName":"Fram", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Jessica L.", + "name":"Escobar-Alegría, Jessica L.", + "familyName":"Escobar-Alegría", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Melly", + "name":"Pérez-Garay, Melly", + "familyName":"Pérez-Garay", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Mark M.", + "name":"Macauda, Mark M.", + "familyName":"Macauda", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Deborah L.", + "name":"Billings, Deborah L.", + "familyName":"Billings", + "affiliation":[ + + ] + } + ] + }, + "type":"dois", + "id":"10.1097/fch.0000000000000237", + "timestamp":1585225939 + } + }, + { + "_index":"datacite", + "_type":"dump", + "_id":"10.1016/s0967-0637(97)00068-x", + "_score":1.0, + "_source":{ + "relationships":{ + "client":{ + "data":{ + "type":"clients", + "id":"crossref.citations" + } + } + }, + "attributes":{ + "contributors":[ + + ], + "titles":[ + { + "title":"Characteristics of the South Atlantic subtropical frontal zone between 15°W and 5°E" + } + ], + "descriptions":[ + + ], + "referenceCount":0, + "subjects":[ + + ], + "container":{ + "title":"Deep Sea Research Part I: Oceanographic Research Papers", + "type":"Journal", + "firstPage":"167", + "volume":"45", + "lastPage":"192", + "identifierType":"ISSN", + "identifier":"0967-0637", + "issue":"1" + }, + "state":"findable", + "created":"2020-03-26T13:32:22.000Z", + "source":"levriero", + "metadataVersion":0, + "version":null, + "isActive":true, + "contentUrl":null, + "geoLocations":[ + + ], + "updated":"2020-03-26T13:32:23.000Z", + "fundingReferences":[ + + ], + "viewCount":0, + "registered":"2020-03-26T13:32:23.000Z", + "published":"1998", + "dates":[ + { + "date":"1998-01", + "dateType":"Issued" + }, + { + "date":"2019-04-22T21:55:07Z", + "dateType":"Updated" + } + ], + "relatedIdentifiers":[ + { + "relationType":"IsPartOf", + "relatedIdentifier":"0967-0637", + "relatedIdentifierType":"ISSN", + "resourceTypeGeneral":"Collection" + } + ], + "reason":null, + "rightsList":[ + { + "rightsUri":"https://www.elsevier.com/tdm/userlicense/1.0" + } + ], + "schemaVersion":"http://datacite.org/schema/kernel-4", + "types":{ + "resourceType":"JournalArticle", + "ris":"JOUR", + "resourceTypeGeneral":"Text", + "bibtex":"article", + "citeproc":"article-journal", + "schemaOrg":"ScholarlyArticle" + }, + "publisher":"Elsevier BV", + "publicationYear":1998, + "doi":"10.1016/s0967-0637(97)00068-x", + "language":null, + "sizes":[ + + ], + "url":"https://linkinghub.elsevier.com/retrieve/pii/S096706379700068X", + "identifiers":[ + { + "identifier":"https://doi.org/10.1016/s0967-0637(97)00068-x", + "identifierType":"DOI" + }, + { + "identifier":"S096706379700068X", + "identifierType":"Publisher ID" + } + ], + "citationCount":0, + "formats":[ + + ], + "downloadCount":0, + "creators":[ + { + "nameType":"Personal", + "givenName":"D.", + "name":"Smythe-Wright, D.", + "familyName":"Smythe-Wright", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"P.", + "name":"Chapman, P.", + "familyName":"Chapman", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"C.Duncombe", + "name":"Rae, C.Duncombe", + "familyName":"Rae", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"L.V.", + "name":"Shannon, L.V.", + "familyName":"Shannon", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"S.M.", + "name":"Boswell, S.M.", + "familyName":"Boswell", + "affiliation":[ + + ] + } + ] + }, + "type":"dois", + "id":"10.1016/s0967-0637(97)00068-x", + "timestamp":1585225943 + } + }, + { + "_index":"datacite", + "_type":"dump", + "_id":"10.1016/j.elecom.2011.05.032", + "_score":1.0, + "_source":{ + "relationships":{ + "client":{ + "data":{ + "type":"clients", + "id":"crossref.citations" + } + } + }, + "attributes":{ + "contributors":[ + + ], + "titles":[ + { + "title":"ZnO/NiO nanocomposite electrodes for low-temperature solid oxide fuel cells" + } + ], + "descriptions":[ + + ], + "referenceCount":0, + "subjects":[ + + ], + "container":{ + "title":"Electrochemistry Communications", + "type":"Journal", + "firstPage":"917", + "volume":"13", + "lastPage":"920", + "identifierType":"ISSN", + "identifier":"1388-2481", + "issue":"9" + }, + "state":"findable", + "created":"2020-03-26T13:32:40.000Z", + "source":"levriero", + "metadataVersion":0, + "version":null, + "isActive":true, + "contentUrl":null, + "geoLocations":[ + + ], + "updated":"2020-03-26T13:32:40.000Z", + "fundingReferences":[ + + ], + "viewCount":0, + "registered":"2020-03-26T13:32:40.000Z", + "published":"2011", + "dates":[ + { + "date":"2011-09", + "dateType":"Issued" + }, + { + "date":"2018-12-01T18:20:58Z", + "dateType":"Updated" + } + ], + "relatedIdentifiers":[ + { + "relationType":"IsPartOf", + "relatedIdentifier":"1388-2481", + "relatedIdentifierType":"ISSN", + "resourceTypeGeneral":"Collection" + } + ], + "reason":null, + "rightsList":[ + { + "rightsUri":"https://www.elsevier.com/tdm/userlicense/1.0" + } + ], + "schemaVersion":"http://datacite.org/schema/kernel-4", + "types":{ + "resourceType":"JournalArticle", + "ris":"JOUR", + "resourceTypeGeneral":"Text", + "bibtex":"article", + "citeproc":"article-journal", + "schemaOrg":"ScholarlyArticle" + }, + "publisher":"Elsevier BV", + "publicationYear":2011, + "doi":"10.1016/j.elecom.2011.05.032", + "language":null, + "sizes":[ + + ], + "url":"https://linkinghub.elsevier.com/retrieve/pii/S138824811100230X", + "identifiers":[ + { + "identifier":"https://doi.org/10.1016/j.elecom.2011.05.032", + "identifierType":"DOI" + }, + { + "identifier":"S138824811100230X", + "identifierType":"Publisher ID" + } + ], + "citationCount":0, + "formats":[ + + ], + "downloadCount":0, + "creators":[ + { + "nameType":"Personal", + "givenName":"Rizwan", + "name":"Raza, Rizwan", + "familyName":"Raza", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Qinghua", + "name":"Liu, Qinghua", + "familyName":"Liu", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Jawad", + "name":"Nisar, Jawad", + "familyName":"Nisar", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Xiaodi", + "name":"Wang, Xiaodi", + "familyName":"Wang", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Ying", + "name":"Ma, Ying", + "familyName":"Ma", + "affiliation":[ + + ] + }, + { + "nameType":"Personal", + "givenName":"Bin", + "name":"Zhu, Bin", + "familyName":"Zhu", + "affiliation":[ + + ] + } + ] + }, + "type":"dois", + "id":"10.1016/j.elecom.2011.05.032", + "timestamp":1585225960 + } + } + ] + } +} \ No newline at end of file