Release 5 Ballot

This page is part of the FHIR Specification (v5.0.0-ballot: FHIR R5 Ballot Preview). The current version which supercedes this version is 5.0.0. For a full list of available versions, see the Directory of published versions . Page versions: R5 R4B R4 R3 R2

5.3 Resource StructureDefinition - Content

FHIR Infrastructure Work GroupMaturity Level: N Normative (from v4.0.0)Security Category: Anonymous Compartments: Not linked to any defined compartments

A definition of a FHIR structure. This resource is used to describe the underlying resources, data types defined in FHIR, and also for describing extensions and constraints on resources and data types.

The StructureDefinition resource describes a structure - a set of data element definitions, and their associated rules of usage. These structure definitions are used to describe both the content defined in the FHIR specification itself - Resources, data types, the underlying infrastructural types, and also are used to describe how these structures are used in implementations. This allows the definitions of the structures to be shared and published through repositories of structure definitions, compared with each other, and used as the basis for code, report and UI generation.

Note that as part of the specification itself, a full set of structure definitions for all resources and data types is published.

  • StructureDefinitions are used by CapabilityStatement instances for specifying how resources are used
  • StructureDefinitions use Value Sets to specify the content of coded elements

Implementers should be familiar with the background and concepts described in Profiling FHIR before working with this resource.

The StructureDefinition resource has a set of metadata that is mostly shared with the Value Set, CapabilityStatement and other infrastructure resources. The metadata describes the structure and helps find the structure when registered in repositories.

urlThe identifier that is used to identify this structure when it is referenced in a specification, model, design or an instance. This URL is where the structure can be accessed
identifierOther identifiers that are used to identify this structure
version

The identifier that is used to identify this version of the structure when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the structure author manually and the value should be a timestamp.

Note that there may be multiple resource versions of the structure that have this same identifier. The resource will have updates that create new versions for technical reasons, whereas the stated version number needs to be under the author's control

versionAlgorithmIndicates the mechanism used to compare versions to determine which is more current
nameA Computer-ready name (e.g. a token) that identifies the structure - suitable for code generation. Note that this name (and other names relevant for code generation, including element & slice names, codes etc) may collide with reserved words in the relevant target language, and code generators will need to handle this
titleA free text natural language name identifying the structure
statusThe status of the structure allows filtering of StructureDefinitions that are appropriate for use vs. not. See the Status Codes
experimentalThis structure was authored for testing purposes (or education/evaluation/marketing), and is not intended for genuine usage
dateThe date this version of the structure was published
publisherDetails of the individual or organization who accepts responsibility for publishing the structure. This helps establish the "authority/credibility" of the structure.
contactContact details to assist a user in finding and communicating with the publisher
descriptionA free text natural language description of the structure and its use
purposeWhy this structure was created - what the intent of it is
useContext & JurisdictionComputable details about purpose and scope of use
keywordA set of terms from external terminologies that may be used to assist with indexing and searching of StructureDefinitions
copyrightUse and/or publishing restrictions
fhirVersionThe version of the FHIR specification on which this structure is based. It is not necessary to specify the version, as most StructureDefinitions are valid across multiple versions, and the validity of a structure against a particular version of FHIR can easily be checked by tooling.
typeThe type the structure describes.
contextType & contextFor extensions, the types of contexts in which the extension can be used. For further details, see Defining Extensions

Notes:

  • The name and title of the structure are not required to be globally unique, but the name and title should have some scoping information (e.g. AcmeAllergies / Acme Inc. (USA), Allergy List)
  • Multiple keywords may be assigned to the structure. These may either describe the structure, the focus of the structure or both. They are solely to help find the structure by searching for structured concepts
  • The 3 status codes (draft, active, and retired) are the codes that are relevant to structure consumers. Authors may wish to use the authoring-status extension to track the life cycle of a structure as it is prepared

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. StructureDefinition NDomainResourceStructural Definition
+ Warning: Name should be usable as an identifier for the module by machine processing applications such as code generation
+ Rule: Element paths must be unique unless the structure is a constraint
+ Rule: If the structure is not abstract, then there SHALL be a baseDefinition
+ Rule: If the structure defines an extension then the structure must have context information
+ Rule: A structure must have either a differential, or a snapshot (or both)
+ Rule: If there's a type, its content must match the path name in the first element of a snapshot
+ Rule: All element definitions must have an id
+ Rule: The first element in a snapshot has no type unless model is a logical model.
+ Rule: If the first element in a differential has no "." in the path and it's not a logical model, it has no type
+ Rule: In any snapshot or differential, no label, code or requirements on an element without a "." in the path (e.g. the first element)
+ Rule: All element definitions must have unique ids (snapshot)
+ Rule: All element definitions must have unique ids (diff)
+ Rule: Context Invariants can only be used for extensions
+ Rule: FHIR Specification models only use FHIR defined types
+ Rule: Default values can only be specified on specializations
+ Rule: FHIR Specification models never have default values
+ Rule: No slice name on root
+ Rule: If there's a base definition, there must be a derivation
+ Warning: Elements in Resources must have a min cardinality or 0 or 1 and a max cardinality of 1 or *

Elements defined in Ancestors: id, meta, implicitRules, language, text, contained, extension, modifierExtension
Interfaces Implemented: CanonicalResource
... url Σ1..1uriCanonical identifier for this structure definition, represented as a URI (globally unique)
... identifier Σ0..*IdentifierAdditional identifier for the structure definition

... version Σ0..1stringBusiness version of the structure definition
... versionAlgorithm[x] Σ0..1How to compare versions
Version Algorithm (Extensible)
.... versionAlgorithmStringstring
.... versionAlgorithmCodingCoding
... name ΣC1..1stringName for this structure definition (computer friendly)
... title Σ0..1stringName for this structure definition (human friendly)
... status ?!Σ1..1codedraft | active | retired | unknown
PublicationStatus (Required)
... experimental Σ0..1booleanFor testing purposes, not real usage
... date Σ0..1dateTimeDate last changed
... publisher Σ0..1stringName of the publisher/steward (organization or individual)
... contact Σ0..*ContactDetailContact details for the publisher

... description 0..1markdownNatural language description of the structure definition
... useContext ΣTU0..*UsageContextThe context that the content is intended to support

... jurisdiction Σ0..*CodeableConceptIntended jurisdiction for structure definition (if applicable)
Jurisdiction (Extensible)

... purpose 0..1markdownWhy this structure definition is defined
... copyright 0..1markdownUse and/or publishing restrictions
... copyrightLabel 0..1stringCopyright holder and year(s)
... keyword ΣXD0..*CodingAssist with indexing and finding
Structure Definition Use Codes / Keywords (Extensible)

... fhirVersion Σ0..1codeFHIR Version this StructureDefinition targets
FHIRVersion (Required)
... mapping C0..*BackboneElementExternal specification that the content is mapped to
+ Rule: Must have at least a name or a uri (or both)

.... identity 1..1idInternal id when this mapping is used
.... uri C0..1uriIdentifies what this mapping refers to
.... name C0..1stringNames what this mapping refers to
.... comment 0..1stringVersions, Issues, Scope limitations etc.
... kind Σ1..1codeprimitive-type | complex-type | resource | logical
StructureDefinitionKind (Required)
... abstract Σ1..1booleanWhether the structure is abstract
... context ΣC0..*BackboneElementIf an extension, where it can be used in instances

.... type Σ1..1codefhirpath | element | extension
ExtensionContextType (Required)
.... expression Σ1..1stringWhere the extension can be used in instances
... contextInvariant ΣC0..*stringFHIRPath invariants - when the extension can be used

... type ΣC1..1uriType defined or constrained by this structure
All FHIR Types (Extensible)
... baseDefinition ΣC0..1canonical(StructureDefinition)Definition that this type is constrained/specialized from
... derivation Σ0..1codespecialization | constraint - How relates to base definition
TypeDerivationRule (Required)
... snapshot C0..1BackboneElementSnapshot view of the structure
+ Rule: Each element definition in a snapshot must have a formal definition and cardinalities, unless model is a logical model
+ Rule: All snapshot elements must start with the StructureDefinition's specified type for non-logical models, or with the same type name for logical models
+ Rule: For CodeableReference elements, target profiles must be listed on the CodeableReference, not the CodeableReference.reference
+ Rule: For CodeableReference elements, bindings must be listed on the CodeableReference, not the CodeableReference.concept
+ Guideline: The root element of a profile should not have mustSupport = true
+ Rule: All snapshot elements must have a base definition
.... element C1..*ElementDefinitionDefinition of elements in the resource (if no StructureDefinition)
+ Rule: provide either a binding reference or a description (or both)
+ Rule: If there are no discriminators, there must be a definition

... differential C0..1BackboneElementDifferential view of the structure
+ Rule: No slicing on the root element
+ Rule: In any differential, all the elements must start with the StructureDefinition's specified type for non-logical models, or with the same type name for logical models
.... element 1..*ElementDefinitionDefinition of elements in the resource (if no StructureDefinition)


