Skip to content

Commit 2c97f8a

Browse files
committed
add valueURI from keyword to subject element
1 parent 2200cb5 commit 2c97f8a

2 files changed

Lines changed: 41 additions & 1 deletion

File tree

src/main/java/edu/harvard/iq/dataverse/pidproviders/doi/XmlMetadataTemplate.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,7 @@ private void writeSubjects(XMLStreamWriter xmlw, DvObject dvObject) throws XMLSt
345345
String keyword = null;
346346
String scheme = null;
347347
String schemeUri = null;
348+
String valueUri = null;
348349

349350
for (DatasetField subField : keywordFieldValue.getChildDatasetFields()) {
350351
switch (subField.getDatasetFieldType().getName()) {
@@ -357,6 +358,9 @@ private void writeSubjects(XMLStreamWriter xmlw, DvObject dvObject) throws XMLSt
357358
case DatasetFieldConstant.keywordVocabURI:
358359
schemeUri = subField.getValue();
359360
break;
361+
case DatasetFieldConstant.keywordTermURI:
362+
valueUri = subField.getValue();
363+
break;
360364
}
361365
}
362366
if (StringUtils.isNotBlank(keyword)) {
@@ -367,6 +371,9 @@ private void writeSubjects(XMLStreamWriter xmlw, DvObject dvObject) throws XMLSt
367371
if (StringUtils.isNotBlank(schemeUri)) {
368372
attributesMap.put("schemeURI", schemeUri);
369373
}
374+
if (StringUtils.isNotBlank(valueUri)) {
375+
attributesMap.put("valueURI", valueUri);
376+
}
370377
subjectsCreated = XmlWriterUtil.writeOpenTagIfNeeded(xmlw, "subjects", subjectsCreated);
371378
XmlWriterUtil.writeFullElementWithAttributes(xmlw, "subject", attributesMap, StringEscapeUtils.escapeXml10(keyword));
372379
}

src/test/java/edu/harvard/iq/dataverse/pidproviders/doi/datacite/XmlMetadataTemplateTest.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,38 @@ public void testDataCiteXMLCreation() throws IOException {
164164
testDatasetField.setDatasetVersion(dv);
165165
testDatasetField.setDatasetFieldType(primitiveDSFType);
166166
testDatasetField.setSingleValue("First Title");
167+
168+
DatasetFieldType keywordType = new DatasetFieldType(DatasetFieldConstant.keyword, FieldType.NONE, true);
169+
DatasetFieldType keywordValueType = new DatasetFieldType(DatasetFieldConstant.keywordValue, FieldType.TEXT, false);
170+
DatasetFieldType keywordTermURIType = new DatasetFieldType(DatasetFieldConstant.keywordTermURI, FieldType.URL, false);
171+
172+
DatasetField keywordField = new DatasetField();
173+
keywordField.setDatasetVersion(dv);
174+
keywordField.setDatasetFieldType(keywordType);
175+
176+
DatasetFieldCompoundValue compoundValue = new DatasetFieldCompoundValue();
177+
compoundValue.setParentDatasetField(keywordField);
178+
179+
DatasetField valField = new DatasetField();
180+
valField.setDatasetFieldType(keywordValueType);
181+
DatasetFieldValue val = new DatasetFieldValue();
182+
val.setDatasetField(valField);
183+
val.setValue("Keyword1");
184+
valField.setDatasetFieldValues(new ArrayList<>(List.of(val)));
185+
186+
DatasetField uriField = new DatasetField();
187+
uriField.setDatasetFieldType(keywordTermURIType);
188+
DatasetFieldValue uriVal = new DatasetFieldValue();
189+
uriVal.setDatasetField(uriField);
190+
uriVal.setValue("https://example.com/keyword1");
191+
uriField.setDatasetFieldValues(new ArrayList<>(List.of(uriVal)));
192+
193+
compoundValue.setChildDatasetFields(new ArrayList<>(List.of(valField, uriField)));
194+
keywordField.setDatasetFieldCompoundValues(new ArrayList<>(List.of(compoundValue)));
195+
167196
List<DatasetField> fields = new ArrayList<>();
168197
fields.add(testDatasetField);
198+
fields.add(keywordField);
169199

170200
DatasetFieldType contributorTypeFieldType = new DatasetFieldType(DatasetFieldConstant.contributor,
171201
DatasetFieldType.FieldType.TEXT, false);
@@ -247,6 +277,8 @@ public void testDataCiteXMLCreation() throws IOException {
247277
assertEquals("ROR", XmlPath.from(xml).getString("resource.creators.creator[3].nameIdentifier.@nameIdentifierScheme"));
248278
assertEquals("https://ror.org", XmlPath.from(xml).getString("resource.creators.creator[3].nameIdentifier.@schemeURI"));
249279
assertEquals("Dataverse", XmlPath.from(xml).getString("resource.publisher"));
280+
assertEquals("Keyword1", XmlPath.from(xml).getString("resource.subjects.subject"));
281+
assertEquals("https://example.com/keyword1", XmlPath.from(xml).getString("resource.subjects.subject.@valueURI"));
250282
assertEquals("Translator", XmlPath.from(xml).getString("resource.contributors.contributor[0].@contributorType"));
251283
assertEquals("Translator Name", XmlPath.from(xml).getString("resource.contributors.contributor[0].contributorName"));
252284
assertEquals("en", XmlPath.from(xml).getString("resource.language"));
@@ -310,7 +342,8 @@ public void testDataCiteXMLCreationAllFields() throws IOException {
310342
d.setDatasetType(dType);
311343
String xml = DOIDataCiteRegisterService.getMetadataFromDvObject(dv.getDataset().getGlobalId().asString(),
312344
new DataCitation(dv).getDataCiteMetadata(), dv.getDataset());
313-
System.out.println("Output from dataset-all-defaults is " + xml);
345+
assertTrue(xml.contains("valueURI=\"http://keywordTermURI1.org\""));
346+
assertTrue(xml.contains("valueURI=\"http://keywordTermURI2.org\""));
314347
try {
315348
StreamSource source = new StreamSource(new StringReader(xml));
316349
source.setSystemId("DataCite XML for test dataset");

0 commit comments

Comments
 (0)