This
page
is
part
of
the
FHIR
Specification
(v0.0.82:
(v1.0.2:
DSTU
1).
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
R2
FHIR
Infrastructure
Work
Group
| Maturity Level : N/A | Ballot Status : DSTU 2 |
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
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,
which
may
repeat.
and
usually
there
can
be
multiple
identifiers.
This
identifier
is
a
logical
identifier
for
the
concept
that
the
resource
describes,
and
is
different
to
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
it's
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
resource).
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 keeping local copies of resources from a single server. In these cases, the client can simply replace the root 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 in more complicated cases, it will have to modify the resource references as resources pass across the gateway.
DSTU Note: In
it'sits 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
on this will beis welcomeduring trial use.here.