doco Documentation for this format

See the Extensions for this resource

UML Diagram (Legend)

StructureDefinition (DomainResource) +CanonicalResourceAn absolute URI that is used to identify this structure definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this structure definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the structure definition is stored on different serversurl : uri [1..1]A formal identifier that is used to identify this structure definition when it is represented in other formats, or referenced in a specification, model, design or an instanceidentifier : Identifier [0..*]The identifier that is used to identify this version of the structure definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the structure definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequenceversion : string [0..1]Indicates the mechanism used to compare versions to determine which is more currentversionAlgorithm[x] : DataType [0..1] « string|Coding; null (Strength=Extensible) VersionAlgorithm+ »A natural language name identifying the structure definition. This name should be usable as an identifier for the module by machine processing applications such as code generationname : string [1..1] « This element has or is affected by some invariantsC »A short, descriptive, user-friendly title for the structure definitiontitle : string [0..1]The status of this structure definition. Enables tracking the life-cycle of the content (this element modifies the meaning of other elements)status : code [1..1] « null (Strength=Required)PublicationStatus! »A Boolean value to indicate that this structure definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usageexperimental : boolean [0..1]The date (and optionally time) when the structure definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the structure definition changesdate : dateTime [0..1]The name of the organization or individual responsible for the release and ongoing maintenance of the structure definitionpublisher : string [0..1]Contact details to assist a user in finding and communicating with the publishercontact : ContactDetail [0..*]A free text natural language description of the structure definition from a consumer's perspectivedescription : markdown [0..1]The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate structure definition instancesuseContext : UsageContext [0..*]A legal or geographic region in which the structure definition is intended to be usedjurisdiction : CodeableConcept [0..*] « null (Strength=Extensible)Jurisdiction ValueSet+ »Explanation of why this structure definition is needed and why it has been designed as it haspurpose : markdown [0..1]A copyright statement relating to the structure definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the structure definition. The short copyright declaration (e.g. (c) '2015+ xyz organization' should be sent in the copyrightLabel elementcopyright : markdown [0..1]A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved')copyrightLabel : string [0..1](DEPRECATED) A set of key words or terms from external terminologies that may be used to assist with indexing and searching of templates nby describing the use of this structure definition, or the content it describeskeyword : Coding [0..*] « null (Strength=Extensible)DefinitionUseCodes+ »The version of the FHIR specification on which this StructureDefinition is based - this is the formal version of the specification, without the revision number, e.g. [publication].[major].[minor], which is 4.6.0. for this versionfhirVersion : code [0..1] « null (Strength=Required)FHIRVersion! »Defines the kind of structure that this definition is describingkind : code [1..1] « null (Strength=Required)StructureDefinitionKind! »Whether structure this definition describes is abstract or not - that is, whether the structure is not intended to be instantiated. For Resources and Data types, abstract types will never be exchanged between systemsabstract : boolean [1..1]A set of rules as FHIRPath Invariants about when the extension can be used (e.g. co-occurrence variants for the extension). All the rules must be truecontextInvariant : string [0..*] « This element has or is affected by some invariantsC »The type this structure describes. If the derivation kind is 'specialization' then this is the master definition for a type, and there is always one of these (a data type, an extension, a resource, including abstract ones). Otherwise the structure definition is a constraint on the stated type (and in this case, the type cannot be an abstract type). References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. "string" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical modelstype : uri [1..1] « null (Strength=Extensible)FHIRTypes+ » « This element has or is affected by some invariantsC »An absolute URI that is the base structure from which this type is derived, either by specialization or constraintbaseDefinition : canonical [0..1] « StructureDefinition » « This element has or is affected by some invariantsC »How the type relates to the baseDefinitionderivation : code [0..1] « null (Strength=Required)TypeDerivationRule! »MappingAn Internal id that is used to identify this mapping set when specific mappings are madeidentity : id [1..1]An absolute URI that identifies the specification that this mapping is expressed touri : uri [0..1] « This element has or is affected by some invariantsC »A name for the specification that is being mapped toname : string [0..1] « This element has or is affected by some invariantsC »Comments about this mapping, including version notes, issues, scope limitations, and other important notes for usagecomment : string [0..1]ContextDefines how to interpret the expression that defines what the context of the extension istype : code [1..1] « null (Strength=Required)ExtensionContextType! »An expression that defines where an extension can be used in resourcesexpression : string [1..1]SnapshotCaptures constraints on each element within the resourceelement : ElementDefinition [1..*] « This element has or is affected by some invariantsC »DifferentialCaptures constraints on each element within the resourceelement : ElementDefinition [1..*]An external specification that the content is mapped tomapping[0..*]Identifies the types of resource or data type elements to which the extension can be appliedcontext[0..*]A snapshot view is expressed in a standalone form that can be used and interpreted without considering the base StructureDefinitionsnapshot[0..1]A differential view is expressed relative to the base StructureDefinition - a statement of differences that it appliesdifferential[0..1]

XML Template

<StructureDefinition xmlns="http://hl7.org/fhir"> doco
 <!-- from Resource: id, meta, implicitRules, and language -->
 <!-- from DomainResource: text, contained, extension, and modifierExtension -->
 <url value="[uri]"/><!-- 1..1 Canonical identifier for this structure definition, represented as a URI (globally unique) -->
 <identifier><!-- 0..* Identifier Additional identifier for the structure definition --></identifier>
 <version value="[string]"/><!-- 0..1 Business version of the structure definition -->
 <versionAlgorithm[x]><!-- 0..1 string|Coding How to compare versions --></versionAlgorithm[x]>
 <name value="[string]"/><!-- I 1..1 Name for this structure definition (computer friendly) -->
 <title value="[string]"/><!-- 0..1 Name for this structure definition (human friendly) -->
 <status value="[code]"/><!-- 1..1 draft | active | retired | unknown -->
 <experimental value="[boolean]"/><!-- 0..1 For testing purposes, not real usage -->
 <date value="[dateTime]"/><!-- 0..1 Date last changed -->
 <publisher value="[string]"/><!-- 0..1 Name of the publisher/steward (organization or individual) -->
 <contact><!-- 0..* ContactDetail Contact details for the publisher --></contact>
 <description value="[markdown]"/><!-- 0..1 Natural language description of the structure definition -->
 <useContext><!-- 0..* UsageContext The context that the content is intended to support --></useContext>
 <jurisdiction><!-- 0..* CodeableConcept Intended jurisdiction for structure definition (if applicable) --></jurisdiction>
 <purpose value="[markdown]"/><!-- 0..1 Why this structure definition is defined -->
 <copyright value="[markdown]"/><!-- 0..1 Use and/or publishing restrictions -->
 <copyrightLabel value="[string]"/><!-- 0..1 Copyright holder and year(s) -->
 <keyword><!-- 0..* Coding Assist with indexing and finding --></keyword>
 <fhirVersion value="[code]"/><!-- 0..1 FHIR Version this StructureDefinition targets -->
 <mapping>  <!-- 0..* External specification that the content is mapped to -->
  <identity value="[id]"/><!-- 1..1 Internal id when this mapping is used -->
  <uri value="[uri]"/><!-- I 0..1 Identifies what this mapping refers to -->
  <name value="[string]"/><!-- I 0..1 Names what this mapping refers to -->
  <comment value="[string]"/><!-- 0..1 Versions, Issues, Scope limitations etc. -->
 </mapping>
 <kind value="[code]"/><!-- 1..1 primitive-type | complex-type | resource | logical -->
 <abstract value="[boolean]"/><!-- 1..1 Whether the structure is abstract -->
 <context>  <!-- I 0..* If an extension, where it can be used in instances -->
  <type value="[code]"/><!-- 1..1 fhirpath | element | extension -->
  <expression value="[string]"/><!-- 1..1 Where the extension can be used in instances -->
 </context>
 <contextInvariant value="[string]"/><!-- I 0..* FHIRPath invariants - when the extension can be used -->
 <type value="[uri]"/><!-- I 1..1 Type defined or constrained by this structure -->
 <baseDefinition><!-- I 0..1 canonical(StructureDefinition) Definition that this type is constrained/specialized from --></baseDefinition>
 <derivation value="[code]"/><!-- 0..1 specialization | constraint - How relates to base definition -->
 <snapshot>  <!-- I 0..1 Snapshot view of the structure -->
  <element><!-- I 1..* ElementDefinition Definition of elements in the resource (if no StructureDefinition) --></element>
 </snapshot>
 <differential>  <!-- I 0..1 Differential view of the structure -->
  <element><!-- 1..* ElementDefinition Definition of elements in the resource (if no StructureDefinition) --></element>
 </differential>
</StructureDefinition>

JSON Template

