Release 5

This page is part of the FHIR Specification (v5.0.0: R5 - STU). This is the current published version in it's permanent home (it will always be available at this URL). For a full list of available versions, see the Directory of published versions . Page versions: R5 R4B R4 R3 R2

2.1.28.7.0 Element Definition

FHIR Infrastructure icon Work Group Maturity Level: Normative Standards Status: Normative

Types Framework Cross Reference: Base Types | Datatypes | Resources | Patterns

The definition of an element in a resource or an extension. The definition includes:

  • Path (name), cardinality, and datatype
  • Definitions, usage notes, and requirements
  • Default or fixed values
  • Constraints, length limits, and other usage rules
  • Terminology Binding
  • Mappings to other specifications
  • Structural Usage Information such as Slicing

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

NameFlagsCard.TypeDescription & Constraintsdoco
.. ElementDefinitionΣNElementDefinition 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: Fixed value may only be specified if there is one type
+ Rule: Pattern may only be specified if there is one type
+ 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: Types must be unique by code
+ Rule: Constraints must be unique by key
+ Rule: default value and meaningWhenMissing are mutually exclusive
+ Rule: sliceName must be composed of proper tokens separated by "/"
+ Rule: Must have a modifier reason if isModifier = true
+ 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

Elements defined in Ancestors: id, extension, modifierExtension
... pathΣC1..1stringPath of the element in the hierarchy of elements
... representationΣ0..*codexmlAttr | xmlText | typeAttr | cdaText | xhtml
Binding: PropertyRepresentation (Required)

... sliceNameΣC0..1stringName for this particular element (in a set of slices)
... sliceIsConstrainingΣCTU0..1booleanIf this slice definition constrains an inherited slice definition (or not)
... labelΣT0..1stringName for element to display with or prompt for element
... codeΣ0..*CodingCorresponding codes in terminologies
Binding: ElementDefinitionCode icon (Example)

... slicingΣC0..1ElementThis element is sliced - slices follow
.... discriminatorΣ0..*ElementElement values that are used to distinguish the slices

..... typeΣ1..1codevalue | exists | type | profile | position
Binding: DiscriminatorType (Required)
..... pathΣ1..1stringPath to element value
.... descriptionΣT0..1stringText description of how slicing works (or not)
.... orderedΣC0..1booleanIf elements must be in same order as slices
.... rulesΣC1..1codeclosed | open | openAtEnd
Binding: SlicingRules (Required)
... shortΣT0..1stringConcise definition for space-constrained presentation
... definitionΣT0..1markdownFull formal definition as narrative text
... commentΣT0..1markdownComments about the use of this element
... requirementsΣT0..1markdownWhy this resource has been created
... aliasΣT0..*stringOther names

... minΣC0..1unsignedIntMinimum Cardinality
... maxΣC0..1stringMaximum Cardinality (a number or *)
+ Rule: Max SHALL be a number or "*"
... baseΣ0..1ElementBase definition information for tools
.... pathΣ1..1stringPath that identifies the base element
.... minΣ1..1unsignedIntMin cardinality of the base element
.... maxΣ1..1stringMax cardinality of the base element
... contentReferenceΣC0..1uriReference to definition of content for the element
... typeΣC0..*ElementData type and Profile for this element
+ Rule: Aggregation may only be specified if one of the allowed types for the element is a reference
+ Rule: targetProfile is only allowed if the type is Reference or canonical

.... codeΣC1..1uriData type or Resource (reference to definition)
Binding: Element Definition Types (Extensible)
.... profileΣ0..*canonical(StructureDefinition | ImplementationGuide)Profiles (StructureDefinition or IG) - one must apply

.... targetProfileΣC0..*canonical(StructureDefinition | ImplementationGuide)Profile (StructureDefinition or IG) on the Reference/canonical target - one must apply

.... aggregationΣC0..*codecontained | referenced | bundled - how aggregated
Binding: AggregationMode (Required)

.... versioningΣ0..1codeeither | independent | specific
Binding: ReferenceVersionRules (Required)
... defaultValue[x]ΣC0..1*Specified value if missing from instance
... meaningWhenMissingΣTC0..1markdownImplicit meaning when this element is missing
... orderMeaningΣC0..1stringWhat the order of the elements means
... fixed[x]ΣC0..1*Value must be exactly this
... pattern[x]ΣC0..1*Value must have at least these property values
... exampleΣC0..*ElementExample value (as defined for type)

.... labelΣT1..1stringDescribes the purpose of this example
.... value[x]Σ1..1*Value of Example (one of allowed types)
... minValue[x]ΣC0..1Minimum Allowed Value (for some types)
.... minValueDatedate
.... minValueDateTimedateTime
.... minValueInstantinstant
.... minValueTimetime
.... minValueDecimaldecimal
.... minValueIntegerinteger
.... minValueInteger64integer64
.... minValuePositiveIntpositiveInt
.... minValueUnsignedIntunsignedInt
.... minValueQuantityQuantity
... maxValue[x]ΣC0..1Maximum Allowed Value (for some types)
.... maxValueDatedate
.... maxValueDateTimedateTime
.... maxValueInstantinstant
.... maxValueTimetime
.... maxValueDecimaldecimal
.... maxValueIntegerinteger
.... maxValueInteger64integer64
.... maxValuePositiveIntpositiveInt
.... maxValueUnsignedIntunsignedInt
.... maxValueQuantityQuantity
... maxLengthΣC0..1integerMax length for string type data
... conditionΣ0..*idReference to invariant about presence

... constraintΣC0..*ElementCondition 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

.... keyΣC1..1idTarget of 'condition' reference above
.... requirementsΣ0..1markdownWhy this constraint is necessary or appropriate
.... severityΣC1..1codeerror | warning
Binding: ConstraintSeverity (Required)
.... suppressΣCTU0..1booleanSuppress warning or hint in profile
.... humanΣT1..1stringHuman description of constraint
.... expressionΣC0..1stringFHIRPath expression of constraint
.... sourceΣ0..1canonical(StructureDefinition)Reference to original source of constraint
... mustHaveValueΣCTU0..1booleanFor primitives, that a value must be present - not replaced by an extension
... valueAlternativesΣCTU0..*canonical(StructureDefinition)Extensions that are allowed to replace a primitive value

... mustSupportΣ0..1booleanIf the element must be supported (discouraged - see obligations)
... isModifierΣC0..1booleanIf this modifies the meaning of other elements
... isModifierReasonΣC0..1stringReason that this element is marked as a modifier
... isSummaryΣ0..1booleanInclude when _summary = true?
... bindingΣC0..1ElementValueSet details if this is coded
+ Rule: ValueSet SHALL start with http:// or https:// or urn: or #
+ Rule: binding SHALL have either description or valueSet
.... strengthΣ1..1coderequired | extensible | preferred | example
Binding: BindingStrength (Required)
.... descriptionΣTC0..1markdownIntended use of codes in the bound value set
.... valueSetΣC0..1canonical(ValueSet)Source of value set
.... additionalΣTU0..*ElementAdditional Bindings - more rules about the binding

..... purposeΣ1..1codemaximum | minimum | required | extensible | candidate | current | preferred | ui | starter | component
Binding: Additional Binding Purpose ValueSet (Required)
..... valueSetΣ1..1canonical(ValueSet)The value set for the additional binding
..... documentationΣ0..1markdownDocumentation of the purpose of use of the binding
..... shortDocoΣ0..1stringConcise documentation - for summary tables
..... usageΣ0..*UsageContextQualifies the usage - jurisdiction, gender, workflow status etc.

