This
page
is
part
of
the
FHIR
Specification
(v3.0.2:
STU
3).
(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:
R4B
R4
R3
R2
FHIR
Infrastructure
Work
Group
|
Maturity Level : 5 |
Ballot
Status
:
|
Normative Candidate Note: This page is candidate normative content for R4 in the Infrastructure Package . Once normative, it will lose it's Maturity Level, and breaking changes will no longer be made.
The base definition for all elements contained inside a resource. All elements, whether defined as a Data Type (including primitives) or as part of a resource structure, have this base content:
There
are
3
kinds
of
descendent
descendant
types
that
specialize
Element
:
Note that resources themselves all specialize the base type Resource .
UML Diagram ( Legend )
XML Template
< <</extension><[name] xmlns="http://hl7.org/fhir" id="Internal id (e.g. like xml:id) (string)"><extension><!-- 0..* Extension Additional Content defined by implementations --></extension> </[name]>
JSON Template
// complex types:
{
"
"
"id" : "<string>", // Internal Id
"extension" : [{// Additional Content defined by implementations
// from Element: extension (recursive)
"
"
"url" : "<uri>", // R! identifies the meaning of the extension
"value[x]" : <*> // identifies the meaning of the extension
}]
}
// primitive types:
{
"{name}" : "value",
"{name}_" : {
"
"
"{name}" : "value", // The primitive value
"{name}_" : { // Special syntax for the id and extensions
"id" : "<string>", // Internal Id
"extension" : [{// Additional Content defined by implementations
// from Element: extension (recursive)
"
"
"url" : "<uri>", // R! identifies the meaning of the extension
"value[x]" : <*> // identifies the meaning of the extension
}]
}
}
XML Template
< <</extension><[name] xmlns="http://hl7.org/fhir" id="Internal id (e.g. like xml:id) (string)"><extension><!-- 0..* Extension Additional Content defined by implementations --></extension> </[name]>
JSON Template
// complex types:
{
"
"
"id" : "<string>", // Internal Id
"extension" : [{// Additional Content defined by implementations
// from Element: extension (recursive)
"
"
"url" : "<uri>", // R! identifies the meaning of the extension
"value[x]" : <*> // identifies the meaning of the extension
}]
}
// primitive types:
{
"{name}" : "value",
"{name}_" : {
"
"
"{name}" : "value", // The primitive value
"{name}_" : { // Special syntax for the id and extensions
"id" : "<string>", // Internal Id
"extension" : [{// Additional Content defined by implementations
// from Element: extension (recursive)
"
"
"url" : "<uri>", // R! identifies the meaning of the extension
"value[x]" : <*> // identifies the meaning of the extension
}]
}
}
Constraints
| id | Level | Location | Description | Expression |
|
ele-1
|
Rule | (base) |
All
FHIR
elements
must
have
a
@value
or
children
|
|
This constraint exists to reduce syntactical variation in resource contents. If an element has no children, then it is always omitted from the resource, as opposed to optionally present without any content.
As
the
base
type
for
all
elements
included
in
a
resource,
Element
is
an
important
structural
element
of
FHIR.
Even
the
primitive
types
inherit
the
base
features
and
representation
rules
that
apply
to
the
Element
type.
Elements
are
represented
by
an
XML
element.
The
name
of
the
element
comes
from
the
context
in
which
it
is
used,
not
from
the
type.
The
internal
id
is
represented
as
an
attribute
(similar
to
xml:id,
but
see
below
about
scope).
Extensions
are
represented
as
XML
elements.
Here
is
the
representation
for
an
element
'code'
'use'
of
type
Coding
:
<code id="[internal id]"> <extension url="..."/><use id="[internal id]"> <extension url="..."/> ... if there are any extensions <extension> .. elements of Coding type...</code></use>
Primitive
types
have
the
same
representation;
the
actual
primitive
value
appears
as
an
XML
attribute
named
value
on
the
XML
element.
For
example,
a
string
property
named
"name"
"name"
will
be
represented
like
this:
<code id="[internal id] value="[value of string]""> <extension url="..."/><status id="[internal id]" value="[value of code]""> <extension url="..."/> ... if there are any extensions <extension></code></status>
Elements
(except
for
primitive
types,
see
below)
are
represented
by
a
JSON
object
property.
The
name
of
the
property
comes
from
the
context
in
which
it
is
used,
not
from
the
type.
The
internal
id
is
represented
as
a
JSON
string
property
named
"_id".
"_id".
Extensions
are
represented
in
a
JSON
array
of
objects
named
"extension".
"extension".
Here
is
the
representation
for
a
property
'code'
'use'
of
type
Coding
:
{
"code" : {
"id" : "[internal id]",
"extension" : [
"use" : {
"id" : "[internal id]",
"extension" : [
..extensions, if present...
],
.. properties of Coding type...
}
}
Primitive
types
are
represented
differently;
the
actual
primitive
value
appears
as
a
JSON
string
or
number
property.
If
an
internal
id
or
extensions
are
present,
they
appear
in
a
JSON
object
with
the
name
of
the
primitive
value
property
with
"_"
"_"
prepended.
For
example,
a
string
code
property
named
"name"
"status"
will
be
represented
like
this:
{
"name" : "[value of string]",
"_name" : {
"id" : "[internal id]",
"extension" : [
"status" : "[value of code]",
"_status" : {
"id" : "[internal id]",
"extension" : [
..extensions, if present...
]
}
}
The exact use of this pattern is described here .
The
id
property
of
the
element
is
defined
to
allow
implementers
to
build
implementation
functionality
that
makes
use
of
internal
references
inside
the
resource.
This
specification
does
not
use
the
internal
id
on
the
element
in
any
way.
The internal id is unique within the scope of the resource that contains it. Specifically, this means:
These rules ensure that there is no need to change internal identifiers while exchanging resources.