{doco
  "resourceType" : "StructureDefinition",
  // from Resource: id, meta, implicitRules, and language
  // from DomainResource: text, contained, extension, and modifierExtension
  "url" : "<uri>", // R!  Canonical identifier for this structure definition, represented as a URI (globally unique)
  "identifier" : [{ Identifier }], // Additional identifier for the structure definition
  "version" : "<string>", // Business version of the structure definition
  // versionAlgorithm[x]: How to compare versions. One of these 2:
  "versionAlgorithmString" : "<string>",
  "versionAlgorithmCoding" : { Coding },
  "name" : "<string>", // I R!  Name for this structure definition (computer friendly)
  "title" : "<string>", // Name for this structure definition (human friendly)
  "status" : "<code>", // R!  draft | active | retired | unknown
  "experimental" : <boolean>, // For testing purposes, not real usage
  "date" : "<dateTime>", // Date last changed
  "publisher" : "<string>", // Name of the publisher/steward (organization or individual)
  "contact" : [{ ContactDetail }], // Contact details for the publisher
  "description" : "<markdown>", // Natural language description of the structure definition
  "useContext" : [{ UsageContext }], // The context that the content is intended to support
  "jurisdiction" : [{ CodeableConcept }], // Intended jurisdiction for structure definition (if applicable)
  "purpose" : "<markdown>", // Why this structure definition is defined
  "copyright" : "<markdown>", // Use and/or publishing restrictions
  "copyrightLabel" : "<string>", // Copyright holder and year(s)
  "keyword" : [{ Coding }], // Assist with indexing and finding
  "fhirVersion" : "<code>", // FHIR Version this StructureDefinition targets
  "mapping" : [{ // External specification that the content is mapped to
    "identity" : "<id>", // R!  Internal id when this mapping is used
    "uri" : "<uri>", // I Identifies what this mapping refers to
    "name" : "<string>", // I Names what this mapping refers to
    "comment" : "<string>" // Versions, Issues, Scope limitations etc.
  }],
  "kind" : "<code>", // R!  primitive-type | complex-type | resource | logical
  "abstract" : <boolean>, // R!  Whether the structure is abstract
  "context" : [{ // I If an extension, where it can be used in instances
    "type" : "<code>", // R!  fhirpath | element | extension
    "expression" : "<string>" // R!  Where the extension can be used in instances
  }],
  "contextInvariant" : ["<string>"], // I FHIRPath invariants - when the extension can be used
  "type" : "<uri>", // I R!  Type defined or constrained by this structure
  "baseDefinition" : "<canonical(StructureDefinition)>", // I Definition that this type is constrained/specialized from
  "derivation" : "<code>", // specialization | constraint - How relates to base definition
  "snapshot" : { // I Snapshot view of the structure
    "element" : [{ ElementDefinition }] // I R!  Definition of elements in the resource (if no StructureDefinition)
  },
  "differential" : { // I Differential view of the structure
    "element" : [{ ElementDefinition }] // R!  Definition of elements in the resource (if no StructureDefinition)
  }
}

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .doco


[ a fhir:StructureDefinition;
  fhir:nodeRole fhir:treeRoot; # if this is the parser root

  # from Resource: .id, .meta, .implicitRules, and .language
  # from DomainResource: .text, .contained, .extension, and .modifierExtension
  fhir:StructureDefinition.url [ uri ]; # 1..1 Canonical identifier for this structure definition, represented as a URI (globally unique)
  fhir:StructureDefinition.identifier [ Identifier ], ... ; # 0..* Additional identifier for the structure definition
  fhir:StructureDefinition.version [ string ]; # 0..1 Business version of the structure definition
  # StructureDefinition.versionAlgorithm[x] : 0..1 How to compare versions. One of these 2
    fhir:StructureDefinition.versionAlgorithmString [ string ]
    fhir:StructureDefinition.versionAlgorithmCoding [ Coding ]
  fhir:StructureDefinition.name [ string ]; # 1..1 I Name for this structure definition (computer friendly)
  fhir:StructureDefinition.title [ string ]; # 0..1 Name for this structure definition (human friendly)
  fhir:StructureDefinition.status [ code ]; # 1..1 draft | active | retired | unknown
  fhir:StructureDefinition.experimental [ boolean ]; # 0..1 For testing purposes, not real usage
  fhir:StructureDefinition.date [ dateTime ]; # 0..1 Date last changed
  fhir:StructureDefinition.publisher [ string ]; # 0..1 Name of the publisher/steward (organization or individual)
  fhir:StructureDefinition.contact [ ContactDetail ], ... ; # 0..* Contact details for the publisher
  fhir:StructureDefinition.description [ markdown ]; # 0..1 Natural language description of the structure definition
  fhir:StructureDefinition.useContext [ UsageContext ], ... ; # 0..* The context that the content is intended to support
  fhir:StructureDefinition.jurisdiction [ CodeableConcept ], ... ; # 0..* Intended jurisdiction for structure definition (if applicable)
  fhir:StructureDefinition.purpose [ markdown ]; # 0..1 Why this structure definition is defined
  fhir:StructureDefinition.copyright [ markdown ]; # 0..1 Use and/or publishing restrictions
  fhir:StructureDefinition.copyrightLabel [ string ]; # 0..1 Copyright holder and year(s)
  fhir:StructureDefinition.keyword [ Coding ], ... ; # 0..* Assist with indexing and finding
  fhir:StructureDefinition.fhirVersion [ code ]; # 0..1 FHIR Version this StructureDefinition targets
  fhir:StructureDefinition.mapping [ # 0..* External specification that the content is mapped to
    fhir:StructureDefinition.mapping.identity [ id ]; # 1..1 Internal id when this mapping is used
    fhir:StructureDefinition.mapping.uri [ uri ]; # 0..1 I Identifies what this mapping refers to
    fhir:StructureDefinition.mapping.name [ string ]; # 0..1 I Names what this mapping refers to
    fhir:StructureDefinition.mapping.comment [ string ]; # 0..1 Versions, Issues, Scope limitations etc.
  ], ...;
  fhir:StructureDefinition.kind [ code ]; # 1..1 primitive-type | complex-type | resource | logical
  fhir:StructureDefinition.abstract [ boolean ]; # 1..1 Whether the structure is abstract
  fhir:StructureDefinition.context [ # 0..* I If an extension, where it can be used in instances
    fhir:StructureDefinition.context.type [ code ]; # 1..1 fhirpath | element | extension
    fhir:StructureDefinition.context.expression [ string ]; # 1..1 Where the extension can be used in instances
  ], ...;
  fhir:StructureDefinition.contextInvariant [ string ], ... ; # 0..* I FHIRPath invariants - when the extension can be used
  fhir:StructureDefinition.type [ uri ]; # 1..1 I Type defined or constrained by this structure
  fhir:StructureDefinition.baseDefinition [ canonical(StructureDefinition) ]; # 0..1 I Definition that this type is constrained/specialized from
  fhir:StructureDefinition.derivation [ code ]; # 0..1 specialization | constraint - How relates to base definition
  fhir:StructureDefinition.snapshot [ # 0..1 I Snapshot view of the structure
    fhir:StructureDefinition.snapshot.element [ ElementDefinition ], ... ; # 1..* I Definition of elements in the resource (if no StructureDefinition)
  ];
  fhir:StructureDefinition.differential [ # 0..1 I Differential view of the structure
    fhir:StructureDefinition.differential.element [ ElementDefinition ], ... ; # 1..* Definition of elements in the resource (if no StructureDefinition)
  ];
]

Changes since R4

StructureDefinition
StructureDefinition.versionAlgorithm[x]
  • Added Element
StructureDefinition.copyrightLabel
  • Added Element
StructureDefinition.type
  • Change value set from http://hl7.org/fhir/ValueSet/defined-types to http://hl7.org/fhir/ValueSet/fhir-types
  • Change value set from http://hl7.org/fhir/ValueSet/defined-types to http://hl7.org/fhir/ValueSet/fhir-types

See the Full Difference for further information

This analysis is available as XML or JSON.

See R3 <--> R4 Conversion Maps (status = 206 tests that all execute ok. 4 fail round-trip testing and 206 r3 resources are invalid (0 errors).)

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. StructureDefinition NDomainResourceStructural Definition
+ Warning: Name should be usable as an identifier for the module by machine processing applications such as code generation
+ Rule: Element paths must be unique unless the structure is a constraint
+ Rule: If the structure is not abstract, then there SHALL be a baseDefinition
+ Rule: If the structure defines an extension then the structure must have context information
+ Rule: A structure must have either a differential, or a snapshot (or both)
+ Rule: If there's a type, its content must match the path name in the first element of a snapshot
+ Rule: All element definitions must have an id
+ Rule: The first element in a snapshot has no type unless model is a logical model.
+ Rule: If the first element in a differential has no "." in the path and it's not a logical model, it has no type
+ Rule: In any snapshot or differential, no label, code or requirements on an element without a "." in the path (e.g. the first element)
+ Rule: All element definitions must have unique ids (snapshot)
+ Rule: All element definitions must have unique ids (diff)
+ Rule: Context Invariants can only be used for extensions
+ Rule: FHIR Specification models only use FHIR defined types
+ Rule: Default values can only be specified on specializations
+ Rule: FHIR Specification models never have default values
+ Rule: No slice name on root
+ Rule: If there's a base definition, there must be a derivation
+ Warning: Elements in Resources must have a min cardinality or 0 or 1 and a max cardinality of 1 or *