..... anyΣ0..1booleanWhether binding can applies to all repeats, or just one
... mappingΣC0..*ElementMap element to another set of definitions

.... identityΣC1..1idReference to mapping declaration
.... languageΣ0..1codeComputable language of mapping
Binding: Mime Types (Required)
.... mapΣ1..1stringDetails of the mapping
.... commentΣ0..1markdownComments about the mapping or its use

doco Documentation for this format icon

Definition: XML | JSON

UML Diagram (Legend)

ElementDefinitionThe path identifies the element and is expressed as a "."-separated list of ancestor elements, beginning with the name of the resource or extensionpath : string [1..1] « This element has or is affected by some invariantsC »Codes that define how this element is represented in instances, when the deviation varies from the normal case. No extensions are allowed on elements with a representation of 'xmlAttr', no matter what FHIR serialization format is usedrepresentation : code [0..*] « How a property is represented when serialized. (Strength=Required)PropertyRepresentation! »The name of this element definition slice, when slicing is working. The name must be a token with no dots or spaces. This is a unique name referring to a specific set of constraints applied to this element, used to provide a name to different slices of the same elementsliceName : string [0..1] « This element has or is affected by some invariantsC »If true, indicates that this slice definition is constraining a slice definition with the same name in an inherited profile. If false, the slice is not overriding any slice in an inherited profile. If missing, the slice might or might not be overriding a slice in an inherited profile, depending on the sliceNamesliceIsConstraining : boolean [0..1] « This element has or is affected by some invariantsC »A single preferred label which is the text to display beside the element indicating its meaning or to use to prompt for the element in a user display or formlabel : string [0..1]A code that has the same meaning as the element in a particular terminologycode : Coding [0..*] « Codes that indicate the meaning of a data element. (Strength=Example)ElementDefinitionCode?? »A concise description of what this element means (e.g. for use in autogenerated summaries)short : string [0..1]Provides a complete explanation of the meaning of the data element for human readability. For the case of elements derived from existing elements (e.g. constraints), the definition SHALL be consistent with the base definition, but convey the meaning of the element in the particular context of use of the resource. (Note: The text you are reading is specified in ElementDefinition.definition)definition : markdown [0..1]Explanatory notes and implementation guidance about the data element, including notes about how to use the data properly, exceptions to proper use, etc. (Note: The text you are reading is specified in ElementDefinition.comment)comment : markdown [0..1]This element is for traceability of why the element was created and why the constraints exist as they do. This may be used to point to source materials or specifications that drove the structure of this elementrequirements : markdown [0..1]Identifies additional names by which this element might also be knownalias : string [0..*]The minimum number of times this element SHALL appear in the instancemin : unsignedInt [0..1] « This element has or is affected by some invariantsC »The maximum number of times this element is permitted to appear in the instancemax : string [0..1] « This element has or is affected by some invariantsC »Identifies an element defined elsewhere in the definition whose content rules should be applied to the current element. ContentReferences bring across all the rules that are in the ElementDefinition for the element, including definitions, cardinality constraints, bindings, invariants etccontentReference : uri [0..1] « This element has or is affected by some invariantsC »The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false')defaultValue[x] : * [0..1] « This element has or is affected by some invariantsC »The Implicit meaning that is to be understood when this element is missing (e.g. 'when this element is missing, the period is ongoing')meaningWhenMissing : markdown [0..1] « This element has or is affected by some invariantsC »If present, indicates that the order of the repeating element has meaning and describes what that meaning is. If absent, it means that the order of the element has no meaningorderMeaning : string [0..1] « This element has or is affected by some invariantsC »Specifies a value that SHALL be exactly the value for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missingfixed[x] : * [0..1] « This element has or is affected by some invariantsC »Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example. When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly. When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array. When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e., 1. If primitive: it must match exactly the pattern value 2. If a complex object: it must match (recursively) the pattern value 3. If an array: it must match (recursively) the pattern value If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions. If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will havepattern[x] : * [0..1] « This element has or is affected by some invariantsC »The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and QuantityminValue[x] : DataType [0..1] « date|dateTime|instant|time|decimal| integer|integer64|positiveInt|unsignedInt|Quantity » « This element has or is affected by some invariantsC »The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and QuantitymaxValue[x] : DataType [0..1] « date|dateTime|instant|time|decimal| integer|integer64|positiveInt|unsignedInt|Quantity » « This element has or is affected by some invariantsC »Indicates the maximum length in characters that is permitted to be present in conformant instances and which is expected to be supported by conformant consumers that support the element. ```maxLength``` SHOULD only be used on primitive data types that have a string representation (see [[[http://hl7.org/fhir/StructureDefinition/structuredefinition-type-characteristics]]])maxLength : integer [0..1] « This element has or is affected by some invariantsC »A reference to an invariant that may make additional statements about the cardinality or value in the instancecondition : id [0..*]Specifies for a primitive data type that the value of the data type cannot be replaced by an extensionmustHaveValue : boolean [0..1] « This element has or is affected by some invariantsC »Specifies a list of extensions that can appear in place of a primitive valuevalueAlternatives : canonical [0..*] « StructureDefinition » « This element has or is affected by some invariantsC »If true, implementations that produce or consume resources SHALL provide "support" for the element in some meaningful way. Note that this is being phased out and replaced by obligations (see below). If false, the element may be ignored and not supported. If false, whether to populate or use the data element in any way is at the discretion of the implementationmustSupport : boolean [0..1]If true, the value of this element affects the interpretation of the element or resource that contains it, and the value of the element cannot be ignored. Typically, this is used for status, negation and qualification codes. The effect of this is that the element cannot be ignored by systems: they SHALL either recognize the element and process it, and/or a pre-determination has been made that it is not relevant to their particular system. When used on the root element in an extension definition, this indicates whether or not the extension is a modifier extensionisModifier : boolean [0..1] « This element has or is affected by some invariantsC »Explains how that element affects the interpretation of the resource or element that contains itisModifierReason : string [0..1] « This element has or is affected by some invariantsC »Whether the element should be included if a client requests a search with the parameter _summary=trueisSummary : boolean [0..1]SlicingA human-readable text description of how the slicing works. If there is no discriminator, this is required to be present to provide whatever information is possible about how the slices can be differentiateddescription : string [0..1]If the matching elements have to occur in the same order as defined in the profileordered : boolean [0..1] « This element has or is affected by some invariantsC »Whether additional slices are allowed or not. When the slices are ordered, profile authors can also say that additional slices are only allowed at the endrules : code [1..1] « How slices are interpreted when evaluating an instance. (Strength=Required)SlicingRules! » « This element has or is affected by some invariantsC »DiscriminatorHow the element value is interpreted when discrimination is evaluatedtype : code [1..1] « How an element value is interpreted when discrimination is evaluated. (Strength=Required)DiscriminatorType! »A FHIRPath expression, using [the simple subset of FHIRPath](fhirpath.html#simple), that is used to identify the element on which discrimination is basedpath : string [1..1]BaseThe Path that identifies the base element - this matches the ElementDefinition.path for that element. Across FHIR, there is only one base definition of any element - that is, an element definition on a [[[StructureDefinition]]] without a StructureDefinition.basepath : string [1..1]Minimum cardinality of the base element identified by the pathmin : unsignedInt [1..1]Maximum cardinality of the base element identified by the pathmax : string [1..1]TypeRefURL of Data type or Resource that is a(or the) type used for this element. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. "string" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical modelscode : uri [1..1] « List of all Types for ElementDefinition.type.code. (Strength=Extensible)ElementDefinitionTypes+ » « This element has or is affected by some invariantsC »Identifies a profile structure or implementation Guide that applies to the datatype this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the type SHALL conform to at least one profile defined in the implementation guideprofile : canonical [0..*] « StructureDefinition|ImplementationGuide »Used when the type is "Reference" or "canonical", and identifies a profile structure or implementation Guide that applies to the target of the reference this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guidetargetProfile : canonical [0..*] « StructureDefinition| ImplementationGuide » « This element has or is affected by some invariantsC »If the type is a reference to another resource, how the resource is or can be aggregated - is it a contained resource, or a reference, and if the context is a bundle, is it included in the bundleaggregation : code [0..*] « How resource references can be aggregated. (Strength=Required)AggregationMode! » « This element has or is affected by some invariantsC »Whether this reference needs to be version specific or version independent, or whether either can be usedversioning : code [0..1] « Whether a reference needs to be version specific or version independent, or whether either can be used. (Strength=Required)ReferenceVersionRules! »ExampleDescribes the purpose of this example among the set of exampleslabel : string [1..1]The actual value for the element, which must be one of the types allowed for this elementvalue[x] : * [1..1]ConstraintAllows identification of which elements have their cardinalities impacted by the constraint. Will not be referenced for constraints that do not affect cardinalitykey : id [1..1] « This element has or is affected by some invariantsC »Description of why this constraint is necessary or appropriaterequirements : markdown [0..1]Identifies the impact constraint violation has on the conformance of the instanceseverity : code [1..1] « SHALL applications comply with this constraint? (Strength=Required)ConstraintSeverity! » « This element has or is affected by some invariantsC »If true, indicates that the warning or best practice guideline should be suppressedsuppress : boolean [0..1] « This element has or is affected by some invariantsC »Text that can be used to describe the constraint in messages identifying that the constraint has been violatedhuman : string [1..1]A [FHIRPath](fhirpath.html) expression of constraint that can be executed to see if this constraint is metexpression : string [0..1] « This element has or is affected by some invariantsC »A reference to the original source of the constraint, for traceability purposessource : canonical [0..1] « StructureDefinition »ElementDefinitionBindingIndicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instancesstrength : code [1..1] « Indication of the degree of conformance expectations associated with a binding. (Strength=Required)BindingStrength! »Describes the intended use of this particular set of codesdescription : markdown [0..1] « This element has or is affected by some invariantsC »Refers to the value set that identifies the set of codes the binding refers tovalueSet : canonical [0..1] « ValueSet » « This element has or is affected by some invariantsC »AdditionalThe use of this additional bindingpurpose : code [1..1] « The use of an additional binding. (Strength=Required)AdditionalBindingPurposeVS! »The valueSet that is being bound for the purposevalueSet : canonical [1..1] « ValueSet »Documentation of the purpose of use of the bindingproviding additional information about how it is intended to be useddocumentation : markdown [0..1]Concise documentation - for summary tablesshortDoco : string [0..1]Qualifies the usage of the binding. Typically bindings are qualified by jurisdiction, but they may also be qualified by gender, workflow status, clinical domain etc. The information to decide whether a usege context applies is usually outside the resource, determined by context, and this might present challenges for validation toolingusage : UsageContext [0..*]Whether the binding applies to all repeats, or just to any one of them. This is only relevant for elements that can repeatany : boolean [0..1]MappingAn internal reference to the definition of a mappingidentity : id [1..1] « This element has or is affected by some invariantsC »Identifies the computable language in which mapping.map is expressedlanguage : code [0..1] « The mime type of an attachment. Any valid mime type is allowed. (Strength=Required)MimeTypes! »Expresses what part of the target specification corresponds to this elementmap : string [1..1]Comments that provide information about the mapping or its usecomment : markdown [0..1]BackboneTypeMay be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions. Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself) (this element modifies the meaning of other elements)modifierExtension : Extension [0..*]Designates which child elements are used to discriminate between the slices when processing an instance. If one or more discriminators are provided, the value of the child elements in the instance data SHALL completely distinguish which slice the element in the resource matches based on the allowed values for those elements in each of the slicesdiscriminator[0..*]Indicates that the element is sliced into a set of alternative definitions (i.e. in a structure definition, there are multiple different constraints on a single element in the base resource). Slicing can be used in any resource that has cardinality ..* on the base resource, or any resource with a choice of types. The set of slices is any elements that come after this in the element sequence that have the same path, until a shorter path occurs (the shorter path terminates the set)slicing[0..1]Information about the base definition of the element, provided to make it unnecessary for tools to trace the deviation of the element through the derived and related profiles. When the element definition is not the original definition of an element - e.g. either in a constraint on another type, or for elements from a super type in a snap shot - then the information in provided in the element definition may be different to the base definition. On the original definition of the element, it will be samebase[0..1]The data type or resource that the value of this element is permitted to betype[0..*]A sample value for this element demonstrating the type of information that would typically be found in the elementexample[0..*]Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instanceconstraint[0..*]Additional bindings that help applications implementing this element. Additional bindings do not replace the main binding but provide more information and/or contextadditional[0..*]Binds to a value set if this element is coded (code, Coding, CodeableConcept, Quantity), or the data types (string, uri)binding[0..1]Identifies a concept from an external specification that roughly corresponds to this elementmapping[0..*]

