This
page
is
part
of
the
FHIR
Specification
(v3.0.2:
STU
3).
(v3.3.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
R2
FHIR
Infrastructure
Work
Group
|
Maturity Level : 5 |
|
Compartments : Not linked to any defined compartments |
Detailed Descriptions for the elements in the StructureDefinition resource.
| StructureDefinition | |
| Element Id | StructureDefinition |
| Definition |
A definition of a FHIR structure. This resource is used to describe the underlying resources, data types defined in FHIR, and also for describing extensions and constraints on resources and data types. |
| Control | 1..1 |
| Alternate Names | Template; Profile |
| Invariants |
Defined
on
this
element
sdf-1 : Element paths must be unique unless the structure is a constraint ( expression
:
derivation
=
'constraint'
or
snapshot.element.select(path).isDistinct(),
xpath:
(f:derivation/@value
=
'constraint')
or
(count(f:snapshot/f:element)
=
count(distinct-values(f:snapshot/f:element/f:path/@value))))
sdf-11 : If there's a type, its content must match the path name in the first element of a snapshot ( expression
:
kind
!=
'logical'
implies
snapshot.empty()
or
snapshot.element.first().path
=
type,
xpath:
(f:kind/@value
=
'logical')
or
not(exists(f:snapshot))
or
(f:type/@value
=
f:snapshot/f:element[1]/f:path/@value))
sdf-12 : element.base cannot appear if there is no base on the structure definition ( expression :
snapshot.exists()
implies
(snapshot.element.base.exists()
=
baseDefinition.exists()),
xpath:
f:baseDefinition
or
not(exists(f:snapshot/f:element/f:base)
or
exists(f:differential/f:element/f:base)))
sdf-14 : All element definitions must have an id ( expression
:
snapshot.element.all(id.exists())
and
differential.element.all(id.exists()),
xpath:
count(*/f:element)=count(*/f:element/@id))
sdf-16 : All element definitions must have unique ids (snapshot) ( expression
:
snapshot.element.all(id)
and
snapshot.element.id.trace('ids').isDistinct(),
xpath:
sdf-17 : All element definitions must have unique ids (diff) ( expression
:
differential.element.all(id)
and
differential.element.id.trace('ids').isDistinct(),
xpath:
sdf-18 : Context Invariants can only be used for extensions ( expression
:
contextInvariant.exists()
implies
type
=
'Extension',
xpath:
not(exists(f:contextInvariant))
or
(f:type/@value
=
'Extension'))
sdf-19 : Custom types can only be used in logical models ( expression
:
kind
=
'logical'
or
(differential.element.type.code.all(hasValue()
implies
matches('^[a-zA-Z0-9]+$'))
and
snapshot.element.type.code.all(hasValue()
implies
matches('^[a-zA-Z0-9]+$'))),
xpath:
f:kind/@value
=
'logical'
or
count(f:differential/f:element/f:type/f:code[@value
and
not(matches(string(@value),
'^[a-zA-Z0-9]+$'))]|f:snapshot/f:element/f:type/f:code[@value
and
not(matches(string(@value),
'^[a-zA-Z0-9]+$'))])
=0)
sdf-21 : Default values can only be specified on logical models ( expression :
(snapshot.element.defaultValue.exists()
or
differential.element.defaultValue.exists())
implies
((kind
=
'logical')
and
(derivation
=
'specialization')),
xpath:
(not(exists(f:snapshot/f:element/*[starts-with(local-name(),
'defaultValue')]))
and
not(exists(f:differential/f:element/*[starts-with(local-name(),
'defaultValue')])))
or
((f:kind/@value
=
'logical')
and
(f:derivation/@value
=
'specialization')))
sdf-4 : If the structure is not abstract, then there SHALL be a baseDefinition ( expression
:
abstract
=
true
or
baseDefinition.exists(),
xpath:
(f:abstract/@value=true())
or
exists(f:baseDefinition))
sdf-5 : If the structure defines an extension then the structure must have context information ( expression
:
type
!=
'Extension'
or
derivation
=
'specialization'
or
sdf-6 : A structure must have either a differential, or a snapshot (or both) ( expression
:
snapshot.exists()
or
differential.exists(),
xpath:
exists(f:snapshot)
or
exists(f:differential))
sdf-7 : If the structure describes a base Resource or Type, the URL has to start with
:
(derivation
=
'constraint')
or
(kind
=
'logical')
or
(url
=
'http://hl7.org/fhir/StructureDefinition/'+id),
xpath:
(f:derivation/@value
=
'constraint')
or
(f:kind/@value
=
'logical')
or
(f:url/@value=concat('http://hl7.org/fhir/StructureDefinition/',
f:id/@value)))
sdf-9 : In any snapshot or differential, no label, code or requirements on
:
children().element.where(path.contains('.').not()).label.empty()
and
children().element.where(path.contains('.').not()).code.empty()
and
children().element.where(path.contains('.').not()).requirements.empty(),
xpath:
not(exists(f:snapshot/f:element[not(contains(f:path/@value,
'.'))
and
(f:label
or
f:code
or
f:requirements)]))
and
not(exists(f:differential/f:element[not(contains(f:path/@value,
'.'))
and
(f:label
or
f:code
or
f:requirements)])))
|
| StructureDefinition.url | |
| Element Id | StructureDefinition.url |
| Definition |
An
absolute
URI
that
is
used
to
identify
this
structure
definition
when
it
is
referenced
in
a
specification,
model,
design
or
an
|
| Control | 1..1 |
| Type | uri |
| Requirements |
Allows the structure definition to be referenced by a single globally unique identifier. |
| Alternate Names | url; authoritative-url; destination; identity |
| Summary | true |
| Comments |
Can
be
a
urn:uuid:
or
a
The URL SHOULD include the major version of the structure definition. For more information see Technical and Business Versions . |
| StructureDefinition.identifier | |
| Element Id | StructureDefinition.identifier |
| Definition |
A formal identifier that is used to identify this structure definition when it is represented in other formats, or referenced in a specification, model, design or an instance. |
| Note | This is a business identifer, not a resource identifier (see discussion ) |
| Control | 0..* |
| Type | Identifier |
| Requirements |
Allows externally provided and/or usable business identifiers to be easily associated with the module. |
| Summary | true |
| Comments |
Typically,
this
is
used
for
identifiers
that
can
go
in
an
HL7
V3
II
(instance
identifier)
data
type,
|
| StructureDefinition.version | |
| Element Id | StructureDefinition.version |
| Definition |
The identifier that is used to identify this version of the structure definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the structure definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. |
| Note | This is a business versionId, not a resource version id (see discussion ) |
| Control | 0..1 |
| Type | string |
| Summary | true |
| Comments |
There
may
be
different
structure
definition
instances
that
have
the
same
identifier
but
different
versions.
The
version
can
be
appended
to
the
url
in
a
reference
to
allow
a
|
| StructureDefinition.name | |
| Element Id | StructureDefinition.name |
| Definition |
A natural language name identifying the structure definition. This name should be usable as an identifier for the module by machine processing applications such as code generation. |
| Control | 1..1 |
| Type | string |
| Requirements |
Support human navigation and code generation. |
| Summary | true |
| Comments |
The
name
is
not
expected
to
be
globally
unique.
The
name
should
be
a
simple
|
| StructureDefinition.title | |
| Element Id | StructureDefinition.title |
| Definition |
A short, descriptive, user-friendly title for the structure definition. |
| Control | 0..1 |
| Type | string |
| Summary | true |
| Comments |
This
name
does
not
need
to
be
machine-processing
friendly
and
may
contain
punctuation,
white-space,
etc.
Applications
don't
have
to
use
this
|
| StructureDefinition.status | |
| Element Id | StructureDefinition.status |
| Definition |
The status of this structure definition. Enables tracking the life-cycle of the content. |
| Control | 1..1 |
| Terminology Binding | PublicationStatus ( Required ) |
| Type | code |
| Is Modifier | true (Reason: null) |
| Summary | true |
| Comments |
Allows
filtering
of
structure
definitions
that
are
appropriate
for
use
|
| StructureDefinition.experimental | |
| Element Id | StructureDefinition.experimental |
| Definition |
A
|
| Control | 0..1 |
| Type | boolean |
| Is Modifier | true (Reason: null) |
| Requirements |
Enables experimental content to be developed following the same lifecycle that would be used for a production-level structure definition. |
| Summary | true |
| Comments |
Allows
filtering
of
structure
|
| StructureDefinition.date | |
| Element Id | StructureDefinition.date |
| Definition |
The
date
(and
optionally
time)
when
the
structure
definition
was
published.
The
date
must
change
|
| Control | 0..1 |
| Type | dateTime |
| Alternate Names | Revision Date |
| Summary | true |
| Comments |
Note that this is not the same as the resource last-modified-date, since the resource may be a secondary representation of the structure definition. Additional specific dates may be added as extensions or be found by consulting Provenances associated with past versions of the resource. |
| StructureDefinition.publisher | |
| Element Id | StructureDefinition.publisher |
| Definition |
The
name
of
the
|
| Control | 0..1 |
| Type | string |
| Requirements |
Helps
establish
the
|
| Summary | true |
| Comments |
Usually
an
|
| StructureDefinition.contact | |
| Element Id | StructureDefinition.contact |
| Definition |
Contact details to assist a user in finding and communicating with the publisher. |
| Control | 0..* |
| Type | ContactDetail |
| Summary | true |
| Comments |
May be a web site, an email address, a telephone number, etc. |
| StructureDefinition.description | |
| Element Id | StructureDefinition.description |
| Definition |
A free text natural language description of the structure definition from a consumer's perspective. |
| Control | 0..1 |
| Type | markdown |
| Comments |
This description can be used to capture details such as why the structure definition was built, comments about misuse, instructions for clinical use and interpretation, literature references, examples from the paper world, etc. It is not a rendering of the structure definition as conveyed in the 'text' field of the resource itself. This item SHOULD be populated unless the information is available from context (e.g. the language of the profile is presumed to be the predominant language in the place the profile was created). |
| StructureDefinition.useContext | |
| Standards Status | This element has a standards status of "Trial Use" which is different to the status of the whole resource |
| Element Id | StructureDefinition.useContext |
| Definition |
The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching for appropriate structure definition instances. |
| Control | 0..* |
| Type | UsageContext |
| Requirements |
Assist in searching for appropriate content. |
| Summary | true |
| Comments |
When
multiple
useContexts
are
specified,
there
is
no
expectation
|
| StructureDefinition.jurisdiction | |
| Element Id | StructureDefinition.jurisdiction |
| Definition |
A legal or geographic region in which the structure definition is intended to be used. |
| Control | 0..* |
| Terminology Binding | Jurisdiction ValueSet ( Extensible ) |
| Type | CodeableConcept |
| Summary | true |
| Comments |
It may be possible for the structure definition to be used in jurisdictions other than those for which it was originally designed or intended. |
| StructureDefinition.purpose | |
| Element Id | StructureDefinition.purpose |
| Definition |
|
| Control | 0..1 |
| Type | markdown |
| Comments |
This
element
does
not
describe
the
usage
of
the
structure
|
| StructureDefinition.copyright | |
| Element Id | StructureDefinition.copyright |
| Definition |
A copyright statement relating to the structure definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the structure definition. |
| Control | 0..1 |
| Type | markdown |
| Requirements |
Consumers must be able to determine any legal restrictions on the use of the structure definition and/or its content. |
| Alternate Names | License; Restrictions |
| StructureDefinition.keyword | |
| Element Id | StructureDefinition.keyword |
| Definition |
A set of key words or terms from external terminologies that may be used to assist with indexing and searching of templates. |
| Control | 0..* |
| Terminology Binding | Structure Definition Codes ( Example ) |
| Type | Coding |
| Requirements |
Assist in searching for appropriate StructureDefinitions. |
| Summary | true |
| StructureDefinition.fhirVersion | |
| Element Id | StructureDefinition.fhirVersion |
| Definition |
The
version
of
the
FHIR
specification
on
which
this
StructureDefinition
is
based
-
this
is
the
formal
version
of
the
specification,
without
the
revision
number,
e.g.
[publication].[major].[minor],
which
is
|
| Control | 0..1 |
| Terminology Binding | All Published FHIR versions ( Required ) |
| Type | id |
| Summary | true |
| Comments |
A
StructureDefinition
does
not
need
to
specify
the
target
it
applies
|
| StructureDefinition.mapping | |
| Element Id | StructureDefinition.mapping |
| Definition |
An external specification that the content is mapped to. |
| Control | 0..* |
| Invariants |
Defined
on
this
element
sdf-2 : Must have at least a name or a uri (or both) ( expression
:
name.exists()
or
uri.exists(),
xpath:
exists(f:uri)
or
exists(f:name))
|
| StructureDefinition.mapping.identity | |
| Element Id | StructureDefinition.mapping.identity |
| Definition |
An Internal id that is used to identify this mapping set when specific mappings are made. |
| Control | 1..1 |
| Type | id |
| Comments |
The specification is described once, with general comments, and then specific mappings are made that reference this declaration. |
| StructureDefinition.mapping.uri | |
| Element Id | StructureDefinition.mapping.uri |
| Definition |
An absolute URI that identifies the specification that this mapping is expressed to. |
| Control | 0..1 |
| Type | uri |
| Comments |
A formal identity for the specification being mapped to helps with identifying maps consistently. |
| Invariants |
Affect
this
element
sdf-2 : Must have at least a name or a uri (or both) ( expression
:
name.exists()
or
uri.exists(),
xpath:
exists(f:uri)
or
exists(f:name))
|
| StructureDefinition.mapping.name | |
| Element Id | StructureDefinition.mapping.name |
| Definition |
A name for the specification that is being mapped to. |
| Control | 0..1 |
| Type | string |
| Invariants |
Affect
this
element
sdf-2 : Must have at least a name or a uri (or both) ( expression
:
name.exists()
or
uri.exists(),
xpath:
exists(f:uri)
or
exists(f:name))
|
| StructureDefinition.mapping.comment | |
| Element Id | StructureDefinition.mapping.comment |
| Definition |
Comments about this mapping, including version notes, issues, scope limitations, and other important notes for usage. |
| Control | 0..1 |
| Type | string |
| StructureDefinition.kind | |
| Element Id | StructureDefinition.kind |
| Definition |
Defines the kind of structure that this definition is describing. |
| Control | 1..1 |
| Terminology Binding | StructureDefinitionKind ( Required ) |
| Type | code |
| Summary | true |
| StructureDefinition.abstract | |
| Element Id | StructureDefinition.abstract |
| Definition |
Whether structure this definition describes is abstract or not - that is, whether the structure is not intended to be instantiated. For Resources and Data types, abstract types will never be exchanged between systems. |
| Control | 1..1 |
| Type | boolean |
| Summary | true |
| Comments |
Abstract
Resources
cannot
be
instantiated
-
a
concrete
sub-type
must
be
used.
Abstract
datatypes
and
extensions
cannot
be
used
in
an
instance.
For
logical
models,
the
exact
implication
of
|
|
|
|
| Element Id | StructureDefinition.context |
| Definition |
|
| Control |
|
| Summary | true |
| Invariants |
Affect
this
element
sdf-5 : If the structure defines an extension then the structure must have context information ( expression
:
type
!=
'Extension'
or
derivation
=
'specialization'
or
|
|
|
|
| Element Id | StructureDefinition.context.type |
| Definition |
|
| Control |
|
| Terminology Binding | ExtensionContextType ( Required ) |
| Type |
|
| Summary | true |
| StructureDefinition.context.expression | |
|
| StructureDefinition.context.expression |
| Definition |
|
|
|
1..1 |
| Type | string |
|
Summary
|
true |
| StructureDefinition.contextInvariant | |
| Element Id | StructureDefinition.contextInvariant |
| Definition |
A
set
of
rules
as
|
| Control | 0..* |
| Type | string |
| Summary | true |
| Comments |
|
| Invariants |
Affect
this
element
sdf-18 : Context Invariants can only be used for extensions ( expression
:
contextInvariant.exists()
implies
type
=
'Extension',
xpath:
not(exists(f:contextInvariant))
or
(f:type/@value
=
'Extension'))
|
| StructureDefinition.type | |
| Element Id | StructureDefinition.type |
| Definition |
The type this structure describes. If the derivation kind is 'specialization' then this is the master definition for a type, and there is always one of these (a data type, an extension, a resource, including abstract ones). Otherwise the structure definition is a constraint on the stated type (and in this case, the type cannot be an abstract type). References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. "string" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models. |
| Control | 1..1 |
| Terminology Binding | FHIRDefinedType ( Extensible ) |
| Type |
|
| Summary | true |
| Comments |
Note that in the case of constraints, the type could be determined by chasing through the baseDefinition references until a concrete structure (derivation = specialization) is reached, or by looking at the path of the first element in the snapshot - if present - but providing the type directly makes for simpler tooling and indexing. The type must match the elements defined in the differential and the snapshot. For all FHIR defined types, the path name of the element will start with the type name. For logical models, where the type is a URL, the type name SHOULD start with the tail of the type URL where required. |
| Invariants |
Affect
this
element
:
kind
!=
'logical'
implies
snapshot.empty()
or
snapshot.element.first().path
=
type,
xpath:
(f:kind/@value
=
'logical')
or
not(exists(f:snapshot))
or
(f:type/@value
=
f:snapshot/f:element[1]/f:path/@value))
|
| StructureDefinition.baseDefinition | |
| Element Id | StructureDefinition.baseDefinition |
| Definition |
An absolute URI that is the base structure from which this type is derived, either by specialization or constraint. |
| Control | 0..1 |
| Type |
|
| Hierarchy | This reference is part of a strict Hierarchy |
| Summary | true |
| Comments |
If
differential
constraints
are
specified
in
this
structure,
they
are
applied
to
the
base
in
a
|
| Invariants |
Affect
this
element
sdf-4 : If the structure is not abstract, then there SHALL be a baseDefinition ( expression
:
abstract
=
true
or
baseDefinition.exists(),
xpath:
(f:abstract/@value=true())
or
exists(f:baseDefinition))
|
| StructureDefinition.derivation | |
| Element Id | StructureDefinition.derivation |
| Definition |
How the type relates to the baseDefinition. |
| Control | 0..1 |
| Terminology Binding | TypeDerivationRule ( Required ) |
| Type | code |
| Summary | true |
| Comments |
If
the
definition
is
a
specialization,
then
it
adds
new
elements
in
the
differential,
and
the
snapshot
includes
the
inherited
elements.
If
the
definition
is
a
constraint,
then
it
|
| StructureDefinition.snapshot | |
| Element Id | StructureDefinition.snapshot |
| Definition |
A
snapshot
view
is
expressed
in
a
|
| Control | 0..1 |
| Invariants |
Defined
on
this
element
sdf-15 : The first element in a snapshot has no type ( expression
:
sdf-3 : Each element definition in a snapshot must have a formal definition and cardinalities ( expression
:
sdf-8 : In any snapshot, all the elements must be in the specified
:
Affect this element sdf-6 : A structure must have either a differential, or a snapshot (or both) ( expression
:
snapshot.exists()
or
differential.exists(),
xpath:
exists(f:snapshot)
or
exists(f:differential))
|
| StructureDefinition.snapshot.element | |
| Element Id | StructureDefinition.snapshot.element |
| Definition |
Captures constraints on each element within the resource. |
| Control | 1..* |
| Type | ElementDefinition |
| Invariants |
Defined
on
this
element
sdf-10 : provide either a binding reference or a description (or both) ( expression :
binding.empty()
or
binding.valueSet.exists()
or
binding.description.exists(),
xpath:
not(exists(f:binding))
or
(exists(f:binding/f:valueSetUri)
or
exists(f:binding/f:valueSetReference))
or
exists(f:binding/f:description))
Affect this element sdf-3 : Each element definition in a snapshot must have a formal definition and cardinalities ( expression
:
|
| StructureDefinition.differential | |
| Element Id | StructureDefinition.differential |
| Definition |
A differential view is expressed relative to the base StructureDefinition - a statement of differences that it applies. |
| Control | 0..1 |
| Invariants |
Defined
on
this
element
sdf-15a : If the first element in a differential has no
:
element.first().path.contains('.').not()
implies
element.first().type.empty(),
xpath:
not(f:element[1][not(contains(f:path/@value,
'.'))]/f:type))
sdf-20 : No slicing on the root element ( expression
:
element.where(path.contains('.').not()).slicing.empty(),
xpath:
not(f:element[1]/f:slicing))
sdf-8a : In any differential, all the elements must be in the specified type ( expression
:
element.first().path.startsWith(%resource.type)
and
element.tail().all(path.startsWith(%resource.type&'.')),
xpath:
count(f:element)=count(f:element[f:path/@value=ancestor::f:StructureDefinition/f:type/@value
or
starts-with(f:path/@value,
concat(ancestor::f:StructureDefinition/f:type/@value,
'.'))]))
Affect this element sdf-6 : A structure must have either a differential, or a snapshot (or both) ( expression
:
snapshot.exists()
or
differential.exists(),
xpath:
exists(f:snapshot)
or
exists(f:differential))
|
| StructureDefinition.differential.element | |
| Element Id | StructureDefinition.differential.element |
| Definition |
Captures constraints on each element within the resource. |
| Control | 1..* |
| Type | ElementDefinition |