Handling extra XDS data
Handling extra metadata elements in Submissions
Section 4.1.14 of the ITI TF Vol. 3 stipulates the possibility to transport non-standard metadata along with Document Entries,
Submission Sets, Folders, and Associations. The XDS Registry actor must be able to handle such information — either by storing it
and returning when queried via ITI-18
, or by ignoring it and including the warning “XdsExtraMetadataNotSaved” into a ITI-42
response.
If extra metadata is provided in a request, the Camel message header
org.openehealth.ipf.commons.ihe.xds.core.XdsJaxbDataBinding#SUBMISSION_SET_HAS_EXTRA_METADATA
will be set to Boolean.TRUE
.
In addition to the Camel message header mentioned above, extra XDS metadata is mapped to the field extraMetadata
in the corresponding classes of the simplified data model (Association
, DocumentEntry
, Folder
, SubmissionSet
).
The field is defined as a map from ebXML slot names (String
) to lists of ebXML slot values (String
).
According to the IHE ITI Technical Framework, extra slot names must start with urn:
, but not with urn:ihe:
— this condition is checked by IPF, and all slots with wrong names will be silently ignored.
Example
Here is an example of how to set extra metadata using Groovy.
RegisterDocumentSet request = ...
request.documentEntries[0].extraMetadata = [
'urn:oehf:name' : ['Open eHealth Foundation'],
'urn:oehf:web' : ['www.openehealth.org']]
request.submissionSet.extraMetadata = [
'urn:oehf:framework' : ['IPF'],
'urn:oehf:frameworkVersion' : ['2.5.2']]
request.associations[1].extraMetadata = [
'urn:acme:extraSlot1' : ['value1', 'value2', 'value3'],
'urn:acme:extraSlot2' : ['123', '456']]
request.folders[0].extraMetadata = [
'urn:xyz:values' : ['i', 'ii', 'iii'],
'urn:acme:values' : ['vii', 'viii']]
Handling extra query parameters
The simplified XDS data model supports additional (user-defined) parameter slots — they are mapped to the field
extraParameters
of the StoredQuery
class.
This field is a map from slot names (String
) to instances of
QueryList
.
In that way, AND/OR semantics of parameter values can be expressed by means of multiple slots with the same name, with multiple values in each (see IHE IT Infrastructure Technical Framework, Volume 2a , section 3.18.4.1.2.3.5).
According to the ebXML Specification, parameter names shall start with the dollar character $
.
Moreover, they shall not collide with names of standard parameters defined by IHE.
Example
Here is an example of how to set extra query parameters using Java.
GetDocumentsQuery query = ...;
QueryList<String> extraParams1 = new QueryList<String>();
extraParams1.getOuterList().add(Arrays.asList("para-11", "para-12"));
extraParams1.getOuterList().add(Arrays.asList("para-21", "para-22", "para-23"));
QueryList<String> extraParams2 = new QueryList<String>();
extraParams2.getOuterList().add(Arrays.asList("dia-31", "dia-32", "dia-33"));
extraParams2.getOuterList().add(Arrays.asList("dia-41"));
query.getExtraParameters().put("$Perimeter", extraParams1);
query.getExtraParameters().put("$Diameter", extraParams2);