This
page
is
part
of
the
FHIR
Specification
(v3.3.0:
R4
Ballot
2).
The
current
version
which
supercedes
this
version
is
5.0.0
.
For
a
full
list
Continuous
Integration
Build
of
available
versions,
see
FHIR
(will
be
incorrect/inconsistent
at
times).
See
the
Directory
of
published
versions
.
Page
versions:
R5
R4B
R4
R3
R2
Responsible
Owner:
FHIR
Infrastructure
Work
Group
|
|
Types Framework Cross Reference: Base Types | Datatypes | Resources | Patterns
The definition of an element in a resource or an extension. The definition includes:
The ElementDefinition type is the core of the FHIR metadata layer, and is closely (conceptually) aligned to ISO 11179 . All the data elements defined in this specification are published as a collection of data elements ( XML or JSON ).
ElementDefinition is used in StructureDefinition
Structure
| Name | Flags | Card. | Type |
Description
&
Constraints
Filter:
|
|---|---|---|---|---|
|
Σ
|
Element |
Definition
of
an
element
in
a
resource
or
extension
+ Rule: Min <= Max + Rule: if the element definition has a contentReference, it cannot have type, defaultValue, fixed, pattern, example, minValue, maxValue, maxLength, or binding + + + Rule: Pattern and fixed are mutually exclusive + Rule: Binding can only be present for coded elements, string, and uri if using FHIR-defined types + + Rule: Constraints must be unique by key + + Rule: sliceName must be composed of proper tokens separated by "/" + Rule: Element path SHALL be expressed as a set of '.'-separated components with each component restricted to a maximum of 64 characters and with some limits on the allowed choice of characters + Warning: The first component of the path should be UpperCamelCase. Additional components (following a '.') should be lowerCamelCase. If this syntax is not adhered to, code generation tools may be broken. Logical models may be less concerned about this implication. + Rule: sliceIsConstraining can only appear if slicename is present + Guideline: pattern[x] should be used rather than fixed[x] + Warning: Order has no meaning (and cannot be asserted to have meaning), so enforcing rules on order is improper + Warning: Mappings SHOULD be unique by key + Rule: Can't have valueAlternatives if mustHaveValue is true + Warning: If there's more than one bindable type, it's usually an error for there to be a binding Elements defined in Ancestors: id , extension , modifierExtension |
|
|
Σ C | 1..1 | string |
Path
of
the
element
in
the
hierarchy
of
elements
|
|
Σ | 0..* | code |
xmlAttr
|
xmlText
|
typeAttr
|
cdaText
|
xhtml
Binding: PropertyRepresentation ( Required ) |
|
Σ C | 0..1 | string |
Name
for
this
particular
element
(in
a
set
of
slices)
|
|
Σ C | 0..1 |
boolean
|
If
this
slice
definition
constrains
an
inherited
slice
definition
(or
not)
|
![]() ![]() |
Σ T | 0..1 | string |
String
to
display
with
or
prompt
for
element
|
|
Σ | 0..* | Coding |
Corresponding
codes
in
terminologies
Binding: ElementDefinitionCode
|
|
Σ
|
0..1 | Element |
This
element
is
sliced
-
slices
follow
|
|
Σ | 0..* | Element |
Element
values
that
are
used
to
distinguish
the
slices
|
|
Σ | 1..1 | code |
value
|
exists
|
Binding: DiscriminatorType ( Required ) |
|
Σ | 1..1 | string |
Path
to
element
value
|
|
Σ
|
0..1 | string |
Text
description
of
how
slicing
works
(or
not)
|
|
Σ C | 0..1 | boolean |
If
elements
must
be
in
same
order
as
slices
|
|
Σ C | 1..1 | code |
closed
|
open
|
openAtEnd
Binding: SlicingRules ( Required ) |
|
Σ T | 0..1 | string |
Concise
definition
for
space-constrained
presentation
|
|
Σ T | 0..1 | markdown |
Full
formal
definition
as
narrative
text
|
|
Σ T | 0..1 | markdown |
Comments
about
the
use
of
this
element
|
|
Σ T | 0..1 | markdown |
Requirements
satisfied
by
this
|
|
Σ T | 0..* | string |
Other
names
|
|
Σ
|
0..1 | unsignedInt |
Minimum
Cardinality
|
|
Σ
|
0..1 | string |
Maximum
Cardinality
(a
number
or
*)
+ Rule: Max SHALL be a number or "*" |
|
Σ | 0..1 | Element |
Base
definition
information
for
tools
|
|
Σ | 1..1 | string |
Path
that
identifies
the
base
element
|
|
Σ | 1..1 | unsignedInt |
Min
cardinality
of
the
base
element
|
|
Σ | 1..1 | string |
Max
cardinality
of
the
base
element
|
|
Σ
|
0..1 | uri |
Reference
to
definition
of
content
for
the
element
|
|
Σ
|
0..* | Element |
Data
type
and
Profile
for
this
element
+ Rule: Aggregation may only be specified if one of the allowed types for the element is a reference + + Warning: profiles SHOULD be unique + Warning: targetProfiles SHOULD be unique |
|
Σ C | 1..1 | uri |
Data
type
or
Resource
(reference
to
definition)
|
|
Σ | 0..* | canonical ( StructureDefinition | ImplementationGuide ) |
Profiles
(StructureDefinition
or
IG)
-
one
must
apply
|
|
Σ C | 0..* | canonical ( StructureDefinition | ImplementationGuide ) |
Profile
(StructureDefinition
or
IG)
on
the
|
|
Σ
|
0..* | code |
contained
|
referenced
|
bundled
-
how
aggregated
Binding: AggregationMode ( Required ) |
|
Σ | 0..1 | code |
either
|
independent
|
specific
Binding: ReferenceVersionRules ( Required ) |
|
Σ
|
0..1 | * |
Specified
value
if
missing
from
instance
|
|
Σ
|
0..1 | markdown |
Implicit
meaning
when
this
element
is
missing
|
|
Σ C | 0..1 | string |
What
the
order
of
the
elements
means
|
|
Σ
|
0..1 | * |
Value
must
be
exactly
this
|
|
Σ
|
0..1 | * |
Value
must
have
at
least
these
property
values
|
|
Σ C | 0..* | Element |
Example
value
(as
defined
for
type)
|
|
Σ T | 1..1 | string |
Describes
the
purpose
of
this
example
|
|
Σ | 1..1 | * |
Value
of
Example
(one
of
allowed
types)
|
|
Σ C | 0..1 |
Minimum
Allowed
Value
(for
some
types)
|
|
|
date | |||
|
dateTime | |||
|
instant | |||
|
time | |||
|
decimal | |||
|
integer | |||
| integer64 | |||
|
positiveInt | |||
|
unsignedInt | |||
|
Quantity | |||
|
Σ C | 0..1 |
Maximum
Allowed
Value
(for
some
types)
|
|
|
date | |||
|
dateTime | |||
|
instant | |||
|
time | |||
|
decimal | |||
|
integer | |||
|
integer64 | |||
| positiveInt | |||
|
unsignedInt | |||
|
Quantity | |||
|
Σ C | 0..1 | integer |
Max
length
for
|
|
Σ | 0..* | id |
Reference
to
invariant
about
presence
|
|
Σ C | 0..* | Element |
Condition
that
must
evaluate
to
true
+ Warning: Constraints should have an expression or else validators will not be able to enforce them + Rule: Errors cannot be suppressed |
|
Σ
|
1..1 | id |
Target
of
'condition'
reference
above
|
|
Σ | 0..1 |
|
Why
this
constraint
is
necessary
or
appropriate
|
|
Σ C | 1..1 | code |
error
|
warning
Binding: ConstraintSeverity ( Required ) |
|
Σ
C
|
0..1 |
|
Suppress
warning
or
hint
in
profile
|
|
Σ T | 1..1 | string |
Human
description
of
constraint
|
|
Σ C | 0..1 | string |
FHIRPath
expression
of
constraint
|
|
Σ | 0..1 | canonical ( StructureDefinition ) |
Reference
to
original
source
of
constraint
|
|
Σ C | 0..1 | boolean |
For
primitives,
that
a
value
must
be
present
-
not
replaced
by
an
extension
|
![]() ![]() | Σ C | 0..* | canonical ( StructureDefinition ) |
Extensions
that
are
allowed
to
replace
a
primitive
value
|
| Σ | 0..1 | boolean |
If
the
element
must
be
supported
(discouraged
-
see
obligations)
|
|
Σ C | 0..1 | boolean |
If
this
modifies
the
meaning
of
other
elements
|
|
Σ C | 0..1 | string |
Reason
that
this
element
is
marked
as
a
modifier
|
|
Σ | 0..1 | boolean |
Include
when
_summary
=
true?
|
|
Σ
|
0..1 | Element |
ValueSet
details
if
this
is
coded
+ Rule: ValueSet + Rule: binding SHALL have either description or valueSet + Rule: If the strength is 'descriptive' no value set can ve provided + Guideline: if there's a required binding with no usage, it should be the base binding |
|
Σ | 1..1 | code |
required
|
extensible
|
preferred
|
example
|
descriptive
Binding: BindingStrength ( Required ) |
|
Σ
T
C
|
0..1 | markdown |
Guidance
on
the
codes
to
be
used
|
|
| 0..1 | canonical ( ValueSet ) |
Source
of
|
|
Σ C | 0..* |
|
Additional
Bindings
-
more
rules
about
the
binding
+ Guideline: additionalBindings should have a key |
![]() ![]() ![]() ![]() |
Σ | 0..1 | id |
Unique
identifier
so
additional
bindings
to
be
matched
across
profiles
|
|
Σ | 1..1 | code |
maximum
|
minimum
|
required
|
extensible
|
candidate
|
current
|
current-extensible
|
best-practice
|
preferred
|
ui
|
starter
|
component
Binding: Additional Binding Purpose ValueSet ( Required ) |
|
Σ | 1..1 | canonical ( ValueSet ) |
The
value
set
for
the
additional
binding
|
|
Σ | 0..1 | markdown |
Documentation
of
the
purpose
of
use
of
the
binding
|
|
Σ | 0..1 | string |
Concise
documentation
-
for
summary
tables
|
|
Σ | 0..* | UsageContext |
Qualifies
the
usage
-
jurisdiction,
gender,
workflow
status
etc.
|
![]() ![]() ![]() ![]() | Σ | 0..1 | boolean |
Whether
binding
can
applies
to
all
repeats,
or
just
one
|
|
Σ C | 0..* | Element |
Map
element
to
another
set
of
definitions
|
|
Σ C | 1..1 | id |
Reference
to
mapping
declaration
|
|
Σ | 0..1 | code |
Computable
language
of
mapping
|
|
Σ | 1..1 | string |
Details
of
the
mapping
|
|
Σ | 0..1 |
|
Comments
about
the
mapping
or
its
use
|
Documentation
for
this
format
|
||||
UML Diagram ( Legend )
XML Template
< xmlns="http://hl7.org/fhir"><ElementDefinition xmlns="http://hl7.org/fhir"> <!-- from Element: extension -->< < < < <</code> < < <<path value="[string]"/><!-- I 1..1 Path of the element in the hierarchy of elements --> <representation value="[code]"/><!-- 0..* xmlAttr | xmlText | typeAttr | cdaText | xhtml --> <sliceName value="[string]"/><!-- I 0..1 Name for this particular element (in a set of slices) --> <sliceIsConstraining value="[boolean]"/><!-- I 0..1 If this slice definition constrains an inherited slice definition (or not) --> <label value="[string]"/><!-- 0..1 String to display with or prompt for element --> <code><!-- 0..* Coding Corresponding codes in terminologies--></code> <slicing> <!-- I 0..1 This element is sliced - slices follow --> <discriminator> <!-- 0..* Element values that are used to distinguish the slices --> <type value="[code]"/><!-- 1..1 value | exists | type | profile | position --> <path value="[string]"/><!-- 1..1 Path to element value --> </discriminator>
< < <<description value="[string]"/><!-- 0..1 Text description of how slicing works (or not) --> <ordered value="[boolean]"/><!-- I 0..1 If elements must be in same order as slices --> <rules value="[code]"/><!-- I 1..1 closed | open | openAtEnd --> </slicing> <short value="[string]"/><!-- 0..1 Concise definition for space-constrained presentation -->< < <<definition value="[markdown]"/><!-- 0..1 Full formal definition as narrative text --> <comment value="[markdown]"/><!-- 0..1 Comments about the use of this element --> <requirements value="[markdown]"/><!-- 0..1 Requirements satisfied by this element/structure and its constraints --> <alias value="[string]"/><!-- 0..* Other names -->< < <<min value="[unsignedInt]"/><!-- I 0..1 Minimum Cardinality --> <max value="[string]"/><!-- I 0..1 Maximum Cardinality (a number or *) --> <base> <!-- 0..1 Base definition information for tools --> <path value="[string]"/><!-- 1..1 Path that identifies the base element --> <min value="[unsignedInt]"/><!-- 1..1 Min cardinality of the base element --> <max value="[string]"/><!-- 1..1 Max cardinality of the base element --> </base>< < < <</profile> <</targetProfile> <<contentReference value="[uri]"/><!-- I 0..1 Reference to definition of content for the element --> <type> <!-- I 0..* Data type and Profile for this element --> <code value="[uri]"/><!-- I 1..1 Data type or Resource (reference to definition) --> <profile><!-- 0..* canonical(ImplementationGuide|StructureDefinition) Profiles (StructureDefinition or IG) - one must apply --></profile> <targetProfile><!-- I 0..* canonical(ImplementationGuide|StructureDefinition) Profile (StructureDefinition or IG) on the Reference/canonical target - one must apply --></targetProfile> <aggregation value="[code]"/><!-- I 0..* contained | referenced | bundled - how aggregated --> <versioning value="[code]"/><!-- 0..1 either | independent | specific --> </type><</defaultValue[x]> < < <</fixed[x]> <</pattern[x]> < <<defaultValue[x]><!-- I 0..1 * Specified value if missing from instance --></defaultValue[x]> <meaningWhenMissing value="[markdown]"/><!-- I 0..1 Implicit meaning when this element is missing --> <orderMeaning value="[string]"/><!-- I 0..1 What the order of the elements means --> <fixed[x]><!-- I 0..1 * Value must be exactly this --></fixed[x]> <pattern[x]><!-- I 0..1 * Value must have at least these property values --></pattern[x]> <example> <!-- I 0..* Example value (as defined for type) --> <label value="[string]"/><!-- 1..1 Describes the purpose of this example --> <value[x]><!-- 1..1 * Value of Example (one of allowed types) --></value[x]> </example><| </minValue[x]> <| </maxValue[x]> <<minValue[x]><!-- I 0..1 date|dateTime|instant|time|decimal|integer|integer64| positiveInt|unsignedInt|Quantity Minimum Allowed Value (for some types) --></minValue[x]> <maxValue[x]><!-- I 0..1 date|dateTime|instant|time|decimal|integer|integer64| positiveInt|unsignedInt|Quantity Maximum Allowed Value (for some types) --></maxValue[x]> <maxLength value="[integer]"/><!-- I 0..1 Max length for string type data --> <condition value="[id]"/><!-- 0..* Reference to invariant about presence -->< < < <<constraint> <!-- I 0..* Condition that must evaluate to true --> <key value="[id]"/><!-- I 1..1 Target of 'condition' reference above --> <requirements value="[markdown]"/><!-- 0..1 Why this constraint is necessary or appropriate --> <severity value="[code]"/><!-- I 1..1 error | warning --> <suppress value="[boolean]"/><!-- I 0..1 Suppress warning or hint in profile --> <human value="[string]"/><!-- 1..1 Human description of constraint -->< <<expression value="[string]"/><!-- I 0..1 FHIRPath expression of constraint --> <source><!-- 0..1 canonical(StructureDefinition) Reference to original source of constraint --></source> </constraint>< < <<mustHaveValue value="[boolean]"/><!-- I 0..1 For primitives, that a value must be present - not replaced by an extension --> <valueAlternatives><!-- I 0..* canonical(StructureDefinition) Extensions that are allowed to replace a primitive value --></valueAlternatives> <mustSupport value="[boolean]"/><!-- 0..1 If the element must be supported (discouraged - see obligations) --> <isModifier value="[boolean]"/><!-- I 0..1 If this modifies the meaning of other elements --> <isModifierReason value="[string]"/><!-- I 0..1 Reason that this element is marked as a modifier --> <isSummary value="[boolean]"/><!-- 0..1 Include when _summary = true? -->< < < <</valueSet[x]><binding> <!-- I 0..1 ValueSet details if this is coded --> <strength value="[code]"/><!-- 1..1 required | extensible | preferred | example | descriptive --> <description value="[markdown]"/><!-- I 0..1 Guidance on the codes to be used --> <valueSet><!-- I 0..1 canonical(ValueSet) Source of value set --></valueSet> <additional> <!-- 0..* Additional Bindings - more rules about the binding --> <key value="[id]"/><!-- 0..1 Unique identifier so additional bindings to be matched across profiles --> <purpose value="[code]"/><!-- 1..1 maximum | minimum | required | extensible | candidate | current | current-extensible | best-practice | preferred | ui | starter | component --> <valueSet><!-- 1..1 canonical(ValueSet) The value set for the additional binding --></valueSet> <documentation value="[markdown]"/><!-- 0..1 Documentation of the purpose of use of the binding --> <shortDoco value="[string]"/><!-- 0..1 Concise documentation - for summary tables --> <usage><!-- 0..* UsageContext Qualifies the usage - jurisdiction, gender, workflow status etc. --></usage> <any value="[boolean]"/><!-- 0..1 Whether binding can applies to all repeats, or just one --> </additional> </binding>< < <<mapping> <!-- I 0..* Map element to another set of definitions --> <identity value="[id]"/><!-- I 1..1 Reference to mapping declaration --> <language value="[code]"/><!-- 0..1 Computable language of mapping --> <map value="[string]"/><!-- 1..1 Details of the mapping --><<comment value="[markdown]"/><!-- 0..1 Comments about the mapping or its use --> </mapping></[name]></ElementDefinition>
JSON Template
{
// from Element: extension
"
"
"
"
"
"
"
"
"path" : "<string>", // I R! Path of the element in the hierarchy of elements
"representation" : ["<code>"], // xmlAttr | xmlText | typeAttr | cdaText | xhtml
"sliceName" : "<string>", // I Name for this particular element (in a set of slices)
"sliceIsConstraining" : <boolean>, // I If this slice definition constrains an inherited slice definition (or not)
"label" : "<string>", // String to display with or prompt for element
"code" : [{ Coding }], // Corresponding codes in terminologies
"slicing" : { // I This element is sliced - slices follow
"discriminator" : [{ // Element values that are used to distinguish the slices
"type" : "<code>", // R! value | exists | type | profile | position
"path" : "<string>" // R! Path to element value
}],
"
"
"
"description" : "<string>", // Text description of how slicing works (or not)
"ordered" : <boolean>, // I If elements must be in same order as slices
"rules" : "<code>" // I R! closed | open | openAtEnd
},
"short" : "<string>", // Concise definition for space-constrained presentation
"
"
"
"definition" : "<markdown>", // Full formal definition as narrative text
"comment" : "<markdown>", // Comments about the use of this element
"requirements" : "<markdown>", // Requirements satisfied by this element/structure and its constraints
"alias" : ["<string>"], // Other names
"
"
"
"min" : "<unsignedInt>", // I Minimum Cardinality
"max" : "<string>", // I Maximum Cardinality (a number or *)
"base" : { // Base definition information for tools
"path" : "<string>", // R! Path that identifies the base element
"min" : "<unsignedInt>", // R! Min cardinality of the base element
"max" : "<string>" // R! Max cardinality of the base element
},
"
"
"
"
"
"
"contentReference" : "<uri>", // I Reference to definition of content for the element
"type" : [{ // I Data type and Profile for this element
"code" : "<uri>", // I R! Data type or Resource (reference to definition)
"profile" : ["<canonical(StructureDefinition|ImplementationGuide)>"], // Profiles (StructureDefinition or IG) - one must apply
"targetProfile" : ["<canonical(StructureDefinition|ImplementationGuide)>"], // I Profile (StructureDefinition or IG) on the Reference/canonical target - one must apply
"aggregation" : ["<code>"], // I contained | referenced | bundled - how aggregated
"versioning" : "<code>" // either | independent | specific
}],
">,
">,
">",
// defaultValue[x]: Specified value if missing from instance. One of these 55:
"defaultValueBase64Binary" : "<base64Binary>",
"defaultValueBoolean" : <boolean>,
"defaultValueCanonical" : "<canonical>",
"defaultValueCode" : "<code>",
"defaultValueDate" : "<date>",
"defaultValueDateTime" : "<dateTime>",
"defaultValueDecimal" : <decimal>,
"defaultValueId" : "<id>",
"defaultValueInstant" : "<instant>",
"defaultValueInteger" : <integer>,
"defaultValueInteger64" : "<integer64>",
"defaultValueMarkdown" : "<markdown>",
"defaultValueOid" : "<oid>",
"defaultValuePositiveInt" : "<positiveInt>",
"defaultValueString" : "<string>",
"defaultValueTime" : "<time>",
"defaultValueUnsignedInt" : "<unsignedInt>",
"defaultValueUri" : "<uri>",
">,
">",
">",
" },
" },
"defaultValueUrl" : "<url>",
"defaultValueUuid" : "<uuid>",
"defaultValueAddress" : { Address },
"defaultValueAge" : { Age },
"defaultValueAnnotation" : { Annotation },
"defaultValueAttachment" : { Attachment },
"defaultValueCodeableConcept" : { CodeableConcept },
"defaultValueCodeableReference" : { CodeableReference },
"defaultValueCoding" : { Coding },
"defaultValueContactPoint" : { ContactPoint },
"defaultValueCount" : { Count },
"defaultValueDistance" : { Distance },
"defaultValueDuration" : { Duration },
"defaultValueHumanName" : { HumanName },
"defaultValueIdentifier" : { Identifier },
"defaultValueMoney" : { Money },
"defaultValuePeriod" : { Period },
"defaultValueQuantity" : { Quantity },
"defaultValueRange" : { Range },
" },
"defaultValueRatio" : { Ratio },
" },
" },
" },
" },
"defaultValueRatioRange" : { RatioRange },
"defaultValueReference" : { Reference },
"
"
">,
">,
">",
">",
">",
">",
">",
">,
">",
">",
" },
" },
" },
" },
" },
" },
" },
" },
" },
" },
" },
" },
" },
">,
">,
">",
">",
">",
">",
">",
">,
">",
">",
" },
" },
" },
" },
" },
" },
" },
" },
" },
" },
" },
" },
" },
"
"
">
">
">"
">"
">"
">"
">"
">
">"
"defaultValueSampledData" : { SampledData },
"defaultValueSignature" : { Signature },
"defaultValueTiming" : { Timing },
"defaultValueContactDetail" : { ContactDetail },
"defaultValueDataRequirement" : { DataRequirement },
"defaultValueExpression" : { Expression },
"defaultValueParameterDefinition" : { ParameterDefinition },
"defaultValueRelatedArtifact" : { RelatedArtifact },
"defaultValueTriggerDefinition" : { TriggerDefinition },
"defaultValueUsageContext" : { UsageContext },
"defaultValueAvailability" : { Availability },
"defaultValueExtendedContactDetail" : { ExtendedContactDetail },
"defaultValueVirtualServiceDetail" : { VirtualServiceDetail },
"defaultValueDosage" : { Dosage },
"defaultValueMeta" : { Meta },
"meaningWhenMissing" : "<markdown>", // I Implicit meaning when this element is missing
"orderMeaning" : "<string>", // I What the order of the elements means
// fixed[x]: Value must be exactly this. One of these 55:
"fixedBase64Binary" : "<base64Binary>",
"fixedBoolean" : <boolean>,
"fixedCanonical" : "<canonical>",
"fixedCode" : "<code>",
"fixedDate" : "<date>",
"fixedDateTime" : "<dateTime>",
"fixedDecimal" : <decimal>,
"fixedId" : "<id>",
"fixedInstant" : "<instant>",
"fixedInteger" : <integer>,
"fixedInteger64" : "<integer64>",
"fixedMarkdown" : "<markdown>",
"fixedOid" : "<oid>",
"fixedPositiveInt" : "<positiveInt>",
"fixedString" : "<string>",
"fixedTime" : "<time>",
"fixedUnsignedInt" : "<unsignedInt>",
"fixedUri" : "<uri>",
"fixedUrl" : "<url>",
"fixedUuid" : "<uuid>",
"fixedAddress" : { Address },
"fixedAge" : { Age },
"fixedAnnotation" : { Annotation },
"fixedAttachment" : { Attachment },
"fixedCodeableConcept" : { CodeableConcept },
"fixedCodeableReference" : { CodeableReference },
"fixedCoding" : { Coding },
"fixedContactPoint" : { ContactPoint },
"fixedCount" : { Count },
"fixedDistance" : { Distance },
"fixedDuration" : { Duration },
"fixedHumanName" : { HumanName },
"fixedIdentifier" : { Identifier },
"fixedMoney" : { Money },
"fixedPeriod" : { Period },
"fixedQuantity" : { Quantity },
"fixedRange" : { Range },
"fixedRatio" : { Ratio },
"fixedRatioRange" : { RatioRange },
"fixedReference" : { Reference },
"fixedSampledData" : { SampledData },
"fixedSignature" : { Signature },
"fixedTiming" : { Timing },
"fixedContactDetail" : { ContactDetail },
"fixedDataRequirement" : { DataRequirement },
"fixedExpression" : { Expression },
"fixedParameterDefinition" : { ParameterDefinition },
"fixedRelatedArtifact" : { RelatedArtifact },
"fixedTriggerDefinition" : { TriggerDefinition },
"fixedUsageContext" : { UsageContext },
"fixedAvailability" : { Availability },
"fixedExtendedContactDetail" : { ExtendedContactDetail },
"fixedVirtualServiceDetail" : { VirtualServiceDetail },
"fixedDosage" : { Dosage },
"fixedMeta" : { Meta },
// pattern[x]: Value must have at least these property values. One of these 55:
"patternBase64Binary" : "<base64Binary>",
"patternBoolean" : <boolean>,
"patternCanonical" : "<canonical>",
"patternCode" : "<code>",
"patternDate" : "<date>",
"patternDateTime" : "<dateTime>",
"patternDecimal" : <decimal>,
"patternId" : "<id>",
"patternInstant" : "<instant>",
"patternInteger" : <integer>,
"patternInteger64" : "<integer64>",
"patternMarkdown" : "<markdown>",
"patternOid" : "<oid>",
"patternPositiveInt" : "<positiveInt>",
"patternString" : "<string>",
"patternTime" : "<time>",
"patternUnsignedInt" : "<unsignedInt>",
"patternUri" : "<uri>",
"patternUrl" : "<url>",
"patternUuid" : "<uuid>",
"patternAddress" : { Address },
"patternAge" : { Age },
"patternAnnotation" : { Annotation },
"patternAttachment" : { Attachment },
"patternCodeableConcept" : { CodeableConcept },
"patternCodeableReference" : { CodeableReference },
"patternCoding" : { Coding },
"patternContactPoint" : { ContactPoint },
"patternCount" : { Count },
"patternDistance" : { Distance },
"patternDuration" : { Duration },
"patternHumanName" : { HumanName },
"patternIdentifier" : { Identifier },
"patternMoney" : { Money },
"patternPeriod" : { Period },
"patternQuantity" : { Quantity },
"patternRange" : { Range },
"patternRatio" : { Ratio },
"patternRatioRange" : { RatioRange },
"patternReference" : { Reference },
"patternSampledData" : { SampledData },
"patternSignature" : { Signature },
"patternTiming" : { Timing },
"patternContactDetail" : { ContactDetail },
"patternDataRequirement" : { DataRequirement },
"patternExpression" : { Expression },
"patternParameterDefinition" : { ParameterDefinition },
"patternRelatedArtifact" : { RelatedArtifact },
"patternTriggerDefinition" : { TriggerDefinition },
"patternUsageContext" : { UsageContext },
"patternAvailability" : { Availability },
"patternExtendedContactDetail" : { ExtendedContactDetail },
"patternVirtualServiceDetail" : { VirtualServiceDetail },
"patternDosage" : { Dosage },
"patternMeta" : { Meta },
"example" : [{ // I Example value (as defined for type)
"label" : "<string>", // R! Describes the purpose of this example
// value[x]: Value of Example (one of allowed types). One of these 55:
"valueBase64Binary" : "<base64Binary>"
" }
" }
" }
" }
" }
" }
" }
" }
" }
" }
" }
" }
" }
"valueBoolean" : <boolean>,
"valueCanonical" : "<canonical>",
"valueCode" : "<code>",
"valueDate" : "<date>",
"valueDateTime" : "<dateTime>",
"valueDecimal" : <decimal>,
"valueId" : "<id>",
"valueInstant" : "<instant>",
"valueInteger" : <integer>,
"valueInteger64" : "<integer64>",
"valueMarkdown" : "<markdown>",
"valueOid" : "<oid>",
"valuePositiveInt" : "<positiveInt>",
"valueString" : "<string>",
"valueTime" : "<time>",
"valueUnsignedInt" : "<unsignedInt>",
"valueUri" : "<uri>",
"valueUrl" : "<url>",
"valueUuid" : "<uuid>",
"valueAddress" : { Address },
"valueAge" : { Age },
"valueAnnotation" : { Annotation },
"valueAttachment" : { Attachment },
"valueCodeableConcept" : { CodeableConcept },
"valueCodeableReference" : { CodeableReference },
"valueCoding" : { Coding },
"valueContactPoint" : { ContactPoint },
"valueCount" : { Count },
"valueDistance" : { Distance },
"valueDuration" : { Duration },
"valueHumanName" : { HumanName },
"valueIdentifier" : { Identifier },
"valueMoney" : { Money },
"valuePeriod" : { Period },
"valueQuantity" : { Quantity },
"valueRange" : { Range },
"valueRatio" : { Ratio },
"valueRatioRange" : { RatioRange },
"valueReference" : { Reference },
"valueSampledData" : { SampledData },
"valueSignature" : { Signature },
"valueTiming" : { Timing },
"valueContactDetail" : { ContactDetail },
"valueDataRequirement" : { DataRequirement },
"valueExpression" : { Expression },
"valueParameterDefinition" : { ParameterDefinition },
"valueRelatedArtifact" : { RelatedArtifact },
"valueTriggerDefinition" : { TriggerDefinition },
"valueUsageContext" : { UsageContext },
"valueAvailability" : { Availability },
"valueExtendedContactDetail" : { ExtendedContactDetail },
"valueVirtualServiceDetail" : { VirtualServiceDetail },
"valueDosage" : { Dosage },
"valueMeta" : { Meta },
}],
// minValue[x]: Minimum Allowed Value (for some types). One of these 10:
"minValueDate" : "<date>",
"minValueDateTime" : "<dateTime>",
"minValueInstant" : "<instant>",
"minValueTime" : "<time>",
"minValueDecimal" : <decimal>,
"minValueInteger" : <integer>,
"minValueInteger64" : "<integer64>",
"minValuePositiveInt" : "<positiveInt>",
"minValueUnsignedInt" : "<unsignedInt>",
"minValueQuantity" : { Quantity },
// maxValue[x]: Maximum Allowed Value (for some types). One of these 10:
"maxValueDate" : "<date>",
"maxValueDateTime" : "<dateTime>",
"maxValueInstant" : "<instant>",
"maxValueTime" : "<time>",
"maxValueDecimal" : <decimal>,
"maxValueInteger" : <integer>,
"maxValueInteger64" : "<integer64>",
"maxValuePositiveInt" : "<positiveInt>",
"maxValueUnsignedInt" : "<unsignedInt>",
"maxValueQuantity" : { Quantity },
"
"maxLength" : <integer>, // I Max length for string type data
"condition" : ["<id>"], // Reference to invariant about presence
"
"
"
"
"constraint" : [{ // I Condition that must evaluate to true
"key" : "<id>", // I R! Target of 'condition' reference above
"requirements" : "<markdown>", // Why this constraint is necessary or appropriate
"severity" : "<code>", // I R! error | warning
"suppress" : <boolean>, // I Suppress warning or hint in profile
"human" : "<string>", // R! Human description of constraint
"
"
"
"expression" : "<string>", // I FHIRPath expression of constraint
"source" : "<canonical(StructureDefinition)>" // Reference to original source of constraint
}],
"
"
"
"mustHaveValue" : <boolean>, // I For primitives, that a value must be present - not replaced by an extension
"valueAlternatives" : ["<canonical(StructureDefinition)>"], // I Extensions that are allowed to replace a primitive value
"mustSupport" : <boolean>, // If the element must be supported (discouraged - see obligations)
"isModifier" : <boolean>, // I If this modifies the meaning of other elements
"isModifierReason" : "<string>", // I Reason that this element is marked as a modifier
"isSummary" : <boolean>, // Include when _summary = true?
"
"
"
">"
">"
"binding" : { // I ValueSet details if this is coded
"strength" : "<code>", // R! required | extensible | preferred | example | descriptive
"description" : "<markdown>", // I Guidance on the codes to be used
"valueSet" : "<canonical(ValueSet)>", // I Source of value set
"additional" : [{ // Additional Bindings - more rules about the binding
"key" : "<id>", // Unique identifier so additional bindings to be matched across profiles
"purpose" : "<code>", // R! maximum | minimum | required | extensible | candidate | current | current-extensible | best-practice | preferred | ui | starter | component
"valueSet" : "<canonical(ValueSet)>", // R! The value set for the additional binding
"documentation" : "<markdown>", // Documentation of the purpose of use of the binding
"shortDoco" : "<string>", // Concise documentation - for summary tables
"usage" : [{ UsageContext }], // Qualifies the usage - jurisdiction, gender, workflow status etc.
"any" : <boolean> // Whether binding can applies to all repeats, or just one
}]
},
"
"
"
"mapping" : [{ // I Map element to another set of definitions
"identity" : "<id>", // I R! Reference to mapping declaration
"language" : "<code>", // Computable language of mapping
"map" : "<string>", // R! Details of the mapping
"
"comment" : "<markdown>" // Comments about the mapping or its use
}]
}
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> . [# from Element: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: ], ...; fhir: fhir: fhir: ]; fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: ]; fhir: fhir: fhir: fhir: fhir: fhir: fhir: ], ...; # . One of these 48 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: fhir: # . One of these 48 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] # . One of these 48 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: fhir: # . One of these 48 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] ], ...; # . One of these 9 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] # . One of these 9 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: ], ...; fhir: fhir: fhir: fhir: fhir: fhir: fhir: # . One of these 2 fhir: ] fhir:) ] ]; fhir: fhir: fhir: fhir: fhir: ], ...;# from Element: fhir:extension fhir:path [ string ] ; # 1..1 I Path of the element in the hierarchy of elements fhir:representation ( [ code ] ... ) ; # 0..* xmlAttr | xmlText | typeAttr | cdaText | xhtml fhir:sliceName [ string ] ; # 0..1 I Name for this particular element (in a set of slices) fhir:sliceIsConstraining [ boolean ] ; # 0..1 I If this slice definition constrains an inherited slice definition (or not) fhir:label [ string ] ; # 0..1 String to display with or prompt for element fhir:code ( [ Coding ] ... ) ; # 0..* Corresponding codes in terminologies fhir:slicing [ # 0..1 I This element is sliced - slices follow fhir:discriminator ( [ # 0..* Element values that are used to distinguish the slices fhir:type [ code ] ; # 1..1 value | exists | type | profile | position fhir:path [ string ] ; # 1..1 Path to element value ] ... ) ; fhir:description [ string ] ; # 0..1 Text description of how slicing works (or not) fhir:ordered [ boolean ] ; # 0..1 I If elements must be in same order as slices fhir:rules [ code ] ; # 1..1 I closed | open | openAtEnd ] ; fhir:short [ string ] ; # 0..1 Concise definition for space-constrained presentation fhir:definition [ markdown ] ; # 0..1 Full formal definition as narrative text fhir:comment [ markdown ] ; # 0..1 Comments about the use of this element fhir:requirements [ markdown ] ; # 0..1 Requirements satisfied by this element/structure and its constraints fhir:alias ( [ string ] ... ) ; # 0..* Other names fhir:min [ unsignedInt ] ; # 0..1 I Minimum Cardinality fhir:max [ string ] ; # 0..1 I Maximum Cardinality (a number or *) fhir:base [ # 0..1 Base definition information for tools fhir:path [ string ] ; # 1..1 Path that identifies the base element fhir:min [ unsignedInt ] ; # 1..1 Min cardinality of the base element fhir:max [ string ] ; # 1..1 Max cardinality of the base element ] ; fhir:contentReference [ uri ] ; # 0..1 I Reference to definition of content for the element fhir:type ( [ # 0..* I Data type and Profile for this element fhir:code [ uri ] ; # 1..1 I Data type or Resource (reference to definition) fhir:profile ( [ canonical(ImplementationGuide|StructureDefinition) ] ... ) ; # 0..* Profiles (StructureDefinition or IG) - one must apply fhir:targetProfile ( [ canonical(ImplementationGuide|StructureDefinition) ] ... ) ; # 0..* I Profile (StructureDefinition or IG) on the Reference/canonical target - one must apply fhir:aggregation ( [ code ] ... ) ; # 0..* I contained | referenced | bundled - how aggregated fhir:versioning [ code ] ; # 0..1 either | independent | specific ] ... ) ; # defaultValue[x] : 0..1 I Specified value if missing from instance. One of these 55 fhir:defaultValue [ a fhir:Base64Binary ; base64Binary ] fhir:defaultValue [ a fhir:Boolean ; boolean ] fhir:defaultValue [ a fhir:Canonical ; canonical ] fhir:defaultValue [ a fhir:Code ; code ] fhir:defaultValue [ a fhir:Date ; date ] fhir:defaultValue [ a fhir:DateTime ; dateTime ] fhir:defaultValue [ a fhir:Decimal ; decimal ] fhir:defaultValue [ a fhir:Id ; id ] fhir:defaultValue [ a fhir:Instant ; instant ] fhir:defaultValue [ a fhir:Integer ; integer ] fhir:defaultValue [ a fhir:Integer64 ; integer64 ] fhir:defaultValue [ a fhir:Markdown ; markdown ] fhir:defaultValue [ a fhir:Oid ; oid ] fhir:defaultValue [ a fhir:PositiveInt ; positiveInt ] fhir:defaultValue [ a fhir:String ; string ] fhir:defaultValue [ a fhir:Time ; time ] fhir:defaultValue [ a fhir:UnsignedInt ; unsignedInt ] fhir:defaultValue [ a fhir:Uri ; uri ] fhir:defaultValue [ a fhir:Url ; url ] fhir:defaultValue [ a fhir:Uuid ; uuid ] fhir:defaultValue [ a fhir:Address ; Address ] fhir:defaultValue [ a fhir:Age ; Age ] fhir:defaultValue [ a fhir:Annotation ; Annotation ] fhir:defaultValue [ a fhir:Attachment ; Attachment ] fhir:defaultValue [ a fhir:CodeableConcept ; CodeableConcept ] fhir:defaultValue [ a fhir:CodeableReference ; CodeableReference ] fhir:defaultValue [ a fhir:Coding ; Coding ] fhir:defaultValue [ a fhir:ContactPoint ; ContactPoint ] fhir:defaultValue [ a fhir:Count ; Count ] fhir:defaultValue [ a fhir:Distance ; Distance ] fhir:defaultValue [ a fhir:Duration ; Duration ] fhir:defaultValue [ a fhir:HumanName ; HumanName ] fhir:defaultValue [ a fhir:Identifier ; Identifier ] fhir:defaultValue [ a fhir:Money ; Money ] fhir:defaultValue [ a fhir:Period ; Period ] fhir:defaultValue [ a fhir:Quantity ; Quantity ] fhir:defaultValue [ a fhir:Range ; Range ] fhir:defaultValue [ a fhir:Ratio ; Ratio ] fhir:defaultValue [ a fhir:RatioRange ; RatioRange ] fhir:defaultValue [ a fhir:Reference ; Reference ] fhir:defaultValue [ a fhir:SampledData ; SampledData ] fhir:defaultValue [ a fhir:Signature ; Signature ] fhir:defaultValue [ a fhir:Timing ; Timing ] fhir:defaultValue [ a fhir:ContactDetail ; ContactDetail ] fhir:defaultValue [ a fhir:DataRequirement ; DataRequirement ] fhir:defaultValue [ a fhir:Expression ; Expression ] fhir:defaultValue [ a fhir:ParameterDefinition ; ParameterDefinition ] fhir:defaultValue [ a fhir:RelatedArtifact ; RelatedArtifact ] fhir:defaultValue [ a fhir:TriggerDefinition ; TriggerDefinition ] fhir:defaultValue [ a fhir:UsageContext ; UsageContext ] fhir:defaultValue [ a fhir:Availability ; Availability ] fhir:defaultValue [ a fhir:ExtendedContactDetail ; ExtendedContactDetail ] fhir:defaultValue [ a fhir:VirtualServiceDetail ; VirtualServiceDetail ] fhir:defaultValue [ a fhir:Dosage ; Dosage ] fhir:defaultValue [ a fhir:Meta ; Meta ] fhir:meaningWhenMissing [ markdown ] ; # 0..1 I Implicit meaning when this element is missing fhir:orderMeaning [ string ] ; # 0..1 I What the order of the elements means # fixed[x] : 0..1 I Value must be exactly this. One of these 55 fhir:fixed [ a fhir:Base64Binary ; base64Binary ] fhir:fixed [ a fhir:Boolean ; boolean ] fhir:fixed [ a fhir:Canonical ; canonical ] fhir:fixed [ a fhir:Code ; code ] fhir:fixed [ a fhir:Date ; date ] fhir:fixed [ a fhir:DateTime ; dateTime ] fhir:fixed [ a fhir:Decimal ; decimal ] fhir:fixed [ a fhir:Id ; id ] fhir:fixed [ a fhir:Instant ; instant ] fhir:fixed [ a fhir:Integer ; integer ] fhir:fixed [ a fhir:Integer64 ; integer64 ] fhir:fixed [ a fhir:Markdown ; markdown ] fhir:fixed [ a fhir:Oid ; oid ] fhir:fixed [ a fhir:PositiveInt ; positiveInt ] fhir:fixed [ a fhir:String ; string ] fhir:fixed [ a fhir:Time ; time ] fhir:fixed [ a fhir:UnsignedInt ; unsignedInt ] fhir:fixed [ a fhir:Uri ; uri ] fhir:fixed [ a fhir:Url ; url ] fhir:fixed [ a fhir:Uuid ; uuid ] fhir:fixed [ a fhir:Address ; Address ] fhir:fixed [ a fhir:Age ; Age ] fhir:fixed [ a fhir:Annotation ; Annotation ] fhir:fixed [ a fhir:Attachment ; Attachment ] fhir:fixed [ a fhir:CodeableConcept ; CodeableConcept ] fhir:fixed [ a fhir:CodeableReference ; CodeableReference ] fhir:fixed [ a fhir:Coding ; Coding ] fhir:fixed [ a fhir:ContactPoint ; ContactPoint ] fhir:fixed [ a fhir:Count ; Count ] fhir:fixed [ a fhir:Distance ; Distance ] fhir:fixed [ a fhir:Duration ; Duration ] fhir:fixed [ a fhir:HumanName ; HumanName ] fhir:fixed [ a fhir:Identifier ; Identifier ] fhir:fixed [ a fhir:Money ; Money ] fhir:fixed [ a fhir:Period ; Period ] fhir:fixed [ a fhir:Quantity ; Quantity ] fhir:fixed [ a fhir:Range ; Range ] fhir:fixed [ a fhir:Ratio ; Ratio ] fhir:fixed [ a fhir:RatioRange ; RatioRange ] fhir:fixed [ a fhir:Reference ; Reference ] fhir:fixed [ a fhir:SampledData ; SampledData ] fhir:fixed [ a fhir:Signature ; Signature ] fhir:fixed [ a fhir:Timing ; Timing ] fhir:fixed [ a fhir:ContactDetail ; ContactDetail ] fhir:fixed [ a fhir:DataRequirement ; DataRequirement ] fhir:fixed [ a fhir:Expression ; Expression ] fhir:fixed [ a fhir:ParameterDefinition ; ParameterDefinition ] fhir:fixed [ a fhir:RelatedArtifact ; RelatedArtifact ] fhir:fixed [ a fhir:TriggerDefinition ; TriggerDefinition ] fhir:fixed [ a fhir:UsageContext ; UsageContext ] fhir:fixed [ a fhir:Availability ; Availability ] fhir:fixed [ a fhir:ExtendedContactDetail ; ExtendedContactDetail ] fhir:fixed [ a fhir:VirtualServiceDetail ; VirtualServiceDetail ] fhir:fixed [ a fhir:Dosage ; Dosage ] fhir:fixed [ a fhir:Meta ; Meta ] # pattern[x] : 0..1 I Value must have at least these property values. One of these 55 fhir:pattern [ a fhir:Base64Binary ; base64Binary ] fhir:pattern [ a fhir:Boolean ; boolean ] fhir:pattern [ a fhir:Canonical ; canonical ] fhir:pattern [ a fhir:Code ; code ] fhir:pattern [ a fhir:Date ; date ] fhir:pattern [ a fhir:DateTime ; dateTime ] fhir:pattern [ a fhir:Decimal ; decimal ] fhir:pattern [ a fhir:Id ; id ] fhir:pattern [ a fhir:Instant ; instant ] fhir:pattern [ a fhir:Integer ; integer ] fhir:pattern [ a fhir:Integer64 ; integer64 ] fhir:pattern [ a fhir:Markdown ; markdown ] fhir:pattern [ a fhir:Oid ; oid ] fhir:pattern [ a fhir:PositiveInt ; positiveInt ] fhir:pattern [ a fhir:String ; string ] fhir:pattern [ a fhir:Time ; time ] fhir:pattern [ a fhir:UnsignedInt ; unsignedInt ] fhir:pattern [ a fhir:Uri ; uri ] fhir:pattern [ a fhir:Url ; url ] fhir:pattern [ a fhir:Uuid ; uuid ] fhir:pattern [ a fhir:Address ; Address ] fhir:pattern [ a fhir:Age ; Age ] fhir:pattern [ a fhir:Annotation ; Annotation ] fhir:pattern [ a fhir:Attachment ; Attachment ] fhir:pattern [ a fhir:CodeableConcept ; CodeableConcept ] fhir:pattern [ a fhir:CodeableReference ; CodeableReference ] fhir:pattern [ a fhir:Coding ; Coding ] fhir:pattern [ a fhir:ContactPoint ; ContactPoint ] fhir:pattern [ a fhir:Count ; Count ] fhir:pattern [ a fhir:Distance ; Distance ] fhir:pattern [ a fhir:Duration ; Duration ] fhir:pattern [ a fhir:HumanName ; HumanName ] fhir:pattern [ a fhir:Identifier ; Identifier ] fhir:pattern [ a fhir:Money ; Money ] fhir:pattern [ a fhir:Period ; Period ] fhir:pattern [ a fhir:Quantity ; Quantity ] fhir:pattern [ a fhir:Range ; Range ] fhir:pattern [ a fhir:Ratio ; Ratio ] fhir:pattern [ a fhir:RatioRange ; RatioRange ] fhir:pattern [ a fhir:Reference ; Reference ] fhir:pattern [ a fhir:SampledData ; SampledData ] fhir:pattern [ a fhir:Signature ; Signature ] fhir:pattern [ a fhir:Timing ; Timing ] fhir:pattern [ a fhir:ContactDetail ; ContactDetail ] fhir:pattern [ a fhir:DataRequirement ; DataRequirement ] fhir:pattern [ a fhir:Expression ; Expression ] fhir:pattern [ a fhir:ParameterDefinition ; ParameterDefinition ] fhir:pattern [ a fhir:RelatedArtifact ; RelatedArtifact ] fhir:pattern [ a fhir:TriggerDefinition ; TriggerDefinition ] fhir:pattern [ a fhir:UsageContext ; UsageContext ] fhir:pattern [ a fhir:Availability ; Availability ] fhir:pattern [ a fhir:ExtendedContactDetail ; ExtendedContactDetail ] fhir:pattern [ a fhir:VirtualServiceDetail ; VirtualServiceDetail ] fhir:pattern [ a fhir:Dosage ; Dosage ] fhir:pattern [ a fhir:Meta ; Meta ] fhir:example ( [ # 0..* I Example value (as defined for type) fhir:label [ string ] ; # 1..1 Describes the purpose of this example # value[x] : 1..1 Value of Example (one of allowed types). One of these 55 fhir:value [ a fhir:Base64Binary ; base64Binary ] fhir:value [ a fhir:Boolean ; boolean ] fhir:value [ a fhir:Canonical ; canonical ] fhir:value [ a fhir:Code ; code ] fhir:value [ a fhir:Date ; date ] fhir:value [ a fhir:DateTime ; dateTime ] fhir:value [ a fhir:Decimal ; decimal ] fhir:value [ a fhir:Id ; id ] fhir:value [ a fhir:Instant ; instant ] fhir:value [ a fhir:Integer ; integer ] fhir:value [ a fhir:Integer64 ; integer64 ] fhir:value [ a fhir:Markdown ; markdown ] fhir:value [ a fhir:Oid ; oid ] fhir:value [ a fhir:PositiveInt ; positiveInt ] fhir:value [ a fhir:String ; string ] fhir:value [ a fhir:Time ; time ] fhir:value [ a fhir:UnsignedInt ; unsignedInt ] fhir:value [ a fhir:Uri ; uri ] fhir:value [ a fhir:Url ; url ] fhir:value [ a fhir:Uuid ; uuid ] fhir:value [ a fhir:Address ; Address ] fhir:value [ a fhir:Age ; Age ] fhir:value [ a fhir:Annotation ; Annotation ] fhir:value [ a fhir:Attachment ; Attachment ] fhir:value [ a fhir:CodeableConcept ; CodeableConcept ] fhir:value [ a fhir:CodeableReference ; CodeableReference ] fhir:value [ a fhir:Coding ; Coding ] fhir:value [ a fhir:ContactPoint ; ContactPoint ] fhir:value [ a fhir:Count ; Count ] fhir:value [ a fhir:Distance ; Distance ] fhir:value [ a fhir:Duration ; Duration ] fhir:value [ a fhir:HumanName ; HumanName ] fhir:value [ a fhir:Identifier ; Identifier ] fhir:value [ a fhir:Money ; Money ] fhir:value [ a fhir:Period ; Period ] fhir:value [ a fhir:Quantity ; Quantity ] fhir:value [ a fhir:Range ; Range ] fhir:value [ a fhir:Ratio ; Ratio ] fhir:value [ a fhir:RatioRange ; RatioRange ] fhir:value [ a fhir:Reference ; Reference ] fhir:value [ a fhir:SampledData ; SampledData ] fhir:value [ a fhir:Signature ; Signature ] fhir:value [ a fhir:Timing ; Timing ] fhir:value [ a fhir:ContactDetail ; ContactDetail ] fhir:value [ a fhir:DataRequirement ; DataRequirement ] fhir:value [ a fhir:Expression ; Expression ] fhir:value [ a fhir:ParameterDefinition ; ParameterDefinition ] fhir:value [ a fhir:RelatedArtifact ; RelatedArtifact ] fhir:value [ a fhir:TriggerDefinition ; TriggerDefinition ] fhir:value [ a fhir:UsageContext ; UsageContext ] fhir:value [ a fhir:Availability ; Availability ] fhir:value [ a fhir:ExtendedContactDetail ; ExtendedContactDetail ] fhir:value [ a fhir:VirtualServiceDetail ; VirtualServiceDetail ] fhir:value [ a fhir:Dosage ; Dosage ] fhir:value [ a fhir:Meta ; Meta ] ] ... ) ; # minValue[x] : 0..1 I Minimum Allowed Value (for some types). One of these 10 fhir:minValue [ a fhir:Date ; date ] fhir:minValue [ a fhir:DateTime ; dateTime ] fhir:minValue [ a fhir:Instant ; instant ] fhir:minValue [ a fhir:Time ; time ] fhir:minValue [ a fhir:Decimal ; decimal ] fhir:minValue [ a fhir:Integer ; integer ] fhir:minValue [ a fhir:Integer64 ; integer64 ] fhir:minValue [ a fhir:PositiveInt ; positiveInt ] fhir:minValue [ a fhir:UnsignedInt ; unsignedInt ] fhir:minValue [ a fhir:Quantity ; Quantity ] # maxValue[x] : 0..1 I Maximum Allowed Value (for some types). One of these 10 fhir:maxValue [ a fhir:Date ; date ] fhir:maxValue [ a fhir:DateTime ; dateTime ] fhir:maxValue [ a fhir:Instant ; instant ] fhir:maxValue [ a fhir:Time ; time ] fhir:maxValue [ a fhir:Decimal ; decimal ] fhir:maxValue [ a fhir:Integer ; integer ] fhir:maxValue [ a fhir:Integer64 ; integer64 ] fhir:maxValue [ a fhir:PositiveInt ; positiveInt ] fhir:maxValue [ a fhir:UnsignedInt ; unsignedInt ] fhir:maxValue [ a fhir:Quantity ; Quantity ] fhir:maxLength [ integer ] ; # 0..1 I Max length for string type data fhir:condition ( [ id ] ... ) ; # 0..* Reference to invariant about presence fhir:constraint ( [ # 0..* I Condition that must evaluate to true fhir:key [ id ] ; # 1..1 I Target of 'condition' reference above fhir:requirements [ markdown ] ; # 0..1 Why this constraint is necessary or appropriate fhir:severity [ code ] ; # 1..1 I error | warning fhir:suppress [ boolean ] ; # 0..1 I Suppress warning or hint in profile fhir:human [ string ] ; # 1..1 Human description of constraint fhir:expression [ string ] ; # 0..1 I FHIRPath expression of constraint fhir:source [ canonical(StructureDefinition) ] ; # 0..1 Reference to original source of constraint ] ... ) ; fhir:mustHaveValue [ boolean ] ; # 0..1 I For primitives, that a value must be present - not replaced by an extension fhir:valueAlternatives ( [ canonical(StructureDefinition) ] ... ) ; # 0..* I Extensions that are allowed to replace a primitive value fhir:mustSupport [ boolean ] ; # 0..1 If the element must be supported (discouraged - see obligations) fhir:isModifier [ boolean ] ; # 0..1 I If this modifies the meaning of other elements fhir:isModifierReason [ string ] ; # 0..1 I Reason that this element is marked as a modifier fhir:isSummary [ boolean ] ; # 0..1 Include when _summary = true? fhir:binding [ # 0..1 I ValueSet details if this is coded fhir:strength [ code ] ; # 1..1 required | extensible | preferred | example | descriptive fhir:description [ markdown ] ; # 0..1 I Guidance on the codes to be used fhir:valueSet [ canonical(ValueSet) ] ; # 0..1 I Source of value set fhir:additional ( [ # 0..* Additional Bindings - more rules about the binding fhir:key [ id ] ; # 0..1 Unique identifier so additional bindings to be matched across profiles fhir:purpose [ code ] ; # 1..1 maximum | minimum | required | extensible | candidate | current | current-extensible | best-practice | preferred | ui | starter | component fhir:valueSet [ canonical(ValueSet) ] ; # 1..1 The value set for the additional binding fhir:documentation [ markdown ] ; # 0..1 Documentation of the purpose of use of the binding fhir:shortDoco [ string ] ; # 0..1 Concise documentation - for summary tables fhir:usage ( [ UsageContext ] ... ) ; # 0..* Qualifies the usage - jurisdiction, gender, workflow status etc. fhir:any [ boolean ] ; # 0..1 Whether binding can applies to all repeats, or just one ] ... ) ; ] ; fhir:mapping ( [ # 0..* I Map element to another set of definitions fhir:identity [ id ] ; # 1..1 I Reference to mapping declaration fhir:language [ code ] ; # 0..1 Computable language of mapping fhir:map [ string ] ; # 1..1 Details of the mapping fhir:comment [ markdown ] ; # 0..1 Comments about the mapping or its use ] ... ) ; ]
Changes
since
DSTU2
Release
3
Changes from both R4 and R4B
| ElementDefinition | |
|
|
|
|
|
|
| ElementDefinition.type.aggregation |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ElementDefinition.constraint.suppress |
|
| ElementDefinition.mustHaveValue |
|
| ElementDefinition.valueAlternatives |
|
|
|
|
|
|
|
|
|
|
|
|
|
| ElementDefinition.binding.additional.purpose |
|
| ElementDefinition.binding.additional.valueSet |
|
| ElementDefinition.binding.additional.documentation |
|
| ElementDefinition.binding.additional.shortDoco |
|
| ElementDefinition.binding.additional.usage |
|
| ElementDefinition.binding.additional.any |
|
|
|
|
| ElementDefinition.constraint.xpath |
|
See the Full Difference for further information
Structure
| Name | Flags | Card. | Type |
Description
&
Constraints
Filter:
|
|---|---|---|---|---|
|
Σ
|
Element |
Definition
of
an
element
in
a
resource
or
extension
+ Rule: Min <= Max + Rule: if the element definition has a contentReference, it cannot have type, defaultValue, fixed, pattern, example, minValue, maxValue, maxLength, or binding + + + Rule: Pattern and fixed are mutually exclusive + Rule: Binding can only be present for coded elements, string, and uri if using FHIR-defined types + + Rule: Constraints must be unique by key + + Rule: sliceName must be composed of proper tokens separated by "/" + Rule: Element path SHALL be expressed as a set of '.'-separated components with each component restricted to a maximum of 64 characters and with some limits on the allowed choice of characters + Warning: The first component of the path should be UpperCamelCase. Additional components (following a '.') should be lowerCamelCase. If this syntax is not adhered to, code generation tools may be broken. Logical models may be less concerned about this implication. + Rule: sliceIsConstraining can only appear if slicename is present + Guideline: pattern[x] should be used rather than fixed[x] + Warning: Order has no meaning (and cannot be asserted to have meaning), so enforcing rules on order is improper + Warning: Mappings SHOULD be unique by key + Rule: Can't have valueAlternatives if mustHaveValue is true + Warning: If there's more than one bindable type, it's usually an error for there to be a binding Elements defined in Ancestors: id , extension , modifierExtension |
|
|
Σ C | 1..1 | string |
Path
of
the
element
in
the
hierarchy
of
elements
|
|
Σ | 0..* | code |
xmlAttr
|
xmlText
|
typeAttr
|
cdaText
|
xhtml
Binding: PropertyRepresentation ( Required ) |
|
Σ C | 0..1 | string |
Name
for
this
particular
element
(in
a
set
of
slices)
|
|
Σ C | 0..1 | boolean |
If
this
slice
definition
constrains
an
inherited
slice
definition
(or
not)
|
|
Σ T | 0..1 | string |
String
to
display
with
or
prompt
for
element
|
|
Σ | 0..* | Coding |
Corresponding
codes
in
terminologies
Binding: ElementDefinitionCode
|
|
Σ
|
0..1 | Element |
This
element
is
sliced
-
slices
follow
|
|
Σ | 0..* | Element |
Element
values
that
are
used
to
distinguish
the
slices
|
|
Σ | 1..1 | code |
value
|
exists
|
Binding: DiscriminatorType ( Required ) |
|
Σ | 1..1 | string |
Path
to
element
value
|
|
Σ
|
0..1 | string |
Text
description
of
how
slicing
works
(or
not)
|
|
Σ C | 0..1 | boolean |
If
elements
must
be
in
same
order
as
slices
|
|
Σ C | 1..1 | code |
closed
|
open
|
openAtEnd
Binding: SlicingRules ( Required ) |
|
Σ T | 0..1 | string |
Concise
definition
for
space-constrained
presentation
|
|
Σ T | 0..1 | markdown |
Full
formal
definition
as
narrative
text
|
|
Σ T | 0..1 | markdown |
Comments
about
the
use
of
this
element
|
|
Σ T | 0..1 | markdown |
Requirements
satisfied
by
this
|
|
Σ T | 0..* | string |
Other
names
|
|
Σ
|
0..1 | unsignedInt |
Minimum
Cardinality
|
|
Σ
|
0..1 | string |
Maximum
Cardinality
(a
number
or
*)
+ Rule: Max SHALL be a number or "*" |
|
Σ | 0..1 | Element |
Base
definition
information
for
tools
|
|
Σ | 1..1 | string |
Path
that
identifies
the
base
element
|
|
Σ | 1..1 | unsignedInt |
Min
cardinality
of
the
base
element
|
|
Σ | 1..1 | string |
Max
cardinality
of
the
base
element
|
|
Σ
|
0..1 | uri |
Reference
to
definition
of
content
for
the
element
|
|
Σ
|
0..* | Element |
Data
type
and
Profile
for
this
element
+ Rule: Aggregation may only be specified if one of the allowed types for the element is a reference + + Warning: profiles SHOULD be unique + Warning: targetProfiles SHOULD be unique |
|
Σ C | 1..1 | uri |
Data
type
or
Resource
(reference
to
definition)
|
|
Σ | 0..* | canonical ( StructureDefinition | ImplementationGuide ) |
Profiles
(StructureDefinition
or
IG)
-
one
must
apply
|
|
Σ C | 0..* | canonical ( StructureDefinition | ImplementationGuide ) |
Profile
(StructureDefinition
or
IG)
on
the
|
|
Σ
|
0..* | code |
contained
|
referenced
|
bundled
-
how
aggregated
Binding: AggregationMode ( Required ) |
|
Σ | 0..1 | code |
either
|
independent
|
specific
Binding: ReferenceVersionRules ( Required ) |
|
Σ
|
0..1 | * |
Specified
value
if
missing
from
instance
|
|
Σ
|
0..1 | markdown |
Implicit
meaning
when
this
element
is
missing
|
|
Σ C | 0..1 | string |
What
the
order
of
the
elements
means
|
|
Σ
|
0..1 | * |
Value
must
be
exactly
this
|
|
Σ
|
0..1 | * |
Value
must
have
at
least
these
property
values
|
|
Σ C | 0..* | Element |
Example
value
(as
defined
for
type)
|
|
Σ T | 1..1 | string |
Describes
the
purpose
of
this
example
|
|
Σ | 1..1 | * |
Value
of
Example
(one
of
allowed
types)
|
|
Σ C | 0..1 |
Minimum
Allowed
Value
(for
some
types)
|
|
|
date | |||
|
dateTime | |||
|
instant | |||
|
time | |||
|
decimal | |||
|
integer | |||
| integer64 | |||
|
positiveInt | |||
|
unsignedInt | |||
|
Quantity | |||
|
Σ C | 0..1 |
Maximum
Allowed
Value
(for
some
types)
|
|
|
date | |||
|
dateTime | |||
|
instant | |||
|
time | |||
|
decimal | |||
|
integer | |||
|
integer64 | |||
| positiveInt | |||
|
unsignedInt | |||
|
Quantity | |||
|
Σ C | 0..1 | integer |
Max
length
for
|
|
Σ | 0..* | id |
Reference
to
invariant
about
presence
|
|
Σ C | 0..* | Element |
Condition
that
must
evaluate
to
true
+ Warning: Constraints should have an expression or else validators will not be able to enforce them + Rule: Errors cannot be suppressed |
|
Σ
|
1..1 | id |
Target
of
'condition'
reference
above
|
|
Σ | 0..1 |
|
Why
this
constraint
is
necessary
or
appropriate
|
|
Σ C | 1..1 | code |
error
|
warning
Binding: ConstraintSeverity ( Required ) |
|
Σ
C
|
0..1 |
|
Suppress
warning
or
hint
in
profile
|
|
Σ T | 1..1 | string |
Human
description
of
constraint
|
|
Σ C | 0..1 | string |
FHIRPath
expression
of
constraint
|
|
Σ | 0..1 | canonical ( StructureDefinition ) |
Reference
to
original
source
of
constraint
|
|
Σ C | 0..1 | boolean |
For
primitives,
that
a
value
must
be
present
-
not
replaced
by
an
extension
|
![]() ![]() | Σ C | 0..* | canonical ( StructureDefinition ) |
Extensions
that
are
allowed
to
replace
a
primitive
value
|
| Σ | 0..1 | boolean |
If
the
element
must
be
supported
(discouraged
-
see
obligations)
|
|
Σ C | 0..1 | boolean |
If
this
modifies
the
meaning
of
other
elements
|
|
Σ C | 0..1 | string |
Reason
that
this
element
is
marked
as
a
modifier
|
|
Σ | 0..1 | boolean |
Include
when
_summary
=
true?
|
|
Σ
|
0..1 | Element |
ValueSet
details
if
this
is
coded
+ Rule: ValueSet + Rule: binding SHALL have either description or valueSet + Rule: If the strength is 'descriptive' no value set can ve provided + Guideline: if there's a required binding with no usage, it should be the base binding |
|
Σ | 1..1 | code |
required
|
extensible
|
preferred
|
example
|
descriptive
Binding: BindingStrength ( Required ) |
|
Σ
T
C
|
0..1 | markdown |
Guidance
on
the
codes
to
be
used
|
|
| 0..1 | canonical ( ValueSet ) |
Source
of
|
|
Σ C | 0..* |
|
Additional
Bindings
-
more
rules
about
the
binding
+ Guideline: additionalBindings should have a key |
![]() ![]() ![]() ![]() |
Σ | 0..1 | id |
Unique
identifier
so
additional
bindings
to
be
matched
across
profiles
|
|
Σ | 1..1 | code |
maximum
|
minimum
|
required
|
extensible
|
candidate
|
current
|
current-extensible
|
best-practice
|
preferred
|
ui
|
starter
|
component
Binding: Additional Binding Purpose ValueSet ( Required ) |
|
Σ | 1..1 | canonical ( ValueSet ) |
The
value
set
for
the
additional
binding
|
|
Σ | 0..1 | markdown |
Documentation
of
the
purpose
of
use
of
the
binding
|
|
Σ | 0..1 | string |
Concise
documentation
-
for
summary
tables
|
|
Σ | 0..* | UsageContext |
Qualifies
the
usage
-
jurisdiction,
gender,
workflow
status
etc.
|
![]() ![]() ![]() ![]() | Σ | 0..1 |
boolean
|
Whether
binding
can
applies
to
all
repeats,
or
just
one
|
|
Σ C | 0..* | Element |
Map
element
to
another
set
of
definitions
|
|
Σ C | 1..1 | id |
Reference
to
mapping
declaration
|
|
Σ | 0..1 | code |
Computable
language
of
mapping
|
|
Σ | 1..1 | string |
Details
of
the
mapping
|
|
Σ | 0..1 |
|
Comments
about
the
mapping
or
its
use
|
Documentation
for
this
format
|
||||
XML Template
< xmlns="http://hl7.org/fhir"><ElementDefinition xmlns="http://hl7.org/fhir"> <!-- from Element: extension -->< < < < <</code> < < <<path value="[string]"/><!-- I 1..1 Path of the element in the hierarchy of elements --> <representation value="[code]"/><!-- 0..* xmlAttr | xmlText | typeAttr | cdaText | xhtml --> <sliceName value="[string]"/><!-- I 0..1 Name for this particular element (in a set of slices) --> <sliceIsConstraining value="[boolean]"/><!-- I 0..1 If this slice definition constrains an inherited slice definition (or not) --> <label value="[string]"/><!-- 0..1 String to display with or prompt for element --> <code><!-- 0..* Coding Corresponding codes in terminologies--></code> <slicing> <!-- I 0..1 This element is sliced - slices follow --> <discriminator> <!-- 0..* Element values that are used to distinguish the slices --> <type value="[code]"/><!-- 1..1 value | exists | type | profile | position --> <path value="[string]"/><!-- 1..1 Path to element value --> </discriminator>
< < <<description value="[string]"/><!-- 0..1 Text description of how slicing works (or not) --> <ordered value="[boolean]"/><!-- I 0..1 If elements must be in same order as slices --> <rules value="[code]"/><!-- I 1..1 closed | open | openAtEnd --> </slicing> <short value="[string]"/><!-- 0..1 Concise definition for space-constrained presentation -->< < <<definition value="[markdown]"/><!-- 0..1 Full formal definition as narrative text --> <comment value="[markdown]"/><!-- 0..1 Comments about the use of this element --> <requirements value="[markdown]"/><!-- 0..1 Requirements satisfied by this element/structure and its constraints --> <alias value="[string]"/><!-- 0..* Other names -->< < <<min value="[unsignedInt]"/><!-- I 0..1 Minimum Cardinality --> <max value="[string]"/><!-- I 0..1 Maximum Cardinality (a number or *) --> <base> <!-- 0..1 Base definition information for tools --> <path value="[string]"/><!-- 1..1 Path that identifies the base element --> <min value="[unsignedInt]"/><!-- 1..1 Min cardinality of the base element --> <max value="[string]"/><!-- 1..1 Max cardinality of the base element --> </base>< < < <</profile> <</targetProfile> <<contentReference value="[uri]"/><!-- I 0..1 Reference to definition of content for the element --> <type> <!-- I 0..* Data type and Profile for this element --> <code value="[uri]"/><!-- I 1..1 Data type or Resource (reference to definition) --> <profile><!-- 0..* canonical(ImplementationGuide|StructureDefinition) Profiles (StructureDefinition or IG) - one must apply --></profile> <targetProfile><!-- I 0..* canonical(ImplementationGuide|StructureDefinition) Profile (StructureDefinition or IG) on the Reference/canonical target - one must apply --></targetProfile> <aggregation value="[code]"/><!-- I 0..* contained | referenced | bundled - how aggregated --> <versioning value="[code]"/><!-- 0..1 either | independent | specific --> </type><</defaultValue[x]> < < <</fixed[x]> <</pattern[x]> < <<defaultValue[x]><!-- I 0..1 * Specified value if missing from instance --></defaultValue[x]> <meaningWhenMissing value="[markdown]"/><!-- I 0..1 Implicit meaning when this element is missing --> <orderMeaning value="[string]"/><!-- I 0..1 What the order of the elements means --> <fixed[x]><!-- I 0..1 * Value must be exactly this --></fixed[x]> <pattern[x]><!-- I 0..1 * Value must have at least these property values --></pattern[x]> <example> <!-- I 0..* Example value (as defined for type) --> <label value="[string]"/><!-- 1..1 Describes the purpose of this example --> <value[x]><!-- 1..1 * Value of Example (one of allowed types) --></value[x]> </example><| </minValue[x]> <| </maxValue[x]> <<minValue[x]><!-- I 0..1 date|dateTime|instant|time|decimal|integer|integer64| positiveInt|unsignedInt|Quantity Minimum Allowed Value (for some types) --></minValue[x]> <maxValue[x]><!-- I 0..1 date|dateTime|instant|time|decimal|integer|integer64| positiveInt|unsignedInt|Quantity Maximum Allowed Value (for some types) --></maxValue[x]> <maxLength value="[integer]"/><!-- I 0..1 Max length for string type data --> <condition value="[id]"/><!-- 0..* Reference to invariant about presence -->< < < <<constraint> <!-- I 0..* Condition that must evaluate to true --> <key value="[id]"/><!-- I 1..1 Target of 'condition' reference above --> <requirements value="[markdown]"/><!-- 0..1 Why this constraint is necessary or appropriate --> <severity value="[code]"/><!-- I 1..1 error | warning --> <suppress value="[boolean]"/><!-- I 0..1 Suppress warning or hint in profile --> <human value="[string]"/><!-- 1..1 Human description of constraint -->< <<expression value="[string]"/><!-- I 0..1 FHIRPath expression of constraint --> <source><!-- 0..1 canonical(StructureDefinition) Reference to original source of constraint --></source> </constraint>< < <<mustHaveValue value="[boolean]"/><!-- I 0..1 For primitives, that a value must be present - not replaced by an extension --> <valueAlternatives><!-- I 0..* canonical(StructureDefinition) Extensions that are allowed to replace a primitive value --></valueAlternatives> <mustSupport value="[boolean]"/><!-- 0..1 If the element must be supported (discouraged - see obligations) --> <isModifier value="[boolean]"/><!-- I 0..1 If this modifies the meaning of other elements --> <isModifierReason value="[string]"/><!-- I 0..1 Reason that this element is marked as a modifier --> <isSummary value="[boolean]"/><!-- 0..1 Include when _summary = true? -->< < < <</valueSet[x]><binding> <!-- I 0..1 ValueSet details if this is coded --> <strength value="[code]"/><!-- 1..1 required | extensible | preferred | example | descriptive --> <description value="[markdown]"/><!-- I 0..1 Guidance on the codes to be used --> <valueSet><!-- I 0..1 canonical(ValueSet) Source of value set --></valueSet> <additional> <!-- 0..* Additional Bindings - more rules about the binding --> <key value="[id]"/><!-- 0..1 Unique identifier so additional bindings to be matched across profiles --> <purpose value="[code]"/><!-- 1..1 maximum | minimum | required | extensible | candidate | current | current-extensible | best-practice | preferred | ui | starter | component --> <valueSet><!-- 1..1 canonical(ValueSet) The value set for the additional binding --></valueSet> <documentation value="[markdown]"/><!-- 0..1 Documentation of the purpose of use of the binding --> <shortDoco value="[string]"/><!-- 0..1 Concise documentation - for summary tables --> <usage><!-- 0..* UsageContext Qualifies the usage - jurisdiction, gender, workflow status etc. --></usage> <any value="[boolean]"/><!-- 0..1 Whether binding can applies to all repeats, or just one --> </additional> </binding>< < <<mapping> <!-- I 0..* Map element to another set of definitions --> <identity value="[id]"/><!-- I 1..1 Reference to mapping declaration --> <language value="[code]"/><!-- 0..1 Computable language of mapping --> <map value="[string]"/><!-- 1..1 Details of the mapping --><<comment value="[markdown]"/><!-- 0..1 Comments about the mapping or its use --> </mapping></[name]></ElementDefinition>
JSON Template
{
// from Element: extension
"
"
"
"
"
"
"
"
"path" : "<string>", // I R! Path of the element in the hierarchy of elements
"representation" : ["<code>"], // xmlAttr | xmlText | typeAttr | cdaText | xhtml
"sliceName" : "<string>", // I Name for this particular element (in a set of slices)
"sliceIsConstraining" : <boolean>, // I If this slice definition constrains an inherited slice definition (or not)
"label" : "<string>", // String to display with or prompt for element
"code" : [{ Coding }], // Corresponding codes in terminologies
"slicing" : { // I This element is sliced - slices follow
"discriminator" : [{ // Element values that are used to distinguish the slices
"type" : "<code>", // R! value | exists | type | profile | position
"path" : "<string>" // R! Path to element value
}],
"
"
"
"description" : "<string>", // Text description of how slicing works (or not)
"ordered" : <boolean>, // I If elements must be in same order as slices
"rules" : "<code>" // I R! closed | open | openAtEnd
},
"short" : "<string>", // Concise definition for space-constrained presentation
"
"
"
"definition" : "<markdown>", // Full formal definition as narrative text
"comment" : "<markdown>", // Comments about the use of this element
"requirements" : "<markdown>", // Requirements satisfied by this element/structure and its constraints
"alias" : ["<string>"], // Other names
"
"
"
"min" : "<unsignedInt>", // I Minimum Cardinality
"max" : "<string>", // I Maximum Cardinality (a number or *)
"base" : { // Base definition information for tools
"path" : "<string>", // R! Path that identifies the base element
"min" : "<unsignedInt>", // R! Min cardinality of the base element
"max" : "<string>" // R! Max cardinality of the base element
},
"
"
"
"
"
"
"contentReference" : "<uri>", // I Reference to definition of content for the element
"type" : [{ // I Data type and Profile for this element
"code" : "<uri>", // I R! Data type or Resource (reference to definition)
"profile" : ["<canonical(StructureDefinition|ImplementationGuide)>"], // Profiles (StructureDefinition or IG) - one must apply
"targetProfile" : ["<canonical(StructureDefinition|ImplementationGuide)>"], // I Profile (StructureDefinition or IG) on the Reference/canonical target - one must apply
"aggregation" : ["<code>"], // I contained | referenced | bundled - how aggregated
"versioning" : "<code>" // either | independent | specific
}],
">,
">,
">",
// defaultValue[x]: Specified value if missing from instance. One of these 55:
"defaultValueBase64Binary" : "<base64Binary>",
"defaultValueBoolean" : <boolean>,
"defaultValueCanonical" : "<canonical>",
"defaultValueCode" : "<code>",
"defaultValueDate" : "<date>",
"defaultValueDateTime" : "<dateTime>",
"defaultValueDecimal" : <decimal>,
"defaultValueId" : "<id>",
"defaultValueInstant" : "<instant>",
"defaultValueInteger" : <integer>,
"defaultValueInteger64" : "<integer64>",
"defaultValueMarkdown" : "<markdown>",
"defaultValueOid" : "<oid>",
"defaultValuePositiveInt" : "<positiveInt>",
"defaultValueString" : "<string>",
"defaultValueTime" : "<time>",
"defaultValueUnsignedInt" : "<unsignedInt>",
"defaultValueUri" : "<uri>",
">,
">",
">",
" },
" },
"defaultValueUrl" : "<url>",
"defaultValueUuid" : "<uuid>",
"defaultValueAddress" : { Address },
"defaultValueAge" : { Age },
"defaultValueAnnotation" : { Annotation },
"defaultValueAttachment" : { Attachment },
"defaultValueCodeableConcept" : { CodeableConcept },
"defaultValueCodeableReference" : { CodeableReference },
"defaultValueCoding" : { Coding },
"defaultValueContactPoint" : { ContactPoint },
"defaultValueCount" : { Count },
"defaultValueDistance" : { Distance },
"defaultValueDuration" : { Duration },
"defaultValueHumanName" : { HumanName },
"defaultValueIdentifier" : { Identifier },
"defaultValueMoney" : { Money },
"defaultValuePeriod" : { Period },
"defaultValueQuantity" : { Quantity },
"defaultValueRange" : { Range },
" },
"defaultValueRatio" : { Ratio },
" },
" },
" },
" },
"defaultValueRatioRange" : { RatioRange },
"defaultValueReference" : { Reference },
"
"
">,
">,
">",
">",
">",
">",
">",
">,
">",
">",
" },
" },
" },
" },
" },
" },
" },
" },
" },
" },
" },
" },
" },
">,
">,
">",
">",
">",
">",
">",
">,
">",
">",
" },
" },
" },
" },
" },
" },
" },
" },
" },
" },
" },
" },
" },
"
"
">
">
">"
">"
">"
">"
">"
">
">"
"defaultValueSampledData" : { SampledData },
"defaultValueSignature" : { Signature },
"defaultValueTiming" : { Timing },
"defaultValueContactDetail" : { ContactDetail },
"defaultValueDataRequirement" : { DataRequirement },
"defaultValueExpression" : { Expression },
"defaultValueParameterDefinition" : { ParameterDefinition },
"defaultValueRelatedArtifact" : { RelatedArtifact },
"defaultValueTriggerDefinition" : { TriggerDefinition },
"defaultValueUsageContext" : { UsageContext },
"defaultValueAvailability" : { Availability },
"defaultValueExtendedContactDetail" : { ExtendedContactDetail },
"defaultValueVirtualServiceDetail" : { VirtualServiceDetail },
"defaultValueDosage" : { Dosage },
"defaultValueMeta" : { Meta },
"meaningWhenMissing" : "<markdown>", // I Implicit meaning when this element is missing
"orderMeaning" : "<string>", // I What the order of the elements means
// fixed[x]: Value must be exactly this. One of these 55:
"fixedBase64Binary" : "<base64Binary>",
"fixedBoolean" : <boolean>,
"fixedCanonical" : "<canonical>",
"fixedCode" : "<code>",
"fixedDate" : "<date>",
"fixedDateTime" : "<dateTime>",
"fixedDecimal" : <decimal>,
"fixedId" : "<id>",
"fixedInstant" : "<instant>",
"fixedInteger" : <integer>,
"fixedInteger64" : "<integer64>",
"fixedMarkdown" : "<markdown>",
"fixedOid" : "<oid>",
"fixedPositiveInt" : "<positiveInt>",
"fixedString" : "<string>",
"fixedTime" : "<time>",
"fixedUnsignedInt" : "<unsignedInt>",
"fixedUri" : "<uri>",
"fixedUrl" : "<url>",
"fixedUuid" : "<uuid>",
"fixedAddress" : { Address },
"fixedAge" : { Age },
"fixedAnnotation" : { Annotation },
"fixedAttachment" : { Attachment },
"fixedCodeableConcept" : { CodeableConcept },
"fixedCodeableReference" : { CodeableReference },
"fixedCoding" : { Coding },
"fixedContactPoint" : { ContactPoint },
"fixedCount" : { Count },
"fixedDistance" : { Distance },
"fixedDuration" : { Duration },
"fixedHumanName" : { HumanName },
"fixedIdentifier" : { Identifier },
"fixedMoney" : { Money },
"fixedPeriod" : { Period },
"fixedQuantity" : { Quantity },
"fixedRange" : { Range },
"fixedRatio" : { Ratio },
"fixedRatioRange" : { RatioRange },
"fixedReference" : { Reference },
"fixedSampledData" : { SampledData },
"fixedSignature" : { Signature },
"fixedTiming" : { Timing },
"fixedContactDetail" : { ContactDetail },
"fixedDataRequirement" : { DataRequirement },
"fixedExpression" : { Expression },
"fixedParameterDefinition" : { ParameterDefinition },
"fixedRelatedArtifact" : { RelatedArtifact },
"fixedTriggerDefinition" : { TriggerDefinition },
"fixedUsageContext" : { UsageContext },
"fixedAvailability" : { Availability },
"fixedExtendedContactDetail" : { ExtendedContactDetail },
"fixedVirtualServiceDetail" : { VirtualServiceDetail },
"fixedDosage" : { Dosage },
"fixedMeta" : { Meta },
// pattern[x]: Value must have at least these property values. One of these 55:
"patternBase64Binary" : "<base64Binary>",
"patternBoolean" : <boolean>,
"patternCanonical" : "<canonical>",
"patternCode" : "<code>",
"patternDate" : "<date>",
"patternDateTime" : "<dateTime>",
"patternDecimal" : <decimal>,
"patternId" : "<id>",
"patternInstant" : "<instant>",
"patternInteger" : <integer>,
"patternInteger64" : "<integer64>",
"patternMarkdown" : "<markdown>",
"patternOid" : "<oid>",
"patternPositiveInt" : "<positiveInt>",
"patternString" : "<string>",
"patternTime" : "<time>",
"patternUnsignedInt" : "<unsignedInt>",
"patternUri" : "<uri>",
"patternUrl" : "<url>",
"patternUuid" : "<uuid>",
"patternAddress" : { Address },
"patternAge" : { Age },
"patternAnnotation" : { Annotation },
"patternAttachment" : { Attachment },
"patternCodeableConcept" : { CodeableConcept },
"patternCodeableReference" : { CodeableReference },
"patternCoding" : { Coding },
"patternContactPoint" : { ContactPoint },
"patternCount" : { Count },
"patternDistance" : { Distance },
"patternDuration" : { Duration },
"patternHumanName" : { HumanName },
"patternIdentifier" : { Identifier },
"patternMoney" : { Money },
"patternPeriod" : { Period },
"patternQuantity" : { Quantity },
"patternRange" : { Range },
"patternRatio" : { Ratio },
"patternRatioRange" : { RatioRange },
"patternReference" : { Reference },
"patternSampledData" : { SampledData },
"patternSignature" : { Signature },
"patternTiming" : { Timing },
"patternContactDetail" : { ContactDetail },
"patternDataRequirement" : { DataRequirement },
"patternExpression" : { Expression },
"patternParameterDefinition" : { ParameterDefinition },
"patternRelatedArtifact" : { RelatedArtifact },
"patternTriggerDefinition" : { TriggerDefinition },
"patternUsageContext" : { UsageContext },
"patternAvailability" : { Availability },
"patternExtendedContactDetail" : { ExtendedContactDetail },
"patternVirtualServiceDetail" : { VirtualServiceDetail },
"patternDosage" : { Dosage },
"patternMeta" : { Meta },
"example" : [{ // I Example value (as defined for type)
"label" : "<string>", // R! Describes the purpose of this example
// value[x]: Value of Example (one of allowed types). One of these 55:
"valueBase64Binary" : "<base64Binary>"
" }
" }
" }
" }
" }
" }
" }
" }
" }
" }
" }
" }
" }
"valueBoolean" : <boolean>,
"valueCanonical" : "<canonical>",
"valueCode" : "<code>",
"valueDate" : "<date>",
"valueDateTime" : "<dateTime>",
"valueDecimal" : <decimal>,
"valueId" : "<id>",
"valueInstant" : "<instant>",
"valueInteger" : <integer>,
"valueInteger64" : "<integer64>",
"valueMarkdown" : "<markdown>",
"valueOid" : "<oid>",
"valuePositiveInt" : "<positiveInt>",
"valueString" : "<string>",
"valueTime" : "<time>",
"valueUnsignedInt" : "<unsignedInt>",
"valueUri" : "<uri>",
"valueUrl" : "<url>",
"valueUuid" : "<uuid>",
"valueAddress" : { Address },
"valueAge" : { Age },
"valueAnnotation" : { Annotation },
"valueAttachment" : { Attachment },
"valueCodeableConcept" : { CodeableConcept },
"valueCodeableReference" : { CodeableReference },
"valueCoding" : { Coding },
"valueContactPoint" : { ContactPoint },
"valueCount" : { Count },
"valueDistance" : { Distance },
"valueDuration" : { Duration },
"valueHumanName" : { HumanName },
"valueIdentifier" : { Identifier },
"valueMoney" : { Money },
"valuePeriod" : { Period },
"valueQuantity" : { Quantity },
"valueRange" : { Range },
"valueRatio" : { Ratio },
"valueRatioRange" : { RatioRange },
"valueReference" : { Reference },
"valueSampledData" : { SampledData },
"valueSignature" : { Signature },
"valueTiming" : { Timing },
"valueContactDetail" : { ContactDetail },
"valueDataRequirement" : { DataRequirement },
"valueExpression" : { Expression },
"valueParameterDefinition" : { ParameterDefinition },
"valueRelatedArtifact" : { RelatedArtifact },
"valueTriggerDefinition" : { TriggerDefinition },
"valueUsageContext" : { UsageContext },
"valueAvailability" : { Availability },
"valueExtendedContactDetail" : { ExtendedContactDetail },
"valueVirtualServiceDetail" : { VirtualServiceDetail },
"valueDosage" : { Dosage },
"valueMeta" : { Meta },
}],
// minValue[x]: Minimum Allowed Value (for some types). One of these 10:
"minValueDate" : "<date>",
"minValueDateTime" : "<dateTime>",
"minValueInstant" : "<instant>",
"minValueTime" : "<time>",
"minValueDecimal" : <decimal>,
"minValueInteger" : <integer>,
"minValueInteger64" : "<integer64>",
"minValuePositiveInt" : "<positiveInt>",
"minValueUnsignedInt" : "<unsignedInt>",
"minValueQuantity" : { Quantity },
// maxValue[x]: Maximum Allowed Value (for some types). One of these 10:
"maxValueDate" : "<date>",
"maxValueDateTime" : "<dateTime>",
"maxValueInstant" : "<instant>",
"maxValueTime" : "<time>",
"maxValueDecimal" : <decimal>,
"maxValueInteger" : <integer>,
"maxValueInteger64" : "<integer64>",
"maxValuePositiveInt" : "<positiveInt>",
"maxValueUnsignedInt" : "<unsignedInt>",
"maxValueQuantity" : { Quantity },
"
"maxLength" : <integer>, // I Max length for string type data
"condition" : ["<id>"], // Reference to invariant about presence
"
"
"
"
"constraint" : [{ // I Condition that must evaluate to true
"key" : "<id>", // I R! Target of 'condition' reference above
"requirements" : "<markdown>", // Why this constraint is necessary or appropriate
"severity" : "<code>", // I R! error | warning
"suppress" : <boolean>, // I Suppress warning or hint in profile
"human" : "<string>", // R! Human description of constraint
"
"
"
"expression" : "<string>", // I FHIRPath expression of constraint
"source" : "<canonical(StructureDefinition)>" // Reference to original source of constraint
}],
"
"
"
"mustHaveValue" : <boolean>, // I For primitives, that a value must be present - not replaced by an extension
"valueAlternatives" : ["<canonical(StructureDefinition)>"], // I Extensions that are allowed to replace a primitive value
"mustSupport" : <boolean>, // If the element must be supported (discouraged - see obligations)
"isModifier" : <boolean>, // I If this modifies the meaning of other elements
"isModifierReason" : "<string>", // I Reason that this element is marked as a modifier
"isSummary" : <boolean>, // Include when _summary = true?
"
"
"
">"
">"
"binding" : { // I ValueSet details if this is coded
"strength" : "<code>", // R! required | extensible | preferred | example | descriptive
"description" : "<markdown>", // I Guidance on the codes to be used
"valueSet" : "<canonical(ValueSet)>", // I Source of value set
"additional" : [{ // Additional Bindings - more rules about the binding
"key" : "<id>", // Unique identifier so additional bindings to be matched across profiles
"purpose" : "<code>", // R! maximum | minimum | required | extensible | candidate | current | current-extensible | best-practice | preferred | ui | starter | component
"valueSet" : "<canonical(ValueSet)>", // R! The value set for the additional binding
"documentation" : "<markdown>", // Documentation of the purpose of use of the binding
"shortDoco" : "<string>", // Concise documentation - for summary tables
"usage" : [{ UsageContext }], // Qualifies the usage - jurisdiction, gender, workflow status etc.
"any" : <boolean> // Whether binding can applies to all repeats, or just one
}]
},
"
"
"
"mapping" : [{ // I Map element to another set of definitions
"identity" : "<id>", // I R! Reference to mapping declaration
"language" : "<code>", // Computable language of mapping
"map" : "<string>", // R! Details of the mapping
"
"comment" : "<markdown>" // Comments about the mapping or its use
}]
}
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> . [# from Element: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: ], ...; fhir: fhir: fhir: ]; fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: ]; fhir: fhir: fhir: fhir: fhir: fhir: fhir: ], ...; # . One of these 48 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: fhir: # . One of these 48 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] # . One of these 48 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: fhir: # . One of these 48 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] ], ...; # . One of these 9 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] # . One of these 9 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: ], ...; fhir: fhir: fhir: fhir: fhir: fhir: fhir: # . One of these 2 fhir: ] fhir:) ] ]; fhir: fhir: fhir: fhir: fhir: ], ...;# from Element: fhir:extension fhir:path [ string ] ; # 1..1 I Path of the element in the hierarchy of elements fhir:representation ( [ code ] ... ) ; # 0..* xmlAttr | xmlText | typeAttr | cdaText | xhtml fhir:sliceName [ string ] ; # 0..1 I Name for this particular element (in a set of slices) fhir:sliceIsConstraining [ boolean ] ; # 0..1 I If this slice definition constrains an inherited slice definition (or not) fhir:label [ string ] ; # 0..1 String to display with or prompt for element fhir:code ( [ Coding ] ... ) ; # 0..* Corresponding codes in terminologies fhir:slicing [ # 0..1 I This element is sliced - slices follow fhir:discriminator ( [ # 0..* Element values that are used to distinguish the slices fhir:type [ code ] ; # 1..1 value | exists | type | profile | position fhir:path [ string ] ; # 1..1 Path to element value ] ... ) ; fhir:description [ string ] ; # 0..1 Text description of how slicing works (or not) fhir:ordered [ boolean ] ; # 0..1 I If elements must be in same order as slices fhir:rules [ code ] ; # 1..1 I closed | open | openAtEnd ] ; fhir:short [ string ] ; # 0..1 Concise definition for space-constrained presentation fhir:definition [ markdown ] ; # 0..1 Full formal definition as narrative text fhir:comment [ markdown ] ; # 0..1 Comments about the use of this element fhir:requirements [ markdown ] ; # 0..1 Requirements satisfied by this element/structure and its constraints fhir:alias ( [ string ] ... ) ; # 0..* Other names fhir:min [ unsignedInt ] ; # 0..1 I Minimum Cardinality fhir:max [ string ] ; # 0..1 I Maximum Cardinality (a number or *) fhir:base [ # 0..1 Base definition information for tools fhir:path [ string ] ; # 1..1 Path that identifies the base element fhir:min [ unsignedInt ] ; # 1..1 Min cardinality of the base element fhir:max [ string ] ; # 1..1 Max cardinality of the base element ] ; fhir:contentReference [ uri ] ; # 0..1 I Reference to definition of content for the element fhir:type ( [ # 0..* I Data type and Profile for this element fhir:code [ uri ] ; # 1..1 I Data type or Resource (reference to definition) fhir:profile ( [ canonical(ImplementationGuide|StructureDefinition) ] ... ) ; # 0..* Profiles (StructureDefinition or IG) - one must apply fhir:targetProfile ( [ canonical(ImplementationGuide|StructureDefinition) ] ... ) ; # 0..* I Profile (StructureDefinition or IG) on the Reference/canonical target - one must apply fhir:aggregation ( [ code ] ... ) ; # 0..* I contained | referenced | bundled - how aggregated fhir:versioning [ code ] ; # 0..1 either | independent | specific ] ... ) ; # defaultValue[x] : 0..1 I Specified value if missing from instance. One of these 55 fhir:defaultValue [ a fhir:Base64Binary ; base64Binary ] fhir:defaultValue [ a fhir:Boolean ; boolean ] fhir:defaultValue [ a fhir:Canonical ; canonical ] fhir:defaultValue [ a fhir:Code ; code ] fhir:defaultValue [ a fhir:Date ; date ] fhir:defaultValue [ a fhir:DateTime ; dateTime ] fhir:defaultValue [ a fhir:Decimal ; decimal ] fhir:defaultValue [ a fhir:Id ; id ] fhir:defaultValue [ a fhir:Instant ; instant ] fhir:defaultValue [ a fhir:Integer ; integer ] fhir:defaultValue [ a fhir:Integer64 ; integer64 ] fhir:defaultValue [ a fhir:Markdown ; markdown ] fhir:defaultValue [ a fhir:Oid ; oid ] fhir:defaultValue [ a fhir:PositiveInt ; positiveInt ] fhir:defaultValue [ a fhir:String ; string ] fhir:defaultValue [ a fhir:Time ; time ] fhir:defaultValue [ a fhir:UnsignedInt ; unsignedInt ] fhir:defaultValue [ a fhir:Uri ; uri ] fhir:defaultValue [ a fhir:Url ; url ] fhir:defaultValue [ a fhir:Uuid ; uuid ] fhir:defaultValue [ a fhir:Address ; Address ] fhir:defaultValue [ a fhir:Age ; Age ] fhir:defaultValue [ a fhir:Annotation ; Annotation ] fhir:defaultValue [ a fhir:Attachment ; Attachment ] fhir:defaultValue [ a fhir:CodeableConcept ; CodeableConcept ] fhir:defaultValue [ a fhir:CodeableReference ; CodeableReference ] fhir:defaultValue [ a fhir:Coding ; Coding ] fhir:defaultValue [ a fhir:ContactPoint ; ContactPoint ] fhir:defaultValue [ a fhir:Count ; Count ] fhir:defaultValue [ a fhir:Distance ; Distance ] fhir:defaultValue [ a fhir:Duration ; Duration ] fhir:defaultValue [ a fhir:HumanName ; HumanName ] fhir:defaultValue [ a fhir:Identifier ; Identifier ] fhir:defaultValue [ a fhir:Money ; Money ] fhir:defaultValue [ a fhir:Period ; Period ] fhir:defaultValue [ a fhir:Quantity ; Quantity ] fhir:defaultValue [ a fhir:Range ; Range ] fhir:defaultValue [ a fhir:Ratio ; Ratio ] fhir:defaultValue [ a fhir:RatioRange ; RatioRange ] fhir:defaultValue [ a fhir:Reference ; Reference ] fhir:defaultValue [ a fhir:SampledData ; SampledData ] fhir:defaultValue [ a fhir:Signature ; Signature ] fhir:defaultValue [ a fhir:Timing ; Timing ] fhir:defaultValue [ a fhir:ContactDetail ; ContactDetail ] fhir:defaultValue [ a fhir:DataRequirement ; DataRequirement ] fhir:defaultValue [ a fhir:Expression ; Expression ] fhir:defaultValue [ a fhir:ParameterDefinition ; ParameterDefinition ] fhir:defaultValue [ a fhir:RelatedArtifact ; RelatedArtifact ] fhir:defaultValue [ a fhir:TriggerDefinition ; TriggerDefinition ] fhir:defaultValue [ a fhir:UsageContext ; UsageContext ] fhir:defaultValue [ a fhir:Availability ; Availability ] fhir:defaultValue [ a fhir:ExtendedContactDetail ; ExtendedContactDetail ] fhir:defaultValue [ a fhir:VirtualServiceDetail ; VirtualServiceDetail ] fhir:defaultValue [ a fhir:Dosage ; Dosage ] fhir:defaultValue [ a fhir:Meta ; Meta ] fhir:meaningWhenMissing [ markdown ] ; # 0..1 I Implicit meaning when this element is missing fhir:orderMeaning [ string ] ; # 0..1 I What the order of the elements means # fixed[x] : 0..1 I Value must be exactly this. One of these 55 fhir:fixed [ a fhir:Base64Binary ; base64Binary ] fhir:fixed [ a fhir:Boolean ; boolean ] fhir:fixed [ a fhir:Canonical ; canonical ] fhir:fixed [ a fhir:Code ; code ] fhir:fixed [ a fhir:Date ; date ] fhir:fixed [ a fhir:DateTime ; dateTime ] fhir:fixed [ a fhir:Decimal ; decimal ] fhir:fixed [ a fhir:Id ; id ] fhir:fixed [ a fhir:Instant ; instant ] fhir:fixed [ a fhir:Integer ; integer ] fhir:fixed [ a fhir:Integer64 ; integer64 ] fhir:fixed [ a fhir:Markdown ; markdown ] fhir:fixed [ a fhir:Oid ; oid ] fhir:fixed [ a fhir:PositiveInt ; positiveInt ] fhir:fixed [ a fhir:String ; string ] fhir:fixed [ a fhir:Time ; time ] fhir:fixed [ a fhir:UnsignedInt ; unsignedInt ] fhir:fixed [ a fhir:Uri ; uri ] fhir:fixed [ a fhir:Url ; url ] fhir:fixed [ a fhir:Uuid ; uuid ] fhir:fixed [ a fhir:Address ; Address ] fhir:fixed [ a fhir:Age ; Age ] fhir:fixed [ a fhir:Annotation ; Annotation ] fhir:fixed [ a fhir:Attachment ; Attachment ] fhir:fixed [ a fhir:CodeableConcept ; CodeableConcept ] fhir:fixed [ a fhir:CodeableReference ; CodeableReference ] fhir:fixed [ a fhir:Coding ; Coding ] fhir:fixed [ a fhir:ContactPoint ; ContactPoint ] fhir:fixed [ a fhir:Count ; Count ] fhir:fixed [ a fhir:Distance ; Distance ] fhir:fixed [ a fhir:Duration ; Duration ] fhir:fixed [ a fhir:HumanName ; HumanName ] fhir:fixed [ a fhir:Identifier ; Identifier ] fhir:fixed [ a fhir:Money ; Money ] fhir:fixed [ a fhir:Period ; Period ] fhir:fixed [ a fhir:Quantity ; Quantity ] fhir:fixed [ a fhir:Range ; Range ] fhir:fixed [ a fhir:Ratio ; Ratio ] fhir:fixed [ a fhir:RatioRange ; RatioRange ] fhir:fixed [ a fhir:Reference ; Reference ] fhir:fixed [ a fhir:SampledData ; SampledData ] fhir:fixed [ a fhir:Signature ; Signature ] fhir:fixed [ a fhir:Timing ; Timing ] fhir:fixed [ a fhir:ContactDetail ; ContactDetail ] fhir:fixed [ a fhir:DataRequirement ; DataRequirement ] fhir:fixed [ a fhir:Expression ; Expression ] fhir:fixed [ a fhir:ParameterDefinition ; ParameterDefinition ] fhir:fixed [ a fhir:RelatedArtifact ; RelatedArtifact ] fhir:fixed [ a fhir:TriggerDefinition ; TriggerDefinition ] fhir:fixed [ a fhir:UsageContext ; UsageContext ] fhir:fixed [ a fhir:Availability ; Availability ] fhir:fixed [ a fhir:ExtendedContactDetail ; ExtendedContactDetail ] fhir:fixed [ a fhir:VirtualServiceDetail ; VirtualServiceDetail ] fhir:fixed [ a fhir:Dosage ; Dosage ] fhir:fixed [ a fhir:Meta ; Meta ] # pattern[x] : 0..1 I Value must have at least these property values. One of these 55 fhir:pattern [ a fhir:Base64Binary ; base64Binary ] fhir:pattern [ a fhir:Boolean ; boolean ] fhir:pattern [ a fhir:Canonical ; canonical ] fhir:pattern [ a fhir:Code ; code ] fhir:pattern [ a fhir:Date ; date ] fhir:pattern [ a fhir:DateTime ; dateTime ] fhir:pattern [ a fhir:Decimal ; decimal ] fhir:pattern [ a fhir:Id ; id ] fhir:pattern [ a fhir:Instant ; instant ] fhir:pattern [ a fhir:Integer ; integer ] fhir:pattern [ a fhir:Integer64 ; integer64 ] fhir:pattern [ a fhir:Markdown ; markdown ] fhir:pattern [ a fhir:Oid ; oid ] fhir:pattern [ a fhir:PositiveInt ; positiveInt ] fhir:pattern [ a fhir:String ; string ] fhir:pattern [ a fhir:Time ; time ] fhir:pattern [ a fhir:UnsignedInt ; unsignedInt ] fhir:pattern [ a fhir:Uri ; uri ] fhir:pattern [ a fhir:Url ; url ] fhir:pattern [ a fhir:Uuid ; uuid ] fhir:pattern [ a fhir:Address ; Address ] fhir:pattern [ a fhir:Age ; Age ] fhir:pattern [ a fhir:Annotation ; Annotation ] fhir:pattern [ a fhir:Attachment ; Attachment ] fhir:pattern [ a fhir:CodeableConcept ; CodeableConcept ] fhir:pattern [ a fhir:CodeableReference ; CodeableReference ] fhir:pattern [ a fhir:Coding ; Coding ] fhir:pattern [ a fhir:ContactPoint ; ContactPoint ] fhir:pattern [ a fhir:Count ; Count ] fhir:pattern [ a fhir:Distance ; Distance ] fhir:pattern [ a fhir:Duration ; Duration ] fhir:pattern [ a fhir:HumanName ; HumanName ] fhir:pattern [ a fhir:Identifier ; Identifier ] fhir:pattern [ a fhir:Money ; Money ] fhir:pattern [ a fhir:Period ; Period ] fhir:pattern [ a fhir:Quantity ; Quantity ] fhir:pattern [ a fhir:Range ; Range ] fhir:pattern [ a fhir:Ratio ; Ratio ] fhir:pattern [ a fhir:RatioRange ; RatioRange ] fhir:pattern [ a fhir:Reference ; Reference ] fhir:pattern [ a fhir:SampledData ; SampledData ] fhir:pattern [ a fhir:Signature ; Signature ] fhir:pattern [ a fhir:Timing ; Timing ] fhir:pattern [ a fhir:ContactDetail ; ContactDetail ] fhir:pattern [ a fhir:DataRequirement ; DataRequirement ] fhir:pattern [ a fhir:Expression ; Expression ] fhir:pattern [ a fhir:ParameterDefinition ; ParameterDefinition ] fhir:pattern [ a fhir:RelatedArtifact ; RelatedArtifact ] fhir:pattern [ a fhir:TriggerDefinition ; TriggerDefinition ] fhir:pattern [ a fhir:UsageContext ; UsageContext ] fhir:pattern [ a fhir:Availability ; Availability ] fhir:pattern [ a fhir:ExtendedContactDetail ; ExtendedContactDetail ] fhir:pattern [ a fhir:VirtualServiceDetail ; VirtualServiceDetail ] fhir:pattern [ a fhir:Dosage ; Dosage ] fhir:pattern [ a fhir:Meta ; Meta ] fhir:example ( [ # 0..* I Example value (as defined for type) fhir:label [ string ] ; # 1..1 Describes the purpose of this example # value[x] : 1..1 Value of Example (one of allowed types). One of these 55 fhir:value [ a fhir:Base64Binary ; base64Binary ] fhir:value [ a fhir:Boolean ; boolean ] fhir:value [ a fhir:Canonical ; canonical ] fhir:value [ a fhir:Code ; code ] fhir:value [ a fhir:Date ; date ] fhir:value [ a fhir:DateTime ; dateTime ] fhir:value [ a fhir:Decimal ; decimal ] fhir:value [ a fhir:Id ; id ] fhir:value [ a fhir:Instant ; instant ] fhir:value [ a fhir:Integer ; integer ] fhir:value [ a fhir:Integer64 ; integer64 ] fhir:value [ a fhir:Markdown ; markdown ] fhir:value [ a fhir:Oid ; oid ] fhir:value [ a fhir:PositiveInt ; positiveInt ] fhir:value [ a fhir:String ; string ] fhir:value [ a fhir:Time ; time ] fhir:value [ a fhir:UnsignedInt ; unsignedInt ] fhir:value [ a fhir:Uri ; uri ] fhir:value [ a fhir:Url ; url ] fhir:value [ a fhir:Uuid ; uuid ] fhir:value [ a fhir:Address ; Address ] fhir:value [ a fhir:Age ; Age ] fhir:value [ a fhir:Annotation ; Annotation ] fhir:value [ a fhir:Attachment ; Attachment ] fhir:value [ a fhir:CodeableConcept ; CodeableConcept ] fhir:value [ a fhir:CodeableReference ; CodeableReference ] fhir:value [ a fhir:Coding ; Coding ] fhir:value [ a fhir:ContactPoint ; ContactPoint ] fhir:value [ a fhir:Count ; Count ] fhir:value [ a fhir:Distance ; Distance ] fhir:value [ a fhir:Duration ; Duration ] fhir:value [ a fhir:HumanName ; HumanName ] fhir:value [ a fhir:Identifier ; Identifier ] fhir:value [ a fhir:Money ; Money ] fhir:value [ a fhir:Period ; Period ] fhir:value [ a fhir:Quantity ; Quantity ] fhir:value [ a fhir:Range ; Range ] fhir:value [ a fhir:Ratio ; Ratio ] fhir:value [ a fhir:RatioRange ; RatioRange ] fhir:value [ a fhir:Reference ; Reference ] fhir:value [ a fhir:SampledData ; SampledData ] fhir:value [ a fhir:Signature ; Signature ] fhir:value [ a fhir:Timing ; Timing ] fhir:value [ a fhir:ContactDetail ; ContactDetail ] fhir:value [ a fhir:DataRequirement ; DataRequirement ] fhir:value [ a fhir:Expression ; Expression ] fhir:value [ a fhir:ParameterDefinition ; ParameterDefinition ] fhir:value [ a fhir:RelatedArtifact ; RelatedArtifact ] fhir:value [ a fhir:TriggerDefinition ; TriggerDefinition ] fhir:value [ a fhir:UsageContext ; UsageContext ] fhir:value [ a fhir:Availability ; Availability ] fhir:value [ a fhir:ExtendedContactDetail ; ExtendedContactDetail ] fhir:value [ a fhir:VirtualServiceDetail ; VirtualServiceDetail ] fhir:value [ a fhir:Dosage ; Dosage ] fhir:value [ a fhir:Meta ; Meta ] ] ... ) ; # minValue[x] : 0..1 I Minimum Allowed Value (for some types). One of these 10 fhir:minValue [ a fhir:Date ; date ] fhir:minValue [ a fhir:DateTime ; dateTime ] fhir:minValue [ a fhir:Instant ; instant ] fhir:minValue [ a fhir:Time ; time ] fhir:minValue [ a fhir:Decimal ; decimal ] fhir:minValue [ a fhir:Integer ; integer ] fhir:minValue [ a fhir:Integer64 ; integer64 ] fhir:minValue [ a fhir:PositiveInt ; positiveInt ] fhir:minValue [ a fhir:UnsignedInt ; unsignedInt ] fhir:minValue [ a fhir:Quantity ; Quantity ] # maxValue[x] : 0..1 I Maximum Allowed Value (for some types). One of these 10 fhir:maxValue [ a fhir:Date ; date ] fhir:maxValue [ a fhir:DateTime ; dateTime ] fhir:maxValue [ a fhir:Instant ; instant ] fhir:maxValue [ a fhir:Time ; time ] fhir:maxValue [ a fhir:Decimal ; decimal ] fhir:maxValue [ a fhir:Integer ; integer ] fhir:maxValue [ a fhir:Integer64 ; integer64 ] fhir:maxValue [ a fhir:PositiveInt ; positiveInt ] fhir:maxValue [ a fhir:UnsignedInt ; unsignedInt ] fhir:maxValue [ a fhir:Quantity ; Quantity ] fhir:maxLength [ integer ] ; # 0..1 I Max length for string type data fhir:condition ( [ id ] ... ) ; # 0..* Reference to invariant about presence fhir:constraint ( [ # 0..* I Condition that must evaluate to true fhir:key [ id ] ; # 1..1 I Target of 'condition' reference above fhir:requirements [ markdown ] ; # 0..1 Why this constraint is necessary or appropriate fhir:severity [ code ] ; # 1..1 I error | warning fhir:suppress [ boolean ] ; # 0..1 I Suppress warning or hint in profile fhir:human [ string ] ; # 1..1 Human description of constraint fhir:expression [ string ] ; # 0..1 I FHIRPath expression of constraint fhir:source [ canonical(StructureDefinition) ] ; # 0..1 Reference to original source of constraint ] ... ) ; fhir:mustHaveValue [ boolean ] ; # 0..1 I For primitives, that a value must be present - not replaced by an extension fhir:valueAlternatives ( [ canonical(StructureDefinition) ] ... ) ; # 0..* I Extensions that are allowed to replace a primitive value fhir:mustSupport [ boolean ] ; # 0..1 If the element must be supported (discouraged - see obligations) fhir:isModifier [ boolean ] ; # 0..1 I If this modifies the meaning of other elements fhir:isModifierReason [ string ] ; # 0..1 I Reason that this element is marked as a modifier fhir:isSummary [ boolean ] ; # 0..1 Include when _summary = true? fhir:binding [ # 0..1 I ValueSet details if this is coded fhir:strength [ code ] ; # 1..1 required | extensible | preferred | example | descriptive fhir:description [ markdown ] ; # 0..1 I Guidance on the codes to be used fhir:valueSet [ canonical(ValueSet) ] ; # 0..1 I Source of value set fhir:additional ( [ # 0..* Additional Bindings - more rules about the binding fhir:key [ id ] ; # 0..1 Unique identifier so additional bindings to be matched across profiles fhir:purpose [ code ] ; # 1..1 maximum | minimum | required | extensible | candidate | current | current-extensible | best-practice | preferred | ui | starter | component fhir:valueSet [ canonical(ValueSet) ] ; # 1..1 The value set for the additional binding fhir:documentation [ markdown ] ; # 0..1 Documentation of the purpose of use of the binding fhir:shortDoco [ string ] ; # 0..1 Concise documentation - for summary tables fhir:usage ( [ UsageContext ] ... ) ; # 0..* Qualifies the usage - jurisdiction, gender, workflow status etc. fhir:any [ boolean ] ; # 0..1 Whether binding can applies to all repeats, or just one ] ... ) ; ] ; fhir:mapping ( [ # 0..* I Map element to another set of definitions fhir:identity [ id ] ; # 1..1 I Reference to mapping declaration fhir:language [ code ] ; # 0..1 Computable language of mapping fhir:map [ string ] ; # 1..1 Details of the mapping fhir:comment [ markdown ] ; # 0..1 Comments about the mapping or its use ] ... ) ; ]
Changes
since
DSTU2
Release
3
Changes from both R4 and R4B
| ElementDefinition | |
|
|
|
|
|
|
| ElementDefinition.type.aggregation |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ElementDefinition.constraint.suppress |
|
| ElementDefinition.mustHaveValue |
|
| ElementDefinition.valueAlternatives |
|
|
|
|
|
|
|
| ElementDefinition.binding.additional |
|
|
|
|
|
|
|
| ElementDefinition.binding.additional.valueSet |
|
| ElementDefinition.binding.additional.documentation |
|
| ElementDefinition.binding.additional.shortDoco |
|
| ElementDefinition.binding.additional.usage |
|
| ElementDefinition.binding.additional.any |
|
|
|
|
| ElementDefinition.constraint.xpath |
|
See the Full Difference for further information
Constraints
|
| Level | Location | Description |
Expression
|
eld-2
| Rule | (base) |
Min
<=
Max
|
|
eld-3
| Rule | ElementDefinition.max |
Max
SHALL
be
a
number
or
"*"
|
|
eld-4
| Rule | ElementDefinition.type |
Aggregation
may
only
be
specified
if
one
of
the
allowed
types
for
the
element
is
a
reference
|
|
eld-5
| Rule | (base) |
if
the
element
definition
has
a
contentReference,
it
cannot
have
type,
defaultValue,
fixed,
pattern,
example,
minValue,
maxValue,
maxLength,
or
binding
|
|
eld-6
| Rule | (base) |
Fixed
value
may
only
be
specified
if
there
is
one
type
|
|
eld-7
| Rule | (base) |
Pattern
may
only
be
specified
if
there
is
one
type
|
|
eld-8
| Rule | (base) |
Pattern
and
|
|
eld-11
| Rule | (base) |
Binding
can
only
be
present
for
coded
elements,
string,
and
uri
|
|
eld-12
| Rule | ElementDefinition.binding |
ValueSet
|
|
eld-13
| Rule | (base) |
Types
must
be
unique
by
code
|
|
eld-14
| Rule | (base) |
Constraints
must
be
unique
by
key
|
|
eld-15
| Rule | (base) |
default
value
and
meaningWhenMissing
are
mutually
exclusive
|
|
eld-16
| Rule | (base) |
sliceName
must
be
composed
of
proper
tokens
separated
by
"/"
|
|
eld-17
| Rule | ElementDefinition.type |
targetProfile
is
only
allowed
if
the
type
is
|
|
eld-18
| Rule | (base) |
Must
have
a
modifier
reason
if
isModifier
=
true
|
|
eld-19
| Rule | (base) | Element path SHALL be expressed as a set of '.'-separated components with each component restricted to a maximum of 64 characters and with some limits on the allowed choice of characters | path.matches('^[^\\s\\.,:;\\\'"\\/|?!@#$%&*()\\[\\]{}]{1,64}(\\.[^\\s\\.,:;\\\'"\\/|?!@#$%&*()\\[\\]{}]{1,64}(\\[x\\])?(\\:[^\\s\\.]+)?)*$') |
eld-20
| Warning | (base) | The first component of the path should be UpperCamelCase. Additional components (following a '.') should be lowerCamelCase. If this syntax is not adhered to, code generation tools may be broken. Logical models may be less concerned about this implication. | path.matches('^[A-Za-z][A-Za-z0-9]{0,63}(\\.[a-z][A-Za-z0-9]{0,63}(\\[x])?)*$') |
eld-21
| Warning | ElementDefinition.constraint | Constraints should have an expression or else validators will not be able to enforce them | expression.exists() |
eld-22
| Rule | (base) | sliceIsConstraining can only appear if slicename is present | sliceIsConstraining.exists() implies sliceName.exists() |
eld-23
| Rule | ElementDefinition.binding | binding SHALL have either description or valueSet | description.exists() or valueSet.exists() |
eld-24
| Guideline | (base) | pattern[x] should be used rather than fixed[x] |
fixed.exists().not()
This is (only) a best practice guideline because:
|
eld-25
| Warning | (base) | Order has no meaning (and cannot be asserted to have meaning), so enforcing rules on order is improper | orderMeaning.empty() implies slicing.where(rules='openAtEnd' or ordered).exists().not() |
eld-26
| Rule | ElementDefinition.constraint | Errors cannot be suppressed | (severity = 'error') implies suppress.empty() |
eld-27
| Warning | (base) | Mappings SHOULD be unique by key | mapping.select(identity).isDistinct() |
eld-28
| Rule | (base) | Can't have valueAlternatives if mustHaveValue is true | mustHaveValue.value implies valueAlternatives.empty() |
eld-29
| Warning | ElementDefinition.type | profiles SHOULD be unique | profile.isDistinct() |
eld-30
| Warning | ElementDefinition.type | targetProfiles SHOULD be unique | targetProfile.isDistinct() |
eld-31
| Guideline | ElementDefinition.binding.additional | additionalBindings should have a key |
key.exists()
This is (only) a best practice guideline because:
|
eld-32
| Rule | ElementDefinition.binding | If the strength is 'descriptive' no value set can ve provided | strength = 'descriptive' implies valueSet.empty() |
eld-33
| Warning | (base) | If there's more than one bindable type, it's usually an error for there to be a binding | type.where(code in 'code' | 'Coding' | 'CodeableConcept' | 'CodeableReference' | 'uri' | 'string' | 'Quantity').count() > 1 implies binding.empty() |
eld-34
| Guideline | ElementDefinition.binding | if there's a required binding with no usage, it should be the base binding |
strength
!=
'required'
implies
additional.where(purpose
=
'required'
and
usage.empty()).empty()
This is (only) a best practice guideline because:
|
The
path
element
is
the
most
important
property
of
the
element
definition.
It
both
names
the
element,
and
locates
the
element
within
a
hierarchy
defined
within
a
particular
context.
Within
the
FHIR
specification,
there
is
only
one
original
definition
for
each
path
(that
is,
an
element
definition
with
no
base
element).
path.
This
is
the
master
definition
to
which
all
the
other
definitions
with
the
same
path
must
conform.
All elements defined within the FHIR specification itself are defined within a StructureDefinition that defines a resource, or a datatype. This defines the identity of the element and provides the context in which the meaning of the element is understood. When Elements are defined, the following rules apply:
If the element is polymorphic (has more than one datatype), then the end of the path for the element SHALL be "[x]" to designate that the name of the element may vary when serialized. The "[x]" is not considered to be part of the official element name, though it may frequently appear in documentation that way.
Elements may be defined in:
resource
,
complex-type
or
primitive-type
,
where
derivation
=
specialization
.
These
are
either
Resources
or
logical
StructureDefinitions
with
derivation
=
constraint
(i.e.
(i.e.,
Resource
and
Data
Type
Datatype
profiles)
are
not
allowed
to
define
or
include
ElementDefinitions
with
a
path
not
defined
within
the
base
resource
type
definition
from
which
they
derive
(e.g.
(e.g.,
in
the
FHIR
specification).
In
addition
to
the
path,
every
ElementDefinition
SHALL
have
a
populated
id
,
and
the
id
SHALL
have
a
unique
value
populated
by
following
this
algorithm:
pathpart:slicename/reslicename
Note
that
in
a
profile
with
no
slices,
this
id
will
match
the
path
exactly
and
entirely.
id
values
constructed
in
this
fashion
are
unique,
and
persistent,
and
may
be
used
as
the
target
of
external
references
into
the
definition,
where
necessary.
The
data
type
datatype
ElementDefinition
is
used
in
StructureDefinition
.
The
way
its
elements
are
to
be
used
and
interpreted
depends
on
the
context:
| ElementDefinition field |
Type
definition,
|
Type definition, following elements |
Constraint
Definition,
|
Constraint Definition, following elements |
| sliceName | prohibited | prohibited | prohibited | required for slices, else prohibited |
| label | optional | optional | recommended | recommended |
| code | optional | optional | optional | optional |
| slicing | prohibited |
|
prohibited | optional |
| short/definition | required | required | required ‡ | required ‡ |
|
|
prohibited | optional | prohibited ‡ | optional ‡ |
| comment | optional | optional | optional | optional |
| alias | optional | optional | optional | optional |
| base |
differential: optional |
differential: optional |
|
|
| type |
|
required | optional | optional |
| nameReference | prohibited | optional | prohibited | optional |
| min/max |
|
required | optional | optional † |
| defaultValue[x] | prohibited | optional | prohibited | optional † |
| meaningWhenMissing | prohibited | optional | prohibited | optional † |
| fixed[x] | prohibited | prohibited | prohibited | optional |
| pattern[x] | prohibited | prohibited | prohibited | optional |
| example[x] | prohibited | optional | prohibited | optional |
| minValue[x] | prohibited | prohibited | prohibited | optional |
| maxValue[x] | prohibited | prohibited | prohibited | optional |
| maxLength | prohibited | prohibited | prohibited | optional |
| mustSupport |
|
|
optional | optional |
| isModifier |
|
optional |
|
optional † |
| isSummary |
|
optional |
|
optional † |
| binding | prohibited | optional |
|
optional |
| constraint | optional | optional | optional ∆ | optional ∆ |
| condition |
|
optional |
|
optional ∆ |
| mapping | optional | optional | optional ∆ | optional ∆ |
Notes:
Notes:♉
.
separators
in
the
path.
It
is
not
always
present
in
differentials
base
baseDefinition
element,
or
where
the
derivation
type
is
'specialization'
base
baseDefinition
element
and
a
derivation
of
'constraint'
-
.
This
occurs
when
the
generic
behavior
of
the
FHIR
primitive
type
is
not
desired
(e.g.,
inheriting
extension,
id,
etc.).
Implementations
should
map
these
FHIRPath
datatypes
to
the
appropriate
simple
datatype
defined
in
their
implementation
language.
For
example,
in
Java,
FHIRPath
System.String
might
best
map
to
the
`java.lang.String`
class.
then
it
will
typically
also
include
a
structuredefinition-fhir-type
extension.
This
extension
might
further
constrain
the
allowed
value
of
an
element
that
might
be
treated
as
a
string.
For
example,
limiting
the
permitted
value
regex,
length,
etc.
to
the
corresponding
FHIR-defined
datatype
(but
NOT
permitting
the
additional
elements
such
as
id
and
extension).
If
the
extension
is
not
present,
no
additional
constraints
apply.
The use of Path and type depends more deeply on the context where the ElementDefinition is used:
| Context | path (1st element) | path (following elements) | type (1st element) |
|
Base
definition
of
a
(example: Quantity - XML , JSON ) |
Name of the type | Path inside the datatype |
Element
|
|
A
constrained
(example: Money - XML , JSON ) |
Name of the base type | Path inside the datatype | Name of the base type |
|
Base
definition
of
a
resource
(example: Patient - XML , JSON ) |
The name of the resource | Path inside the resource |
DomainResource
or
sometimes
Resource
|
|
Constraint
on
a
resource
(example: DAF Patient - XML , JSON ) |
The name of the resource |
Path
inside
the
resource
(including into the |
The name of the resource |
|
Base
Extension
(example: Extension - XML , JSON ) |
Extension
|
Extension.value[x]
or
Extension.extension
|
Extension
|
|
A
defined
Extension
(example: Extension - XML , JSON ) |
Extension
|
Extension.value[x]
or
Extension.extension
(for
complex
extensions)
|
Extension
|
There
are
additional
notes
about
the
use
of
ElementDefinition
when
defining
Extensions
on
the
Defining
Extensions
page.
For a description of slicing, see Slicing
slicing
can
only
be
used
on
the
first
slicing
is
considered
to
be
the
slicing
entry
sliceName
@default
applies
to
all
entries
that
are
not
in
any
other
slice
slicing
information)
is
understood
to
be
the
set
of
constraints
slicing
must
be
present
min
min
value).
max
,
type
(
code
,
profile
,
targetProfile
,
aggregation
and
versioning
),
fixed[x]
,
pattern[x]
,
minValue[x]
,
maxValue[x]
,
maxLength
,
constraints
,
required
and
extensible
bindings
(including
additional
bindings),
mustHaveValue
,
valueAlternatives
.
Obligations
apply
across
all
slices
unless
the
obligation
specifies
an
'applicable-number'
mustSupport
assertions
that
do
not
specify
otherwise
cannot
be
assumed
to
apply
to
all
slices
and
entries.
This
is
for
legacy
reasons
-
the
only
way
to
determine
the
applicability
of
mustSupport
and
unspecified
obligations
is
to
read
the
applicable
documentation,
and
in
the
absence
of
this,
consult
the
relevant
implementation
community
(see
further
discussion
on
the
implementation
obligations
page
).
Note
that
a
slice
labelled
as
must-support
can't
be
considered
to
have
no
need
to
support
just
because
the
slicer
element
is
not
labelled
as
must-support
-
the
documentation
(if
available)
must
be
consulted.
Elements that allow a choice of multiple types can be constrained. In principle, there are two different types of constraints to apply:
When constraining elements with multiple types, the following rules apply:
StructureDefinition.base
:
StructureDefinition.baseDefinition
:
min
and
max
are
always
required
StructureDefinition.differential
:
min
and
max
are
always
optional;
if
they
are
not
present,
they
default
to
the
StructureDefinition.snapshot
:
min
and
max
are
always
required
All primitive data types have a value and also extensions. Even if the element is present, the value might not be present; instead, an extension may be present the either provides information about why the value is not present, or provides an expression that might be used to generate a value in a particular context. Some common extensions that might appear in place of a primitive value:
In
many
cases,
profiles
want
to
make
a
primitive
element
required
(min
=
1),
and
also
want
to
say
that
when
a
primitive
element
is
present,
the
value
must
be
present,
since
the
value
is
what
is
processed
by
applications.
The
flag
mustHaveValue
can
be
set
to
true
to
indicate
that
the
primitive
data
type
must
have
value
if
present
(so
it
has
impact
whatever
the
value
of
min
).
Note
that
this
flag
is
a
short
cut,
equivalent
to
the
profile
walking
into
the
primitive
data
type
and
setting
min
=
1
for
the
value.
The
short
cut
is
preferable
because
it's
simpler
and
more
concise
for
implementers.
Alternatively,
profiles
may
wish
to
allow
the
primitive
value
to
be
replaced
by
some
extensions
but
not
others.
In
this
case,
the
profiles
can
list
the
allowable
extensions
using
the
valueAlternatives
element,
which
contains
a
list
of
the
extensions
that
can
appear
if
the
primitive
value
is
not
present.
Note
that
this
list
is
a
short
cut
for
actually
profiling
the
extensions
on
the
primitive
data
type
and
making
a
co-occurence
constraint,
but
has
no
effect
when
the
value
is
present
.
For further discussion regarding populating primitive values, see Exchanging Data using FHIR .
Most elements have a minimum cardinality of 0, which means that they may be missing from a resource when it is exchanged between systems. Generally, when an element is missing, all that an application processing the resource can say about the element is that the value is unknown - it may have a correct value, but it has not been provided for security or workflow reasons. On the other hand, it might not have a value at all. All the application can say is that the value is unknown.
This also applies when the element is present, but has no value or child elements, and only has extensions instead.
However,
for
some
elements,
this
specification
makes
specific
rules
about
what
it
means
if
the
element
is
missing.
For
example:
Element
Meaning
when
missing
Period.end
If
the
end
of
the
period
is
missing,
it
means
that
the
period
is
ongoing
Quantity.comparator
If
there
is
no
comparator,
then
there
is
no
modification
of
the
value
MedicationAdministration.wasNotGiven
If
this
is
missing,
then
the
medication
was
administered
Substance.instance
If
this
element
is
not
present,
then
the
substance
resource
describes
a
kind
of
substance
Assigning
a
meaning
when
an
element
is
missing
is
something
that
is
not
done
very
often.
Note
that
constraints
Constraints
on
other
structures
cannot
change
the
missing
meaning
of
an
element.
Here
is
a
list
of
all
elements
with
a
default
value
or
a
missing
meaning:
This
specification
does
not
define
any
default
values
for
resources
or
data
types
datatypes
because:
Note that default values can be defined in Logical Models .
For further information about bindings, see Terminology bindings .
The primary focus of the FHIR specification is on correct application behavior around what is exchanged and how: valid APIs and resource instances. However many FHIR implementation guides are interested in specifying additional obligations about how the applications involved handle the data that is being exchanged.
Element
Definitions
use
the
property
mustSupport
to
indicate
that
there
are
rules
that
apply
to
how
the
data
is
handled.
In
addition,
the
Obligation
Extension
extension
can
be
used
to
make
more
detailed
statements
about
application
behavior.
See
Implementation
Obligations
for
the
proper
use
of
these
features.