Skip to content

Commit

Permalink
add more metadata related to https://github.com/darktaxon/darktaxon/i…
Browse files Browse the repository at this point in the history
  • Loading branch information
Jorrit Poelen committed Sep 6, 2024
1 parent 6044c29 commit 8749291
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

public class ZenodoMetaUtil {
public static final String IS_DERIVED_FROM = "isDerivedFrom";
public static final String IS_DOCUMENTED_BY = "isDocumentedBy";
public static final String IS_PART_OF = "isPartOf";
public static final String REFERENCES = "references";
public static final String RELATED_IDENTIFIERS = "related_identifiers";
Expand Down Expand Up @@ -42,7 +43,8 @@ public class ZenodoMetaUtil {
public static final String FIELD_CUSTOM_DWC_CLASS = "dwc:class";
public static final String FIELD_CUSTOM_DWC_ORDER = "dwc:order";
public static final String FIELD_CUSTOM_AC_RESOURCE_CREATION_TECHNIQUE = "ac:resourceCreationTechnique";
public static final String FIELD_CUSTOM_AC_RESOURCE_CAPTURE_DEVICE = "ac:captureDevice";
public static final String FIELD_CUSTOM_AC_CAPTURE_DEVICE = "ac:captureDevice";
public static final String FIELD_CUSTOM_AC_SUBJECT_PART = "ac:subjectPart";
public static final String DOI = "doi";
public static final String IS_ALTERNATE_IDENTIFIER = "isAlternateIdentifier";
public static final String UPLOAD_TYPE = "upload_type";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,15 +172,16 @@ private void populateFileObject(ObjectNode objectNode,
objectNode.put(IMAGE_CONTENT_ID, imageContentId);

String imageStackId = plateId + "_" + specimenId + "_stacked_" + imageStackNumber;
ZenodoMetaUtil.addCustomField(objectNode, ZenodoMetaUtil.FIELD_CUSTOM_AC_RESOURCE_CAPTURE_DEVICE, "digital camera");
ZenodoMetaUtil.addCustomField(objectNode, ZenodoMetaUtil.FIELD_CUSTOM_AC_CAPTURE_DEVICE, "digital camera");
if (StringUtils.equals("stacked", matcher.group("imageAcquisitionMethod"))) {
idForStack.put(imageStackId, imageContentId);
ZenodoMetaUtil.addCustomField(objectNode, ZenodoMetaUtil.FIELD_CUSTOM_AC_RESOURCE_CREATION_TECHNIQUE, "focus stacking");
}


String mimeType = "image/tiff";
DarkTaxonUtil.populatePhotoDepositMetadata(objectNode, imageFilename, specimenId, imageContentId, mimeType, publicationDateFactory, communities, "Photo of Specimen " + specimenId, "Uploaded by Plazi for the Museum für Naturkunde Berlin.");
List<String> creators = Arrays.asList("Museum für Naturkunde Berlin");
DarkTaxonUtil.populatePhotoDepositMetadata(objectNode, imageFilename, specimenId, imageContentId, mimeType, publicationDateFactory, communities, "Photo of Specimen " + specimenId, "Uploaded by Plazi for the Museum für Naturkunde Berlin.", creators);

if (StringUtils.equals("RAW", acquisitionMethod)) {
String imageNumber = matcher.group("imageNumber");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

import static bio.guoda.preston.cmd.ZenodoMetaUtil.PUBLICATION_DATE;

Expand All @@ -24,7 +25,7 @@ static void appendAlternateIdentifiers(ObjectNode linkRecords, String imageConte
ZenodoMetaUtil.appendIdentifier(linkRecords, ZenodoMetaUtil.HAS_VERSION, imageContentId);
}

public static void populatePhotoDepositMetadata(ObjectNode objectNode, String imageFilename, String specimenId, String imageContentId, String mimeType, PublicationDateFactory publicationDateFactory, List<String> communities, String title, String description) {
public static void populatePhotoDepositMetadata(ObjectNode objectNode, String imageFilename, String specimenId, String imageContentId, String mimeType, PublicationDateFactory publicationDateFactory, List<String> communities, String title, String description, List<String> creators) {
ZenodoMetaUtil.addCustomField(objectNode, ZenodoMetaUtil.FIELD_CUSTOM_DWC_CATALOG_NUMBER, specimenId);
ZenodoMetaUtil.addCustomField(objectNode, ZenodoMetaUtil.FIELD_CUSTOM_DWC_INSTITUTION_CODE, "MfN");
ZenodoMetaUtil.addCustomField(objectNode, ZenodoMetaUtil.FIELD_CUSTOM_DWC_MATERIAL_SAMPLE_ID, specimenId);
Expand All @@ -33,11 +34,13 @@ public static void populatePhotoDepositMetadata(ObjectNode objectNode, String im
setDescription(objectNode, description);
ZenodoMetaUtil.setFilename(objectNode, imageFilename);
appendAlternateIdentifiers(objectNode, imageContentId);
ZenodoMetaUtil.appendIdentifier(objectNode, ZenodoMetaUtil.IS_DERIVED_FROM, StringUtils.startsWith(specimenId, "urn:lsid:") ? specimenId : LSID_PREFIX + specimenId);
String specimenLSID = StringUtils.startsWith(specimenId, "urn:lsid:") ? specimenId : LSID_PREFIX + specimenId;
ZenodoMetaUtil.appendIdentifier(objectNode, ZenodoMetaUtil.IS_ALTERNATE_IDENTIFIER, specimenLSID + ":" + imageFilename);
ZenodoMetaUtil.appendIdentifier(objectNode, ZenodoMetaUtil.IS_DERIVED_FROM, specimenLSID);
ZenodoMetaUtil.setType(objectNode, mimeType);
ZenodoMetaUtil.setValue(objectNode, ZenodoMetaUtil.UPLOAD_TYPE, ZenodoMetaUtil.UPLOAD_TYPE_IMAGE);
ZenodoMetaUtil.setValue(objectNode, ZenodoMetaUtil.IMAGE_TYPE, ZenodoMetaUtil.IMAGE_TYPE_PHOTO);
ZenodoMetaUtil.setCreators(objectNode, Arrays.asList("Museum für Naturkunde Berlin"));
ZenodoMetaUtil.setCreators(objectNode, creators);
ZenodoMetaUtil.setValue(objectNode, PUBLICATION_DATE, publicationDateFactory.getPublicationDate());
ZenodoMetaUtil.setCommunities(objectNode, communities.stream());
}
Expand All @@ -47,8 +50,13 @@ public static void setDescription(ObjectNode objectNode, String description) {
}

public static ObjectNode toPhotoDeposit(JsonNode multimediaRecord, PublicationDateFactory publicationDateFactory, List<String> communities) {
JsonNode format = multimediaRecord.get("http://purl.org/dc/elements/1.1/format");
JsonNode jsonNode = multimediaRecord.get("http://purl.org/dc/terms/identifier");
String filename = jsonNode.asText();
if (!filename.contains(".")) {
filename = filename + "." + StringUtils.lowerCase(format.asText());
}

JsonNode specimenReference = multimediaRecord.get("http://rs.tdwg.org/ac/terms/associatedSpecimenReference");
String specimenId = specimenReference.asText();
JsonNode hashValue = multimediaRecord.get("http://rs.tdwg.org/ac/terms/hashValue");
Expand All @@ -59,13 +67,18 @@ public static ObjectNode toPhotoDeposit(JsonNode multimediaRecord, PublicationDa
throw new IllegalArgumentException("unsupported content id [" + imageContentId + "]");
}

JsonNode format = multimediaRecord.get("http://purl.org/dc/elements/1.1/format");


ObjectNode zenodoMetadata = new ObjectMapper().createObjectNode();

JsonNode tagNode = multimediaRecord.get("http://rs.tdwg.org/ac/terms/tag");
if (tagNode != null) {
String[] tags = StringUtils.split(tagNode.asText(), "|");
Stream.of(tags).forEach(tag -> ZenodoMetaUtil.addKeyword(zenodoMetadata, StringUtils.trim(tag)));
}

String title = multimediaRecord.get("http://purl.org/dc/terms/title").asText();
String description = multimediaRecord.get("http://purl.org/dc/terms/description").asText();
JsonNode creatorNode = multimediaRecord.get("http://purl.org/dc/elements/1.1/creator");
List<String> creators = Arrays.asList(creatorNode == null ? "Museum für Naturkunde Berlin" : creatorNode.asText());
populatePhotoDepositMetadata(
zenodoMetadata,
filename,
Expand All @@ -75,12 +88,14 @@ public static ObjectNode toPhotoDeposit(JsonNode multimediaRecord, PublicationDa
publicationDateFactory,
communities,
title,
description
description, creators
);
ZenodoMetaUtil.addCustomField(zenodoMetadata, ZenodoMetaUtil.FIELD_CUSTOM_AC_RESOURCE_CAPTURE_DEVICE, multimediaRecord.get("http://rs.tdwg.org/ac/terms/captureDevice").asText());
ZenodoMetaUtil.appendIdentifier(zenodoMetadata, ZenodoMetaUtil.IS_DOCUMENTED_BY, multimediaRecord.get("http://rs.tdwg.org/ac/terms/hasServiceAccessPoint").asText());
ZenodoMetaUtil.addCustomField(zenodoMetadata, ZenodoMetaUtil.FIELD_CUSTOM_AC_SUBJECT_PART, multimediaRecord.get("http://rs.tdwg.org/ac/terms/subjectPart").asText());
ZenodoMetaUtil.addCustomField(zenodoMetadata, ZenodoMetaUtil.FIELD_CUSTOM_AC_CAPTURE_DEVICE, multimediaRecord.get("http://rs.tdwg.org/ac/terms/captureDevice").asText());
ZenodoMetaUtil.addCustomField(zenodoMetadata, ZenodoMetaUtil.FIELD_CUSTOM_AC_RESOURCE_CREATION_TECHNIQUE, multimediaRecord.get("http://rs.tdwg.org/ac/terms/resourceCreationTechnique").asText());
String[] split = StringUtils.split(specimenId, ":");
String catalogNumber = split.length > 0 ? split[split.length-1] : specimenId;
String catalogNumber = split.length > 0 ? split[split.length - 1] : specimenId;
ZenodoMetaUtil.addCustomField(zenodoMetadata, ZenodoMetaUtil.FIELD_CUSTOM_DWC_CATALOG_NUMBER, catalogNumber);

return ZenodoMetaUtil.wrap(zenodoMetadata);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import static junit.framework.TestCase.assertNotNull;
import static org.hamcrest.MatcherAssert.assertThat;

public class DarkTaxonRecordTranslatorTest {
public class DarkTaxonUtilTest {

@Test
public void photoDeposit() throws IOException {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
{
"metadata" : {
"keywords" : [ "MfN", "DarkTaxon" ],
"custom" : {
"dwc:catalogNumber" : [ "BMT0009388" ],
"dwc:institutionCode" : [ "MfN" ],
"dwc:materialSampleID" : [ "urn:lsid:MfN:Ento:BMT0009388" ],
"ac:associatedSpecimenReference" : [ "urn:lsid:MfN:Ento:BMT0009388" ],
"ac:subjectPart" : [ "whole specimen" ],
"ac:captureDevice" : [ "CAMERA MAKE AND MODEL" ],
"ac:resourceCreationTechnique" : [ "Focal Stacking" ]
},
Expand All @@ -17,15 +19,21 @@
}, {
"relation" : "hasVersion",
"identifier" : "hash://md5/f052cbac398bf340a620c421bfefa16d"
}, {
"relation" : "isAlternateIdentifier",
"identifier" : "urn:lsid:MfN:Ento:BMT0009388:BMT121_BMT0009388_stacked_01.tiff"
}, {
"relation" : "isDerivedFrom",
"identifier" : "urn:lsid:MfN:Ento:BMT0009388"
}, {
"relation" : "isDocumentedBy",
"identifier" : "https://zenodo.org/search?q=_files.checksum%3A%22md5%3Af052cbac398bf340a620c421bfefa16d%22&f=allversions%3Atrue"
} ],
"http://www.w3.org/1999/02/22-rdf-syntax-ns#type" : "image/tiff",
"upload_type" : "image",
"image_type" : "photo",
"creators" : [ {
"name" : "Museum für Naturkunde Berlin"
"name" : "null"
} ],
"publication_date" : "1999-12-31",
"communities" : [ {
Expand Down

0 comments on commit 8749291

Please sign in to comment.