diff --git a/doc/release-notes/9495-return-multi-valued-fields-as-arrays.md b/doc/release-notes/9495-return-multi-valued-fields-as-arrays.md new file mode 100644 index 00000000000..2a91036d9eb --- /dev/null +++ b/doc/release-notes/9495-return-multi-valued-fields-as-arrays.md @@ -0,0 +1 @@ +When calling (GET) the /api/datasets/{id}/metadata endpoint or requesting JSON-LD (application/ld+json) from the /api/datasets/{id}/versions/{versionId}/metadata endpoint, all multivalued fields as arrays instead of String for 1 entry and Array for more than 1 entry. This consistancy makes parsing the JSON-LD as JSON easier for users of the API. diff --git a/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java b/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java index 1e8fe184566..e867d80af4b 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java @@ -47,7 +47,7 @@ public class OREMap { public static final String NAME = "OREMap"; //NOTE: Update this value whenever the output of this class is changed - private static final String DATAVERSE_ORE_FORMAT_VERSION = "Dataverse OREMap Format v1.0.3"; + private static final String DATAVERSE_ORE_FORMAT_VERSION = "Dataverse OREMap Format v1.0.4"; //v1.0.1 - added versionNote private static final String DATAVERSE_SOFTWARE_NAME = "Dataverse"; private static final String DATAVERSE_SOFTWARE_URL = "https://github.com/iqss/dataverse"; @@ -490,9 +490,9 @@ public static JsonValue getJsonLDForField(DatasetField field, Boolean excludeEma vals.add(child); } } - // Add metadata value to aggregation, suppress array when only one value + // Add metadata value to aggregation, suppress array when multiples not allowed JsonArray valArray = vals.build(); - return (valArray.size() != 1) ? valArray : valArray.get(0); + return (dfType.isAllowMultiples()) ? valArray : valArray.get(0); } private static void addCvocValue(String val, JsonArrayBuilder vals, JsonObject cvocEntry, diff --git a/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java b/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java index 583a76f07a7..290e495b2db 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java @@ -3658,6 +3658,7 @@ public void testSemanticMetadataAPIs() { // Get the metadata with the semantic api Response response = UtilIT.getDatasetJsonLDMetadata(datasetId, apiToken); + response.prettyPrint(); response.then().assertThat().statusCode(OK.getStatusCode()); // Compare the metadata with an expected value - the metadatablock entries // should be the same but there will be additional fields with values related to @@ -3822,6 +3823,7 @@ public void testReCreateDataset() { // Get the semantic metadata Response response = UtilIT.getDatasetJsonLDMetadata(datasetId, apiToken); + response.prettyPrint(); response.then().assertThat().statusCode(OK.getStatusCode()); response.prettyPeek(); String expectedString = getData(response.getBody().asString());