Elements defined in Ancestors: id, meta, implicitRules, language, text, contained, extension, modifierExtension
Interfaces Implemented: CanonicalResource
... url Σ1..1uriCanonical identifier for this structure definition, represented as a URI (globally unique)
... identifier Σ0..*IdentifierAdditional identifier for the structure definition

... version Σ0..1stringBusiness version of the structure definition
... versionAlgorithm[x] Σ0..1How to compare versions
Version Algorithm (Extensible)
.... versionAlgorithmStringstring
.... versionAlgorithmCodingCoding
... name ΣC1..1stringName for this structure definition (computer friendly)
... title Σ0..1stringName for this structure definition (human friendly)
... status ?!Σ1..1codedraft | active | retired | unknown
PublicationStatus (Required)
... experimental Σ0..1booleanFor testing purposes, not real usage
... date Σ0..1dateTimeDate last changed
... publisher Σ0..1stringName of the publisher/steward (organization or individual)
... contact Σ0..*ContactDetailContact details for the publisher

... description 0..1markdownNatural language description of the structure definition
... useContext ΣTU0..*UsageContextThe context that the content is intended to support

... jurisdiction Σ0..*CodeableConceptIntended jurisdiction for structure definition (if applicable)
Jurisdiction (Extensible)

... purpose 0..1markdownWhy this structure definition is defined
... copyright 0..1markdownUse and/or publishing restrictions
... copyrightLabel 0..1stringCopyright holder and year(s)
... keyword ΣXD0..*CodingAssist with indexing and finding
Structure Definition Use Codes / Keywords (Extensible)

... fhirVersion Σ0..1codeFHIR Version this StructureDefinition targets
FHIRVersion (Required)
... mapping C0..*BackboneElementExternal specification that the content is mapped to
+ Rule: Must have at least a name or a uri (or both)

.... identity 1..1idInternal id when this mapping is used
.... uri C0..1uriIdentifies what this mapping refers to
.... name C0..1stringNames what this mapping refers to
.... comment 0..1stringVersions, Issues, Scope limitations etc.
... kind Σ1..1codeprimitive-type | complex-type | resource | logical
StructureDefinitionKind (Required)
... abstract Σ1..1booleanWhether the structure is abstract
... context ΣC0..*BackboneElementIf an extension, where it can be used in instances

.... type Σ1..1codefhirpath | element | extension
ExtensionContextType (Required)
.... expression Σ1..1stringWhere the extension can be used in instances
... contextInvariant ΣC0..*stringFHIRPath invariants - when the extension can be used

... type ΣC1..1uriType defined or constrained by this structure
All FHIR Types (Extensible)
... baseDefinition ΣC0..1canonical(StructureDefinition)Definition that this type is constrained/specialized from
... derivation Σ0..1codespecialization | constraint - How relates to base definition
TypeDerivationRule (Required)
... snapshot C0..1BackboneElementSnapshot view of the structure
+ Rule: Each element definition in a snapshot must have a formal definition and cardinalities, unless model is a logical model
+ Rule: All snapshot elements must start with the StructureDefinition's specified type for non-logical models, or with the same type name for logical models
+ Rule: For CodeableReference elements, target profiles must be listed on the CodeableReference, not the CodeableReference.reference
+ Rule: For CodeableReference elements, bindings must be listed on the CodeableReference, not the CodeableReference.concept
+ Guideline: The root element of a profile should not have mustSupport = true
+ Rule: All snapshot elements must have a base definition
.... element C1..*ElementDefinitionDefinition of elements in the resource (if no StructureDefinition)
+ Rule: provide either a binding reference or a description (or both)
+ Rule: If there are no discriminators, there must be a definition

... differential C0..1BackboneElementDifferential view of the structure
+ Rule: No slicing on the root element
+ Rule: In any differential, all the elements must start with the StructureDefinition's specified type for non-logical models, or with the same type name for logical models
.... element 1..*ElementDefinitionDefinition of elements in the resource (if no StructureDefinition)


doco Documentation for this format

See the Extensions for this resource

UML Diagram (Legend)

StructureDefinition (DomainResource) +CanonicalResourceAn absolute URI that is used to identify this structure definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this structure definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the structure definition is stored on different serversurl : uri [1..1]A formal identifier that is used to identify this structure definition when it is represented in other formats, or referenced in a specification, model, design or an instanceidentifier : Identifier [0..*]The identifier that is used to identify this version of the structure definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the structure definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequenceversion : string [0..1]Indicates the mechanism used to compare versions to determine which is more currentversionAlgorithm[x] : DataType [0..1] « string|Coding; null (Strength=Extensible) VersionAlgorithm+ »A natural language name identifying the structure definition. This name should be usable as an identifier for the module by machine processing applications such as code generationname : string [1..1] « This element has or is affected by some invariantsC »A short, descriptive, user-friendly title for the structure definitiontitle : string [0..1]The status of this structure definition. Enables tracking the life-cycle of the content (this element modifies the meaning of other elements)status : code [1..1] « null (Strength=Required)PublicationStatus! »A Boolean value to indicate that this structure definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usageexperimental : boolean [0..1]The date (and optionally time) when the structure definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the structure definition changesdate : dateTime [0..1]The name of the organization or individual responsible for the release and ongoing maintenance of the structure definitionpublisher : string [0..1]Contact details to assist a user in finding and communicating with the publishercontact : ContactDetail [0..*]A free text natural language description of the structure definition from a consumer's perspectivedescription : markdown [0..1]The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate structure definition instancesuseContext : UsageContext [0..*]A legal or geographic region in which the structure definition is intended to be usedjurisdiction : CodeableConcept [0..*] « null (Strength=Extensible)Jurisdiction ValueSet+ »Explanation of why this structure definition is needed and why it has been designed as it haspurpose : markdown [0..1]A copyright statement relating to the structure definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the structure definition. The short copyright declaration (e.g. (c) '2015+ xyz organization' should be sent in the copyrightLabel elementcopyright : markdown [0..1]A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved')copyrightLabel : string [0..1](DEPRECATED) A set of key words or terms from external terminologies that may be used to assist with indexing and searching of templates nby describing the use of this structure definition, or the content it describeskeyword : Coding [0..*] « null (Strength=Extensible)DefinitionUseCodes+ »The version of the FHIR specification on which this StructureDefinition is based - this is the formal version of the specification, without the revision number, e.g. [publication].[major].[minor], which is 4.6.0. for this versionfhirVersion : code [0..1] « null (Strength=Required)FHIRVersion! »Defines the kind of structure that this definition is describingkind : code [1..1] « null (Strength=Required)StructureDefinitionKind! »Whether structure this definition describes is abstract or not - that is, whether the structure is not intended to be instantiated. For Resources and Data types, abstract types will never be exchanged between systemsabstract : boolean [1..1]A set of rules as FHIRPath Invariants about when the extension can be used (e.g. co-occurrence variants for the extension). All the rules must be truecontextInvariant : string [0..*] « This element has or is affected by some invariantsC »The type this structure describes. If the derivation kind is 'specialization' then this is the master definition for a type, and there is always one of these (a data type, an extension, a resource, including abstract ones). Otherwise the structure definition is a constraint on the stated type (and in this case, the type cannot be an abstract type). References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. "string" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical modelstype : uri [1..1] « null (Strength=Extensible)FHIRTypes+ » « This element has or is affected by some invariantsC »An absolute URI that is the base structure from which this type is derived, either by specialization or constraintbaseDefinition : canonical [0..1] « StructureDefinition » « This element has or is affected by some invariantsC »How the type relates to the baseDefinitionderivation : code [0..1] « null (Strength=Required)TypeDerivationRule! »MappingAn Internal id that is used to identify this mapping set when specific mappings are madeidentity : id [1..1]An absolute URI that identifies the specification that this mapping is expressed touri : uri [0..1] « This element has or is affected by some invariantsC »A name for the specification that is being mapped toname : string [0..1] « This element has or is affected by some invariantsC »Comments about this mapping, including version notes, issues, scope limitations, and other important notes for usagecomment : string [0..1]ContextDefines how to interpret the expression that defines what the context of the extension istype : code [1..1] « null (Strength=Required)ExtensionContextType! »An expression that defines where an extension can be used in resourcesexpression : string [1..1]SnapshotCaptures constraints on each element within the resourceelement : ElementDefinition [1..*] « This element has or is affected by some invariantsC »DifferentialCaptures constraints on each element within the resourceelement : ElementDefinition [1..*]An external specification that the content is mapped tomapping[0..*]Identifies the types of resource or data type elements to which the extension can be appliedcontext[0..*]A snapshot view is expressed in a standalone form that can be used and interpreted without considering the base StructureDefinitionsnapshot[0..1]A differential view is expressed relative to the base StructureDefinition - a statement of differences that it appliesdifferential[0..1]

