fix: import public email from ORCID person

(cherry picked from commit 82ca80cd6b)
This commit is contained in:
Jesiel Viana
2025-04-22 22:12:00 -03:00
committed by github-actions[bot]
parent 37338424e3
commit ac7dfc562f
10 changed files with 596 additions and 7 deletions

View File

@@ -27,6 +27,7 @@ import org.dspace.external.provider.AbstractExternalDataProvider;
import org.dspace.external.provider.orcid.xml.XMLtoBio;
import org.dspace.orcid.model.factory.OrcidFactoryUtils;
import org.orcid.jaxb.model.v3.release.common.OrcidIdentifier;
import org.orcid.jaxb.model.v3.release.record.Email;
import org.orcid.jaxb.model.v3.release.record.Person;
import org.orcid.jaxb.model.v3.release.search.Result;
import org.springframework.beans.factory.annotation.Autowired;
@@ -114,13 +115,20 @@ public class OrcidV3AuthorDataProvider extends AbstractExternalDataProvider {
if (person.getName().getFamilyName() != null) {
lastName = person.getName().getFamilyName().getContent();
externalDataObject.addMetadata(new MetadataValueDTO("person", "familyName", null, null,
lastName));
lastName));
}
if (person.getName().getGivenNames() != null) {
firstName = person.getName().getGivenNames().getContent();
externalDataObject.addMetadata(new MetadataValueDTO("person", "givenName", null, null,
firstName));
firstName));
}
if (person.getEmails().getEmails() != null && !person.getEmails().getEmails().isEmpty()) {
Email email = person.getEmails().getEmails().get(0);
if (person.getEmails().getEmails().size() > 1) {
email = person.getEmails().getEmails().stream().filter(Email::isPrimary).findFirst().orElse(email);
}
externalDataObject.addMetadata(new MetadataValueDTO("person", "email", null,
null, email.getEmail()));
}
externalDataObject.setId(person.getName().getPath());
externalDataObject
@@ -128,7 +136,7 @@ public class OrcidV3AuthorDataProvider extends AbstractExternalDataProvider {
new MetadataValueDTO("person", "identifier", "orcid", null, person.getName().getPath()));
externalDataObject
.addMetadata(new MetadataValueDTO("dc", "identifier", "uri", null,
orcidUrl + "/" + person.getName().getPath()));
orcidUrl + "/" + person.getName().getPath()));
if (!StringUtils.isBlank(lastName) && !StringUtils.isBlank(firstName)) {
externalDataObject.setDisplayValue(lastName + ", " + firstName);
externalDataObject.setValue(lastName + ", " + firstName);
@@ -139,8 +147,8 @@ public class OrcidV3AuthorDataProvider extends AbstractExternalDataProvider {
externalDataObject.setDisplayValue(firstName);
externalDataObject.setValue(firstName);
}
} else if (person.getPath() != null ) {
externalDataObject.setId(StringUtils.substringBetween(person.getPath(),"/","/person"));
} else if (person.getPath() != null) {
externalDataObject.setId(StringUtils.substringBetween(person.getPath(), "/", "/person"));
}
return externalDataObject;
}
@@ -204,7 +212,7 @@ public class OrcidV3AuthorDataProvider extends AbstractExternalDataProvider {
for (Result result : results) {
OrcidIdentifier orcidIdentifier = result.getOrcidIdentifier();
if (orcidIdentifier != null) {
log.debug("Found OrcidId=" + orcidIdentifier.toString());
log.debug("Found OrcidId=" + orcidIdentifier.getPath());
String orcid = orcidIdentifier.getPath();
Person bio = getBio(orcid);
if (bio != null) {

View File

@@ -0,0 +1,231 @@
/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.external.provider.impl;
import org.dspace.AbstractDSpaceTest;
import org.dspace.external.OrcidRestConnector;
import org.dspace.external.model.ExternalDataObject;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.InputStream;
import java.util.List;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.*;
/**
* Unit tests for {@link OrcidV3AuthorDataProvider}.
*
* @author Jesiel Viana (jesielviana at proton.me)
*
*/
public class OrcidV3AuthorDataProviderTest extends AbstractDSpaceTest {
private static final String SEARCH_XML_PATH = "org/dspace/external/provider/orcid-v3-author/search.xml";
private static final String PERSON1_XML_PATH = "org/dspace/external/provider/orcid-v3-author/person1.xml";
private static final String PERSON2_XML_PATH = "org/dspace/external/provider/orcid-v3-author/person2.xml";
private static final String PERSON3_XML_PATH = "org/dspace/external/provider/orcid-v3-author/person3.xml";
public static final String ORCID_SEARCH_QUERY = "search?q=0000-0000-0000-0000";
private OrcidV3AuthorDataProvider dataProvider;
@Before
public void setup() throws Exception {
dataProvider = new OrcidV3AuthorDataProvider();
OrcidRestConnector mockRestConnector = mock(OrcidRestConnector.class);
dataProvider.setOrcidRestConnector(mockRestConnector);
dataProvider.setSourceIdentifier("orcid");
dataProvider.setOrcidUrl("https://orcid.org");
dataProvider.setClientId("client-id");
dataProvider.setClientSecret("client-secret");
dataProvider.setOAUTHUrl("https://orcid.org/oauth");
InputStream searchXmlStream = getClass().getClassLoader().getResourceAsStream(SEARCH_XML_PATH);
InputStream person1XmlStream = getClass().getClassLoader().getResourceAsStream(PERSON1_XML_PATH);
InputStream person2XmlStream = getClass().getClassLoader().getResourceAsStream(PERSON2_XML_PATH);
InputStream person3XmlStream = getClass().getClassLoader().getResourceAsStream(PERSON3_XML_PATH);
when(mockRestConnector.get("search?q=search%3Fq%3D0000-0000-0000-0000&start=0&rows=10",null )).thenReturn(searchXmlStream);
when(mockRestConnector.get("0000-0000-0000-0001/person",null )).thenReturn(person1XmlStream);
when(mockRestConnector.get("0000-0000-0000-0002/person",null )).thenReturn(person2XmlStream);
when(mockRestConnector.get("0000-0000-0000-0003/person",null )).thenReturn(person3XmlStream);
}
@Test
public void testGetExternalDataObjectSizeIsCorrect() {
List<ExternalDataObject> optional = dataProvider.searchExternalDataObjects(ORCID_SEARCH_QUERY, 0, 10);
assertThat(optional, hasSize(3));
}
@Test
public void testGetExternalDataObjectGetPersonWithAllFieldsPopulated() {
List<ExternalDataObject> optional = dataProvider.searchExternalDataObjects(ORCID_SEARCH_QUERY, 0, 10);
assertThat(optional, hasSize(3));
ExternalDataObject externalDataObject1 = optional.get(0);
// Basic field assertions
assertThat(externalDataObject1.getId(), equalTo("0000-0000-0000-0001"));
assertThat(externalDataObject1.getValue(), equalTo("FamilyName1, GivenNames1"));
assertThat(externalDataObject1.getSource(), equalTo("orcid"));
assertThat(externalDataObject1.getDisplayValue(), equalTo("FamilyName1, GivenNames1"));
// Metadata assertions
assertThat(externalDataObject1.getMetadata(), hasItem(
allOf(
hasProperty("schema", equalTo("person")),
hasProperty("element", equalTo("familyName")),
hasProperty("value", equalTo("FamilyName1"))
)
));
assertThat(externalDataObject1.getMetadata(), hasItem(
allOf(
hasProperty("schema", equalTo("person")),
hasProperty("element", equalTo("givenName")),
hasProperty("value", equalTo("GivenNames1"))
)
));
assertThat(externalDataObject1.getMetadata(), hasItem(
allOf(
hasProperty("schema", equalTo("person")),
hasProperty("element", equalTo("email")),
hasProperty("value", equalTo("person1@email.com"))
)
));
assertThat(externalDataObject1.getMetadata(), hasItem(
allOf(
hasProperty("schema", equalTo("person")),
hasProperty("element", equalTo("identifier")),
hasProperty("qualifier", equalTo("orcid")),
hasProperty("value", equalTo("0000-0000-0000-0001"))
)
));
assertThat(externalDataObject1.getMetadata(), hasItem(
allOf(
hasProperty("schema", equalTo("dc")),
hasProperty("element", equalTo("identifier")),
hasProperty("qualifier", equalTo("uri")),
hasProperty("value", equalTo("https://orcid.org/0000-0000-0000-0001"))
)
));
}
@Test
public void testGetExternalDataObjectGetPrimaryEmailFromPersonWithTwoEmails() {
List<ExternalDataObject> optional = dataProvider.searchExternalDataObjects(ORCID_SEARCH_QUERY, 0, 10);
assertThat(optional, hasSize(3));
ExternalDataObject externalDataObject2 = optional.get(1); // Test person2 (with two emails)
// Basic field assertions
assertThat(externalDataObject2.getId(), equalTo("0000-0000-0000-0002"));
assertThat(externalDataObject2.getValue(), equalTo("FamilyName2, GivenNames2"));
assertThat(externalDataObject2.getSource(), equalTo("orcid"));
assertThat(externalDataObject2.getDisplayValue(), equalTo("FamilyName2, GivenNames2"));
// Metadata assertions
assertThat(externalDataObject2.getMetadata(), hasItem(
allOf(
hasProperty("schema", equalTo("person")),
hasProperty("element", equalTo("familyName")),
hasProperty("value", equalTo("FamilyName2"))
)
));
assertThat(externalDataObject2.getMetadata(), hasItem(
allOf(
hasProperty("schema", equalTo("person")),
hasProperty("element", equalTo("givenName")),
hasProperty("value", equalTo("GivenNames2"))
)
));
assertThat(externalDataObject2.getMetadata(), hasItem(
allOf(
hasProperty("schema", equalTo("person")),
hasProperty("element", equalTo("email")),
hasProperty("value", equalTo("person2primary@email.com")) // Primary email
)
));
assertThat(externalDataObject2.getMetadata(), hasItem(
allOf(
hasProperty("schema", equalTo("person")),
hasProperty("element", equalTo("identifier")),
hasProperty("qualifier", equalTo("orcid")),
hasProperty("value", equalTo("0000-0000-0000-0002"))
)
));
assertThat(externalDataObject2.getMetadata(), hasItem(
allOf(
hasProperty("schema", equalTo("dc")),
hasProperty("element", equalTo("identifier")),
hasProperty("qualifier", equalTo("uri")),
hasProperty("value", equalTo("https://orcid.org/0000-0000-0000-0002"))
)
));
}
@Test
public void testGetExternalDataObjectGetPersonOnlyWithNameFilled() {
List<ExternalDataObject> optional = dataProvider.searchExternalDataObjects(ORCID_SEARCH_QUERY, 0, 10);
assertThat(optional, hasSize(3));
ExternalDataObject externalDataObject2 = optional.get(2); // Test person2 (with two emails)
// Basic field assertions
assertThat(externalDataObject2.getId(), equalTo("0000-0000-0000-0003"));
assertThat(externalDataObject2.getValue(), equalTo("FamilyName3, GivenNames3"));
assertThat(externalDataObject2.getSource(), equalTo("orcid"));
assertThat(externalDataObject2.getDisplayValue(), equalTo("FamilyName3, GivenNames3"));
// Metadata assertions
assertThat(externalDataObject2.getMetadata(), hasItem(
allOf(
hasProperty("schema", equalTo("person")),
hasProperty("element", equalTo("familyName")),
hasProperty("value", equalTo("FamilyName3"))
)
));
assertThat(externalDataObject2.getMetadata(), hasItem(
allOf(
hasProperty("schema", equalTo("person")),
hasProperty("element", equalTo("givenName")),
hasProperty("value", equalTo("GivenNames3"))
)
));
assertThat(externalDataObject2.getMetadata(), hasItem(
allOf(
hasProperty("schema", equalTo("person")),
hasProperty("element", equalTo("identifier")),
hasProperty("qualifier", equalTo("orcid")),
hasProperty("value", equalTo("0000-0000-0000-0003"))
)
));
assertThat(externalDataObject2.getMetadata(), hasItem(
allOf(
hasProperty("schema", equalTo("dc")),
hasProperty("element", equalTo("identifier")),
hasProperty("qualifier", equalTo("uri")),
hasProperty("value", equalTo("https://orcid.org/0000-0000-0000-0003"))
)
));
}
}

View File

@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person:person path="/0000-0000-0000-0001/person" xmlns:internal="http://www.orcid.org/ns/internal"
xmlns:education="http://www.orcid.org/ns/education"
xmlns:distinction="http://www.orcid.org/ns/distinction"
xmlns:deprecated="http://www.orcid.org/ns/deprecated"
xmlns:other-name="http://www.orcid.org/ns/other-name"
xmlns:membership="http://www.orcid.org/ns/membership" xmlns:error="http://www.orcid.org/ns/error"
xmlns:common="http://www.orcid.org/ns/common" xmlns:record="http://www.orcid.org/ns/record"
xmlns:personal-details="http://www.orcid.org/ns/personal-details"
xmlns:keyword="http://www.orcid.org/ns/keyword" xmlns:email="http://www.orcid.org/ns/email"
xmlns:external-identifier="http://www.orcid.org/ns/external-identifier"
xmlns:funding="http://www.orcid.org/ns/funding" xmlns:preferences="http://www.orcid.org/ns/preferences"
xmlns:address="http://www.orcid.org/ns/address"
xmlns:invited-position="http://www.orcid.org/ns/invited-position"
xmlns:work="http://www.orcid.org/ns/work" xmlns:history="http://www.orcid.org/ns/history"
xmlns:employment="http://www.orcid.org/ns/employment"
xmlns:qualification="http://www.orcid.org/ns/qualification"
xmlns:service="http://www.orcid.org/ns/service" xmlns:person="http://www.orcid.org/ns/person"
xmlns:activities="http://www.orcid.org/ns/activities"
xmlns:researcher-url="http://www.orcid.org/ns/researcher-url"
xmlns:peer-review="http://www.orcid.org/ns/peer-review" xmlns:bulk="http://www.orcid.org/ns/bulk"
xmlns:research-resource="http://www.orcid.org/ns/research-resource">
<common:last-modified-date>2025-04-21T22:28:18.862Z</common:last-modified-date>
<person:name visibility="public" path="0000-0000-0000-0001">
<common:created-date>2025-04-11T15:41:21.340Z</common:created-date>
<common:last-modified-date>2025-04-11T15:41:21.340Z</common:last-modified-date>
<personal-details:given-names>GivenNames1</personal-details:given-names>
<personal-details:family-name>FamilyName1</personal-details:family-name>
</person:name>
<other-name:other-names path="/0000-0000-0000-0001/other-names"/>
<researcher-url:researcher-urls path="/0000-0000-0000-0001/researcher-urls"/>
<email:emails path="/0000-0000-0000-0001/email">
<common:last-modified-date>2025-04-21T22:28:18.862Z</common:last-modified-date>
<email:email visibility="public" verified="true" primary="true">
<common:created-date>2025-04-21T22:23:14.698Z</common:created-date>
<common:last-modified-date>2025-04-21T22:28:18.862Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://sandbox.orcid.org/0000-0000-0000-0001</common:uri>
<common:path>0000-0000-0000-0001</common:path>
<common:host>sandbox.orcid.org</common:host>
</common:source-orcid>
<common:source-name>GivenNames1 FamilyName1</common:source-name>
</common:source>
<email:email>person1@email.com</email:email>
</email:email>
</email:emails>
<address:addresses path="/0000-0000-0000-0001/address"/>
<keyword:keywords path="/0000-0000-0000-0001/keywords"/>
<external-identifier:external-identifiers path="/0000-0000-0000-0001/external-identifiers"/>
</person:person>

View File

@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person:person path="/0000-0000-0000-0002/person" xmlns:internal="http://www.orcid.org/ns/internal"
xmlns:education="http://www.orcid.org/ns/education"
xmlns:distinction="http://www.orcid.org/ns/distinction"
xmlns:deprecated="http://www.orcid.org/ns/deprecated"
xmlns:other-name="http://www.orcid.org/ns/other-name"
xmlns:membership="http://www.orcid.org/ns/membership" xmlns:error="http://www.orcid.org/ns/error"
xmlns:common="http://www.orcid.org/ns/common" xmlns:record="http://www.orcid.org/ns/record"
xmlns:personal-details="http://www.orcid.org/ns/personal-details"
xmlns:keyword="http://www.orcid.org/ns/keyword" xmlns:email="http://www.orcid.org/ns/email"
xmlns:external-identifier="http://www.orcid.org/ns/external-identifier"
xmlns:funding="http://www.orcid.org/ns/funding" xmlns:preferences="http://www.orcid.org/ns/preferences"
xmlns:address="http://www.orcid.org/ns/address"
xmlns:invited-position="http://www.orcid.org/ns/invited-position"
xmlns:work="http://www.orcid.org/ns/work" xmlns:history="http://www.orcid.org/ns/history"
xmlns:employment="http://www.orcid.org/ns/employment"
xmlns:qualification="http://www.orcid.org/ns/qualification"
xmlns:service="http://www.orcid.org/ns/service" xmlns:person="http://www.orcid.org/ns/person"
xmlns:activities="http://www.orcid.org/ns/activities"
xmlns:researcher-url="http://www.orcid.org/ns/researcher-url"
xmlns:peer-review="http://www.orcid.org/ns/peer-review" xmlns:bulk="http://www.orcid.org/ns/bulk"
xmlns:research-resource="http://www.orcid.org/ns/research-resource">
<common:last-modified-date>2025-04-21T22:28:18.862Z</common:last-modified-date>
<person:name visibility="public" path="0000-0000-0000-0002">
<common:created-date>2025-04-11T15:41:21.340Z</common:created-date>
<common:last-modified-date>2025-04-11T15:41:21.340Z</common:last-modified-date>
<personal-details:given-names>GivenNames2</personal-details:given-names>
<personal-details:family-name>FamilyName2</personal-details:family-name>
</person:name>
<other-name:other-names path="/0000-0000-0000-0002/other-names"/>
<researcher-url:researcher-urls path="/0000-0000-0000-0002/researcher-urls"/>
<email:emails path="/0000-0000-0000-0002/email">
<common:last-modified-date>2025-04-21T22:28:18.862Z</common:last-modified-date>
<email:email visibility="public" verified="true" primary="false">
<common:created-date>2025-04-21T22:23:14.698Z</common:created-date>
<common:last-modified-date>2025-04-21T22:28:18.862Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://sandbox.orcid.org/0000-0000-0000-0002</common:uri>
<common:path>0000-0000-0000-0002</common:path>
<common:host>sandbox.orcid.org</common:host>
</common:source-orcid>
<common:source-name>GivenNames2 FamilyName2</common:source-name>
</common:source>
<email:email>person2@email.com</email:email>
</email:email>
<email:email visibility="public" verified="true" primary="true">
<common:created-date>2025-04-21T16:42:54.961Z</common:created-date>
<common:last-modified-date>2025-04-21T16:48:32.642Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://sandbox.orcid.org/0000-0000-0000-0001</common:uri>
<common:path>0000-0000-0000-0001</common:path>
<common:host>sandbox.orcid.org</common:host>
</common:source-orcid>
<common:source-name>GivenNames1 FamilyName1</common:source-name>
</common:source>
<email:email>person2primary@email.com</email:email>
</email:email>
</email:emails>
<address:addresses path="/0000-0000-0000-0002/address"/>
<keyword:keywords path="/0000-0000-0000-0002/keywords"/>
<external-identifier:external-identifiers path="/0000-0000-0000-0002/external-identifiers"/>
</person:person>

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person:person path="/0000-0000-0000-0003/person" xmlns:internal="http://www.orcid.org/ns/internal"
xmlns:education="http://www.orcid.org/ns/education"
xmlns:distinction="http://www.orcid.org/ns/distinction"
xmlns:deprecated="http://www.orcid.org/ns/deprecated"
xmlns:other-name="http://www.orcid.org/ns/other-name"
xmlns:membership="http://www.orcid.org/ns/membership" xmlns:error="http://www.orcid.org/ns/error"
xmlns:common="http://www.orcid.org/ns/common" xmlns:record="http://www.orcid.org/ns/record"
xmlns:personal-details="http://www.orcid.org/ns/personal-details"
xmlns:keyword="http://www.orcid.org/ns/keyword" xmlns:email="http://www.orcid.org/ns/email"
xmlns:external-identifier="http://www.orcid.org/ns/external-identifier"
xmlns:funding="http://www.orcid.org/ns/funding" xmlns:preferences="http://www.orcid.org/ns/preferences"
xmlns:address="http://www.orcid.org/ns/address"
xmlns:invited-position="http://www.orcid.org/ns/invited-position"
xmlns:work="http://www.orcid.org/ns/work" xmlns:history="http://www.orcid.org/ns/history"
xmlns:employment="http://www.orcid.org/ns/employment"
xmlns:qualification="http://www.orcid.org/ns/qualification"
xmlns:service="http://www.orcid.org/ns/service" xmlns:person="http://www.orcid.org/ns/person"
xmlns:activities="http://www.orcid.org/ns/activities"
xmlns:researcher-url="http://www.orcid.org/ns/researcher-url"
xmlns:peer-review="http://www.orcid.org/ns/peer-review" xmlns:bulk="http://www.orcid.org/ns/bulk"
xmlns:research-resource="http://www.orcid.org/ns/research-resource">
<person:name visibility="public" path="0000-0000-0000-0003">
<common:created-date>2024-06-11T20:01:28.538Z</common:created-date>
<common:last-modified-date>2024-06-11T20:01:28.538Z</common:last-modified-date>
<personal-details:given-names>GivenNames3</personal-details:given-names>
<personal-details:family-name>FamilyName3</personal-details:family-name>
</person:name>
<other-name:other-names path="/0000-0000-0000-0003/other-names"/>
<researcher-url:researcher-urls path="/0000-0000-0000-0003/researcher-urls"/>
<email:emails path="/0000-0000-0000-0003/email"/>
<address:addresses path="/0000-0000-0000-0003/address"/>
<keyword:keywords path="/0000-0000-0000-0003/keywords"/>
<external-identifier:external-identifiers path="/0000-0000-0000-0003/external-identifiers"/>
</person:person>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<search:search num-found="12967" xmlns:search="http://www.orcid.org/ns/search"
xmlns:common="http://www.orcid.org/ns/common">
<search:result>
<common:orcid-identifier>
<common:uri>https://sandbox.orcid.org/0000-0000-0000-0001</common:uri>
<common:path>0000-0000-0000-0001</common:path>
<common:host>sandbox.orcid.org</common:host>
</common:orcid-identifier>
</search:result>
<search:result>
<common:orcid-identifier>
<common:uri>https://sandbox.orcid.org/0000-0000-0000-0002</common:uri>
<common:path>0000-0000-0000-0002</common:path>
<common:host>sandbox.orcid.org</common:host>
</common:orcid-identifier>
</search:result>
<search:result>
<common:orcid-identifier>
<common:uri>https://sandbox.orcid.org/0000-0000-0000-0003</common:uri>
<common:path>0000-0000-0000-0003</common:path>
<common:host>sandbox.orcid.org</common:host>
</common:orcid-identifier>
</search:result>
</search:search>

View File

@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person:person path="/0000-0000-0000-0001/person" xmlns:internal="http://www.orcid.org/ns/internal"
xmlns:education="http://www.orcid.org/ns/education"
xmlns:distinction="http://www.orcid.org/ns/distinction"
xmlns:deprecated="http://www.orcid.org/ns/deprecated"
xmlns:other-name="http://www.orcid.org/ns/other-name"
xmlns:membership="http://www.orcid.org/ns/membership" xmlns:error="http://www.orcid.org/ns/error"
xmlns:common="http://www.orcid.org/ns/common" xmlns:record="http://www.orcid.org/ns/record"
xmlns:personal-details="http://www.orcid.org/ns/personal-details"
xmlns:keyword="http://www.orcid.org/ns/keyword" xmlns:email="http://www.orcid.org/ns/email"
xmlns:external-identifier="http://www.orcid.org/ns/external-identifier"
xmlns:funding="http://www.orcid.org/ns/funding" xmlns:preferences="http://www.orcid.org/ns/preferences"
xmlns:address="http://www.orcid.org/ns/address"
xmlns:invited-position="http://www.orcid.org/ns/invited-position"
xmlns:work="http://www.orcid.org/ns/work" xmlns:history="http://www.orcid.org/ns/history"
xmlns:employment="http://www.orcid.org/ns/employment"
xmlns:qualification="http://www.orcid.org/ns/qualification"
xmlns:service="http://www.orcid.org/ns/service" xmlns:person="http://www.orcid.org/ns/person"
xmlns:activities="http://www.orcid.org/ns/activities"
xmlns:researcher-url="http://www.orcid.org/ns/researcher-url"
xmlns:peer-review="http://www.orcid.org/ns/peer-review" xmlns:bulk="http://www.orcid.org/ns/bulk"
xmlns:research-resource="http://www.orcid.org/ns/research-resource">
<common:last-modified-date>2025-04-21T22:28:18.862Z</common:last-modified-date>
<person:name visibility="public" path="0000-0000-0000-0001">
<common:created-date>2025-04-11T15:41:21.340Z</common:created-date>
<common:last-modified-date>2025-04-11T15:41:21.340Z</common:last-modified-date>
<personal-details:given-names>GivenNames1</personal-details:given-names>
<personal-details:family-name>FamilyName1</personal-details:family-name>
</person:name>
<other-name:other-names path="/0000-0000-0000-0001/other-names"/>
<researcher-url:researcher-urls path="/0000-0000-0000-0001/researcher-urls"/>
<email:emails path="/0000-0000-0000-0001/email">
<common:last-modified-date>2025-04-21T22:28:18.862Z</common:last-modified-date>
<email:email visibility="public" verified="true" primary="true">
<common:created-date>2025-04-21T22:23:14.698Z</common:created-date>
<common:last-modified-date>2025-04-21T22:28:18.862Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://sandbox.orcid.org/0000-0000-0000-0001</common:uri>
<common:path>0000-0000-0000-0001</common:path>
<common:host>sandbox.orcid.org</common:host>
</common:source-orcid>
<common:source-name>GivenNames1 FamilyName1</common:source-name>
</common:source>
<email:email>person1@email.com</email:email>
</email:email>
</email:emails>
<address:addresses path="/0000-0000-0000-0001/address"/>
<keyword:keywords path="/0000-0000-0000-0001/keywords"/>
<external-identifier:external-identifiers path="/0000-0000-0000-0001/external-identifiers"/>
</person:person>

View File

@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person:person path="/0000-0000-0000-0002/person" xmlns:internal="http://www.orcid.org/ns/internal"
xmlns:education="http://www.orcid.org/ns/education"
xmlns:distinction="http://www.orcid.org/ns/distinction"
xmlns:deprecated="http://www.orcid.org/ns/deprecated"
xmlns:other-name="http://www.orcid.org/ns/other-name"
xmlns:membership="http://www.orcid.org/ns/membership" xmlns:error="http://www.orcid.org/ns/error"
xmlns:common="http://www.orcid.org/ns/common" xmlns:record="http://www.orcid.org/ns/record"
xmlns:personal-details="http://www.orcid.org/ns/personal-details"
xmlns:keyword="http://www.orcid.org/ns/keyword" xmlns:email="http://www.orcid.org/ns/email"
xmlns:external-identifier="http://www.orcid.org/ns/external-identifier"
xmlns:funding="http://www.orcid.org/ns/funding" xmlns:preferences="http://www.orcid.org/ns/preferences"
xmlns:address="http://www.orcid.org/ns/address"
xmlns:invited-position="http://www.orcid.org/ns/invited-position"
xmlns:work="http://www.orcid.org/ns/work" xmlns:history="http://www.orcid.org/ns/history"
xmlns:employment="http://www.orcid.org/ns/employment"
xmlns:qualification="http://www.orcid.org/ns/qualification"
xmlns:service="http://www.orcid.org/ns/service" xmlns:person="http://www.orcid.org/ns/person"
xmlns:activities="http://www.orcid.org/ns/activities"
xmlns:researcher-url="http://www.orcid.org/ns/researcher-url"
xmlns:peer-review="http://www.orcid.org/ns/peer-review" xmlns:bulk="http://www.orcid.org/ns/bulk"
xmlns:research-resource="http://www.orcid.org/ns/research-resource">
<common:last-modified-date>2025-04-21T22:28:18.862Z</common:last-modified-date>
<person:name visibility="public" path="0000-0000-0000-0002">
<common:created-date>2025-04-11T15:41:21.340Z</common:created-date>
<common:last-modified-date>2025-04-11T15:41:21.340Z</common:last-modified-date>
<personal-details:given-names>GivenNames2</personal-details:given-names>
<personal-details:family-name>FamilyName2</personal-details:family-name>
</person:name>
<other-name:other-names path="/0000-0000-0000-0002/other-names"/>
<researcher-url:researcher-urls path="/0000-0000-0000-0002/researcher-urls"/>
<email:emails path="/0000-0000-0000-0002/email">
<common:last-modified-date>2025-04-21T22:28:18.862Z</common:last-modified-date>
<email:email visibility="public" verified="true" primary="false">
<common:created-date>2025-04-21T22:23:14.698Z</common:created-date>
<common:last-modified-date>2025-04-21T22:28:18.862Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://sandbox.orcid.org/0000-0000-0000-0002</common:uri>
<common:path>0000-0000-0000-0002</common:path>
<common:host>sandbox.orcid.org</common:host>
</common:source-orcid>
<common:source-name>GivenNames2 FamilyName2</common:source-name>
</common:source>
<email:email>person2@email.com</email:email>
</email:email>
<email:email visibility="public" verified="true" primary="true">
<common:created-date>2025-04-21T16:42:54.961Z</common:created-date>
<common:last-modified-date>2025-04-21T16:48:32.642Z</common:last-modified-date>
<common:source>
<common:source-orcid>
<common:uri>https://sandbox.orcid.org/0000-0000-0000-0001</common:uri>
<common:path>0000-0000-0000-0001</common:path>
<common:host>sandbox.orcid.org</common:host>
</common:source-orcid>
<common:source-name>GivenNames1 FamilyName1</common:source-name>
</common:source>
<email:email>person2primary@email.com</email:email>
</email:email>
</email:emails>
<address:addresses path="/0000-0000-0000-0002/address"/>
<keyword:keywords path="/0000-0000-0000-0002/keywords"/>
<external-identifier:external-identifiers path="/0000-0000-0000-0002/external-identifiers"/>
</person:person>

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person:person path="/0000-0000-0000-0003/person" xmlns:internal="http://www.orcid.org/ns/internal"
xmlns:education="http://www.orcid.org/ns/education"
xmlns:distinction="http://www.orcid.org/ns/distinction"
xmlns:deprecated="http://www.orcid.org/ns/deprecated"
xmlns:other-name="http://www.orcid.org/ns/other-name"
xmlns:membership="http://www.orcid.org/ns/membership" xmlns:error="http://www.orcid.org/ns/error"
xmlns:common="http://www.orcid.org/ns/common" xmlns:record="http://www.orcid.org/ns/record"
xmlns:personal-details="http://www.orcid.org/ns/personal-details"
xmlns:keyword="http://www.orcid.org/ns/keyword" xmlns:email="http://www.orcid.org/ns/email"
xmlns:external-identifier="http://www.orcid.org/ns/external-identifier"
xmlns:funding="http://www.orcid.org/ns/funding" xmlns:preferences="http://www.orcid.org/ns/preferences"
xmlns:address="http://www.orcid.org/ns/address"
xmlns:invited-position="http://www.orcid.org/ns/invited-position"
xmlns:work="http://www.orcid.org/ns/work" xmlns:history="http://www.orcid.org/ns/history"
xmlns:employment="http://www.orcid.org/ns/employment"
xmlns:qualification="http://www.orcid.org/ns/qualification"
xmlns:service="http://www.orcid.org/ns/service" xmlns:person="http://www.orcid.org/ns/person"
xmlns:activities="http://www.orcid.org/ns/activities"
xmlns:researcher-url="http://www.orcid.org/ns/researcher-url"
xmlns:peer-review="http://www.orcid.org/ns/peer-review" xmlns:bulk="http://www.orcid.org/ns/bulk"
xmlns:research-resource="http://www.orcid.org/ns/research-resource">
<person:name visibility="public" path="0000-0000-0000-0003">
<common:created-date>2024-06-11T20:01:28.538Z</common:created-date>
<common:last-modified-date>2024-06-11T20:01:28.538Z</common:last-modified-date>
<personal-details:given-names>GivenNames3</personal-details:given-names>
<personal-details:family-name>FamilyName3</personal-details:family-name>
</person:name>
<other-name:other-names path="/0000-0000-0000-0003/other-names"/>
<researcher-url:researcher-urls path="/0000-0000-0000-0003/researcher-urls"/>
<email:emails path="/0000-0000-0000-0003/email"/>
<address:addresses path="/0000-0000-0000-0003/address"/>
<keyword:keywords path="/0000-0000-0000-0003/keywords"/>
<external-identifier:external-identifiers path="/0000-0000-0000-0003/external-identifiers"/>
</person:person>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<search:search num-found="12967" xmlns:search="http://www.orcid.org/ns/search"
xmlns:common="http://www.orcid.org/ns/common">
<search:result>
<common:orcid-identifier>
<common:uri>https://sandbox.orcid.org/0000-0000-0000-0001</common:uri>
<common:path>0000-0000-0000-0001</common:path>
<common:host>sandbox.orcid.org</common:host>
</common:orcid-identifier>
</search:result>
<search:result>
<common:orcid-identifier>
<common:uri>https://sandbox.orcid.org/0000-0000-0000-0002</common:uri>
<common:path>0000-0000-0000-0002</common:path>
<common:host>sandbox.orcid.org</common:host>
</common:orcid-identifier>
</search:result>
<search:result>
<common:orcid-identifier>
<common:uri>https://sandbox.orcid.org/0000-0000-0000-0003</common:uri>
<common:path>0000-0000-0000-0003</common:path>
<common:host>sandbox.orcid.org</common:host>
</common:orcid-identifier>
</search:result>
</search:search>