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.
|
Short
Display
Structural
Definition
Cardinality
Control
|
0..*
1..1
|
|
Type
|
CanonicalResource
DomainResource
|
|
Alternate
Names
|
Template;
Profile
|
Summary
false
Invariants
|
|
Defined
on
this
element
|
cnl-0
sdf-0
|
Warning
|
Name
should
be
usable
as
an
identifier
for
the
module
by
machine
processing
applications
such
as
code
generation
|
name.exists()
implies
name.matches('^[A-Z]([A-Za-z0-9_]){1,254}$')
name.matches('[A-Z]([A-Za-z0-9_]){0,254}')
|
|
sdf-1
|
Rule
|
Element
paths
must
be
unique
unless
the
structure
is
a
constraint
|
derivation
=
'constraint'
or
snapshot.element.select(path).isDistinct()
|
|
sdf-15a
|
Rule
|
If
the
first
element
in
a
differential
has
no
"."
in
the
path
and
it's
not
a
logical
model,
it
has
no
type
|
(kind!='logical'
and
differential.element.first().path.contains('.').not())
implies
differential.element.first().type.empty()
| |
sdf-4
|
Rule
|
If
the
structure
is
not
abstract,
then
there
SHALL
be
a
baseDefinition
|
abstract
=
true
or
baseDefinition.exists()
|
|
sdf-5
|
Rule
|
If
the
structure
defines
an
extension
then
the
structure
must
have
context
information
|
type
!=
'Extension'
or
derivation
=
'specialization'
or
(context.exists())
|
|
sdf-6
|
Rule
|
A
structure
must
have
either
a
differential,
or
a
snapshot
(or
both)
|
snapshot.exists()
or
differential.exists()
|
|
sdf-9
|
Rule
|
In
any
snapshot
or
differential,
no
label,
code
or
requirements
on
an
element
without
a
"."
in
the
path
(e.g.
the
first
element)
|
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()
| |
sdf-11
|
Rule
|
If
there's
a
type,
its
content
must
match
the
path
name
in
the
first
element
of
a
snapshot
|
kind
!=
'logical'
implies
snapshot.empty()
or
snapshot.element.first().path
=
type
|
|
sdf-14
|
Rule
|
All
element
definitions
must
have
an
id
|
snapshot.element.all(id.exists())
and
differential.element.all(id.exists())
|
|
sdf-15
|
Rule
|
The
first
element
in
a
snapshot
has
no
type
unless
model
is
a
logical
model.
|
kind!='logical'
implies
snapshot.element.first().type.empty()
|
sdf-15a
Rule
If
the
first
element
in
a
differential
has
no
"."
in
the
path
and
it's
not
a
logical
model,
it
has
no
type
(kind!='logical'
and
differential.element.first().path.contains('.').not())
implies
differential.element.first().type.empty()
sdf-9
Rule
In
any
snapshot
or
differential,
no
label,
code
or
requirements
on
an
element
without
a
"."
in
the
path
(e.g.
the
first
element)
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()
sdf-16
|
Rule
|
All
element
definitions
must
have
unique
ids
(snapshot)
|
snapshot.element.all(id.exists())
snapshot.element.all(id)
and
snapshot.element.id.trace('ids').isDistinct()
|
|
sdf-17
|
Rule
|
All
element
definitions
must
have
unique
ids
(diff)
|
differential.element.all(id.exists())
differential.element.all(id)
and
differential.element.id.trace('ids').isDistinct()
|
|
sdf-18
|
Rule
|
Context
Invariants
can
only
be
used
for
extensions
|
contextInvariant.exists()
implies
type
=
'Extension'
|
|
sdf-19
|
Rule
|
FHIR
Specification
models
only
use
FHIR
defined
types
|
url.startsWith('http://hl7.org/fhir/StructureDefinition')
implies
(differential
|
snapshot).element.type.code.all(matches('^[a-zA-Z0-9]+$')
or
matches('^http:\\/\\/hl7\\.org\\/fhirpath\\/System\\.[A-Z][A-Za-z]+$'))
(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]+$')))
|
|
sdf-21
|
Rule
|
Default
values
can
only
be
specified
on
specializations
|
differential.element.defaultValue.exists()
implies
(derivation
=
'specialization')
|
|
sdf-22
|
Rule
|
FHIR
Specification
models
never
have
default
values
|
url.startsWith('http://hl7.org/fhir/StructureDefinition')
implies
(snapshot.element.defaultValue.empty()
and
differential.element.defaultValue.empty())
|
|
sdf-23
|
Rule
|
No
slice
name
on
root
|
(snapshot
|
differential).element.all(path.contains('.').not()
implies
sliceName.empty())
|
sdf-27
Rule
If
there's
a
base
definition,
there
must
be
a
derivation
baseDefinition.exists()
implies
derivation.exists()
sdf-29
Warning
Elements
in
Resources
must
have
a
min
cardinality
or
0
or
1
and
a
max
cardinality
of
1
or
*
((kind
in
'resource'
|
'complex-type')
and
(derivation
=
'specialization'))
implies
differential.element.where((min
!=
0
and
min
!=
1)
or
(max
!=
'1'
and
max
!=
'*')).empty()
|
|
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
instance;
also
called
its
canonical
identifier.
This
SHOULD
be
globally
unique
and
SHOULD
be
a
literal
address
at
which
at
which
an
authoritative
instance
of
this
structure
definition
is
(or
will
be)
published.
This
URL
can
be
the
target
of
a
canonical
reference.
It
SHALL
remain
the
same
when
the
structure
definition
is
stored
on
different
servers.
|
Short
Display
Canonical
identifier
for
this
structure
definition,
represented
as
a
URI
(globally
unique)
Cardinality
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
urn:oid:
but
real
http:
addresses
are
preferred.
Multiple
instances
may
share
the
same
URL
if
they
have
a
distinct
version.
The
determination
of
when
to
create
a
new
version
of
a
resource
(same
url,
new
version)
vs.
defining
a
new
artifact
is
up
to
the
author.
Considerations
for
making
this
decision
are
found
in
Technical
and
Business
Versions
.
In
some
cases,
the
resource
can
no
longer
be
found
at
the
stated
url,
but
the
url
itself
cannot
change.
Implementations
can
use
the
meta.source
element
to
indicate
where
the
current
master
source
of
the
resource
can
be
found.
Invariants
Defined
on
this
element
cnl-1
Warning
URL
should
not
contain
|
or
#
-
these
characters
make
processing
canonical
references
problematic
exists()
implies
matches('^[^|#
]+$')
Affect
this
element
sdf-19
Rule
FHIR
Specification
models
only
use
FHIR
defined
types
url.startsWith('http://hl7.org/fhir/StructureDefinition')
implies
(differential
|
snapshot).element.type.code.all(matches('^[a-zA-Z0-9]+$')
or
matches('^http:\\/\\/hl7\\.org\\/fhirpath\\/System\\.[A-Z][A-Za-z]+$'))
sdf-22
Rule
FHIR
Specification
models
never
have
default
values
url.startsWith('http://hl7.org/fhir/StructureDefinition')
implies
(snapshot.element.defaultValue.empty()
and
differential.element.defaultValue.empty())
|
|
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.
|
Short
Display
Additional
identifier
for
the
structure
definition
Note
|
This
is
a
business
identifier,
identifer,
not
a
resource
identifier
(see
discussion
)
|
Cardinality
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,
and
can
then
identify
this
structure
definition
outside
of
FHIR,
where
it
is
not
possible
to
use
the
logical
URI.
|
|
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,
so
authors
are
encouraged
to
populate
the
StructureDefinition.versionAlgorithm[x]
element
to
enable
comparisons.
If
there
is
no
managed
version
available,
authors
can
consider
using
ISO
date/time
syntax
(e.g.,
'2023-01-01').
sequence.
|
Short
Display
Business
version
of
the
structure
definition
Note
|
This
is
a
business
versionId,
not
a
resource
version
id
(see
discussion
)
|
Cardinality
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
reference
to
a
particular
business
version
of
the
structure
definition
with
the
format
[url]|[version].
The
version
SHOULD
NOT
contain
a
'#'
-
see
Business
Version
.
StructureDefinition.versionAlgorithm[x]
Element
Id
StructureDefinition.versionAlgorithm[x]
Definition
Indicates
the
mechanism
used
to
compare
versions
to
determine
which
is
more
current.
Short
Display
How
to
compare
versions
Cardinality
0..1
Terminology
Binding
Version
Algorithm
(
Extensible
)
Type
string
|
Coding
[x]
Note
See
Choice
of
Datatypes
for
further
information
about
how
to
use
[x]
Summary
true
Comments
If
set
as
a
string,
this
is
a
FHIRPath
expression
that
has
two
additional
context
variables
passed
in
-
%version1
and
%version2
and
will
return
a
negative
number
if
version1
is
newer,
a
positive
number
if
version2
and
a
0
if
the
version
ordering
can't
be
successfully
be
determined.
|
|
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.
|
Short
Display
Name
for
this
structure
definition
(computer
friendly)
Cardinality
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
alphanumeric
type
name
to
ensure
that
it
is
machine-processing
friendly.Some
Examples:
-
O2SatObservation
-
PresentationReport
-
Immunization2
-
AcmeAdmissionRecordOld.
|
|
Invariants
|
|
Affect
this
element
|
cnl-0
inv-0
|
Warning
|
Name
should
be
usable
as
an
identifier
for
the
module
by
machine
processing
applications
such
as
code
generation
|
name.exists()
implies
name.matches('^[A-Z]([A-Za-z0-9_]){1,254}$')
name.matches('[A-Z]([A-Za-z0-9_]){0,254}')
|
|
|
StructureDefinition.title
|
|
Element
Id
|
StructureDefinition.title
|
|
Definition
|
A
short,
descriptive,
user-friendly
title
for
the
structure
definition.
|
Short
Display
Name
for
this
structure
definition
(human
friendly)
Cardinality
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
name
but
can
always
fall
back
to
it.
The
title
also
corresponds
to
the
label
for
the
root
element.
|
|
StructureDefinition.status
|
|
Element
Id
|
StructureDefinition.status
|
|
Definition
|
The
status
of
this
structure
definition.
Enables
tracking
the
life-cycle
of
the
content.
|
Short
Display
draft
|
active
|
retired
|
unknown
Cardinality
Control
|
1..1
|
|
Terminology
Binding
|
PublicationStatus
(
Required
)
|
|
Type
|
code
|
|
Is
Modifier
|
true
(Reason:
This
is
labeled
as
"Is
Modifier"
because
applications
should
not
use
a
retired
{{title}}
without
due
consideration)
|
|
Summary
|
true
|
|
Comments
|
Allows
filtering
of
structure
definitions
that
are
appropriate
for
use
versus
not.
See
guidance
around
(not)
making
local
changes
to
elements
here
.
|
|
StructureDefinition.experimental
|
|
Element
Id
|
StructureDefinition.experimental
|
|
Definition
|
A
Boolean
value
to
indicate
that
this
structure
definition
is
authored
for
testing
purposes
(or
education/evaluation/marketing)
and
is
not
intended
to
be
used
for
genuine
usage.
|
Short
Display
For
testing
purposes,
not
real
usage
Cardinality
Control
|
0..1
|
|
Type
|
boolean
|
Meaning
if
Missing
If
absent,
this
resource
is
treated
as
though
it
is
not
experimental.
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
definitions
that
are
appropriate
for
use
versus
not.
|
|
StructureDefinition.date
|
|
Element
Id
|
StructureDefinition.date
|
|
Definition
|
The
date
(and
optionally
time)
when
the
structure
definition
was
last
significantly
changed.
published.
The
date
must
change
when
the
business
version
changes
and
it
must
change
if
the
status
code
changes.
In
addition,
it
should
change
when
the
substantive
content
of
the
structure
definition
changes.
|
Short
Display
Date
last
changed
Cardinality
Control
|
0..1
|
|
Type
|
dateTime
|
|
Alternate
Names
|
Revision
Date
|
|
Summary
|
true
|
|
Comments
|
The
date
is
often
not
tracked
until
the
resource
is
published,
but
may
be
present
on
draft
content.
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.
See
guidance
around
(not)
making
local
changes
to
elements
here
.
|
|
StructureDefinition.publisher
|
|
Element
Id
|
StructureDefinition.publisher
|
|
Definition
|
The
name
of
the
organization
or
individual
responsible
for
the
release
and
ongoing
maintenance
of
that
published
the
structure
definition.
|
Short
Display
Name
of
the
publisher/steward
(organization
or
individual)
Cardinality
Control
|
0..1
|
|
Type
|
string
|
|
Requirements
|
Helps
establish
the
"authority/credibility"
of
the
structure
definition.
May
also
allow
for
contact.
|
|
Summary
|
true
|
|
Comments
|
Usually
an
organization
but
may
be
an
individual.
The
publisher
(or
steward)
of
the
structure
definition
is
the
organization
or
individual
primarily
responsible
for
the
maintenance
and
upkeep
of
the
structure
definition.
This
is
not
necessarily
the
same
individual
or
organization
that
developed
and
initially
authored
the
content.
The
publisher
is
the
primary
point
of
contact
for
questions
or
issues
with
the
structure
definition.
This
item
SHOULD
be
populated
unless
the
information
is
available
from
context.
|
|
StructureDefinition.contact
|
|
Element
Id
|
StructureDefinition.contact
|
|
Definition
|
Contact
details
to
assist
a
user
in
finding
and
communicating
with
the
publisher.
|
Short
Display
Contact
details
for
the
publisher
Cardinality
Control
|
0..*
|
|
Type
|
ContactDetail
|
|
Summary
|
true
|
|
Comments
|
May
be
a
web
site,
an
email
address,
a
telephone
number,
etc.
See
guidance
around
(not)
making
local
changes
to
elements
here
.
|
|
StructureDefinition.description
|
|
Element
Id
|
StructureDefinition.description
|
|
Definition
|
A
free
text
natural
language
description
of
the
structure
definition
from
a
consumer's
perspective.
|
Short
Display
Natural
language
description
of
the
structure
definition
Cardinality
Control
|
0..1
|
|
Type
|
markdown
|
Summary
false
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
structure
definition
is
presumed
to
be
the
predominant
language
in
the
place
the
structure
definition
was
created).
|
|
StructureDefinition.useContext
|
|
Element
Id
|
StructureDefinition.useContext
|
|
Definition
|
The
content
was
developed
with
a
focus
and
intent
of
supporting
the
contexts
that
are
listed.
These
contexts
may
be
general
categories
(gender,
age,
...)
or
may
be
references
to
specific
programs
(insurance
plans,
studies,
...)
and
terms
may
be
used
to
assist
with
indexing
and
searching
for
appropriate
structure
definition
instances.
|
Short
Display
The
context
that
the
content
is
intended
to
support
Cardinality
Control
|
0..*
|
|
Type
|
UsageContext
|
|
Requirements
|
Assist
in
searching
for
appropriate
content.
|
|
Summary
|
true
|
|
Comments
|
When
multiple
useContexts
are
specified,
there
is
no
expectation
that
all
or
any
of
the
contexts
apply.
|
|
StructureDefinition.jurisdiction
|
Standards
Status
This
element
has
a
standards
status
of
"Deprecated"
which
is
different
from
the
status
of
the
whole
resource
|
Element
Id
|
StructureDefinition.jurisdiction
|
|
Definition
|
A
legal
or
geographic
region
in
which
the
structure
definition
is
intended
to
be
used.
|
Short
Display
Intended
jurisdiction
for
structure
definition
(if
applicable)
Cardinality
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.
DEPRECATION
NOTE:
For
consistency,
implementations
are
encouraged
to
migrate
to
using
the
new
'jurisdiction'
code
in
the
useContext
element.
(I.e.
useContext.code
indicating
http://terminology.hl7.org/CodeSystem/usage-context-type#jurisdiction
and
useContext.valueCodeableConcept
indicating
the
jurisdiction.)
|
|
StructureDefinition.purpose
|
|
Element
Id
|
StructureDefinition.purpose
|
|
Definition
|
Explanation
of
why
this
structure
definition
is
needed
and
why
it
has
been
designed
as
it
has.
|
Short
Display
Why
this
structure
definition
is
defined
Cardinality
Control
|
0..1
|
|
Type
|
markdown
|
Summary
false
Comments
|
This
element
does
not
describe
the
usage
of
the
structure
definition.
Instead,
it
provides
traceability
of
''why''
the
resource
is
either
needed
or
''why''
it
is
defined
as
it
is.
This
may
be
used
to
point
to
source
materials
or
specifications
that
drove
the
structure
of
this
structure
definition.
|
|
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.
The
short
copyright
declaration
(e.g.
(c)
'2015+
xyz
organization'
should
be
sent
in
the
copyrightLabel
element.
|
Short
Display
Use
and/or
publishing
restrictions
Cardinality
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
|
Summary
false
Comments
...
StructureDefinition.copyrightLabel
Element
Id
StructureDefinition.copyrightLabel
Definition
A
short
string
(<50
characters),
suitable
for
inclusion
in
a
page
footer
that
identifies
the
copyright
holder,
effective
period,
and
optionally
whether
rights
are
resctricted.
(e.g.
'All
rights
reserved',
'Some
rights
reserved').
Short
Display
Copyright
holder
and
year(s)
Cardinality
0..1
Type
string
Requirements
Defines
the
content
expected
to
be
rendered
in
all
representations
of
the
artifact.
Summary
false
Comments
The
(c)
symbol
should
NOT
be
included
in
this
string.
It
will
be
added
by
software
when
rendering
the
notation.
Full
details
about
licensing,
restrictions,
warrantees,
etc.
goes
in
the
more
general
'copyright'
element.
StructureDefinition.keyword
|
Standards
Status
This
element
has
a
standards
status
of
"Deprecated"
which
is
different
from
the
status
of
the
whole
resource
Use
the
artifact-topic
extension
instead
|
Element
Id
|
StructureDefinition.keyword
|
|
Definition
|
(DEPRECATED)
A
set
of
key
words
or
terms
from
external
terminologies
that
may
be
used
to
assist
with
indexing
and
searching
of
templates
nby
describing
the
use
of
this
structure
definition,
or
the
content
it
describes.
|
Short
Display
Assist
with
indexing
and
finding
Cardinality
Control
|
0..*
|
|
Terminology
Binding
|
Structure
Definition
Use
Codes
/
Keywords
(
Extensible
)
|
|
Type
|
Coding
|
|
Requirements
|
Assist
in
searching
for
appropriate
StructureDefinitions.
|
|
Summary
|
true
|
Comments
Note
that
this
element
is
deprecated.
Use
the
http://hl7.org/fhir/StructureDefinition/artifact-topic
extension
instead.
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
4.6.0.
3.5.0.
for
this
version.
|
Short
Display
FHIR
Version
this
StructureDefinition
targets
Cardinality
Control
|
0..1
|
|
Terminology
Binding
|
FHIRVersion
FHIRVersions
(
Required
)
|
|
Type
|
code
id
|
|
Summary
|
true
|
|
Comments
|
A
StructureDefinition
does
not
need
to
specify
the
target
it
applies
to
as
StructureDefinitions
will
often
be
valid
across
multiple
versions
of
FHIR.
FHIR
tooling
can
determine
whether
a
StructureDefinition
is
consistent
with
a
particular
StructureDefinition
if
desired.
|
|
StructureDefinition.mapping
|
|
Element
Id
|
StructureDefinition.mapping
|
|
Definition
|
An
external
specification
that
the
content
is
mapped
to.
|
Short
Display
External
specification
that
the
content
is
mapped
to
Cardinality
Control
|
0..*
|
Summary
false
Invariants
|
|
Defined
on
this
element
|
|
sdf-2
|
Rule
|
Must
have
at
least
a
name
or
a
uri
(or
both)
|
name.exists()
or
uri.exists()
|
|
|
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.
|
Short
Display
Internal
id
when
this
mapping
is
used
Cardinality
Control
|
1..1
|
|
Type
|
id
|
Summary
false
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.
|
Short
Display
Identifies
what
this
mapping
refers
to
Cardinality
Control
|
0..1
|
|
Type
|
uri
|
Summary
false
Comments
|
A
formal
identity
for
the
specification
being
mapped
to
helps
with
identifying
maps
consistently.
|
|
Invariants
|
|
Affect
this
element
|
|
sdf-2
|
Rule
|
Must
have
at
least
a
name
or
a
uri
(or
both)
|
name.exists()
or
uri.exists()
|
|
|
StructureDefinition.mapping.name
|
|
Element
Id
|
StructureDefinition.mapping.name
|
|
Definition
|
A
name
for
the
specification
that
is
being
mapped
to.
|
Short
Display
Names
what
this
mapping
refers
to
Cardinality
Control
|
0..1
|
|
Type
|
string
|
Summary
false
Invariants
|
|
Affect
this
element
|
|
sdf-2
|
Rule
|
Must
have
at
least
a
name
or
a
uri
(or
both)
|
name.exists()
or
uri.exists()
|
|
|
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.
|
Short
Display
Versions,
Issues,
Scope
limitations
etc
Cardinality
Control
|
0..1
|
|
Type
|
string
|
Summary
false
StructureDefinition.kind
|
|
Element
Id
|
StructureDefinition.kind
|
|
Definition
|
Defines
the
kind
of
structure
that
this
definition
is
describing.
|
Short
Display
primitive-type
|
complex-type
|
resource
|
logical
Cardinality
Control
|
1..1
|
|
Terminology
Binding
|
Structure
Definition
Kind
StructureDefinitionKind
(
Required
)
|
|
Type
|
code
|
|
Summary
|
true
|
Invariants
Affect
this
element
sdf-15a
Rule
If
the
first
element
in
a
differential
has
no
"."
in
the
path
and
it's
not
a
logical
model,
it
has
no
type
(kind!='logical'
and
differential.element.first().path.contains('.').not())
implies
differential.element.first().type.empty()
sdf-15
Rule
The
first
element
in
a
snapshot
has
no
type
unless
model
is
a
logical
model.
kind!='logical'
implies
snapshot.element.first().type.empty()
sdf-11
Rule
If
there's
a
type,
its
content
must
match
the
path
name
in
the
first
element
of
a
snapshot
kind
!=
'logical'
implies
snapshot.empty()
or
snapshot.element.first().path
=
type
sdf-29
Warning
Elements
in
Resources
must
have
a
min
cardinality
or
0
or
1
and
a
max
cardinality
of
1
or
*
((kind
in
'resource'
|
'complex-type')
and
(derivation
=
'specialization'))
implies
differential.element.where((min
!=
0
and
min
!=
1)
or
(max
!=
'1'
and
max
!=
'*')).empty()
sdf-8
Rule
All
snapshot
elements
must
start
with
the
StructureDefinition's
specified
type
for
non-logical
models,
or
with
the
same
type
name
for
logical
models
(%resource.kind
=
'logical'
or
element.first().path
=
%resource.type)
and
element.tail().all(path.startsWith(%resource.snapshot.element.first().path&'.'))
sdf-3
Rule
Each
element
definition
in
a
snapshot
must
have
a
formal
definition
and
cardinalities,
unless
model
is
a
logical
model
%resource.kind
=
'logical'
or
element.all(definition.exists()
and
min.exists()
and
max.exists())
sdf-8a
Rule
In
any
differential,
all
the
elements
must
start
with
the
StructureDefinition's
specified
type
for
non-logical
models,
or
with
the
same
type
name
for
logical
models
(%resource.kind
=
'logical'
or
element.first().path.startsWith(%resource.type))
and
(element.tail().empty()
or
element.tail().all(path.startsWith(%resource.differential.element.first().path.replaceMatches('\\..*','')&'.')))
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.
|
Short
Display
Whether
the
structure
is
abstract
Cardinality
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
"abstract"
will
rest
with
the
author,
depending
how
the
logical
model
is
used.
Flagging
a
constraint
structure
as
abstract
conveys
design
intent
but
makes
no
difference
to
how
the
structure
definition
is
handled.
Note
that
inline
declared
elements
that
are
given
the
type
"Element"
in
the
StructureDefinition,
but
have
children
described,
are
anonymous
concrete
types
that
specialize
Element.
|
Invariants
Affect
this
element
sdf-4
Rule
If
the
structure
is
not
abstract,
then
there
SHALL
be
a
baseDefinition
abstract
=
true
or
baseDefinition.exists()
StructureDefinition.context
|
|
Element
Id
|
StructureDefinition.context
|
|
Definition
|
Identifies
the
types
of
resource
or
data
type
elements
to
which
the
extension
can
be
applied.
For
more
guidance
on
using
the
'context'
element,
see
the
defining
extensions
page
.
|
Short
Display
If
an
extension,
where
it
can
be
used
in
instances
Cardinality
Control
|
0..*
|
|
Summary
|
true
|
|
Invariants
|
|
Affect
this
element
|
|
sdf-5
|
Rule
|
If
the
structure
defines
an
extension
then
the
structure
must
have
context
information
|
type
!=
'Extension'
or
derivation
=
'specialization'
or
(context.exists())
|
|
|
StructureDefinition.context.type
|
|
Element
Id
|
StructureDefinition.context.type
|
|
Definition
|
Defines
how
to
interpret
the
expression
that
defines
what
the
context
of
the
extension
is.
|
Short
Display
fhirpath
|
element
|
extension
Cardinality
Control
|
1..1
|
|
Terminology
Binding
|
Extension
Context
Type
ExtensionContextType
(
Required
)
|
|
Type
|
code
|
|
Summary
|
true
|
|
StructureDefinition.context.expression
|
|
Element
Id
|
StructureDefinition.context.expression
|
|
Definition
|
An
expression
that
defines
where
an
extension
can
be
used
in
resources.
|
Short
Display
Where
the
extension
can
be
used
in
instances
Cardinality
Control
|
1..1
|
|
Type
|
string
|
|
Summary
|
true
|
|
StructureDefinition.contextInvariant
|
|
Element
Id
|
StructureDefinition.contextInvariant
|
|
Definition
|
A
set
of
rules
as
FHIRPath
Invariants
about
when
the
extension
can
be
used
(e.g.
co-occurrence
variants
for
the
extension).
All
the
rules
must
be
true.
|
Short
Display
FHIRPath
invariants
-
when
the
extension
can
be
used
Cardinality
Control
|
0..*
|
|
Type
|
string
|
|
Summary
|
true
|
|
Comments
|
The
rules
are
only
evaluated
when
the
extension
is
present.
When
evaluating
the
invariant,
the
FHIRPath
focus
is
the
element
that
holds
the
extension,
and
%extension
refers
to
the
extension
itself.
|
|
Invariants
|
|
Affect
this
element
|
|
sdf-18
|
Rule
|
Context
Invariants
can
only
be
used
for
extensions
|
contextInvariant.exists()
implies
type
=
'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,
where
they
are
required.
models.
|
Short
Display
Type
defined
or
constrained
by
this
structure
Cardinality
Control
|
1..1
|
|
Terminology
Binding
|
All
FHIR
Types
FHIRDefinedType
(
Extensible
)
|
|
Type
|
uri
|
|
Summary
|
true
|
|
Comments
|
Note
that
in
the
case
of
constraints,
the
type
could
be
determined
by
chasing
through
the
baseDefinition
references
until
a
type
defining
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
SHALL
be
is
a
fully
specified
URL,
the
type
name
SHOULD
start
with
the
final
path
segment
tail
of
the
type
URL
where
required.
E.g.
If
the
type
was
"http://example.org/fhir/MyLogicalModelType",
the
type
name
should
start
with
'MyLogicalModelType'.
|
|
Invariants
|
|
Affect
this
element
|
sdf-18
Rule
Context
Invariants
can
only
be
used
for
extensions
contextInvariant.exists()
implies
type
=
'Extension'
sdf-11
|
Rule
|
If
there's
a
type,
its
content
must
match
the
path
name
in
the
first
element
of
a
snapshot
|
kind
!=
'logical'
implies
snapshot.empty()
or
snapshot.element.first().path
=
type
|
sdf-5
Rule
If
the
structure
defines
an
extension
then
the
structure
must
have
context
information
type
!=
'Extension'
or
derivation
=
'specialization'
or
(context.exists())
sdf-8
Rule
All
snapshot
elements
must
start
with
the
StructureDefinition's
specified
type
for
non-logical
models,
or
with
the
same
type
name
for
logical
models
(%resource.kind
=
'logical'
or
element.first().path
=
%resource.type)
and
element.tail().all(path.startsWith(%resource.snapshot.element.first().path&'.'))
sdf-8a
Rule
In
any
differential,
all
the
elements
must
start
with
the
StructureDefinition's
specified
type
for
non-logical
models,
or
with
the
same
type
name
for
logical
models
(%resource.kind
=
'logical'
or
element.first().path.startsWith(%resource.type))
and
(element.tail().empty()
or
element.tail().all(path.startsWith(%resource.differential.element.first().path.replaceMatches('\\..*','')&'.')))
|
|
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.
|
Short
Display
Definition
that
this
type
is
constrained/specialized
from
Cardinality
Control
|
0..1
|
|
Type
|
canonical
(
StructureDefinition
)
|
|
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
"differential"
fashion.
If
there
is
no
base,
then
the
differential
constraints
cannot
be
provided
(snapshot
only).
Differential
structures
are
useful
for
the
editing
perspective,
and
snapshot
structures
are
suitable
for
operational
use.
The
FHIR
Project
provides
a
number
of
tools/services
to
populate
snapshots
from
differential
constraints.
Logical
Models
have
a
base
of
"Base",
"Element"
or
another
logical
model.
|
|
Invariants
|
|
Affect
this
element
|
|
sdf-4
|
Rule
|
If
the
structure
is
not
abstract,
then
there
SHALL
be
a
baseDefinition
|
abstract
=
true
or
baseDefinition.exists()
|
sdf-27
Rule
If
there's
a
base
definition,
there
must
be
a
derivation
baseDefinition.exists()
implies
derivation.exists()
|
|
StructureDefinition.derivation
|
|
Element
Id
|
StructureDefinition.derivation
|
|
Definition
|
How
the
type
relates
to
the
baseDefinition.
|
Short
Display
specialization
|
constraint
-
How
relates
to
base
definition
Cardinality
Control
|
0..1
|
|
Terminology
Binding
|
Type
Derivation
Rule
TypeDerivationRule
(
Required
)
|
|
Type
|
code
|
|
Summary
|
true
|
|
Comments
|
If
the
definition
is
a
specialization,
then
it
adds
to
the
differential
new
elements
and
optionally
additional
rules
to
an
existing
concrete
type,
in
the
differential,
and
the
snapshot
includes
the
inherited
elements
and
rules.
elements.
If
the
definition
is
a
constraint,
then
it
cannot
define
new
elements,
it
can
only
make
new
rules
about
existing
content
(see
Profiling
Resources
).
|
Invariants
Affect
this
element
sdf-1
Rule
Element
paths
must
be
unique
unless
the
structure
is
a
constraint
derivation
=
'constraint'
or
snapshot.element.select(path).isDistinct()
sdf-21
Rule
Default
values
can
only
be
specified
on
specializations
differential.element.defaultValue.exists()
implies
(derivation
=
'specialization')
sdf-5
Rule
If
the
structure
defines
an
extension
then
the
structure
must
have
context
information
type
!=
'Extension'
or
derivation
=
'specialization'
or
(context.exists())
sdf-27
Rule
If
there's
a
base
definition,
there
must
be
a
derivation
baseDefinition.exists()
implies
derivation.exists()
sdf-29
Warning
Elements
in
Resources
must
have
a
min
cardinality
or
0
or
1
and
a
max
cardinality
of
1
or
*
((kind
in
'resource'
|
'complex-type')
and
(derivation
=
'specialization'))
implies
differential.element.where((min
!=
0
and
min
!=
1)
or
(max
!=
'1'
and
max
!=
'*')).empty()
StructureDefinition.snapshot
|
|
Element
Id
|
StructureDefinition.snapshot
|
|
Definition
|
A
snapshot
view
is
expressed
in
a
standalone
form
that
can
be
used
and
interpreted
without
considering
the
base
StructureDefinition.
|
Short
Display
Snapshot
view
of
the
structure
Cardinality
Control
|
0..1
|
Summary
false
Invariants
|
|
Defined
on
this
element
|
|
sdf-3
|
Rule
|
Each
element
definition
in
a
snapshot
must
have
a
formal
definition
and
cardinalities,
unless
model
is
a
logical
model
cardinalities
|
%resource.kind
=
'logical'
or
element.all(definition.exists()
and
min.exists()
and
max.exists())
|
|
sdf-8
|
Rule
|
All
snapshot
elements
must
start
with
be
in
the
StructureDefinition's
specified
type
for
non-logical
models,
or
with
the
same
type
name
for
logical
models
|
(%resource.kind
=
'logical'
or
element.first().path
=
%resource.type)
and
element.tail().all(path.startsWith(%resource.snapshot.element.first().path&'.'))
sdf-24
Rule
For
CodeableReference
elements,
target
profiles
must
be
listed
on
the
CodeableReference,
not
the
CodeableReference.reference
element.where(type.where(code='Reference').exists()
and
path.endsWith('.reference')
and
type.targetProfile.exists()
and
(path.substring(0,$this.path.length()-10)
in
%context.element.where(type.where(code='CodeableReference').exists()).path)).exists().not()
sdf-25
Rule
For
CodeableReference
elements,
bindings
must
be
listed
on
the
CodeableReference,
not
the
CodeableReference.concept
element.where(type.where(code='CodeableConcept').exists()
and
path.endsWith('.concept')
and
binding.exists()
%resource.type
and
(path.substring(0,$this.path.length()-8)
in
%context.element.where(type.where(code='CodeableReference').exists()).path)).exists().not()
sdf-26
Guideline
The
root
element
of
a
profile
should
not
have
mustSupport
=
true
$this.where(element[0].mustSupport='true').exists().not()
element.tail().all(path.startsWith(%resource.type&'.'))
This
is
(only)
a
best
practice
guideline
because:
It
is
bad
practice
to
set
the
root
element
of
a
profile
to
'mustSupport'
as
mustSupport
should
always
be
determined
by
the
element
referencing
a
type.
The
designer
of
a
StructureDefinition
cannot
know
all
circumstances
in
which
a
type
or
profile
might
be
used
|
|
sdf-8b
|
Rule
|
All
snapshot
elements
must
have
a
base
definition
|
element.all(base.exists())
|
|
Affect
this
element
|
sdf-11
Rule
If
there's
a
type,
its
content
must
match
the
path
name
in
the
first
element
of
a
snapshot
kind
!=
'logical'
implies
snapshot.empty()
or
snapshot.element.first().path
=
type
sdf-1
Rule
Element
paths
must
be
unique
unless
the
structure
is
a
constraint
derivation
=
'constraint'
or
snapshot.element.select(path).isDistinct()
sdf-6
|
Rule
|
A
structure
must
have
either
a
differential,
or
a
snapshot
(or
both)
|
snapshot.exists()
or
differential.exists()
|
|
|
StructureDefinition.snapshot.element
|
|
Element
Id
|
StructureDefinition.snapshot.element
|
|
Definition
|
Captures
constraints
on
each
element
within
the
resource.
|
Short
Display
Definition
of
elements
in
the
resource
(if
no
StructureDefinition)
Cardinality
Control
|
1..*
|
|
Type
|
ElementDefinition
|
Summary
false
Invariants
|
|
Defined
on
this
element
|
|
sdf-10
|
Rule
|
provide
either
a
binding
reference
or
a
description
(or
both)
|
binding.empty()
or
binding.valueSet.exists()
or
binding.description.exists()
|
sdf-28
Rule
If
there
are
no
discriminators,
there
must
be
a
definition
slicing.exists().not()
or
(slicing.discriminator.exists()
or
slicing.description.exists())
Affect
this
element
|
sdf-9
Rule
In
any
snapshot
or
differential,
no
label,
code
or
requirements
on
an
element
without
a
"."
in
the
path
(e.g.
the
first
element)
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()
sdf-19
Rule
FHIR
Specification
models
only
use
FHIR
defined
types
url.startsWith('http://hl7.org/fhir/StructureDefinition')
implies
(differential
|
snapshot).element.type.code.all(matches('^[a-zA-Z0-9]+$')
or
matches('^http:\\/\\/hl7\\.org\\/fhirpath\\/System\\.[A-Z][A-Za-z]+$'))
sdf-16
Rule
All
element
definitions
must
have
unique
ids
(snapshot)
snapshot.element.all(id.exists())
and
snapshot.element.id.trace('ids').isDistinct()
sdf-15
Rule
The
first
element
in
a
snapshot
has
no
type
unless
model
is
a
logical
model.
kind!='logical'
implies
snapshot.element.first().type.empty()
sdf-23
Rule
No
slice
name
on
root
(snapshot
|
differential).element.all(path.contains('.').not()
implies
sliceName.empty())
sdf-11
Rule
If
there's
a
type,
its
content
must
match
the
path
name
in
the
first
element
of
a
snapshot
kind
!=
'logical'
implies
snapshot.empty()
or
snapshot.element.first().path
=
type
sdf-22
Rule
FHIR
Specification
models
never
have
default
values
url.startsWith('http://hl7.org/fhir/StructureDefinition')
implies
(snapshot.element.defaultValue.empty()
and
differential.element.defaultValue.empty())
sdf-14
Rule
All
element
definitions
must
have
an
id
snapshot.element.all(id.exists())
and
differential.element.all(id.exists())
sdf-1
Rule
Element
paths
must
be
unique
unless
the
structure
is
a
constraint
derivation
=
'constraint'
or
snapshot.element.select(path).isDistinct()
sdf-8
Rule
All
snapshot
elements
must
start
with
the
StructureDefinition's
specified
type
for
non-logical
models,
or
with
the
same
type
name
for
logical
models
(%resource.kind
=
'logical'
or
element.first().path
=
%resource.type)
and
element.tail().all(path.startsWith(%resource.snapshot.element.first().path&'.'))
sdf-3
|
Rule
|
Each
element
definition
in
a
snapshot
must
have
a
formal
definition
and
cardinalities,
unless
model
is
a
logical
model
cardinalities
|
%resource.kind
=
'logical'
or
element.all(definition.exists()
and
min.exists()
and
max.exists())
|
sdf-8b
Rule
All
snapshot
elements
must
have
a
base
definition
element.all(base.exists())
sdf-24
Rule
For
CodeableReference
elements,
target
profiles
must
be
listed
on
the
CodeableReference,
not
the
CodeableReference.reference
element.where(type.where(code='Reference').exists()
and
path.endsWith('.reference')
and
type.targetProfile.exists()
and
(path.substring(0,$this.path.length()-10)
in
%context.element.where(type.where(code='CodeableReference').exists()).path)).exists().not()
sdf-25
Rule
For
CodeableReference
elements,
bindings
must
be
listed
on
the
CodeableReference,
not
the
CodeableReference.concept
element.where(type.where(code='CodeableConcept').exists()
and
path.endsWith('.concept')
and
binding.exists()
and
(path.substring(0,$this.path.length()-8)
in
%context.element.where(type.where(code='CodeableReference').exists()).path)).exists().not()
sdf-26
Guideline
The
root
element
of
a
profile
should
not
have
mustSupport
=
true
$this.where(element[0].mustSupport='true').exists().not()
This
is
(only)
a
best
practice
guideline
because:
It
is
bad
practice
to
set
the
root
element
of
a
profile
to
'mustSupport'
as
mustSupport
should
always
be
determined
by
the
element
referencing
a
type.
The
designer
of
a
StructureDefinition
cannot
know
all
circumstances
in
which
a
type
or
profile
might
be
used
|
|
StructureDefinition.differential
|
|
Element
Id
|
StructureDefinition.differential
|
|
Definition
|
A
differential
view
is
expressed
relative
to
the
base
StructureDefinition
-
a
statement
of
differences
that
it
applies.
|
Short
Display
Differential
view
of
the
structure
Cardinality
Control
|
0..1
|
Summary
false
Invariants
|
|
Defined
on
this
element
|
|
sdf-20
|
Rule
|
No
slicing
on
the
root
element
|
element.where(path.contains('.').not()).slicing.empty()
|
|
sdf-8a
|
Rule
|
In
any
differential,
all
the
elements
must
start
with
be
in
the
StructureDefinition's
specified
type
for
non-logical
models,
or
with
the
same
type
name
for
logical
models
|
(%resource.kind
=
'logical'
or
element.first().path.startsWith(%resource.type))
element.first().path.startsWith(%resource.type)
and
(element.tail().empty()
(element.tail().not()
or
element.tail().all(path.startsWith(%resource.differential.element.first().path.replaceMatches('\\..*','')&'.')))
element.tail().all(path.startsWith(%resource.type&'.')))
|
|
Affect
this
element
|
|
sdf-6
|
Rule
|
A
structure
must
have
either
a
differential,
or
a
snapshot
(or
both)
|
snapshot.exists()
or
differential.exists()
|
|
|
StructureDefinition.differential.element
|
|
Element
Id
|
StructureDefinition.differential.element
|
|
Definition
|
Captures
constraints
on
each
element
within
the
resource.
|
Short
Display
Definition
of
elements
in
the
resource
(if
no
StructureDefinition)
Cardinality
Control
|
1..*
|
|
Type
|
ElementDefinition
|
Summary
false
Invariants
Affect
this
element
sdf-9
Rule
In
any
snapshot
or
differential,
no
label,
code
or
requirements
on
an
element
without
a
"."
in
the
path
(e.g.
the
first
element)
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()
sdf-15a
Rule
If
the
first
element
in
a
differential
has
no
"."
in
the
path
and
it's
not
a
logical
model,
it
has
no
type
(kind!='logical'
and
differential.element.first().path.contains('.').not())
implies
differential.element.first().type.empty()
sdf-19
Rule
FHIR
Specification
models
only
use
FHIR
defined
types
url.startsWith('http://hl7.org/fhir/StructureDefinition')
implies
(differential
|
snapshot).element.type.code.all(matches('^[a-zA-Z0-9]+$')
or
matches('^http:\\/\\/hl7\\.org\\/fhirpath\\/System\\.[A-Z][A-Za-z]+$'))
sdf-17
Rule
All
element
definitions
must
have
unique
ids
(diff)
differential.element.all(id.exists())
and
differential.element.id.trace('ids').isDistinct()
sdf-23
Rule
No
slice
name
on
root
(snapshot
|
differential).element.all(path.contains('.').not()
implies
sliceName.empty())
sdf-22
Rule
FHIR
Specification
models
never
have
default
values
url.startsWith('http://hl7.org/fhir/StructureDefinition')
implies
(snapshot.element.defaultValue.empty()
and
differential.element.defaultValue.empty())
sdf-14
Rule
All
element
definitions
must
have
an
id
snapshot.element.all(id.exists())
and
differential.element.all(id.exists())
sdf-21
Rule
Default
values
can
only
be
specified
on
specializations
differential.element.defaultValue.exists()
implies
(derivation
=
'specialization')
sdf-29
Warning
Elements
in
Resources
must
have
a
min
cardinality
or
0
or
1
and
a
max
cardinality
of
1
or
*
((kind
in
'resource'
|
'complex-type')
and
(derivation
=
'specialization'))
implies
differential.element.where((min
!=
0
and
min
!=
1)
or
(max
!=
'1'
and
max
!=
'*')).empty()
sdf-20
Rule
No
slicing
on
the
root
element
element.where(path.contains('.').not()).slicing.empty()
sdf-8a
Rule
In
any
differential,
all
the
elements
must
start
with
the
StructureDefinition's
specified
type
for
non-logical
models,
or
with
the
same
type
name
for
logical
models
(%resource.kind
=
'logical'
or
element.first().path.startsWith(%resource.type))
and
(element.tail().empty()
or
element.tail().all(path.startsWith(%resource.differential.element.first().path.replaceMatches('\\..*','')&'.')))