XML Template

<StructureDefinition xmlns="http://hl7.org/fhir"> doco
 <!-- from Resource: id, meta, implicitRules, and language -->
 <!-- from DomainResource: text, contained, extension, and modifierExtension -->
 <url value="[uri]"/><!-- 1..1 Canonical identifier for this structure definition, represented as a URI (globally unique) -->
 <identifier><!-- 0..* Identifier Additional identifier for the structure definition --></identifier>
 <version value="[string]"/><!-- 0..1 Business version of the structure definition -->
 <versionAlgorithm[x]><!-- 0..1 string|Coding How to compare versions --></versionAlgorithm[x]>
 <name value="[string]"/><!-- I 1..1 Name for this structure definition (computer friendly) -->
 <title value="[string]"/><!-- 0..1 Name for this structure definition (human friendly) -->
 <status value="[code]"/><!-- 1..1 draft | active | retired | unknown -->
 <experimental value="[boolean]"/><!-- 0..1 For testing purposes, not real usage -->
 <date value="[dateTime]"/><!-- 0..1 Date last changed -->
 <publisher value="[string]"/><!-- 0..1 Name of the publisher/steward (organization or individual) -->
 <contact><!-- 0..* ContactDetail Contact details for the publisher --></contact>
 <description value="[markdown]"/><!-- 0..1 Natural language description of the structure definition -->
 <useContext><!-- 0..* UsageContext The context that the content is intended to support --></useContext>
 <jurisdiction><!-- 0..* CodeableConcept Intended jurisdiction for structure definition (if applicable) --></jurisdiction>
 <purpose value="[markdown]"/><!-- 0..1 Why this structure definition is defined -->
 <copyright value="[markdown]"/><!-- 0..1 Use and/or publishing restrictions -->
 <copyrightLabel value="[string]"/><!-- 0..1 Copyright holder and year(s) -->
 <keyword><!-- 0..* Coding Assist with indexing and finding --></keyword>
 <fhirVersion value="[code]"/><!-- 0..1 FHIR Version this StructureDefinition targets -->
 <mapping>  <!-- 0..* External specification that the content is mapped to -->
  <identity value="[id]"/><!-- 1..1 Internal id when this mapping is used -->
  <uri value="[uri]"/><!-- I 0..1 Identifies what this mapping refers to -->
  <name value="[string]"/><!-- I 0..1 Names what this mapping refers to -->
  <comment value="[string]"/><!-- 0..1 Versions, Issues, Scope limitations etc. -->
 </mapping>
 <kind value="[code]"/><!-- 1..1 primitive-type | complex-type | resource | logical -->
 <abstract value="[boolean]"/><!-- 1..1 Whether the structure is abstract -->
 <context>  <!-- I 0..* If an extension, where it can be used in instances -->
  <type value="[code]"/><!-- 1..1 fhirpath | element | extension -->
  <expression value="[string]"/><!-- 1..1 Where the extension can be used in instances -->
 </context>
 <contextInvariant value="[string]"/><!-- I 0..* FHIRPath invariants - when the extension can be used -->
 <type value="[uri]"/><!-- I 1..1 Type defined or constrained by this structure -->
 <baseDefinition><!-- I 0..1 canonical(StructureDefinition) Definition that this type is constrained/specialized from --></baseDefinition>
 <derivation value="[code]"/><!-- 0..1 specialization | constraint - How relates to base definition -->
 <snapshot>  <!-- I 0..1 Snapshot view of the structure -->
  <element><!-- I 1..* ElementDefinition Definition of elements in the resource (if no StructureDefinition) --></element>
 </snapshot>
 <differential>  <!-- I 0..1 Differential view of the structure -->
  <element><!-- 1..* ElementDefinition Definition of elements in the resource (if no StructureDefinition) --></element>
 </differential>
</StructureDefinition>

JSON Template

{doco
  "resourceType" : "StructureDefinition",
  // from Resource: id, meta, implicitRules, and language
  // from DomainResource: text, contained, extension, and modifierExtension
  "url" : "<uri>", // R!  Canonical identifier for this structure definition, represented as a URI (globally unique)
  "identifier" : [{ Identifier }], // Additional identifier for the structure definition
  "version" : "<string>", // Business version of the structure definition
  // versionAlgorithm[x]: How to compare versions. One of these 2:
  "versionAlgorithmString" : "<string>",
  "versionAlgorithmCoding" : { Coding },
  "name" : "<string>", // I R!  Name for this structure definition (computer friendly)
  "title" : "<string>", // Name for this structure definition (human friendly)
  "status" : "<code>", // R!  draft | active | retired | unknown
  "experimental" : <boolean>, // For testing purposes, not real usage
  "date" : "<dateTime>", // Date last changed
  "publisher" : "<string>", // Name of the publisher/steward (organization or individual)
  "contact" : [{ ContactDetail }], // Contact details for the publisher
  "description" : "<markdown>", // Natural language description of the structure definition
  "useContext" : [{ UsageContext }], // The context that the content is intended to support
  "jurisdiction" : [{ CodeableConcept }], // Intended jurisdiction for structure definition (if applicable)
  "purpose" : "<markdown>", // Why this structure definition is defined
  "copyright" : "<markdown>", // Use and/or publishing restrictions
  "copyrightLabel" : "<string>", // Copyright holder and year(s)
  "keyword" : [{ Coding }], // Assist with indexing and finding
  "fhirVersion" : "<code>", // FHIR Version this StructureDefinition targets
  "mapping" : [{ // External specification that the content is mapped to
    "identity" : "<id>", // R!  Internal id when this mapping is used
    "uri" : "<uri>", // I Identifies what this mapping refers to
    "name" : "<string>", // I Names what this mapping refers to
    "comment" : "<string>" // Versions, Issues, Scope limitations etc.
  }],
  "kind" : "<code>", // R!  primitive-type | complex-type | resource | logical
  "abstract" : <boolean>, // R!  Whether the structure is abstract
  "context" : [{ // I If an extension, where it can be used in instances
    "type" : "<code>", // R!  fhirpath | element | extension
    "expression" : "<string>" // R!  Where the extension can be used in instances
  }],
  "contextInvariant" : ["<string>"], // I FHIRPath invariants - when the extension can be used
  "type" : "<uri>", // I R!  Type defined or constrained by this structure
  "baseDefinition" : "<canonical(StructureDefinition)>", // I Definition that this type is constrained/specialized from
  "derivation" : "<code>", // specialization | constraint - How relates to base definition
  "snapshot" : { // I Snapshot view of the structure
    "element" : [{ ElementDefinition }] // I R!  Definition of elements in the resource (if no StructureDefinition)
  },
  "differential" : { // I Differential view of the structure
    "element" : [{ ElementDefinition }] // R!  Definition of elements in the resource (if no StructureDefinition)
  }
}

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .doco


