This page is part of the FHIR Specification (v3.5.0: R4 Ballot #2). The current version which supercedes this version is 5.0.0. For a full list of available versions, see the Directory of published versions . Page versions: R5 R4B R4 R3
FHIR Infrastructure Work Group | Maturity Level: 2 | Ballot Status: Trial Use |
This page documents how the Parameters resource is used to define a set of FHIRPath based patch operations.
This table documents the FHIRPath operations that may be used to specify changes to a resource:
Type | Path | Name | Value | Index | source | destination | Details |
add | Path at which to add the content | Name of the property to add | Data type to add at nominated place | The content will be appended to the element identified in the path, using the name specified | |||
insert | Path of the collection in which to insert the content | value (Data type) to add at nominated place | index at which to insert | The content will be inserted into the nominated list at the index specified (0 based). The index must be equal or less than the number of elements in the list | |||
delete | Path of the element to delete | Only a single element can be deleted | |||||
replace | Path of the element to replace | value (Data type) to replace it with | |||||
move | Path of the collection in which to move the content | list index to move from | list index to move to | Move an element within a single list |
There are a few base rules that apply for all operations:
Observation.subject.resolve().identifier
.
Servers SHALL NOT allow patch operations to alter other resources than the nominated target, and SHOULD return an error if the patch operation triesThe FHIRPath patch operations are encoded in a Parameters resource as follows:
Parameter | Type |
Type | code |
Path | string |
Name | string |
Value | * |
index | integer |
source | integer |
destination | integer |
Here is an example of adding an element:
<Parameters xmlns="http://hl7.org/fhir"> <parameter> <name value="operation"/> <part> <name value="type"/> <valueCode value="add"/> </part> <part> <name value="path"/> <valueString value="Patient"/> </part> <part> <name value="name"/> <valueString value="birthDate"/> </part> <part> <name value="value"/> <valueDate value="1930-01-01"/> </part> </parameter> </Parameters>
Only some named data types (see the list) are allowed to be used directly in parameters. In order to add or insert other kinds of types - including anonymous elements (e.g. Observation.component, Timing.repeat), the content is defined by defining the name as described above, and instead of providing a value, a set of parts that are values are provided. Here is an example:
<Parameters xmlns="http://hl7.org/fhir"> <parameter> <name value="operation"/> <part> <name value="type"/> <valueCode value="add"/> </part> <part> <name value="path"/> <valueString value="Patient"/> </part> <part> <name value="name"/> <valueString value="contact"/> </part> <part> <name value="value"/> <part> <name value="name"/> <valueHumanName> <text value="a name"/> </valueHumanName> </part> </part> </parameter> </Parameters>
This pattern repeats as deep as necessary.
There is a set of test cases for implementers as part of the Test Case Downloads.