This
page
is
part
of
the
FHIR
Specification
(v1.0.2:
DSTU
(v3.0.2:
STU
2).
3).
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
R2
R3
R2
FHIR
Infrastructure
Work
Group
|
Maturity Level : N/A |
Ballot
Status
:
|
Each
resource
has
a
known
identity,
which
is
a
URL.
The
identity
is
not
stored
inside
the
resource,
but
must
be
tracked
by
systems
handling
resources.
For
RESTful
systems,
the
resource
identity
is
the
same
as
the
URL
by
which
it
is
found.
When
a
resource
is
packaged
in
a
bundle
(e.g.
for
messages
or
,
documents
,
or
exchanged
in
a
service
),
the
id
is
included
along
with
the
resource.
When
systems
using
FHIR
resources
are
deployed
in
an
implementation
context
where
there
is
are
more
than
two
systems
exchanging
resources,
the
way
that
resources
are
identified
with
URLs
needs
to
be
managed
carefully.
Note that many resources also have an identifier element, and usually there can be multiple identifiers. This identifier is a logical identifier for the concept that the resource describes, and is different from the identity discussed in this section, which is the literal identity of the resource. Note that there are often multiple resource instances that describe the same concept across multiple systems, e.g. each application keeps its own copy of the patient information in a Patient resource. This can even exist within a single system, such as in the case of patient duplicates ).
Resources are used in a variety of circumstances. Generally, these can be categorized into 3 different scenarios:
These combinations are why either relative (logical) or absolute references are allowed, and why a logical id is always required, in order to enable seamless exchange amongst partially closed trading systems.
When resources are exchanged between systems, they may need to be re-identified (i.e. assigned a new logical resource id). When a resource is re-identified, nothing in the resource changes, but any references that point to the resource need to be updated. Whether re-identification is required or not depends on the context, as does how resource references are updated.
The normal case is that a client/receiving system accepts the server/sender's identification of a resource at face value, whether it is a relative or absolute reference. When the client/receiver wants to follow resource references, they are done using the server id (typically either by http calls or locating them in a bundle ), but other arrangements are possible. In such cases, there is no need for re-identification.
Another
scenario
is
for
a
client
to
retrieve
a
resource
from
a
server,
and
make
its
own
local
persistent
copy.
If
the
local
resource
has
a
life-cycle
of
its
own
(i.e.
it
is
not
just
a
cached
resource),
then
it
needs
to
have
its
own
identity;
i.e.
the
resource
must
be
re-identified.
The
simplest
case
is
that
the
client
only
is
only
keeping
local
copies
of
resources
from
a
single
server.
In
these
cases,
the
client
can
simply
replace
the
root
Base
URL
and
keep
the
logical
id
of
the
resource
the
same.
In
fact,
if
the
server
is
using
relative
references,
then
this
change
doesn't
involve
any
actual
changes
to
the
resources,
it
only
means
a
re-interpretation
of
the
references.
In some cases, however, the client may deal with multiple servers. In this case, the logical id of the resource is not guaranteed to be unique (unless all resources have a UUID for the logical id, which is allowed but not required). When the client cannot be sure that the resource identities are unique, it will have to re-identify the resources. In practice this means that the client needs to keep some kind of identity translation table, and update references to the resources it has copied locally when other resources are received.
The
case
of
a
gateway
system
that
migrates
resources
from
one
ecosystem
to
another
is
very
similar.
In
some
limited
cases,
it
can
leave
the
logical
id
of
the
resources
unchanged
as
resources
are
copied
from
one
closed
system
to
another.
However
However,
in
more
complicated
cases,
it
will
have
to
modify
the
resource
references
as
resources
pass
across
the
gateway.
DSTUSTU Note: In its current form, FHIR allows various convenient implementer practices around resource identification that make integration across eco-system boundaries more difficult. In particular, either only allowing UUIDs for logical IDs or only allowing absolute references would make the boundary management problem easier but remove useful and convenient flexibility for other uses of FHIR.Feedback is welcome here
.