[ a fhir:StructureDefinition;
  fhir:nodeRole fhir:treeRoot; # if this is the parser root

  # from Resource: .id, .meta, .implicitRules, and .language
  # from DomainResource: .text, .contained, .extension, and .modifierExtension
  fhir:StructureDefinition.url [ uri ]; # 1..1 Canonical identifier for this structure definition, represented as a URI (globally unique)
  fhir:StructureDefinition.identifier [ Identifier ], ... ; # 0..* Additional identifier for the structure definition
  fhir:StructureDefinition.version [ string ]; # 0..1 Business version of the structure definition
  # StructureDefinition.versionAlgorithm[x] : 0..1 How to compare versions. One of these 2
    fhir:StructureDefinition.versionAlgorithmString [ string ]
    fhir:StructureDefinition.versionAlgorithmCoding [ Coding ]
  fhir:StructureDefinition.name [ string ]; # 1..1 I Name for this structure definition (computer friendly)
  fhir:StructureDefinition.title [ string ]; # 0..1 Name for this structure definition (human friendly)
  fhir:StructureDefinition.status [ code ]; # 1..1 draft | active | retired | unknown
  fhir:StructureDefinition.experimental [ boolean ]; # 0..1 For testing purposes, not real usage
  fhir:StructureDefinition.date [ dateTime ]; # 0..1 Date last changed
  fhir:StructureDefinition.publisher [ string ]; # 0..1 Name of the publisher/steward (organization or individual)
  fhir:StructureDefinition.contact [ ContactDetail ], ... ; # 0..* Contact details for the publisher
  fhir:StructureDefinition.description [ markdown ]; # 0..1 Natural language description of the structure definition
  fhir:StructureDefinition.useContext [ UsageContext ], ... ; # 0..* The context that the content is intended to support
  fhir:StructureDefinition.jurisdiction [ CodeableConcept ], ... ; # 0..* Intended jurisdiction for structure definition (if applicable)
  fhir:StructureDefinition.purpose [ markdown ]; # 0..1 Why this structure definition is defined
  fhir:StructureDefinition.copyright [ markdown ]; # 0..1 Use and/or publishing restrictions
  fhir:StructureDefinition.copyrightLabel [ string ]; # 0..1 Copyright holder and year(s)
  fhir:StructureDefinition.keyword [ Coding ], ... ; # 0..* Assist with indexing and finding
  fhir:StructureDefinition.fhirVersion [ code ]; # 0..1 FHIR Version this StructureDefinition targets
  fhir:StructureDefinition.mapping [ # 0..* External specification that the content is mapped to
    fhir:StructureDefinition.mapping.identity [ id ]; # 1..1 Internal id when this mapping is used
    fhir:StructureDefinition.mapping.uri [ uri ]; # 0..1 I Identifies what this mapping refers to
    fhir:StructureDefinition.mapping.name [ string ]; # 0..1 I Names what this mapping refers to
    fhir:StructureDefinition.mapping.comment [ string ]; # 0..1 Versions, Issues, Scope limitations etc.
  ], ...;
  fhir:StructureDefinition.kind [ code ]; # 1..1 primitive-type | complex-type | resource | logical
  fhir:StructureDefinition.abstract [ boolean ]; # 1..1 Whether the structure is abstract
  fhir:StructureDefinition.context [ # 0..* I If an extension, where it can be used in instances
    fhir:StructureDefinition.context.type [ code ]; # 1..1 fhirpath | element | extension
    fhir:StructureDefinition.context.expression [ string ]; # 1..1 Where the extension can be used in instances
  ], ...;
  fhir:StructureDefinition.contextInvariant [ string ], ... ; # 0..* I FHIRPath invariants - when the extension can be used
  fhir:StructureDefinition.type [ uri ]; # 1..1 I Type defined or constrained by this structure
  fhir:StructureDefinition.baseDefinition [ canonical(StructureDefinition) ]; # 0..1 I Definition that this type is constrained/specialized from
  fhir:StructureDefinition.derivation [ code ]; # 0..1 specialization | constraint - How relates to base definition
  fhir:StructureDefinition.snapshot [ # 0..1 I Snapshot view of the structure
    fhir:StructureDefinition.snapshot.element [ ElementDefinition ], ... ; # 1..* I Definition of elements in the resource (if no StructureDefinition)
  ];
  fhir:StructureDefinition.differential [ # 0..1 I Differential view of the structure
    fhir:StructureDefinition.differential.element [ ElementDefinition ], ... ; # 1..* Definition of elements in the resource (if no StructureDefinition)
  ];
]

Changes since Release 4

StructureDefinition
StructureDefinition.versionAlgorithm[x]
  • Added Element
StructureDefinition.copyrightLabel
  • Added Element
StructureDefinition.type
  • Change value set from http://hl7.org/fhir/ValueSet/defined-types to http://hl7.org/fhir/ValueSet/fhir-types
  • Change value set from http://hl7.org/fhir/ValueSet/defined-types to http://hl7.org/fhir/ValueSet/fhir-types

See the Full Difference for further information

This analysis is available as XML or JSON.

See R3 <--> R4 Conversion Maps (status = 206 tests that all execute ok. 4 fail round-trip testing and 206 r3 resources are invalid (0 errors).)

 

Additional definitions: Master Definition XML + JSON, XML Schema/Schematron + JSON Schema, ShEx (for Turtle) , the spreadsheet version & the dependency analysis

PathDefinitionTypeReference
StructureDefinition.versionAlgorithm[x]

Indicates the mechanism used to compare versions to determine which is more current.

ExtensibleVersionAlgorithm
StructureDefinition.status

The lifecycle status of an artifact.

RequiredPublicationStatus
StructureDefinition.jurisdiction

This value set defines a base set of codes for country, country subdivision and region for indicating where a resource is intended to be used.

Note: The codes for countries and country subdivisions are taken from ISO 3166 while the codes for "supra-national" regions are from UN Standard country or area codes for statistical use (M49) .

ExtensibleJurisdiction ValueSet
StructureDefinition.keyword

Structure Definition Use Codes / Keywords

ExtensibleDefinitionUseCodes
StructureDefinition.fhirVersion

All published FHIR Versions.

RequiredFHIRVersion
StructureDefinition.kind

Defines the type of structure that a definition is describing.

RequiredStructureDefinitionKind
StructureDefinition.context.type

How an extension context is interpreted.

RequiredExtensionContextType
StructureDefinition.type

All FHIR types

ExtensibleFHIRTypes
StructureDefinition.derivation

How a type relates to its baseDefinition.

RequiredTypeDerivationRule

UniqueKeyLevelLocationDescriptionExpression
 cnl-0Warning (base)Name should be usable as an identifier for the module by machine processing applications such as code generationname.exists() implies name.matches('[A-Z]([A-Za-z0-9_]){1,254}')
 sdf-1Rule (base)Element paths must be unique unless the structure is a constraintderivation = 'constraint' or snapshot.element.select(path).isDistinct()
 sdf-15aRule (base)If the first element in a differential has no "." in the path and it's not a logical model, it has no type(kind!='logical' and differential.element.first().path.contains('.').not()) implies differential.element.first().type.empty()
 sdf-2Rule StructureDefinition.mappingMust have at least a name or a uri (or both)name.exists() or uri.exists()
 sdf-3Rule StructureDefinition.snapshotEach element definition in a snapshot must have a formal definition and cardinalities, unless model is a logical model%resource.kind = 'logical' or element.all(definition.exists() and min.exists() and max.exists())
 sdf-4Rule (base)If the structure is not abstract, then there SHALL be a baseDefinitionabstract = true or baseDefinition.exists()
 sdf-5Rule (base)If the structure defines an extension then the structure must have context informationtype != 'Extension' or derivation = 'specialization' or (context.exists())
 sdf-6Rule (base)A structure must have either a differential, or a snapshot (or both)snapshot.exists() or differential.exists()
 sdf-8Rule StructureDefinition.snapshotAll snapshot elements must start with the StructureDefinition's specified type for non-logical models, or with the same type name for logical models(%resource.kind = 'logical' or element.first().path = %resource.type) and element.tail().all(path.startsWith(%resource.snapshot.element.first().path&'.'))
 sdf-8bRule StructureDefinition.snapshotAll snapshot elements must have a base definitionelement.all(base.exists())
 sdf-9Rule (base)In any snapshot or differential, no label, code or requirements on an element without a "." in the path (e.g. the first element)children().element.where(path.contains('.').not()).label.empty() and children().element.where(path.contains('.').not()).code.empty() and children().element.where(path.contains('.').not()).requirements.empty()
 sdf-10Rule StructureDefinition.snapshot.elementprovide either a binding reference or a description (or both)binding.empty() or binding.valueSet.exists() or binding.description.exists()
 sdf-11Rule (base)If there's a type, its content must match the path name in the first element of a snapshotkind != 'logical' implies snapshot.empty() or snapshot.element.first().path = type
 sdf-14Rule (base)All element definitions must have an idsnapshot.element.all(id.exists()) and differential.element.all(id.exists())
 sdf-15Rule (base)The first element in a snapshot has no type unless model is a logical model.kind!='logical' implies snapshot.element.first().type.empty()
 sdf-16Rule (base)All element definitions must have unique ids (snapshot)snapshot.element.all(id.exists()) and snapshot.element.id.trace('ids').isDistinct()
 sdf-17Rule (base)All element definitions must have unique ids (diff)differential.element.all(id.exists()) and differential.element.id.trace('ids').isDistinct()
 sdf-18Rule (base)Context Invariants can only be used for extensionscontextInvariant.exists() implies type = 'Extension'
 sdf-19Rule (base)FHIR Specification models only use FHIR defined typesurl.startsWith('http://hl7.org/fhir/StructureDefinition') implies (differential | snapshot).element.type.code.all(matches('^[a-zA-Z0-9]+$') or matches('^http:\\/\\/hl7\\.org\\/fhirpath\\/System\\.[A-Z][A-Za-z]+$'))
 sdf-20Rule StructureDefinition.differentialNo slicing on the root elementelement.where(path.contains('.').not()).slicing.empty()
 sdf-21Rule (base)Default values can only be specified on specializationsdifferential.element.defaultValue.exists() implies (derivation = 'specialization')
 sdf-22Rule (base)FHIR Specification models never have default valuesurl.startsWith('http://hl7.org/fhir/StructureDefinition') implies (snapshot.element.defaultValue.empty() and differential.element.defaultValue.empty())
 sdf-23Rule (base)No slice name on root(snapshot | differential).element.all(path.contains('.').not() implies sliceName.empty())
 sdf-24Rule StructureDefinition.snapshotFor CodeableReference elements, target profiles must be listed on the CodeableReference, not the CodeableReference.referenceelement.where(type.where(code='Reference').exists() and path.endsWith('.reference') and type.targetProfile.exists() and (path.substring(0,$this.path.length()-10) in %context.element.where(type.where(code='CodeableReference').exists()).path)).exists().not()
 sdf-25Rule StructureDefinition.snapshotFor CodeableReference elements, bindings must be listed on the CodeableReference, not the CodeableReference.conceptelement.where(type.where(code='CodeableConcept').exists() and path.endsWith('.concept') and binding.exists() and (path.substring(0,$this.path.length()-8) in %context.element.where(type.where(code='CodeableReference').exists()).path)).exists().not()
 sdf-26Guideline StructureDefinition.snapshotThe root element of a profile should not have mustSupport = truesnapshot.where(element[0].mustSupport='true').exists().not()