XML Template

<ElementDefinition xmlns="http://hl7.org/fhir">
 <!-- from Element: extension -->
 <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 Name for element to display with or prompt for element -->
 <code><!-- 0..* Coding Corresponding codes in terminologies icon --></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 Why this resource has been created -->
 <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>
 <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]><!-- 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]><!-- 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? -->
 <binding>  <!-- I 0..1 ValueSet details if this is coded -->
  <strength value="[code]"/><!-- 1..1 required | extensible | preferred | example -->
  <description value="[markdown]"/><!-- I 0..1 Intended use of codes in the bound value set -->
  <valueSet><!-- I 0..1 canonical(ValueSet) Source of value set --></valueSet>
  <additional>  <!-- 0..* Additional Bindings - more rules about the binding -->
   <purpose value="[code]"/><!-- 1..1 maximum | minimum | required | extensible | candidate | current | 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>
</ElementDefinition>

JSON Template

{doco
  // 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>", // Name for element to display with or prompt for element
  "code" : [{ Coding }], // Corresponding codes in terminologies icon
  "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>", // Why this resource has been created
  "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 54:
  "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 },
  "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 54:
  "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 },
  "fixedDosage" : { Dosage },
  "fixedMeta" : { Meta },
  // pattern[x]: Value must have at least these property values. One of these 54:
  "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 },
  "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 54:
    "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 },
    "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
    "description" : "<markdown>", // I Intended use of codes in the bound value set
    "valueSet" : "<canonical(ValueSet)>", // I Source of value set
    "additional" : [{ // Additional Bindings - more rules about the binding
      "purpose" : "<code>", // R!  maximum | minimum | required | extensible | candidate | current | 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: Element.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 Name for element 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 Why this resource has been created
  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 54
    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: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 54
    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:Dosage ; Dosage ]
    fhir:fixed [  a fhir:Meta ; Meta ]
  # pattern[x] : 0..1 I Value must have at least these property values. One of these 54
    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: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 54
      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: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
    fhir:description [ markdown ] ; # 0..1 I Intended use of codes in the bound value set
    fhir:valueSet [ canonical(ValueSet) ] ; # 0..1 I Source of value set
    fhir:additional ( [ # 0..* Additional Bindings - more rules about the binding
      fhir:purpose [ code ] ; # 1..1 maximum | minimum | required | extensible | candidate | current | 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 Release 3

Changes from both R4 and R4B

ElementDefinition
ElementDefinition.slicing.discriminator.type
  • Add code position
ElementDefinition.type.code
ElementDefinition.defaultValue[x]
  • Add Types integer64, CodeableReference, RatioRange, Availability, ExtendedContactDetail, Meta
  • Remove Type Contributor
ElementDefinition.fixed[x]
  • Add Types integer64, CodeableReference, RatioRange, Availability, ExtendedContactDetail, Meta
  • Remove Type Contributor
ElementDefinition.pattern[x]
  • Add Types integer64, CodeableReference, RatioRange, Availability, ExtendedContactDetail, Meta
  • Remove Type Contributor
ElementDefinition.example.value[x]
  • Add Types integer64, CodeableReference, RatioRange, Availability, ExtendedContactDetail, Meta
  • Remove Type Contributor
ElementDefinition.minValue[x]
  • Add Type integer64
ElementDefinition.maxValue[x]
  • Add Type integer64
ElementDefinition.constraint.requirements
  • Type changed from string to markdown
ElementDefinition.constraint.suppress
  • Added Element
ElementDefinition.mustHaveValue
  • Added Element
ElementDefinition.valueAlternatives
  • Added Element
ElementDefinition.binding.description
  • Type changed from string to markdown
ElementDefinition.binding.additional
  • Added Element
ElementDefinition.binding.additional.purpose
  • Added Mandatory Element
ElementDefinition.binding.additional.valueSet
  • Added Mandatory Element
ElementDefinition.binding.additional.documentation
  • Added Element
ElementDefinition.binding.additional.shortDoco
  • Added Element
ElementDefinition.binding.additional.usage
  • Added Element
ElementDefinition.binding.additional.any
  • Added Element
ElementDefinition.mapping.comment
  • Type changed from string to markdown
ElementDefinition.constraint.xpath
  • Deleted (XPath removed due to lack of use and maintenance)

See the Full Difference for further information

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. ElementDefinitionΣNElementDefinition 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: Fixed value may only be specified if there is one type
+ Rule: Pattern may only be specified if there is one type
+ 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: Types must be unique by code
+ Rule: Constraints must be unique by key
+ Rule: default value and meaningWhenMissing are mutually exclusive
+ Rule: sliceName must be composed of proper tokens separated by "/"
+ Rule: Must have a modifier reason if isModifier = true
+ 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

Elements defined in Ancestors: id, extension, modifierExtension
... pathΣC1..1stringPath of the element in the hierarchy of elements
... representationΣ0..*codexmlAttr | xmlText | typeAttr | cdaText | xhtml
Binding: PropertyRepresentation (Required)

... sliceNameΣC0..1stringName for this particular element (in a set of slices)
... sliceIsConstrainingΣCTU0..1booleanIf this slice definition constrains an inherited slice definition (or not)
... labelΣT0..1stringName for element to display with or prompt for element
... codeΣ0..*CodingCorresponding codes in terminologies
Binding: ElementDefinitionCode icon (Example)

... slicingΣC0..1ElementThis element is sliced - slices follow
.... discriminatorΣ0..*ElementElement values that are used to distinguish the slices

..... typeΣ1..1codevalue | exists | type | profile | position
Binding: DiscriminatorType (Required)
..... pathΣ1..1stringPath to element value
.... descriptionΣT0..1stringText description of how slicing works (or not)
.... orderedΣC0..1booleanIf elements must be in same order as slices
.... rulesΣC1..1codeclosed | open | openAtEnd
Binding: SlicingRules (Required)
... shortΣT0..1stringConcise definition for space-constrained presentation
... definitionΣT0..1markdownFull formal definition as narrative text
... commentΣT0..1markdownComments about the use of this element
... requirementsΣT0..1markdownWhy this resource has been created
... aliasΣT0..*stringOther names

... minΣC0..1unsignedIntMinimum Cardinality
... maxΣC0..1stringMaximum Cardinality (a number or *)
+ Rule: Max SHALL be a number or "*"
... baseΣ0..1ElementBase definition information for tools
.... pathΣ1..1stringPath that identifies the base element
.... minΣ1..1unsignedIntMin cardinality of the base element
.... maxΣ1..1stringMax cardinality of the base element
... contentReferenceΣC0..1uriReference to definition of content for the element
... typeΣC0..*ElementData type and Profile for this element
+ Rule: Aggregation may only be specified if one of the allowed types for the element is a reference
+ Rule: targetProfile is only allowed if the type is Reference or canonical

.... codeΣC1..1uriData type or Resource (reference to definition)
Binding: Element Definition Types (Extensible)
.... profileΣ0..*canonical(StructureDefinition | ImplementationGuide)Profiles (StructureDefinition or IG) - one must apply

.... targetProfileΣC0..*canonical(StructureDefinition | ImplementationGuide)Profile (StructureDefinition or IG) on the Reference/canonical target - one must apply

.... aggregationΣC0..*codecontained | referenced | bundled - how aggregated
Binding: AggregationMode (Required)

.... versioningΣ0..1codeeither | independent | specific
Binding: ReferenceVersionRules (Required)
... defaultValue[x]ΣC0..1*Specified value if missing from instance
... meaningWhenMissingΣTC0..1markdownImplicit meaning when this element is missing
... orderMeaningΣC0..1stringWhat the order of the elements means
... fixed[x]ΣC0..1*Value must be exactly this
... pattern[x]ΣC0..1*Value must have at least these property values
... exampleΣC0..*ElementExample value (as defined for type)

.... labelΣT1..1stringDescribes the purpose of this example
.... value[x]Σ1..1*Value of Example (one of allowed types)
... minValue[x]ΣC0..1Minimum Allowed Value (for some types)
.... minValueDatedate
.... minValueDateTimedateTime
.... minValueInstantinstant
.... minValueTimetime
.... minValueDecimaldecimal
.... minValueIntegerinteger
.... minValueInteger64integer64
.... minValuePositiveIntpositiveInt
.... minValueUnsignedIntunsignedInt
.... minValueQuantityQuantity
... maxValue[x]ΣC0..1Maximum Allowed Value (for some types)
.... maxValueDatedate
.... maxValueDateTimedateTime
.... maxValueInstantinstant
.... maxValueTimetime
.... maxValueDecimaldecimal
.... maxValueIntegerinteger
.... maxValueInteger64integer64
.... maxValuePositiveIntpositiveInt
.... maxValueUnsignedIntunsignedInt
.... maxValueQuantityQuantity
... maxLengthΣC0..1integerMax length for string type data
... conditionΣ0..*idReference to invariant about presence

... constraintΣC0..*ElementCondition 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

.... keyΣC1..1idTarget of 'condition' reference above
.... requirementsΣ0..1markdownWhy this constraint is necessary or appropriate
.... severityΣC1..1codeerror | warning
Binding: ConstraintSeverity (Required)
.... suppressΣCTU0..1booleanSuppress warning or hint in profile
.... humanΣT1..1stringHuman description of constraint
.... expressionΣC0..1stringFHIRPath expression of constraint
.... sourceΣ0..1canonical(StructureDefinition)Reference to original source of constraint
... mustHaveValueΣCTU0..1booleanFor primitives, that a value must be present - not replaced by an extension
... valueAlternativesΣCTU0..*canonical(StructureDefinition)Extensions that are allowed to replace a primitive value

... mustSupportΣ0..1booleanIf the element must be supported (discouraged - see obligations)
... isModifierΣC0..1booleanIf this modifies the meaning of other elements
... isModifierReasonΣC0..1stringReason that this element is marked as a modifier
... isSummaryΣ0..1booleanInclude when _summary = true?
... bindingΣC0..1ElementValueSet details if this is coded
+ Rule: ValueSet SHALL start with http:// or https:// or urn: or #
+ Rule: binding SHALL have either description or valueSet
.... strengthΣ1..1coderequired | extensible | preferred | example
Binding: BindingStrength (Required)
.... descriptionΣTC0..1markdownIntended use of codes in the bound value set
.... valueSetΣC0..1canonical(ValueSet)Source of value set
.... additionalΣTU0..*ElementAdditional Bindings - more rules about the binding

..... purposeΣ1..1codemaximum | minimum | required | extensible | candidate | current | preferred | ui | starter | component
Binding: Additional Binding Purpose ValueSet (Required)
..... valueSetΣ1..1canonical(ValueSet)The value set for the additional binding
..... documentationΣ0..1markdownDocumentation of the purpose of use of the binding
..... shortDocoΣ0..1stringConcise documentation - for summary tables
..... usageΣ0..*UsageContextQualifies the usage - jurisdiction, gender, workflow status etc.

..... anyΣ0..1booleanWhether binding can applies to all repeats, or just one
... mappingΣC0..*ElementMap element to another set of definitions

.... identityΣC1..1idReference to mapping declaration
.... languageΣ0..1codeComputable language of mapping
Binding: Mime Types (Required)
.... mapΣ1..1stringDetails of the mapping
.... commentΣ0..1markdownComments about the mapping or its use

doco Documentation for this format icon

UML Diagram (Legend)

ElementDefinitionThe path identifies the element and is expressed as a "."-separated list of ancestor elements, beginning with the name of the resource or extensionpath : string [1..1] « This element has or is affected by some invariantsC »Codes that define how this element is represented in instances, when the deviation varies from the normal case. No extensions are allowed on elements with a representation of 'xmlAttr', no matter what FHIR serialization format is usedrepresentation : code [0..*] « How a property is represented when serialized. (Strength=Required)PropertyRepresentation! »The name of this element definition slice, when slicing is working. The name must be a token with no dots or spaces. This is a unique name referring to a specific set of constraints applied to this element, used to provide a name to different slices of the same elementsliceName : string [0..1] « This element has or is affected by some invariantsC »If true, indicates that this slice definition is constraining a slice definition with the same name in an inherited profile. If false, the slice is not overriding any slice in an inherited profile. If missing, the slice might or might not be overriding a slice in an inherited profile, depending on the sliceNamesliceIsConstraining : boolean [0..1] « This element has or is affected by some invariantsC »A single preferred label which is the text to display beside the element indicating its meaning or to use to prompt for the element in a user display or formlabel : string [0..1]A code that has the same meaning as the element in a particular terminologycode : Coding [0..*] « Codes that indicate the meaning of a data element. (Strength=Example)ElementDefinitionCode?? »A concise description of what this element means (e.g. for use in autogenerated summaries)short : string [0..1]Provides a complete explanation of the meaning of the data element for human readability. For the case of elements derived from existing elements (e.g. constraints), the definition SHALL be consistent with the base definition, but convey the meaning of the element in the particular context of use of the resource. (Note: The text you are reading is specified in ElementDefinition.definition)definition : markdown [0..1]Explanatory notes and implementation guidance about the data element, including notes about how to use the data properly, exceptions to proper use, etc. (Note: The text you are reading is specified in ElementDefinition.comment)comment : markdown [0..1]This element is for traceability of why the element was created and why the constraints exist as they do. This may be used to point to source materials or specifications that drove the structure of this elementrequirements : markdown [0..1]Identifies additional names by which this element might also be knownalias : string [0..*]The minimum number of times this element SHALL appear in the instancemin : unsignedInt [0..1] « This element has or is affected by some invariantsC »The maximum number of times this element is permitted to appear in the instancemax : string [0..1] « This element has or is affected by some invariantsC »Identifies an element defined elsewhere in the definition whose content rules should be applied to the current element. ContentReferences bring across all the rules that are in the ElementDefinition for the element, including definitions, cardinality constraints, bindings, invariants etccontentReference : uri [0..1] « This element has or is affected by some invariantsC »The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false')defaultValue[x] : * [0..1] « This element has or is affected by some invariantsC »The Implicit meaning that is to be understood when this element is missing (e.g. 'when this element is missing, the period is ongoing')meaningWhenMissing : markdown [0..1] « This element has or is affected by some invariantsC »If present, indicates that the order of the repeating element has meaning and describes what that meaning is. If absent, it means that the order of the element has no meaningorderMeaning : string [0..1] « This element has or is affected by some invariantsC »Specifies a value that SHALL be exactly the value for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missingfixed[x] : * [0..1] « This element has or is affected by some invariantsC »Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example. When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly. When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array. When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e., 1. If primitive: it must match exactly the pattern value 2. If a complex object: it must match (recursively) the pattern value 3. If an array: it must match (recursively) the pattern value If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions. If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will havepattern[x] : * [0..1] « This element has or is affected by some invariantsC »The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and QuantityminValue[x] : DataType [0..1] « date|dateTime|instant|time|decimal| integer|integer64|positiveInt|unsignedInt|Quantity » « This element has or is affected by some invariantsC »The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and QuantitymaxValue[x] : DataType [0..1] « date|dateTime|instant|time|decimal| integer|integer64|positiveInt|unsignedInt|Quantity » « This element has or is affected by some invariantsC »Indicates the maximum length in characters that is permitted to be present in conformant instances and which is expected to be supported by conformant consumers that support the element. ```maxLength``` SHOULD only be used on primitive data types that have a string representation (see [[[http://hl7.org/fhir/StructureDefinition/structuredefinition-type-characteristics]]])maxLength : integer [0..1] « This element has or is affected by some invariantsC »A reference to an invariant that may make additional statements about the cardinality or value in the instancecondition : id [0..*]Specifies for a primitive data type that the value of the data type cannot be replaced by an extensionmustHaveValue : boolean [0..1] « This element has or is affected by some invariantsC »Specifies a list of extensions that can appear in place of a primitive valuevalueAlternatives : canonical [0..*] « StructureDefinition » « This element has or is affected by some invariantsC »If true, implementations that produce or consume resources SHALL provide "support" for the element in some meaningful way. Note that this is being phased out and replaced by obligations (see below). If false, the element may be ignored and not supported. If false, whether to populate or use the data element in any way is at the discretion of the implementationmustSupport : boolean [0..1]If true, the value of this element affects the interpretation of the element or resource that contains it, and the value of the element cannot be ignored. Typically, this is used for status, negation and qualification codes. The effect of this is that the element cannot be ignored by systems: they SHALL either recognize the element and process it, and/or a pre-determination has been made that it is not relevant to their particular system. When used on the root element in an extension definition, this indicates whether or not the extension is a modifier extensionisModifier : boolean [0..1] « This element has or is affected by some invariantsC »Explains how that element affects the interpretation of the resource or element that contains itisModifierReason : string [0..1] « This element has or is affected by some invariantsC »Whether the element should be included if a client requests a search with the parameter _summary=trueisSummary : boolean [0..1]SlicingA human-readable text description of how the slicing works. If there is no discriminator, this is required to be present to provide whatever information is possible about how the slices can be differentiateddescription : string [0..1]If the matching elements have to occur in the same order as defined in the profileordered : boolean [0..1] « This element has or is affected by some invariantsC »Whether additional slices are allowed or not. When the slices are ordered, profile authors can also say that additional slices are only allowed at the endrules : code [1..1] « How slices are interpreted when evaluating an instance. (Strength=Required)SlicingRules! » « This element has or is affected by some invariantsC »DiscriminatorHow the element value is interpreted when discrimination is evaluatedtype : code [1..1] « How an element value is interpreted when discrimination is evaluated. (Strength=Required)DiscriminatorType! »A FHIRPath expression, using [the simple subset of FHIRPath](fhirpath.html#simple), that is used to identify the element on which discrimination is basedpath : string [1..1]BaseThe Path that identifies the base element - this matches the ElementDefinition.path for that element. Across FHIR, there is only one base definition of any element - that is, an element definition on a [[[StructureDefinition]]] without a StructureDefinition.basepath : string [1..1]Minimum cardinality of the base element identified by the pathmin : unsignedInt [1..1]Maximum cardinality of the base element identified by the pathmax : string [1..1]TypeRefURL of Data type or Resource that is a(or the) type used for this element. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. "string" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical modelscode : uri [1..1] « List of all Types for ElementDefinition.type.code. (Strength=Extensible)ElementDefinitionTypes+ » « This element has or is affected by some invariantsC »Identifies a profile structure or implementation Guide that applies to the datatype this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the type SHALL conform to at least one profile defined in the implementation guideprofile : canonical [0..*] « StructureDefinition|ImplementationGuide »Used when the type is "Reference" or "canonical", and identifies a profile structure or implementation Guide that applies to the target of the reference this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guidetargetProfile : canonical [0..*] « StructureDefinition| ImplementationGuide » « This element has or is affected by some invariantsC »If the type is a reference to another resource, how the resource is or can be aggregated - is it a contained resource, or a reference, and if the context is a bundle, is it included in the bundleaggregation : code [0..*] « How resource references can be aggregated. (Strength=Required)AggregationMode! » « This element has or is affected by some invariantsC »Whether this reference needs to be version specific or version independent, or whether either can be usedversioning : code [0..1] « Whether a reference needs to be version specific or version independent, or whether either can be used. (Strength=Required)ReferenceVersionRules! »ExampleDescribes the purpose of this example among the set of exampleslabel : string [1..1]The actual value for the element, which must be one of the types allowed for this elementvalue[x] : * [1..1]ConstraintAllows identification of which elements have their cardinalities impacted by the constraint. Will not be referenced for constraints that do not affect cardinalitykey : id [1..1] « This element has or is affected by some invariantsC »Description of why this constraint is necessary or appropriaterequirements : markdown [0..1]Identifies the impact constraint violation has on the conformance of the instanceseverity : code [1..1] « SHALL applications comply with this constraint? (Strength=Required)ConstraintSeverity! » « This element has or is affected by some invariantsC »If true, indicates that the warning or best practice guideline should be suppressedsuppress : boolean [0..1] « This element has or is affected by some invariantsC »Text that can be used to describe the constraint in messages identifying that the constraint has been violatedhuman : string [1..1]A [FHIRPath](fhirpath.html) expression of constraint that can be executed to see if this constraint is metexpression : string [0..1] « This element has or is affected by some invariantsC »A reference to the original source of the constraint, for traceability purposessource : canonical [0..1] « StructureDefinition »ElementDefinitionBindingIndicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instancesstrength : code [1..1] « Indication of the degree of conformance expectations associated with a binding. (Strength=Required)BindingStrength! »Describes the intended use of this particular set of codesdescription : markdown [0..1] « This element has or is affected by some invariantsC »Refers to the value set that identifies the set of codes the binding refers tovalueSet : canonical [0..1] « ValueSet » « This element has or is affected by some invariantsC »AdditionalThe use of this additional bindingpurpose : code [1..1] « The use of an additional binding. (Strength=Required)AdditionalBindingPurposeVS! »The valueSet that is being bound for the purposevalueSet : canonical [1..1] « ValueSet »Documentation of the purpose of use of the bindingproviding additional information about how it is intended to be useddocumentation : markdown [0..1]Concise documentation - for summary tablesshortDoco : string [0..1]Qualifies the usage of the binding. Typically bindings are qualified by jurisdiction, but they may also be qualified by gender, workflow status, clinical domain etc. The information to decide whether a usege context applies is usually outside the resource, determined by context, and this might present challenges for validation toolingusage : UsageContext [0..*]Whether the binding applies to all repeats, or just to any one of them. This is only relevant for elements that can repeatany : boolean [0..1]MappingAn internal reference to the definition of a mappingidentity : id [1..1] « This element has or is affected by some invariantsC »Identifies the computable language in which mapping.map is expressedlanguage : code [0..1] « The mime type of an attachment. Any valid mime type is allowed. (Strength=Required)MimeTypes! »Expresses what part of the target specification corresponds to this elementmap : string [1..1]Comments that provide information about the mapping or its usecomment : markdown [0..1]BackboneTypeMay be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and managable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions. Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself) (this element modifies the meaning of other elements)modifierExtension : Extension [0..*]Designates which child elements are used to discriminate between the slices when processing an instance. If one or more discriminators are provided, the value of the child elements in the instance data SHALL completely distinguish which slice the element in the resource matches based on the allowed values for those elements in each of the slicesdiscriminator[0..*]Indicates that the element is sliced into a set of alternative definitions (i.e. in a structure definition, there are multiple different constraints on a single element in the base resource). Slicing can be used in any resource that has cardinality ..* on the base resource, or any resource with a choice of types. The set of slices is any elements that come after this in the element sequence that have the same path, until a shorter path occurs (the shorter path terminates the set)slicing[0..1]Information about the base definition of the element, provided to make it unnecessary for tools to trace the deviation of the element through the derived and related profiles. When the element definition is not the original definition of an element - e.g. either in a constraint on another type, or for elements from a super type in a snap shot - then the information in provided in the element definition may be different to the base definition. On the original definition of the element, it will be samebase[0..1]The data type or resource that the value of this element is permitted to betype[0..*]A sample value for this element demonstrating the type of information that would typically be found in the elementexample[0..*]Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instanceconstraint[0..*]Additional bindings that help applications implementing this element. Additional bindings do not replace the main binding but provide more information and/or contextadditional[0..*]Binds to a value set if this element is coded (code, Coding, CodeableConcept, Quantity), or the data types (string, uri)binding[0..1]Identifies a concept from an external specification that roughly corresponds to this elementmapping[0..*]

XML Template

<ElementDefinition xmlns="http://hl7.org/fhir">
 <!-- from Element: extension -->
 <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 Name for element to display with or prompt for element -->
 <code><!-- 0..* Coding Corresponding codes in terminologies icon --></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 Why this resource has been created -->
 <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>
 <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]><!-- 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]><!-- 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? -->
 <binding>  <!-- I 0..1 ValueSet details if this is coded -->
  <strength value="[code]"/><!-- 1..1 required | extensible | preferred | example -->
  <description value="[markdown]"/><!-- I 0..1 Intended use of codes in the bound value set -->
  <valueSet><!-- I 0..1 canonical(ValueSet) Source of value set --></valueSet>
  <additional>  <!-- 0..* Additional Bindings - more rules about the binding -->
   <purpose value="[code]"/><!-- 1..1 maximum | minimum | required | extensible | candidate | current | 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>
</ElementDefinition>

JSON Template

{doco
  // 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>", // Name for element to display with or prompt for element
  "code" : [{ Coding }], // Corresponding codes in terminologies icon
  "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>", // Why this resource has been created
  "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 54:
  "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 },
  "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 54:
  "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 },
  "fixedDosage" : { Dosage },
  "fixedMeta" : { Meta },
  // pattern[x]: Value must have at least these property values. One of these 54:
  "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 },
  "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 54:
    "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 },
    "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
    "description" : "<markdown>", // I Intended use of codes in the bound value set
    "valueSet" : "<canonical(ValueSet)>", // I Source of value set
    "additional" : [{ // Additional Bindings - more rules about the binding
      "purpose" : "<code>", // R!  maximum | minimum | required | extensible | candidate | current | 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: Element.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 Name for element 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 Why this resource has been created
  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 54
    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: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 54
    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:Dosage ; Dosage ]
    fhir:fixed [  a fhir:Meta ; Meta ]
  # pattern[x] : 0..1 I Value must have at least these property values. One of these 54
    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: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 54
      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: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
    fhir:description [ markdown ] ; # 0..1 I Intended use of codes in the bound value set
    fhir:valueSet [ canonical(ValueSet) ] ; # 0..1 I Source of value set
    fhir:additional ( [ # 0..* Additional Bindings - more rules about the binding
      fhir:purpose [ code ] ; # 1..1 maximum | minimum | required | extensible | candidate | current | 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 Release 3

Changes from both R4 and R4B

ElementDefinition
ElementDefinition.slicing.discriminator.type
  • Add code position
ElementDefinition.type.code
ElementDefinition.defaultValue[x]
  • Add Types integer64, CodeableReference, RatioRange, Availability, ExtendedContactDetail, Meta
  • Remove Type Contributor
ElementDefinition.fixed[x]
  • Add Types integer64, CodeableReference, RatioRange, Availability, ExtendedContactDetail, Meta
  • Remove Type Contributor
ElementDefinition.pattern[x]
  • Add Types integer64, CodeableReference, RatioRange, Availability, ExtendedContactDetail, Meta
  • Remove Type Contributor
ElementDefinition.example.value[x]
  • Add Types integer64, CodeableReference, RatioRange, Availability, ExtendedContactDetail, Meta
  • Remove Type Contributor
ElementDefinition.minValue[x]
  • Add Type integer64
ElementDefinition.maxValue[x]
  • Add Type integer64
ElementDefinition.constraint.requirements
  • Type changed from string to markdown
ElementDefinition.constraint.suppress
  • Added Element
ElementDefinition.mustHaveValue
  • Added Element
ElementDefinition.valueAlternatives
  • Added Element
ElementDefinition.binding.description
  • Type changed from string to markdown
ElementDefinition.binding.additional
  • Added Element
ElementDefinition.binding.additional.purpose
  • Added Mandatory Element
ElementDefinition.binding.additional.valueSet
  • Added Mandatory Element
ElementDefinition.binding.additional.documentation
  • Added Element
ElementDefinition.binding.additional.shortDoco
  • Added Element
ElementDefinition.binding.additional.usage
  • Added Element
ElementDefinition.binding.additional.any
  • Added Element
ElementDefinition.mapping.comment
  • Type changed from string to markdown
ElementDefinition.constraint.xpath
  • Deleted (XPath removed due to lack of use and maintenance)

See the Full Difference for further information

Constraints

idLevelLocationDescriptionExpression
img eld-2Rule (base)Min <= Maxmin.empty() or max.empty() or (max = '*') or iif(max != '*', min <= max.toInteger())
img eld-3Rule ElementDefinition.maxMax SHALL be a number or "*"empty() or ($this = '*') or (toInteger() >= 0)
img eld-4Rule ElementDefinition.typeAggregation may only be specified if one of the allowed types for the element is a referenceaggregation.empty() or (code = 'Reference') or (code = 'canonical') or (code = 'CodeableReference')
img eld-5Rule (base)if the element definition has a contentReference, it cannot have type, defaultValue, fixed, pattern, example, minValue, maxValue, maxLength, or bindingcontentReference.empty() or (type.empty() and defaultValue.empty() and fixed.empty() and pattern.empty() and example.empty() and minValue.empty() and maxValue.empty() and maxLength.empty() and binding.empty())
img eld-6Rule (base)Fixed value may only be specified if there is one typefixed.empty() or (type.count() <= 1)
img eld-7Rule (base)Pattern may only be specified if there is one typepattern.empty() or (type.count() <= 1)
img eld-8Rule (base)Pattern and fixed are mutually exclusivepattern.empty() or fixed.empty()
img eld-11Rule (base)Binding can only be present for coded elements, string, and uri if using FHIR-defined typesbinding.empty() or type.code.empty() or type.code.contains(":") or type.select((code = 'code') or (code = 'Coding') or (code='CodeableConcept') or (code = 'Quantity') or (code = 'string') or (code = 'uri') or (code = 'Duration')).exists()
img eld-12Rule ElementDefinition.bindingValueSet SHALL start with http:// or https:// or urn: or #valueSet.exists() implies (valueSet.startsWith('http:') or valueSet.startsWith('https') or valueSet.startsWith('urn:') or valueSet.startsWith('#'))
img eld-13Rule (base)Types must be unique by codetype.select(code).isDistinct()
img eld-14Rule (base)Constraints must be unique by keyconstraint.select(key).isDistinct()
img eld-15Rule (base)default value and meaningWhenMissing are mutually exclusivedefaultValue.empty() or meaningWhenMissing.empty()
img eld-16Rule (base)sliceName must be composed of proper tokens separated by "/"sliceName.empty() or sliceName.matches('^[a-zA-Z0-9\\/\\-_\\[\\]\\@]+$')
img eld-17Rule ElementDefinition.typetargetProfile is only allowed if the type is Reference or canonical(code='Reference' or code = 'canonical' or code = 'CodeableReference') or targetProfile.empty()
img eld-18Rule (base)Must have a modifier reason if isModifier = true(isModifier.exists() and isModifier) implies isModifierReason.exists()
img eld-19Rule (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 characterspath.matches('^[^\\s\\.,:;\\\'"\\/|?!@#$%&*()\\[\\]{}]{1,64}(\\.[^\\s\\.,:;\\\'"\\/|?!@#$%&*()\\[\\]{}]{1,64}(\\[x\\])?(\\:[^\\s\\.]+)?)*$')
img eld-20Warning (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])?)*$')
img eld-21Warning ElementDefinition.constraintConstraints should have an expression or else validators will not be able to enforce themexpression.exists()
img eld-22Rule (base)sliceIsConstraining can only appear if slicename is presentsliceIsConstraining.exists() implies sliceName.exists()
img eld-23Rule ElementDefinition.bindingbinding SHALL have either description or valueSetdescription.exists() or valueSet.exists()
img eld-24Guideline (base)pattern[x] should be used rather than fixed[x]fixed.exists().not()
This is (only) a best practice guideline because:

pattern[x] is generally preferred over fixed[x] because it doesn't preclude the use of id and additional extensions, though there are corner cases when it's appropriate to exclude those

img eld-25Warning (base)Order has no meaning (and cannot be asserted to have meaning), so enforcing rules on order is improperorderMeaning.empty() implies slicing.where(rules='openAtEnd' or ordered).exists().not()
img eld-26Rule ElementDefinition.constraintErrors cannot be suppressed(severity = 'error') implies suppress.empty()
img eld-27Warning (base)Mappings SHOULD be unique by keymapping.select(identity).isDistinct()
img eld-28Rule (base)Can't have valueAlternatives if mustHaveValue is truemustHaveValue.value implies valueAlternatives.empty()

 

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. 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:

  • Element names (the parts of a path delineated by the '.' character) SHALL NOT contain whitespace (i.e. Unicode characters marked as whitespace)
  • Element names SHALL NOT contain the characters ,:;'"/|?!@#$%^&*()[]{}
  • Element names SHOULD not contain non-ASCII characters
  • Element names SHALL NOT exceed 64 characters in length
  • Element paths cannot imply elements that are not explicitly defined i.e. a.b.c.d cannot be defined unless a.b.c is explicitly defined
  • By convention, each path starts with an uppercase letter (type) but all the element names that follow this are lowercase (not type names). All resources and datatypes (except for Primitive datatypes) follow this convention, but logical models are not required to do so

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:

  • StructureDefinitions of kind = resource, complex-type or primitive-type, where derivation = specialization. These are either Resources or Datatypes defined in the specification
  • StructureDefinitions of kind = logical
  • Data Elements

StructureDefinitions with derivation = constraint (i.e. Resource and Datatype profiles) are not allowed to define or include ElementDefinitions with a path not defined within the base type definition from which they derive (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:

  • The id will be constructed as a dot separated string, each part corresponding to a token in the path
  • For each token in the path, use the syntax pathpart:slicename/reslicename
  • For type choice elements, the id reflects the type slice. e.g. For path = Patient.deceased[x], the id of the boolean slice type element is Patient.deceased[x]:deceasedBoolean

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 datatype ElementDefinition is used in StructureDefinition. The way its elements are to be used and interpreted depends on the context:

ElementDefinition field Type definition, first element Type definition, following elements Constraint Definition, first element 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 prohibited optional
short/definition required required required required
requirements/
comments/alias
prohibited optional prohibited optional
base snapshot: required
differential: optional
snapshot: required
differential: optional
required required
type required required optional optional
nameReference prohibited optional prohibited optional
min/max optional§ 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 prohibited prohibited optional optional
isModifier prohibited optional prohibited optional
isSummary prohibited optional prohibited optional
binding prohibited optional prohibited optional
constraint optional optional optional optional
condition prohibited optional prohibited optional
mapping optional optional optional optional

Notes:

  • Type definition: A StructureDefinition without a baseDefinition element, or where the derivation type is 'specialization'
  • Constraint definition: A StructureDefinition with a baseDefinition element and a derivation of 'constraint' - e.g. a definition of a structure that constrains another base structure, referring to the differential portion
  • : The element's presence, and value, must match the definition in the base definition
  • : The element content must be consistent with that matching element in the base definition
  • : Additional constraints and mappings can be defined, but they do not replace the ones in the base definition
  • §: The cardinality on a type places constraints on references to that type. I.e. profiles referencing the type must fall within the cardinality bounds of the type itself. This most commonly occurs with Extension profiles, where the profile may prohibit the extension from repeating (max=1), or less commonly, make the extension mandatory (min=1) - i.e. if the extension is referenced in a profile, it must be marked as mandatory.
  • For some simple types, rather than pointing to a FHIR datatype, the element will be defined as having a datatype defined by [FHIRPath]. E.g. http://hl7.org/fhirpath/System.String icon. 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.
  • In addition, when an element has a datatype of http://hl7.org/fhirpath/System.String icon 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 datatype
(example: Quantity - XML, JSON)
Name of the type Path inside the datatype Element
A constrained datatype
(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 datatypes)
The name of the resource
Base Extension (which is a standard datatype)
(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 is only allowed when constraining an existing structure
  • slicing can only be used on the first repetition of an element. This first element that declares slicing is considered to be the slicing entry
  • All elements following the first repeat that containing a slicing SHALL have a sliceName
  • The special slice name @default applies to all entries that are not in any other slice
  • The first entry (the one having the slicing information) is understood to be the set of constraints that apply to all slices and entries, whether they have a defined slice or not It's use follows the "normal case", except:
    • slicing must be present
    • min governs the number of total occurrences of the sliced element including the number of occurrences in the open portion of the slice (individual slices may have a different min value).

Elements that allow a choice of multiple types can be constrained. In principle, there are two different types of constraints to apply:

  • A constraint that applies to the element as a whole - e.g. as restricting the cardinality, or limiting the choice of types
  • A constraint that applies to the use of a particular type - e.g. value set binding

When constraining elements with multiple types, the following rules apply:

  • Constraints limiting the acceptable list of types must be applied to the original "[x]" element as this is where the list of acceptable types is defined
  • The inclusion of a type specific element (such as "Patient.deceased[x]:deceasedBoolean") SHALL NOT be interpreted as constraining allowed types, but instead, it constrains the use of a particular type
  • the original element SHALL always be represented in a snapshot; the type specific variants are only represented when needed
  • If there is no StructureDefinition.baseDefinition: min and max are always required
  • Otherwise, in StructureDefinition.differential: min and max are always optional; if they are not present, they default to the min and max from the base definition
  • In StructureDefinition.snapshot: min and max are always required
  • If min = 0, and there is a fixed or pattern value present, the fixed or pattern value only applies if the element is actually present. If the element is omitted, it is NOT treated as though the fixed value or pattern had been specified

This section and the elements mustHaveValue and valueAlternatives are considered Trial Use for FHIR Release 5.

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.

  • If an aggregationMode is present in the definition, the 'reference' element SHALL be present and have a value and the target of the reference SHALL be aggregated as defined
  • If type.versioning is present in the definition, the 'reference' element SHALL be present and have a value and the reference SHALL be populated as the versioning constraint dictates.

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. 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 datatypes because:

  • The value must be known by all implementations
  • When an element has a default value, it can never be unknown - e.g. it is implicitly mandatory
  • The default value can never be changed
  • The presence of a default value interacts with minimum cardinality and the :missing search token in ways that create confusion for implementations

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 can be used to make more detailed statements about application behavior. See Implementation Obligations for the proper use of these features.