This page is part of the FHIR Specification (v5.0.0: R5 - STU). This is the current published version. For a full list of available versions, see the Directory of published versions . Page versions: R5 R4B R4 R3 R2
FHIR Infrastructure Work Group | Maturity Level: 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:
The ElementDefinition type is the core of the FHIR metadata layer, and is closely (conceptually) aligned to ISO 11179. All the data elements defined in this specification are published as a collection of data elements (XML or JSON).
ElementDefinition is used in StructureDefinition
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
ElementDefinition | ΣN | Element | Definition of an element in a resource or extension + Rule: Min <= Max + Rule: if the element definition has a contentReference, it cannot have type, defaultValue, fixed, pattern, example, minValue, maxValue, maxLength, or binding + Rule: 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 | ΣC | 1..1 | string | Path of the element in the hierarchy of elements |
representation | Σ | 0..* | code | xmlAttr | xmlText | typeAttr | cdaText | xhtml Binding: PropertyRepresentation (Required) |
sliceName | ΣC | 0..1 | string | Name for this particular element (in a set of slices) |
sliceIsConstraining | ΣCTU | 0..1 | boolean | If this slice definition constrains an inherited slice definition (or not) |
label | ΣT | 0..1 | string | Name for element to display with or prompt for element |
code | Σ | 0..* | Coding | Corresponding codes in terminologies Binding: ElementDefinitionCode (Example) |
slicing | ΣC | 0..1 | Element | This element is sliced - slices follow |
discriminator | Σ | 0..* | Element | Element values that are used to distinguish the slices |
type | Σ | 1..1 | code | value | exists | type | profile | position Binding: DiscriminatorType (Required) |
path | Σ | 1..1 | string | Path to element value |
description | ΣT | 0..1 | string | Text description of how slicing works (or not) |
ordered | ΣC | 0..1 | boolean | If elements must be in same order as slices |
rules | ΣC | 1..1 | code | closed | open | openAtEnd Binding: SlicingRules (Required) |
short | ΣT | 0..1 | string | Concise definition for space-constrained presentation |
definition | ΣT | 0..1 | markdown | Full formal definition as narrative text |
comment | ΣT | 0..1 | markdown | Comments about the use of this element |
requirements | ΣT | 0..1 | markdown | Why this resource has been created |
alias | ΣT | 0..* | string | Other names |
min | ΣC | 0..1 | unsignedInt | Minimum Cardinality |
max | ΣC | 0..1 | string | Maximum Cardinality (a number or *) + Rule: Max SHALL be a number or "*" |
base | Σ | 0..1 | Element | Base definition information for tools |
path | Σ | 1..1 | string | Path that identifies the base element |
min | Σ | 1..1 | unsignedInt | Min cardinality of the base element |
max | Σ | 1..1 | string | Max cardinality of the base element |
contentReference | ΣC | 0..1 | uri | Reference to definition of content for the element |
type | ΣC | 0..* | Element | Data type and Profile for this element + Rule: Aggregation may only be specified if one of the allowed types for the element is a reference + Rule: targetProfile is only allowed if the type is Reference or canonical |
code | ΣC | 1..1 | uri | Data type or Resource (reference to definition) Binding: Element Definition Types (Extensible) |
profile | Σ | 0..* | canonical(StructureDefinition | ImplementationGuide) | Profiles (StructureDefinition or IG) - one must apply |
targetProfile | ΣC | 0..* | canonical(StructureDefinition | ImplementationGuide) | Profile (StructureDefinition or IG) on the Reference/canonical target - one must apply |
aggregation | ΣC | 0..* | code | contained | referenced | bundled - how aggregated Binding: AggregationMode (Required) |
versioning | Σ | 0..1 | code | either | independent | specific Binding: ReferenceVersionRules (Required) |
defaultValue[x] | ΣC | 0..1 | * | Specified value if missing from instance |
meaningWhenMissing | ΣTC | 0..1 | markdown | Implicit meaning when this element is missing |
orderMeaning | ΣC | 0..1 | string | What the order of the elements means |
fixed[x] | ΣC | 0..1 | * | Value must be exactly this |
pattern[x] | ΣC | 0..1 | * | Value must have at least these property values |
example | ΣC | 0..* | Element | Example value (as defined for type) |
label | ΣT | 1..1 | string | Describes the purpose of this example |
value[x] | Σ | 1..1 | * | Value of Example (one of allowed types) |
minValue[x] | ΣC | 0..1 | Minimum Allowed Value (for some types) | |
minValueDate | date | |||
minValueDateTime | dateTime | |||
minValueInstant | instant | |||
minValueTime | time | |||
minValueDecimal | decimal | |||
minValueInteger | integer | |||
minValueInteger64 | integer64 | |||
minValuePositiveInt | positiveInt | |||
minValueUnsignedInt | unsignedInt | |||
minValueQuantity | Quantity | |||
maxValue[x] | ΣC | 0..1 | Maximum Allowed Value (for some types) | |
maxValueDate | date | |||
maxValueDateTime | dateTime | |||
maxValueInstant | instant | |||
maxValueTime | time | |||
maxValueDecimal | decimal | |||
maxValueInteger | integer | |||
maxValueInteger64 | integer64 | |||
maxValuePositiveInt | positiveInt | |||
maxValueUnsignedInt | unsignedInt | |||
maxValueQuantity | Quantity | |||
maxLength | ΣC | 0..1 | integer | Max length for string type data |
condition | Σ | 0..* | id | Reference to invariant about presence |
constraint | ΣC | 0..* | Element | Condition that must evaluate to true + Warning: Constraints should have an expression or else validators will not be able to enforce them + Rule: Errors cannot be suppressed |
key | ΣC | 1..1 | id | Target of 'condition' reference above |
requirements | Σ | 0..1 | markdown | Why this constraint is necessary or appropriate |
severity | ΣC | 1..1 | code | error | warning Binding: ConstraintSeverity (Required) |
suppress | ΣCTU | 0..1 | boolean | Suppress warning or hint in profile |
human | ΣT | 1..1 | string | Human description of constraint |
expression | ΣC | 0..1 | string | FHIRPath expression of constraint |
source | Σ | 0..1 | canonical(StructureDefinition) | Reference to original source of constraint |
mustHaveValue | ΣCTU | 0..1 | boolean | For primitives, that a value must be present - not replaced by an extension |
valueAlternatives | ΣCTU | 0..* | canonical(StructureDefinition) | Extensions that are allowed to replace a primitive value |
mustSupport | Σ | 0..1 | boolean | If the element must be supported (discouraged - see obligations) |
isModifier | ΣC | 0..1 | boolean | If this modifies the meaning of other elements |
isModifierReason | ΣC | 0..1 | string | Reason that this element is marked as a modifier |
isSummary | Σ | 0..1 | boolean | Include when _summary = true? |
binding | ΣC | 0..1 | Element | ValueSet 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..1 | code | required | extensible | preferred | example Binding: BindingStrength (Required) |
description | ΣTC | 0..1 | markdown | Intended use of codes in the bound value set |
valueSet | ΣC | 0..1 | canonical(ValueSet) | Source of value set |
additional | ΣTU | 0..* | Element | Additional Bindings - more rules about the binding |
purpose | Σ | 1..1 | code | maximum | minimum | required | extensible | candidate | current | preferred | ui | starter | component Binding: Additional Binding Purpose ValueSet (Required) |
valueSet | Σ | 1..1 | canonical(ValueSet) | The value set for the additional binding |
documentation | Σ | 0..1 | markdown | Documentation of the purpose of use of the binding |
shortDoco | Σ | 0..1 | string | Concise documentation - for summary tables |
usage | Σ | 0..* | UsageContext | Qualifies the usage - jurisdiction, gender, workflow status etc. |
any | Σ | 0..1 | boolean | Whether binding can applies to all repeats, or just one |
mapping | ΣC | 0..* | Element | Map element to another set of definitions |
identity | ΣC | 1..1 | id | Reference to mapping declaration |
language | Σ | 0..1 | code | Computable language of mapping Binding: Mime Types (Required) |
map | Σ | 1..1 | string | Details of the mapping |
comment | Σ | 0..1 | markdown | Comments about the mapping or its use |
Documentation for this format |
UML Diagram (Legend)
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 --></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
{ // 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 "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 |
|
ElementDefinition.type.code |
|
ElementDefinition.defaultValue[x] |
|
ElementDefinition.fixed[x] |
|
ElementDefinition.pattern[x] |
|
ElementDefinition.example.value[x] |
|
ElementDefinition.minValue[x] |
|
ElementDefinition.maxValue[x] |
|
ElementDefinition.constraint.requirements |
|
ElementDefinition.constraint.suppress |
|
ElementDefinition.mustHaveValue |
|
ElementDefinition.valueAlternatives |
|
ElementDefinition.binding.description |
|
ElementDefinition.binding.additional |
|
ElementDefinition.binding.additional.purpose |
|
ElementDefinition.binding.additional.valueSet |
|
ElementDefinition.binding.additional.documentation |
|
ElementDefinition.binding.additional.shortDoco |
|
ElementDefinition.binding.additional.usage |
|
ElementDefinition.binding.additional.any |
|
ElementDefinition.mapping.comment |
|
ElementDefinition.constraint.xpath |
|
See the Full Difference for further information
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
ElementDefinition | ΣN | Element | Definition of an element in a resource or extension + Rule: Min <= Max + Rule: if the element definition has a contentReference, it cannot have type, defaultValue, fixed, pattern, example, minValue, maxValue, maxLength, or binding + Rule: 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 | ΣC | 1..1 | string | Path of the element in the hierarchy of elements |
representation | Σ | 0..* | code | xmlAttr | xmlText | typeAttr | cdaText | xhtml Binding: PropertyRepresentation (Required) |
sliceName | ΣC | 0..1 | string | Name for this particular element (in a set of slices) |
sliceIsConstraining | ΣCTU | 0..1 | boolean | If this slice definition constrains an inherited slice definition (or not) |
label | ΣT | 0..1 | string | Name for element to display with or prompt for element |
code | Σ | 0..* | Coding | Corresponding codes in terminologies Binding: ElementDefinitionCode (Example) |
slicing | ΣC | 0..1 | Element | This element is sliced - slices follow |
discriminator | Σ | 0..* | Element | Element values that are used to distinguish the slices |
type | Σ | 1..1 | code | value | exists | type | profile | position Binding: DiscriminatorType (Required) |
path | Σ | 1..1 | string | Path to element value |
description | ΣT | 0..1 | string | Text description of how slicing works (or not) |
ordered | ΣC | 0..1 | boolean | If elements must be in same order as slices |
rules | ΣC | 1..1 | code | closed | open | openAtEnd Binding: SlicingRules (Required) |
short | ΣT | 0..1 | string | Concise definition for space-constrained presentation |
definition | ΣT | 0..1 | markdown | Full formal definition as narrative text |
comment | ΣT | 0..1 | markdown | Comments about the use of this element |
requirements | ΣT | 0..1 | markdown | Why this resource has been created |
alias | ΣT | 0..* | string | Other names |
min | ΣC | 0..1 | unsignedInt | Minimum Cardinality |
max | ΣC | 0..1 | string | Maximum Cardinality (a number or *) + Rule: Max SHALL be a number or "*" |
base | Σ | 0..1 | Element | Base definition information for tools |
path | Σ | 1..1 | string | Path that identifies the base element |
min | Σ | 1..1 | unsignedInt | Min cardinality of the base element |
max | Σ | 1..1 | string | Max cardinality of the base element |
contentReference | ΣC | 0..1 | uri | Reference to definition of content for the element |
type | ΣC | 0..* | Element | Data type and Profile for this element + Rule: Aggregation may only be specified if one of the allowed types for the element is a reference + Rule: targetProfile is only allowed if the type is Reference or canonical |
code | ΣC | 1..1 | uri | Data type or Resource (reference to definition) Binding: Element Definition Types (Extensible) |
profile | Σ | 0..* | canonical(StructureDefinition | ImplementationGuide) | Profiles (StructureDefinition or IG) - one must apply |
targetProfile | ΣC | 0..* | canonical(StructureDefinition | ImplementationGuide) | Profile (StructureDefinition or IG) on the Reference/canonical target - one must apply |
aggregation | ΣC | 0..* | code | contained | referenced | bundled - how aggregated Binding: AggregationMode (Required) |
versioning | Σ | 0..1 | code | either | independent | specific Binding: ReferenceVersionRules (Required) |
defaultValue[x] | ΣC | 0..1 | * | Specified value if missing from instance |
meaningWhenMissing | ΣTC | 0..1 | markdown | Implicit meaning when this element is missing |
orderMeaning | ΣC | 0..1 | string | What the order of the elements means |
fixed[x] | ΣC | 0..1 | * | Value must be exactly this |
pattern[x] | ΣC | 0..1 | * | Value must have at least these property values |
example | ΣC | 0..* | Element | Example value (as defined for type) |
label | ΣT | 1..1 | string | Describes the purpose of this example |
value[x] | Σ | 1..1 | * | Value of Example (one of allowed types) |
minValue[x] | ΣC | 0..1 | Minimum Allowed Value (for some types) | |
minValueDate | date | |||
minValueDateTime | dateTime | |||
minValueInstant | instant | |||
minValueTime | time | |||
minValueDecimal | decimal | |||
minValueInteger | integer | |||
minValueInteger64 | integer64 | |||
minValuePositiveInt | positiveInt | |||
minValueUnsignedInt | unsignedInt | |||
minValueQuantity | Quantity | |||
maxValue[x] | ΣC | 0..1 | Maximum Allowed Value (for some types) | |
maxValueDate | date | |||
maxValueDateTime | dateTime | |||
maxValueInstant | instant | |||
maxValueTime | time | |||
maxValueDecimal | decimal | |||
maxValueInteger | integer | |||
maxValueInteger64 | integer64 | |||
maxValuePositiveInt | positiveInt | |||
maxValueUnsignedInt | unsignedInt | |||
maxValueQuantity | Quantity | |||
maxLength | ΣC | 0..1 | integer | Max length for string type data |
condition | Σ | 0..* | id | Reference to invariant about presence |
constraint | ΣC | 0..* | Element | Condition that must evaluate to true + Warning: Constraints should have an expression or else validators will not be able to enforce them + Rule: Errors cannot be suppressed |
key | ΣC | 1..1 | id | Target of 'condition' reference above |
requirements | Σ | 0..1 | markdown | Why this constraint is necessary or appropriate |
severity | ΣC | 1..1 | code | error | warning Binding: ConstraintSeverity (Required) |
suppress | ΣCTU | 0..1 | boolean | Suppress warning or hint in profile |
human | ΣT | 1..1 | string | Human description of constraint |
expression | ΣC | 0..1 | string | FHIRPath expression of constraint |
source | Σ | 0..1 | canonical(StructureDefinition) | Reference to original source of constraint |
mustHaveValue | ΣCTU | 0..1 | boolean | For primitives, that a value must be present - not replaced by an extension |
valueAlternatives | ΣCTU | 0..* | canonical(StructureDefinition) | Extensions that are allowed to replace a primitive value |
mustSupport | Σ | 0..1 | boolean | If the element must be supported (discouraged - see obligations) |
isModifier | ΣC | 0..1 | boolean | If this modifies the meaning of other elements |
isModifierReason | ΣC | 0..1 | string | Reason that this element is marked as a modifier |
isSummary | Σ | 0..1 | boolean | Include when _summary = true? |
binding | ΣC | 0..1 | Element | ValueSet 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..1 | code | required | extensible | preferred | example Binding: BindingStrength (Required) |
description | ΣTC | 0..1 | markdown | Intended use of codes in the bound value set |
valueSet | ΣC | 0..1 | canonical(ValueSet) | Source of value set |
additional | ΣTU | 0..* | Element | Additional Bindings - more rules about the binding |
purpose | Σ | 1..1 | code | maximum | minimum | required | extensible | candidate | current | preferred | ui | starter | component Binding: Additional Binding Purpose ValueSet (Required) |
valueSet | Σ | 1..1 | canonical(ValueSet) | The value set for the additional binding |
documentation | Σ | 0..1 | markdown | Documentation of the purpose of use of the binding |
shortDoco | Σ | 0..1 | string | Concise documentation - for summary tables |
usage | Σ | 0..* | UsageContext | Qualifies the usage - jurisdiction, gender, workflow status etc. |
any | Σ | 0..1 | boolean | Whether binding can applies to all repeats, or just one |
mapping | ΣC | 0..* | Element | Map element to another set of definitions |
identity | ΣC | 1..1 | id | Reference to mapping declaration |
language | Σ | 0..1 | code | Computable language of mapping Binding: Mime Types (Required) |
map | Σ | 1..1 | string | Details of the mapping |
comment | Σ | 0..1 | markdown | Comments about the mapping or its use |
Documentation for this format |
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 --></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
{ // 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 "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 |
|
ElementDefinition.type.code |
|
ElementDefinition.defaultValue[x] |
|
ElementDefinition.fixed[x] |
|
ElementDefinition.pattern[x] |
|
ElementDefinition.example.value[x] |
|
ElementDefinition.minValue[x] |
|
ElementDefinition.maxValue[x] |
|
ElementDefinition.constraint.requirements |
|
ElementDefinition.constraint.suppress |
|
ElementDefinition.mustHaveValue |
|
ElementDefinition.valueAlternatives |
|
ElementDefinition.binding.description |
|
ElementDefinition.binding.additional |
|
ElementDefinition.binding.additional.purpose |
|
ElementDefinition.binding.additional.valueSet |
|
ElementDefinition.binding.additional.documentation |
|
ElementDefinition.binding.additional.shortDoco |
|
ElementDefinition.binding.additional.usage |
|
ElementDefinition.binding.additional.any |
|
ElementDefinition.mapping.comment |
|
ElementDefinition.constraint.xpath |
|
See the Full Difference for further information
Constraints
id | Level | Location | Description | Expression |
eld-2 | Rule | (base) | Min <= Max | min.empty() or max.empty() or (max = '*') or iif(max != '*', min <= max.toInteger()) |
eld-3 | Rule | ElementDefinition.max | Max SHALL be a number or "*" | empty() or ($this = '*') or (toInteger() >= 0) |
eld-4 | Rule | ElementDefinition.type | Aggregation may only be specified if one of the allowed types for the element is a reference | aggregation.empty() or (code = 'Reference') or (code = 'canonical') or (code = 'CodeableReference') |
eld-5 | Rule | (base) | if the element definition has a contentReference, it cannot have type, defaultValue, fixed, pattern, example, minValue, maxValue, maxLength, or binding | contentReference.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()) |
eld-6 | Rule | (base) | Fixed value may only be specified if there is one type | fixed.empty() or (type.count() <= 1) |
eld-7 | Rule | (base) | Pattern may only be specified if there is one type | pattern.empty() or (type.count() <= 1) |
eld-8 | Rule | (base) | Pattern and fixed are mutually exclusive | pattern.empty() or fixed.empty() |
eld-11 | Rule | (base) | Binding can only be present for coded elements, string, and uri if using FHIR-defined types | binding.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() |
eld-12 | Rule | ElementDefinition.binding | ValueSet 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('#')) |
eld-13 | Rule | (base) | Types must be unique by code | type.select(code).isDistinct() |
eld-14 | Rule | (base) | Constraints must be unique by key | constraint.select(key).isDistinct() |
eld-15 | Rule | (base) | default value and meaningWhenMissing are mutually exclusive | defaultValue.empty() or meaningWhenMissing.empty() |
eld-16 | Rule | (base) | sliceName must be composed of proper tokens separated by "/" | sliceName.empty() or sliceName.matches('^[a-zA-Z0-9\\/\\-_\\[\\]\\@]+$') |
eld-17 | Rule | ElementDefinition.type | targetProfile is only allowed if the type is Reference or canonical | (code='Reference' or code = 'canonical' or code = 'CodeableReference') or targetProfile.empty() |
eld-18 | Rule | (base) | Must have a modifier reason if isModifier = true | (isModifier.exists() and isModifier) implies isModifierReason.exists() |
eld-19 | Rule | (base) | Element path SHALL be expressed as a set of '.'-separated components with each component restricted to a maximum of 64 characters and with some limits on the allowed choice of characters | path.matches('^[^\\s\\.,:;\\\'"\\/|?!@#$%&*()\\[\\]{}]{1,64}(\\.[^\\s\\.,:;\\\'"\\/|?!@#$%&*()\\[\\]{}]{1,64}(\\[x\\])?(\\:[^\\s\\.]+)?)*$') |
eld-20 | Warning | (base) | The first component of the path should be UpperCamelCase. Additional components (following a '.') should be lowerCamelCase. If this syntax is not adhered to, code generation tools may be broken. Logical models may be less concerned about this implication. | path.matches('^[A-Za-z][A-Za-z0-9]{0,63}(\\.[a-z][A-Za-z0-9]{0,63}(\\[x])?)*$') |
eld-21 | Warning | ElementDefinition.constraint | Constraints should have an expression or else validators will not be able to enforce them | expression.exists() |
eld-22 | Rule | (base) | sliceIsConstraining can only appear if slicename is present | sliceIsConstraining.exists() implies sliceName.exists() |
eld-23 | Rule | ElementDefinition.binding | binding SHALL have either description or valueSet | description.exists() or valueSet.exists() |
eld-24 | Guideline | (base) | pattern[x] should be used rather than fixed[x] | fixed.exists().not() This is (only) a best practice guideline because:
|
eld-25 | Warning | (base) | Order has no meaning (and cannot be asserted to have meaning), so enforcing rules on order is improper | orderMeaning.empty() implies slicing.where(rules='openAtEnd' or ordered).exists().not() |
eld-26 | Rule | ElementDefinition.constraint | Errors cannot be suppressed | (severity = 'error') implies suppress.empty() |
eld-27 | Warning | (base) | Mappings SHOULD be unique by key | mapping.select(identity).isDistinct() |
eld-28 | Rule | (base) | Can't have valueAlternatives if mustHaveValue is true | mustHaveValue.value implies valueAlternatives.empty() |
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:
If the element is polymorphic (has more than one datatype), then the end of the path for the element SHALL be "[x]" to designate that the name of the element may vary when serialized. The "[x]" is not considered to be part of the official element name, though it may frequently appear in documentation that way.
Elements may be defined in:
resource
, complex-type
or primitive-type
, where derivation = specialization
. These are either Resources or Datatypes defined in the specificationlogical
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:
pathpart:slicename/reslicename
Note that in a profile with no slices, this id will match the path exactly and entirely.
id
values constructed in this fashion are unique, and persistent, and may be used as the target of external references into the definition, where necessary.
The 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:
baseDefinition
element, or where the derivation type is 'specialization'baseDefinition
element and a derivation of 'constraint' - e.g. a definition of a structure that constrains another base structure, referring to the differential portionThe 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
can only be used on the first repetition of an element. This first element that declares slicing
is considered to be the slicing entrysliceName
@default
applies to all entries that are not in any other sliceslicing
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 presentmin
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:
When constraining elements with multiple types, the following rules apply:
StructureDefinition.baseDefinition
: min and max are always requiredStructureDefinition.differential
: min and max are always optional; if they are not present, they default to the min and max from the base definitionStructureDefinition.snapshot
: min and max are always required
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.
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:
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.