This is (only) a best practice guideline because:

It is bad practice to set the root element of a profile to 'mustSupport' as mustSupport should always be determined by the element referencing a type. The designer of a StructureDefinition cannot know all circumstances in which a type or profile might be used

 sdf-27Rule (base)If there's a base definition, there must be a derivation baseDefinition.exists() implies derivation.exists()
 sdf-28Rule StructureDefinition.snapshot.elementIf there are no discriminators, there must be a definitionslicing.exists().not() or (slicing.discriminator.exists() or slicing.description.exists())
 sdf-29Warning (base)Elements in Resources must have a min cardinality or 0 or 1 and a max cardinality of 1 or *((kind in 'resource' | 'complex-type') and (specialization = 'derivation')) implies differential.element.where((min != 0 and min != 1) or (max != '1' and max != '*')).empty()
 sdf-8aRule StructureDefinition.differentialIn any differential, all the elements must start with the StructureDefinition's specified type for non-logical models, or with the same type name for logical models(%resource.kind = 'logical' or element.first().path.startsWith(%resource.type)) and (element.tail().empty() or element.tail().all(path.startsWith(%resource.differential.element.first().path.replaceMatches('\\..*','')&'.')))

  • A structure is represented as a flat list of elements. The element.path provides the overall structure.
  • Differentials in constraints need only specify elements that they are making rules about. Other elements can be inferred as defined in the base resource
  • Elements specified in the differential (and all elements in the snapshot) must be ordered as such:
    • Elements from the baseDefinition appear before new elements in a StructureDefinition with derivation 'specialization'
    • Elements must be in the same order as the baseDefinition, and child elements appear in depth-first order.
    • Unsliced descendants of sliced elements appear before slices
  • element.short, element.formal, element.comments and element.mapping provide the specific definition for the field in a specific context.
  • element.type is used to specify which types may be used for this element. If there is more than one type, the element offers a choice of types and must have a name that terminates in "[x]". (Note: when substituting [x] with a specific data type, always capitalize the first letter. Choice types are always camel-case. Ex: "effectiveDateTime" is correct, "effectivedateTime" is NOT correct.) When profiling a resource and only one type is specified, the name of the element is changed to include the type instead of '[x]'.
  • When using XPath to define constraints about the relationship between the contents of the narrative and the contents of the data elements, the element against which the rule is expressed is the one against which the error or warning will be reported by a validator.
  • When expression constraints are placed on elements that offer a choice of types, the expression has to select the type to which it applies using the FHIRPath is operator.
  • For XPath constraints, the prefix "f" should be used for "http://hl7.org/fhir", and "h" for "http://www.w3.org/1999/xhtml". XPath constraints are written against the XML representation
  • The condition element is used to assert that a constraint defined on another element affects the allowed cardinality of this element.

The very first element in a snapshot (the one with an element id of just the type name) defines characteristics that apply to the type as a whole. Some of these characteristics affect the constraints that can hold on an element that references the type. For example, if the root element cardinality is 0..1, then an element declared to be of that type cannot have a maximum cardinality greater than 1. (This is often used when defining extensions to indicate that multiple extension repetitions of that type are not allowed within a single element.)

In some cases, there can be redundancy between content defined on the root element and that defined on the StructureDefinition itself. For example, ElementDefinition has 'definition' while StructureDefinition has 'description'. These may have the same content put both places, though technically the 'definition' is text that describes what the type 'means', while 'description' is broader and may talk a bit about what the resource/data type/profile is for, in addition to its meaning.

The base structure definition is used in a number of different ways to support the FHIR specification. The various uses of the StructureDefinition are controlled by the elements kind, type, base, and url, using this basic pattern:

{
  "url": the identity of this structure definition,
  "kind": (primitive-type | complex-type | resource | logical),
  "type": the type being constrained (if it's a constraint)
  "abstract" : {true | false},
  "baseDefinition": the structure definition from which this is derived
}

This list shows a number of examples, with links to real examples for each:

  1. Base definition of a data type (example: Quantity - XML, JSON):
    {
      "resourceType": "StructureDefinition",
      "url": "http://hl7.org/fhir/StructureDefinition/Quantity",
      "name": "Quantity",
      "kind": "complex-type",
      "abstract" : false,
      "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Element"
    }
    
  2. A constrained data type (example: Money - XML, JSON):
    {
      "resourceType": "StructureDefinition",
      "url": "http://hl7.org/fhir/StructureDefinition/Money",
      "name": "Money",
      "kind": "complex-type",
      "type": "Quantity",
      "abstract" : false,
      "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Quantity"
    }
    
  3. Base definition of a resource (example: Patient - XML, JSON):
    {
      "resourceType": "StructureDefinition",
      "url": "http://hl7.org/fhir/StructureDefinition/Patient",
      "name": "Patient",
      "kind": "resource",
      "abstract" : false,
      "baseDefinition": "http://hl7.org/fhir/StructureDefinition/DomainResource"
    }
    
  4. Constraint on a resource (example: Clinical Document Profile for Composition - XML, JSON):
    {
      "resourceType": "StructureDefinition",
      "url": "http://hl7.org/fhir/StructureDefinition/clinicaldocument",
      "name": "Clinical Document Profile for Composition",
      "kind": "resource",
      "type": "Composition",
      "abstract" : false,
      "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Composition"
    }
    
  5. Base Extension (a standard data type) (example: Extension - XML, JSON):
    {
      "resourceType": "StructureDefinition",
      "url": "http://hl7.org/fhir/StructureDefinition/Extension",
      "name": "Extension",
      "kind": "complex-type",
      "abstract" : false,
      "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Element"
    }
    
  6. A defined Extension (example: Extension Data Absent Reason - XML, JSON):
    {
      "resourceType": "StructureDefinition",
      "url": "http://hl7.org/fhir/StructureDefinition/data-absent-reason",
      "name": "Data Absent Reason",
      "kind": "complex-type",
      "type": "Extension",
      "abstract" : false,
      "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Extension"
    }
    
  7. A constraint on a defined extension (no examples currently defined):
    {
      "resourceType": "StructureDefinition",
      "url": "http://example.org/fhir/StructureDefinition/race",
      "name": "Race codes used by institution (a subset of meaningful use codes)",
      "kind": "complex-type",
      "type": "Extension",
      "abstract" : false,
      "abstract" : false,
      "baseDefinition": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race"
    }
    
  8. A base abstract Resource (see e.g. Resource):
    {
      "resourceType": "StructureDefinition",
      "url": "http://hl7.org/fhir/StructureDefinition/Resource",
      "name": "Resource",
      "kind": "resource",
      "type": "Resource",
      "abstract" : true,
      "baseDefinition": "http://hl7.org/fhir/us/core/StructureDefinition/Base"
    }
    
  9. An interface defined in the base specification (see e.g. CanonicalResource):
    {
      "resourceType": "StructureDefinition",
      "url": "http://hl7.org/fhir/StructureDefinition/CanonicalResource",
      "name": "CanonicalResource",
      "kind": "resource",
      "type": "CanonicalResource",
      "abstract" : true,
      "baseDefinition": "http://hl7.org/fhir/us/core/StructureDefinition/DomainResource"
    }
    
  10. A logical model (see e.g. Definition):
    {
      "resourceType": "StructureDefinition",
      "url": "http://hl7.org/fhir/StructureDefinition/Definition",
      "name": "Definition",
      "kind": "logical",
      "type": "Definition",
      "abstract" : false,
      "baseDefinition": "http://hl7.org/fhir/us/core/StructureDefinition/Base"
    }
    

On this list, structure definitions of type 1, 3, 5 and 8 - 9 can only be defined by the FHIR specification itself. The other kinds of structure definitions are (or may be) created by the specification but can also be defined by other implementers.

When the structure is a constraint (derivation = constraint), see Extending and Restricting Resources for the rules that apply.

Structures are able to map elements to concepts in other definition systems. Generally, these are used to map the elements to local implementation models, data paths, and concepts. However they are also used to map to other standards and published terminologies. These are the standard URIs used for common targets of the mapping:

Name Details
Logical Mapping Formal URL: http://hl7.org/fhir/logical

These mappings map logical models to their conceptual equivalents in FHIR. One example of their use is to map from the CDA and V2 coded data types to CodeableConcept and Coding so that the validator can validate them on a terminology server

ClinicalTrials.gov Mapping Formal URL: http://clinicaltrials.gov
Workflow Pattern Formal URL: http://hl7.org/fhir/workflow
CDISC Define XML 2.0 metadata standard Formal URL: http://www.cdisc.org/define-xml
FHIR Consent Mapping Formal URL: http://hl7.org/fhir/consent
Mapping to NCPDP SCRIPT 10.6 Formal URL: http://ncpdp.org/SCRIPT10_6
FiveWs Pattern Mapping Formal URL: http://hl7.org/fhir/fivews
BRIDG 5.1 Mapping Formal URL: https://bridgmodel.nci.nih.gov
FHIR Composition Formal URL: http://hl7.org/fhir/composition
IHE Structured Data Capture Formal URL: http://siframework.org/ihe-sdc-profile
Canadian Dental Association eclaims standard Formal URL: http://www.cda-adc.ca/en/services/cdanet/
SNOMED CT Concept Domain Binding Formal URL: http://snomed.info/conceptdomain

Concept domain bindings link a resource or an element to a set of SNOMED CT concepts that represent the intended semantics of the instances (whether or not SNOMED CT is used to encode that data element). This set of concepts is represented using a SNOMED CT expression constraint. Note that the 'Concept domain binding' may be a superset of the 'value set binding'. These bindings help to support:

  • Quality checking FHIR resources by ensuring that (a) the intended semantics of the instances matches the valid range of the corresponding SNOMED CT attribute, and (b) the intended value set is appropriate for the intended semantics of the instances
  • Semantic checking of data instances by helping to detect potential inconsistencies caused by overlap between the semantics incorporated in two concept domains
R3-ReferalRequest Mapping Formal URL: http://hl7.org/fhir/rr
HL7 v2 Mapping Formal URL: http://hl7.org/v2
RIM Mapping Formal URL: http://hl7.org/v3
ISO/IEEE 11073-10207 Formal URL: urn:iso:std:iso:11073:10207
ISO 11179 Formal URL: http://metadata-standards.org/11179/

These mappings are included to indicate where properties of the data elements defined by the FHIR specification relate to similar fields in the ISO 11179 specification.

IDMP Mapping Formal URL: https://en.wikipedia.org/wiki/Identification_of_medicinal_products
Mapping to Quality Improvement Domain Analysis Model Formal URL: http://hl7.org/qidam
Interface Pattern Formal URL: http://hl7.org/fhir/interface
DICOM Tag Mapping Formal URL: http://nema.org/dicom
MDMI Referent Index Mapping Formal URL: http://github.com/MDMI/ReferentIndexContent
V3 Pharmacy Dispense RMIM Formal URL: http://www.hl7.org/v3/PORX_RM020070UV
ISBT 128 Codes Formal URL: https://www.isbt128.org/uri/
Equivalent CAP Code Formal URL: http://cap.org/ecc
CDA (R2) Formal URL: http://hl7.org/v3/cda
Quality Improvement and Clinical Knowledge (QUICK) Formal URL: http://siframework.org/cqf
FHIR DocumentReference Formal URL: http://hl7.org/fhir/documentreference
ISO/IEEE 11073-10201 Formal URL: urn:iso:std:iso:11073:10201
Canadian Pharmacy Association eclaims standard Formal URL: http://www.pharmacists.ca/
UDI Mapping Formal URL: http://fda.gov/UDI

UDI is a unique numeric or alphanumeric code that consists of two parts: (1) a device identifier (DI), a mandatory, fixed portion of a UDI that identifies the labeler and the specific version or model of a device, and (2) a production identifier (PI), a conditional, variable portion of a UDI that identifies one or more of the following when included on the label of a device: (2a) the lot or batch number within which a device was manufactured; (2b) the serial number of a specific device; (2c) the expiration date of a specific device; (2d) the date a specific device was manufactured; (2e) the distinct identification code required by §1271.290(c) for a human cell, tissue, or cellular and tissue-based product (HCT/P) regulated as a device.

Quality Data Model Formal URL: http://www.healthit.gov/quality-data-model
XDS metadata equivalent Formal URL: https://profiles.ihe.net/ITI/HIE-Whitepaper
FHIR AuditEvent Mapping Formal URL: http://hl7.org/fhir/auditevent
IHE Data Element Exchange (DEX) Formal URL: http://ihe.net/data-element-exchange
SNOMED CT Attribute Binding Formal URL: http://snomed.org/attributebinding

Attribute bindings link coded data elements in FHIR resources to a corresponding attribute in the SNOMED CT concept model. These bindings help to support:

  • clarifying the intended meaning of the data element
  • Quality checking the alignment between FHIR resource design and any coresponding SNOMED CT concept model
  • Composition and decomposition of data instances by indicating the SNOMED CT concept model attribute whose value may be used to decompose a precoordinated concept into this data element
W3C PROV Formal URL: http://www.w3.org/ns/prov

The provenance resource is based on known practices in the HL7 implementation space, particularly those found in the v2 EVN segment, the v3 ControlAct Wrapper, the CDA header, and IHE ATNA. The conceptual model underlying the design is the W3C provenance Specification . Though the content and format of the resource is designed to meet specific requirements for FHIR, all the parts of the resource are formally mapped to the PROV-O specification, and FHIR resources can be transformed to their W3C PROV equivalent.

Ontological RIM Mapping Formal URL: http://hl7.org/orim
LOINC code for the element Formal URL: http://loinc.org
vCard Mapping Formal URL: http://w3.org/vcard
Open EHR Archetype Mapping Formal URL: http://openehr.org
ServD Formal URL: http://www.omg.org/spec/ServD/1.0/
FHIR Provenance Mapping Formal URL: http://hl7.org/fhir/provenance
iCalendar Formal URL: http://ietf.org/rfc/2445

StructureDefinitions are used to define the basic structures of FHIR: data types, resources, extensions, and profiles. The same definition structure can also be used to define any arbitrary structures that are a directed acyclic graph with typed nodes, where the primitive types are those defined by the FHIR specification.

This technique has many uses:

  • Describing any arbitrary content model
  • Describing existing HL7 content models (e.g. v2, CDA) using FHIR
  • Describing common design patterns used in FHIR
  • Defining a content model to support the mapping language

Search parameters for this resource. The common parameters also apply. See Searching for more information about searching in REST, messaging, and services.

NameTypeDescriptionExpressionIn Common
abstracttokenWhether the structure is abstractStructureDefinition.abstract
basereferenceDefinition that this type is constrained/specialized fromStructureDefinition.baseDefinition
(StructureDefinition)
base-pathtokenPath that identifies the base elementStructureDefinition.snapshot.element.base.path | StructureDefinition.differential.element.base.path
context TUtokenA use context assigned to the structure definition(StructureDefinition.useContext.value as CodeableConcept)
context-quantity TUquantityA quantity- or range-valued use context assigned to the structure definition(StructureDefinition.useContext.value as Quantity) | (StructureDefinition.useContext.value as Range)
context-type TUtokenA type of use context assigned to the structure definitionStructureDefinition.useContext.code
context-type-quantity TUcompositeA use context type and quantity- or range-based value assigned to the structure definitionOn StructureDefinition.useContext:
  context-type: code
  context-quantity: value.ofType(Quantity) | value.ofType(Range)
context-type-value TUcompositeA use context type and value assigned to the structure definitionOn StructureDefinition.useContext:
  context-type: code
  context: value.ofType(CodeableConcept)
datedateThe structure definition publication dateStructureDefinition.date
derivationtokenspecialization | constraint - How relates to base definitionStructureDefinition.derivation
descriptionstringThe description of the structure definitionStructureDefinition.description
experimentaltokenFor testing purposes, not real usageStructureDefinition.experimental
ext-context TUcompositeAn extension context assigned to the structure definitionOn StructureDefinition.context:
  ext-context-type: type
  ext-context-expression: expression
ext-context-expression TUtokenAn expression of extension context assigned to the structure definitionStructureDefinition.context.expression
ext-context-type TUtokenA type of extension context assigned to the structure definitionStructureDefinition.context.type
identifier TUtokenExternal identifier for the structure definitionStructureDefinition.identifier
jurisdiction TUtokenIntended jurisdiction for the structure definitionStructureDefinition.jurisdiction
keyword TUtokenA code for the StructureDefinitionStructureDefinition.keyword
kindtokenprimitive-type | complex-type | resource | logicalStructureDefinition.kind
namestringComputationally friendly name of the structure definitionStructureDefinition.name
pathtokenA path that is constrained in the StructureDefinitionStructureDefinition.snapshot.element.path | StructureDefinition.differential.element.path
publisherstringName of the publisher of the structure definitionStructureDefinition.publisher
statustokenThe current status of the structure definitionStructureDefinition.status
titlestringThe human-friendly name of the structure definitionStructureDefinition.title
typeuriType defined or constrained by this structureStructureDefinition.type
urluriThe uri that identifies the structure definitionStructureDefinition.url
valuesetreferenceA vocabulary binding referenceStructureDefinition.snapshot.element.binding.valueSet
(ValueSet)
versiontokenThe business version of the structure definitionStructureDefinition.version