IQSS / dataverse

Open source research data repository software
http://dataverse.org
Other
888 stars 490 forks source link

Experimental dataset JSON GET API doesn't return multi-valued fields as arrays #9495

Open vera opened 1 year ago

vera commented 1 year ago

What steps does it take to reproduce the issue?

  1. Create dataset with multi-valued field, e.g. subject in the citation block
  2. Use experimental GET API to retrieve dataset https://guides.dataverse.org/en/latest/developers/dataset-semantic-metadata-api.html#get-dataset-metadata e.g. GET /api/datasets/42/metadata

The multi-valued field values are not returned as arrays, e.g. 'subject': 'Medicine, Health and Life Sciences'

Side note, the non-experimental API https://guides.dataverse.org/en/latest/api/native-api.html#get-json-representation-of-a-dataset does not have this bug: {'typeName': 'subject', 'multiple': True, 'typeClass': 'controlledVocabulary', 'value': ['Medicine, Health and Life Sciences']}

The multi-valued field values to be returned as arrays, e.g. 'subject': ['Medicine, Health and Life Sciences']

Which version of Dataverse are you using?

v5.13

Any related open or closed issues to this bug report?

/

Screenshots:

/

qqmyers commented 1 year ago

FWIW: That API (and the ORE export) suppresses using an array when there is only one value, but it does use an array when there is more than one value. The relevant line is https://github.com/IQSS/dataverse/blob/97310b3e33db4657e28cdffb89e55b6e9055a798/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java#L440. To change it you'd need to keep track of whether the field allows multiple values or not (since single value fields still shouldn't use an array). Any PR for this should include a release note about the backward incompatibility being introduced.

pdurbin commented 1 year ago

I'm in favor of the predictability of the subject always being an array. We could always put this in new field (rather than changing the field that is sometimes a string an sometimes an array) for backward compatibility.